@opcat-labs/opcat 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cjs2esm.json +18 -0
- package/.mocharc.yaml +1 -1
- package/CHANGELOG.md +13 -0
- package/README.md +6 -0
- package/{lib/address.js → cjs/address.cjs} +77 -72
- package/cjs/block/block.cjs +332 -0
- package/{lib/block/blockheader.js → cjs/block/blockheader.cjs} +8 -7
- package/cjs/block/index.cjs +2 -0
- package/{lib/block/merkleblock.js → cjs/block/merkleblock.cjs} +23 -15
- package/cjs/bn.cjs +3411 -0
- package/{lib/crypto/bn.js → cjs/crypto/bn.cjs} +3 -3
- package/{lib/crypto/ecdsa.js → cjs/crypto/ecdsa.cjs} +150 -14
- package/{lib/crypto/hash.node.js → cjs/crypto/hash.cjs} +13 -2
- package/cjs/crypto/index.cjs +16 -0
- package/{lib/crypto/point.js → cjs/crypto/point.cjs} +11 -4
- package/cjs/crypto/random.cjs +18 -0
- package/{lib/crypto/signature.js → cjs/crypto/signature.cjs} +158 -8
- package/{lib/encoding/base58.js → cjs/encoding/base58.cjs} +58 -2
- package/cjs/encoding/base58check.cjs +192 -0
- package/cjs/encoding/bufferreader.cjs +333 -0
- package/cjs/encoding/bufferwriter.cjs +244 -0
- package/{lib/encoding/decode-asm.js → cjs/encoding/decode-asm.cjs} +4 -4
- package/{lib/encoding/decode-hex.js → cjs/encoding/decode-hex.cjs} +1 -1
- package/cjs/encoding/index.cjs +14 -0
- package/cjs/encoding/varint.cjs +116 -0
- package/{lib/errors/index.js → cjs/errors/index.cjs} +9 -9
- package/{lib/errors/spec.js → cjs/errors/spec.cjs} +2 -2
- package/cjs/hash-cache.cjs +98 -0
- package/{lib/hdprivatekey.js → cjs/hdprivatekey.cjs} +232 -140
- package/{lib/hdpublickey.js → cjs/hdpublickey.cjs} +120 -93
- package/cjs/index.cjs +94 -0
- package/cjs/interpreter/index.cjs +2 -0
- package/cjs/interpreter/interpreter.cjs +1988 -0
- package/{lib/script/stack.js → cjs/interpreter/stack.cjs} +9 -2
- package/{lib/message/message.js → cjs/message/message.cjs} +62 -25
- package/cjs/mnemonic/index.cjs +3 -0
- package/{lib/mnemonic/mnemonic.js → cjs/mnemonic/mnemonic.cjs} +44 -13
- package/{lib/mnemonic/pbkdf2.node.js → cjs/mnemonic/pbkdf2.cjs} +9 -2
- package/cjs/mnemonic/words/index.cjs +66 -0
- package/cjs/network.cjs +13 -0
- package/cjs/networks.cjs +321 -0
- package/{lib/opcode.js → cjs/opcode.cjs} +69 -5
- package/cjs/privatekey.cjs +422 -0
- package/{lib/publickey.js → cjs/publickey.cjs} +14 -16
- package/cjs/script/index.cjs +2 -0
- package/{lib/script/script.js → cjs/script/script.cjs} +322 -67
- package/cjs/transaction/index.cjs +5 -0
- package/cjs/transaction/input/index.cjs +34 -0
- package/cjs/transaction/input/input.cjs +396 -0
- package/{lib/transaction/input/multisig.js → cjs/transaction/input/multisig.cjs} +112 -18
- package/{lib/transaction/input/publickey.js → cjs/transaction/input/publickey.cjs} +29 -19
- package/{lib/transaction/input/publickeyhash.js → cjs/transaction/input/publickeyhash.cjs} +25 -17
- package/{lib/transaction/output.js → cjs/transaction/output.cjs} +100 -15
- package/cjs/transaction/sighash.cjs +187 -0
- package/{lib/transaction/signature.js → cjs/transaction/signature.cjs} +30 -6
- package/cjs/transaction/transaction.cjs +2000 -0
- package/{lib/transaction/unspentoutput.js → cjs/transaction/unspentoutput.cjs} +5 -5
- package/cjs/util/derivation.cjs +53 -0
- package/cjs/util/index.cjs +11 -0
- package/cjs/util/js.cjs +95 -0
- package/{lib/util/preconditions.js → cjs/util/preconditions.cjs} +2 -2
- package/esm/address.js +483 -0
- package/{lib → esm}/block/block.js +82 -27
- package/esm/block/blockheader.js +296 -0
- package/esm/block/index.js +2 -0
- package/esm/block/merkleblock.js +331 -0
- package/esm/bn.js +3411 -0
- package/esm/crypto/bn.js +278 -0
- package/esm/crypto/ecdsa.js +475 -0
- package/{lib/crypto/hash.browser.js → esm/crypto/hash.js} +18 -7
- package/esm/crypto/index.js +16 -0
- package/esm/crypto/point.js +228 -0
- package/esm/crypto/random.js +18 -0
- package/esm/crypto/signature.js +475 -0
- package/esm/encoding/base58.js +167 -0
- package/esm/encoding/base58check.js +192 -0
- package/esm/encoding/bufferreader.js +333 -0
- package/esm/encoding/bufferwriter.js +243 -0
- package/esm/encoding/decode-asm.js +24 -0
- package/esm/encoding/decode-hex.js +32 -0
- package/esm/encoding/decode-script-chunks.js +43 -0
- package/esm/encoding/encode-hex.js +284 -0
- package/esm/encoding/index.js +14 -0
- package/esm/encoding/is-hex.js +7 -0
- package/esm/encoding/varint.js +116 -0
- package/esm/errors/index.js +54 -0
- package/esm/errors/spec.js +314 -0
- package/esm/hash-cache.js +98 -0
- package/esm/hdprivatekey.js +768 -0
- package/esm/hdpublickey.js +549 -0
- package/esm/index.js +66 -0
- package/esm/interpreter/index.js +2 -0
- package/{lib/script → esm/interpreter}/interpreter.js +219 -66
- package/esm/interpreter/stack.js +116 -0
- package/esm/message/message.js +228 -0
- package/esm/mnemonic/index.js +3 -0
- package/esm/mnemonic/mnemonic.js +332 -0
- package/{lib/mnemonic/pbkdf2.browser.js → esm/mnemonic/pbkdf2.js} +13 -6
- package/esm/mnemonic/words/chinese.js +2054 -0
- package/esm/mnemonic/words/english.js +2054 -0
- package/esm/mnemonic/words/french.js +2054 -0
- package/esm/mnemonic/words/index.js +66 -0
- package/esm/mnemonic/words/italian.js +2054 -0
- package/esm/mnemonic/words/japanese.js +2054 -0
- package/esm/mnemonic/words/spanish.js +2054 -0
- package/esm/network.js +13 -0
- package/{lib → esm}/networks.js +61 -120
- package/esm/opcode.js +319 -0
- package/{lib → esm}/privatekey.js +76 -28
- package/esm/publickey.js +384 -0
- package/esm/script/index.js +2 -0
- package/esm/script/script.js +1329 -0
- package/esm/script/write-i32-le.js +17 -0
- package/esm/script/write-push-data.js +35 -0
- package/esm/script/write-u16-le.js +12 -0
- package/esm/script/write-u32-le.js +16 -0
- package/esm/script/write-u64-le.js +24 -0
- package/esm/script/write-u8-le.js +8 -0
- package/esm/script/write-varint.js +46 -0
- package/esm/transaction/index.js +5 -0
- package/esm/transaction/input/index.js +33 -0
- package/{lib → esm}/transaction/input/input.js +132 -90
- package/esm/transaction/input/multisig.js +335 -0
- package/esm/transaction/input/publickey.js +108 -0
- package/esm/transaction/input/publickeyhash.js +124 -0
- package/esm/transaction/output.js +316 -0
- package/{lib → esm}/transaction/sighash.js +42 -22
- package/esm/transaction/signature.js +120 -0
- package/{lib → esm}/transaction/transaction.js +522 -163
- package/esm/transaction/unspentoutput.js +112 -0
- package/esm/util/_.js +47 -0
- package/esm/util/derivation.js +53 -0
- package/esm/util/index.js +12 -0
- package/esm/util/js.js +95 -0
- package/esm/util/preconditions.js +33 -0
- package/fixup.cjs +17 -0
- package/package.json +40 -26
- package/test/{address.js → address.cjs} +14 -43
- package/test/block/{block.js → block.cjs} +3 -5
- package/test/block/{blockheader.js → blockheader.cjs} +2 -2
- package/test/block/{merklebloack.js → merklebloack.cjs} +2 -2
- package/test/crypto/{ecdsa.js → ecdsa.cjs} +9 -9
- package/test/crypto/{hash.browser.js → hash.browser.cjs} +2 -1
- package/test/crypto/{signature.js → signature.cjs} +2 -2
- package/test/data/bitcoind/script_tests.json +5 -5
- package/test/{hashCache.js → hashCache.cjs} +2 -1
- package/test/{hdkeys.js → hdkeys.cjs} +4 -2
- package/test/{hdprivatekey.js → hdprivatekey.cjs} +7 -6
- package/test/{hdpublickey.js → hdpublickey.cjs} +2 -7
- package/test/mnemonic/{pbkdf2.test.js → pbkdf2.test.cjs} +2 -2
- package/test/{networks.js → networks.cjs} +12 -31
- package/test/{publickey.js → publickey.cjs} +2 -2
- package/test/script/{interpreter.js → interpreter.cjs} +5 -5
- package/test/script/{script.js → script.cjs} +8 -2
- package/test/transaction/{deserialize.js → deserialize.cjs} +2 -2
- package/test/transaction/input/{input.js → input.cjs} +1 -1
- package/test/transaction/input/{multisig.js → multisig.cjs} +2 -1
- package/test/transaction/input/{publickeyhash.js → publickeyhash.cjs} +1 -1
- package/test/transaction/{sighash.js → sighash.cjs} +1 -1
- package/test/transaction/{transaction.js → transaction.cjs} +2 -2
- package/tsconfig.json +13 -0
- package/types/address.d.cts +252 -0
- package/types/block/block.d.cts +139 -0
- package/types/block/blockheader.d.cts +125 -0
- package/types/block/index.d.cts +2 -0
- package/types/block/merkleblock.d.cts +95 -0
- package/types/bn.d.cts +202 -0
- package/types/crypto/bn.d.cts +2 -0
- package/types/crypto/ecdsa.d.cts +187 -0
- package/types/crypto/hash.d.cts +118 -0
- package/types/crypto/index.d.cts +7 -0
- package/types/crypto/point.d.cts +134 -0
- package/types/crypto/random.d.cts +13 -0
- package/types/crypto/signature.d.cts +160 -0
- package/types/encoding/base58.d.cts +106 -0
- package/types/encoding/base58check.d.cts +107 -0
- package/types/encoding/bufferreader.d.cts +164 -0
- package/types/encoding/bufferwriter.d.cts +126 -0
- package/types/encoding/decode-asm.d.cts +2 -0
- package/types/encoding/decode-hex.d.cts +2 -0
- package/types/encoding/decode-script-chunks.d.cts +14 -0
- package/types/encoding/encode-hex.d.cts +2 -0
- package/types/encoding/index.d.cts +6 -0
- package/types/encoding/is-hex.d.cts +2 -0
- package/types/encoding/varint.d.cts +66 -0
- package/types/errors/index.d.cts +4 -0
- package/types/errors/spec.d.cts +22 -0
- package/types/hash-cache.d.cts +65 -0
- package/types/hdprivatekey.d.cts +281 -0
- package/types/hdpublickey.d.cts +240 -0
- package/types/index.d.cts +26 -0
- package/types/interpreter/index.d.cts +2 -0
- package/types/interpreter/interpreter.d.cts +228 -0
- package/types/interpreter/stack.d.cts +35 -0
- package/types/message/message.d.cts +110 -0
- package/types/mnemonic/index.d.cts +2 -0
- package/types/mnemonic/mnemonic.d.cts +171 -0
- package/types/mnemonic/pbkdf2.d.cts +14 -0
- package/types/mnemonic/words/chinese.d.cts +2 -0
- package/types/mnemonic/words/english.d.cts +2 -0
- package/types/mnemonic/words/french.d.cts +2 -0
- package/types/mnemonic/words/index.d.cts +22 -0
- package/types/mnemonic/words/italian.d.cts +2 -0
- package/types/mnemonic/words/japanese.d.cts +2 -0
- package/types/mnemonic/words/spanish.d.cts +2 -0
- package/types/network.d.cts +11 -0
- package/types/networks.d.cts +76 -0
- package/types/opcode.d.cts +93 -0
- package/types/privatekey.d.cts +169 -0
- package/types/publickey.d.cts +202 -0
- package/types/script/index.d.cts +2 -0
- package/types/script/script.d.cts +449 -0
- package/types/script/write-i32-le.d.cts +2 -0
- package/types/script/write-push-data.d.cts +2 -0
- package/types/script/write-u16-le.d.cts +2 -0
- package/types/script/write-u32-le.d.cts +2 -0
- package/types/script/write-u64-le.d.cts +2 -0
- package/types/script/write-u8-le.d.cts +2 -0
- package/types/script/write-varint.d.cts +2 -0
- package/types/transaction/index.d.cts +2 -0
- package/types/transaction/input/index.d.cts +2 -0
- package/types/transaction/input/input.d.cts +178 -0
- package/types/transaction/input/multisig.d.cts +127 -0
- package/types/transaction/input/publickey.d.cts +44 -0
- package/types/transaction/input/publickeyhash.d.cts +45 -0
- package/types/transaction/output.d.cts +118 -0
- package/types/transaction/sighash.d.cts +61 -0
- package/types/transaction/signature.d.cts +43 -0
- package/types/transaction/transaction.d.cts +716 -0
- package/types/transaction/unspentoutput.d.cts +83 -0
- package/types/util/_.d.cts +26 -0
- package/types/util/derivation.d.cts +21 -0
- package/types/util/index.d.cts +5 -0
- package/types/util/js.d.cts +50 -0
- package/types/util/preconditions.d.cts +3 -0
- package/index.d.ts +0 -1541
- package/index.js +0 -74
- package/lib/block/index.js +0 -4
- package/lib/bn.js +0 -3423
- package/lib/crypto/hash.js +0 -2
- package/lib/crypto/random.browser.js +0 -28
- package/lib/crypto/random.js +0 -2
- package/lib/crypto/random.node.js +0 -11
- package/lib/encoding/base58check.js +0 -121
- package/lib/encoding/bufferreader.js +0 -212
- package/lib/encoding/bufferwriter.js +0 -140
- package/lib/encoding/varint.js +0 -75
- package/lib/hash-cache.js +0 -50
- package/lib/mnemonic/pbkdf2.js +0 -2
- package/lib/mnemonic/words/index.js +0 -8
- package/lib/script/index.js +0 -5
- package/lib/transaction/index.js +0 -7
- package/lib/transaction/input/index.js +0 -5
- package/lib/util/js.js +0 -90
- /package/{lib/encoding/decode-script-chunks.js → cjs/encoding/decode-script-chunks.cjs} +0 -0
- /package/{lib/encoding/encode-hex.js → cjs/encoding/encode-hex.cjs} +0 -0
- /package/{lib/encoding/is-hex.js → cjs/encoding/is-hex.cjs} +0 -0
- /package/{lib/mnemonic/words/chinese.js → cjs/mnemonic/words/chinese.cjs} +0 -0
- /package/{lib/mnemonic/words/english.js → cjs/mnemonic/words/english.cjs} +0 -0
- /package/{lib/mnemonic/words/french.js → cjs/mnemonic/words/french.cjs} +0 -0
- /package/{lib/mnemonic/words/italian.js → cjs/mnemonic/words/italian.cjs} +0 -0
- /package/{lib/mnemonic/words/japanese.js → cjs/mnemonic/words/japanese.cjs} +0 -0
- /package/{lib/mnemonic/words/spanish.js → cjs/mnemonic/words/spanish.cjs} +0 -0
- /package/{lib/script/write-i32-le.js → cjs/script/write-i32-le.cjs} +0 -0
- /package/{lib/script/write-push-data.js → cjs/script/write-push-data.cjs} +0 -0
- /package/{lib/script/write-u16-le.js → cjs/script/write-u16-le.cjs} +0 -0
- /package/{lib/script/write-u32-le.js → cjs/script/write-u32-le.cjs} +0 -0
- /package/{lib/script/write-u64-le.js → cjs/script/write-u64-le.cjs} +0 -0
- /package/{lib/script/write-u8-le.js → cjs/script/write-u8-le.cjs} +0 -0
- /package/{lib/script/write-varint.js → cjs/script/write-varint.cjs} +0 -0
- /package/{lib/util/_.js → cjs/util/_.cjs} +0 -0
- /package/test/crypto/{bn.js → bn.cjs} +0 -0
- /package/test/crypto/{hash.js → hash.cjs} +0 -0
- /package/test/crypto/{point.js → point.cjs} +0 -0
- /package/test/crypto/{random.js → random.cjs} +0 -0
- /package/test/data/{blk86756-testnet.js → blk86756-testnet.cjs} +0 -0
- /package/test/data/{merkleblocks.js → merkleblocks.cjs} +0 -0
- /package/test/encoding/{base58.js → base58.cjs} +0 -0
- /package/test/encoding/{base58check.js → base58check.cjs} +0 -0
- /package/test/encoding/{bufferreader.js → bufferreader.cjs} +0 -0
- /package/test/encoding/{bufferwriter.js → bufferwriter.cjs} +0 -0
- /package/test/encoding/{varint.js → varint.cjs} +0 -0
- /package/test/{index.js → index.cjs} +0 -0
- /package/test/message/{message.js → message.cjs} +0 -0
- /package/test/mnemonic/{mnemonic.js → mnemonic.cjs} +0 -0
- /package/test/{opcode.js → opcode.cjs} +0 -0
- /package/test/{privatekey.js → privatekey.cjs} +0 -0
- /package/test/transaction/input/{publickey.js → publickey.cjs} +0 -0
- /package/test/transaction/{output.js → output.cjs} +0 -0
- /package/test/transaction/{signature.js → signature.cjs} +0 -0
- /package/test/transaction/{unspentoutput.js → unspentoutput.cjs} +0 -0
- /package/test/util/{js.js → js.cjs} +0 -0
- /package/test/util/{preconditions.js → preconditions.cjs} +0 -0
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var BN = require('./bn');
|
|
4
|
-
var _ = require('../util/_');
|
|
5
|
-
var $ = require('../util/preconditions');
|
|
6
|
-
var JSUtil = require('../util/js');
|
|
3
|
+
var BN = require('./bn.cjs');
|
|
4
|
+
var _ = require('../util/_.cjs');
|
|
5
|
+
var $ = require('../util/preconditions.cjs');
|
|
6
|
+
var JSUtil = require('../util/js.cjs');
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Creates a new Signature instance from BN values or an object.
|
|
10
|
+
* @constructor
|
|
11
|
+
* @param {BN|Object} r - Either a BN instance for the r value or an object containing r and s properties.
|
|
12
|
+
* @param {BN} [s] - The s value (required if r is a BN instance).
|
|
13
|
+
*/
|
|
14
|
+
function Signature(r, s) {
|
|
9
15
|
if (!(this instanceof Signature)) {
|
|
10
16
|
return new Signature(r, s);
|
|
11
17
|
}
|
|
@@ -20,6 +26,16 @@ var Signature = function Signature(r, s) {
|
|
|
20
26
|
}
|
|
21
27
|
};
|
|
22
28
|
|
|
29
|
+
/**
|
|
30
|
+
* Sets signature properties from an object.
|
|
31
|
+
* @param {Object} obj - Object containing signature properties
|
|
32
|
+
* @param {Buffer} [obj.r] - r value
|
|
33
|
+
* @param {Buffer} [obj.s] - s value
|
|
34
|
+
* @param {number} [obj.i] - Public key recovery parameter (0-3)
|
|
35
|
+
* @param {boolean} [obj.compressed] - Whether recovered pubkey is compressed
|
|
36
|
+
* @param {number} [obj.nhashtype] - Hash type
|
|
37
|
+
* @returns {Signature} Returns the signature instance for chaining
|
|
38
|
+
*/
|
|
23
39
|
Signature.prototype.set = function (obj) {
|
|
24
40
|
this.r = obj.r || this.r || undefined;
|
|
25
41
|
this.s = obj.s || this.s || undefined;
|
|
@@ -30,6 +46,13 @@ Signature.prototype.set = function (obj) {
|
|
|
30
46
|
return this;
|
|
31
47
|
};
|
|
32
48
|
|
|
49
|
+
/**
|
|
50
|
+
* Creates a Signature instance from a compact ECDSA signature buffer.
|
|
51
|
+
* @param {Buffer} buf - The compact signature buffer (65 bytes).
|
|
52
|
+
* @returns {Signature} The parsed signature object.
|
|
53
|
+
* @throws {Error} If the input is invalid (not a Buffer, wrong length, or invalid recovery param).
|
|
54
|
+
* @static
|
|
55
|
+
*/
|
|
33
56
|
Signature.fromCompact = function (buf) {
|
|
34
57
|
$.checkArgument(Buffer.isBuffer(buf), 'Argument is expected to be a Buffer');
|
|
35
58
|
|
|
@@ -57,6 +80,13 @@ Signature.fromCompact = function (buf) {
|
|
|
57
80
|
return sig;
|
|
58
81
|
};
|
|
59
82
|
|
|
83
|
+
/**
|
|
84
|
+
* Creates a Signature instance from a DER-encoded or raw buffer.
|
|
85
|
+
* @param {Buffer} buf - The input buffer containing DER-encoded or raw signature data
|
|
86
|
+
* @param {boolean} [strict] - Whether to enforce strict DER parsing rules
|
|
87
|
+
* @returns {Signature} A new Signature instance with parsed r and s values
|
|
88
|
+
* @static
|
|
89
|
+
*/
|
|
60
90
|
Signature.fromDER = Signature.fromBuffer = function (buf, strict) {
|
|
61
91
|
var obj = Signature.parseDER(buf, strict);
|
|
62
92
|
var sig = new Signature();
|
|
@@ -68,6 +98,12 @@ Signature.fromDER = Signature.fromBuffer = function (buf, strict) {
|
|
|
68
98
|
};
|
|
69
99
|
|
|
70
100
|
// The format used in a tx
|
|
101
|
+
/**
|
|
102
|
+
* Converts a transaction-format signature buffer to a Signature object.
|
|
103
|
+
* @param {Buffer} buf - The signature buffer in transaction format (DER + hash type byte)
|
|
104
|
+
* @returns {Signature} The parsed Signature object with nhashtype property set
|
|
105
|
+
* @static
|
|
106
|
+
*/
|
|
71
107
|
Signature.fromTxFormat = function (buf) {
|
|
72
108
|
var nhashtype = buf.readUInt8(buf.length - 1);
|
|
73
109
|
var derbuf = buf.slice(0, buf.length - 1);
|
|
@@ -76,13 +112,38 @@ Signature.fromTxFormat = function (buf) {
|
|
|
76
112
|
return sig;
|
|
77
113
|
};
|
|
78
114
|
|
|
115
|
+
/**
|
|
116
|
+
* Creates a Signature instance from a hex-encoded string.
|
|
117
|
+
* @param {string} str - Hex-encoded signature string
|
|
118
|
+
* @returns {Signature} Signature instance parsed from DER format
|
|
119
|
+
* @static
|
|
120
|
+
*/
|
|
79
121
|
Signature.fromString = function (str) {
|
|
80
122
|
var buf = Buffer.from(str, 'hex');
|
|
81
123
|
return Signature.fromDER(buf);
|
|
82
124
|
};
|
|
83
125
|
|
|
126
|
+
|
|
84
127
|
/**
|
|
128
|
+
* Parses a DER formatted signature buffer into its components.
|
|
85
129
|
* In order to mimic the non-strict DER encoding of OpenSSL, set strict = false.
|
|
130
|
+
* @param {Buffer} buf - The DER formatted signature buffer to parse
|
|
131
|
+
* @param {boolean} [strict=true] - Whether to perform strict length validation
|
|
132
|
+
* @returns {Object} An object containing the parsed signature components:
|
|
133
|
+
* - header: The DER header byte (0x30)
|
|
134
|
+
* - length: The total length of the signature components
|
|
135
|
+
* - rheader: The R component header byte (0x02)
|
|
136
|
+
* - rlength: The length of the R component
|
|
137
|
+
* - rneg: Whether R is negative
|
|
138
|
+
* - rbuf: The R component buffer
|
|
139
|
+
* - r: The R component as a BN
|
|
140
|
+
* - sheader: The S component header byte (0x02)
|
|
141
|
+
* - slength: The length of the S component
|
|
142
|
+
* - sneg: Whether S is negative
|
|
143
|
+
* - sbuf: The S component buffer
|
|
144
|
+
* - s: The S component as a BN
|
|
145
|
+
* @throws {Error} If the buffer is not valid DER format or length checks fail
|
|
146
|
+
* @static
|
|
86
147
|
*/
|
|
87
148
|
Signature.parseDER = function (buf, strict) {
|
|
88
149
|
$.checkArgument(Buffer.isBuffer(buf), new Error('DER formatted signature should be a buffer'));
|
|
@@ -141,6 +202,13 @@ Signature.parseDER = function (buf, strict) {
|
|
|
141
202
|
return obj;
|
|
142
203
|
};
|
|
143
204
|
|
|
205
|
+
/**
|
|
206
|
+
* Converts the signature to a compact format.
|
|
207
|
+
* @param {number} [i] - The recovery ID (0, 1, 2, or 3). Defaults to the instance's `i` value.
|
|
208
|
+
* @param {boolean} [compressed] - Whether the signature is compressed. Defaults to the instance's `compressed` value.
|
|
209
|
+
* @returns {Buffer} - The compact signature as a Buffer (1 byte recovery ID + 32 bytes r + 32 bytes s).
|
|
210
|
+
* @throws {Error} - If `i` is not 0, 1, 2, or 3.
|
|
211
|
+
*/
|
|
144
212
|
Signature.prototype.toCompact = function (i, compressed) {
|
|
145
213
|
i = typeof i === 'number' ? i : this.i;
|
|
146
214
|
compressed = typeof compressed === 'boolean' ? compressed : this.compressed;
|
|
@@ -163,6 +231,12 @@ Signature.prototype.toCompact = function (i, compressed) {
|
|
|
163
231
|
return Buffer.concat([b1, b2, b3]);
|
|
164
232
|
};
|
|
165
233
|
|
|
234
|
+
/**
|
|
235
|
+
* Converts the signature to DER format.
|
|
236
|
+
* Handles negative values by prepending a zero byte if necessary.
|
|
237
|
+
*
|
|
238
|
+
* @returns {Buffer} The DER-encoded signature.
|
|
239
|
+
*/
|
|
166
240
|
Signature.prototype.toBuffer = Signature.prototype.toDER = function () {
|
|
167
241
|
var rnbuf = this.r.toBuffer();
|
|
168
242
|
var snbuf = this.s.toBuffer();
|
|
@@ -189,6 +263,10 @@ Signature.prototype.toBuffer = Signature.prototype.toDER = function () {
|
|
|
189
263
|
return der;
|
|
190
264
|
};
|
|
191
265
|
|
|
266
|
+
/**
|
|
267
|
+
* Converts the signature to a hexadecimal string representation.
|
|
268
|
+
* @returns {string} The DER-encoded signature in hexadecimal format.
|
|
269
|
+
*/
|
|
192
270
|
Signature.prototype.toString = function () {
|
|
193
271
|
var buf = this.toDER();
|
|
194
272
|
return buf.toString('hex');
|
|
@@ -205,6 +283,10 @@ Signature.prototype.toString = function () {
|
|
|
205
283
|
* in which case a single 0 byte is necessary and even required).
|
|
206
284
|
*
|
|
207
285
|
* See https://bitcointalk.org/index.php?topic=8392.msg127623#msg127623
|
|
286
|
+
*
|
|
287
|
+
* @param {Buffer} buf - The buffer containing the signature to verify
|
|
288
|
+
* @returns {boolean} True if the signature is valid DER-encoded, false otherwise
|
|
289
|
+
* @static
|
|
208
290
|
*/
|
|
209
291
|
Signature.isTxDER = function (buf) {
|
|
210
292
|
if (buf.length < 9) {
|
|
@@ -272,10 +354,12 @@ Signature.isTxDER = function (buf) {
|
|
|
272
354
|
return true;
|
|
273
355
|
};
|
|
274
356
|
|
|
357
|
+
|
|
275
358
|
/**
|
|
276
|
-
*
|
|
359
|
+
* Checks if the signature's S value is within the valid range (low-S).
|
|
277
360
|
* See also ECDSA signature algorithm which enforces this.
|
|
278
361
|
* See also BIP 62, "low S values in signatures"
|
|
362
|
+
* @returns {boolean} True if S is between 1 and the upper bound (0x7F...A0), false otherwise.
|
|
279
363
|
*/
|
|
280
364
|
Signature.prototype.hasLowS = function () {
|
|
281
365
|
if (
|
|
@@ -287,9 +371,13 @@ Signature.prototype.hasLowS = function () {
|
|
|
287
371
|
return true;
|
|
288
372
|
};
|
|
289
373
|
|
|
374
|
+
|
|
290
375
|
/**
|
|
291
|
-
*
|
|
292
|
-
*
|
|
376
|
+
* Checks if the signature has a defined hashtype.
|
|
377
|
+
* - Validates that nhashtype is a natural number
|
|
378
|
+
* - Accepts with or without Signature.SIGHASH_ANYONECANPAY by ignoring the bit
|
|
379
|
+
* - Verifies the hashtype is between SIGHASH_ALL and SIGHASH_SINGLE
|
|
380
|
+
* @returns {boolean} True if the hashtype is valid, false otherwise
|
|
293
381
|
*/
|
|
294
382
|
Signature.prototype.hasDefinedHashtype = function () {
|
|
295
383
|
if (!JSUtil.isNaturalNumber(this.nhashtype)) {
|
|
@@ -303,6 +391,11 @@ Signature.prototype.hasDefinedHashtype = function () {
|
|
|
303
391
|
return true;
|
|
304
392
|
};
|
|
305
393
|
|
|
394
|
+
/**
|
|
395
|
+
* Converts the signature to transaction format by concatenating the DER-encoded signature
|
|
396
|
+
* with the hash type byte.
|
|
397
|
+
* @returns {Buffer} The signature in transaction format (DER + hash type byte).
|
|
398
|
+
*/
|
|
306
399
|
Signature.prototype.toTxFormat = function () {
|
|
307
400
|
var derbuf = this.toDER();
|
|
308
401
|
var buf = Buffer.alloc(1);
|
|
@@ -310,16 +403,73 @@ Signature.prototype.toTxFormat = function () {
|
|
|
310
403
|
return Buffer.concat([derbuf, buf]);
|
|
311
404
|
};
|
|
312
405
|
|
|
406
|
+
/**
|
|
407
|
+
* Signature hash type for signing all inputs/outputs (default).
|
|
408
|
+
* @constant {number}
|
|
409
|
+
* @default 0x01
|
|
410
|
+
*/
|
|
313
411
|
Signature.SIGHASH_ALL = 0x01;
|
|
412
|
+
/**
|
|
413
|
+
* Flag indicating that no outputs are signed (only inputs are signed).
|
|
414
|
+
* Used in signature hashing to specify which parts of the transaction are included in the hash.
|
|
415
|
+
* @constant {number}
|
|
416
|
+
* @default 0x02
|
|
417
|
+
*/
|
|
314
418
|
Signature.SIGHASH_NONE = 0x02;
|
|
419
|
+
/**
|
|
420
|
+
* Signature hash type for single input signing (0x03).
|
|
421
|
+
* @constant {number}
|
|
422
|
+
* @default 0x03
|
|
423
|
+
*/
|
|
315
424
|
Signature.SIGHASH_SINGLE = 0x03;
|
|
425
|
+
/**
|
|
426
|
+
* Bit flag indicating that only the current input is signed (others can be modified).
|
|
427
|
+
* Used in Bitcoin signature hashing (SIGHASH type).
|
|
428
|
+
* @constant {number}
|
|
429
|
+
* @default 0x80
|
|
430
|
+
*/
|
|
316
431
|
Signature.SIGHASH_ANYONECANPAY = 0x80;
|
|
317
432
|
|
|
433
|
+
/**
|
|
434
|
+
* Signature hash type for signing all inputs/outputs (default).
|
|
435
|
+
* @constant {number}
|
|
436
|
+
* @default 0x01
|
|
437
|
+
*/
|
|
318
438
|
Signature.ALL = Signature.SIGHASH_ALL
|
|
439
|
+
/**
|
|
440
|
+
* Flag indicating that no outputs are signed (only inputs are signed).
|
|
441
|
+
* Used in signature hashing to specify which parts of the transaction are included in the hash.
|
|
442
|
+
* @constant {number}
|
|
443
|
+
* @default 0x02
|
|
444
|
+
*/
|
|
319
445
|
Signature.NONE = Signature.SIGHASH_NONE
|
|
446
|
+
/**
|
|
447
|
+
* Signature hash type for single input signing (0x03).
|
|
448
|
+
* @constant {number}
|
|
449
|
+
* @default 0x03
|
|
450
|
+
*/
|
|
320
451
|
Signature.SINGLE = Signature.SIGHASH_SINGLE
|
|
452
|
+
/**
|
|
453
|
+
* Bitwise flag combination for signature hash types:
|
|
454
|
+
* SIGHASH_ALL (default) with ANYONECANPAY modifier.
|
|
455
|
+
* Allows anyone to add inputs to the transaction.
|
|
456
|
+
* @constant {number}
|
|
457
|
+
* @default 0x81
|
|
458
|
+
*/
|
|
321
459
|
Signature.ANYONECANPAY_ALL = Signature.SIGHASH_ALL | Signature.SIGHASH_ANYONECANPAY
|
|
460
|
+
/**
|
|
461
|
+
* Bitwise flag combination for a signature that allows anyone to pay (no output locking)
|
|
462
|
+
* and doesn't commit to any outputs (SIGHASH_NONE).
|
|
463
|
+
* @constant {number}
|
|
464
|
+
* @default 0x82
|
|
465
|
+
*/
|
|
322
466
|
Signature.ANYONECANPAY_NONE = Signature.SIGHASH_NONE | Signature.SIGHASH_ANYONECANPAY
|
|
467
|
+
/**
|
|
468
|
+
* Bitwise flag combination for signature allowing anyone to pay (SIGHASH_ANYONECANPAY)
|
|
469
|
+
* with single output mode (SIGHASH_SINGLE).
|
|
470
|
+
* @constant {number}
|
|
471
|
+
* @default 0x83
|
|
472
|
+
*/
|
|
323
473
|
Signature.ANYONECANPAY_SINGLE = Signature.SIGHASH_SINGLE | Signature.SIGHASH_ANYONECANPAY
|
|
324
474
|
|
|
325
475
|
module.exports = Signature;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var _ = require('../util/_');
|
|
3
|
+
var _ = require('../util/_.cjs');
|
|
4
4
|
var bs58 = require('bs58');
|
|
5
5
|
|
|
6
6
|
/**
|
|
@@ -18,7 +18,7 @@ var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'.spli
|
|
|
18
18
|
*
|
|
19
19
|
* @param {object} obj Can be a string or buffer.
|
|
20
20
|
*/
|
|
21
|
-
|
|
21
|
+
function Base58(obj) {
|
|
22
22
|
if (!(this instanceof Base58)) {
|
|
23
23
|
return new Base58(obj);
|
|
24
24
|
}
|
|
@@ -31,6 +31,12 @@ var Base58 = function Base58(obj) {
|
|
|
31
31
|
}
|
|
32
32
|
};
|
|
33
33
|
|
|
34
|
+
/**
|
|
35
|
+
* Checks if all characters in the input are valid Base58 characters.
|
|
36
|
+
* @param {string|Buffer} chars - The input characters to validate (can be a string or Buffer).
|
|
37
|
+
* @returns {boolean} True if all characters are valid Base58, false otherwise.
|
|
38
|
+
* @static
|
|
39
|
+
*/
|
|
34
40
|
Base58.validCharacters = function validCharacters(chars) {
|
|
35
41
|
if (Buffer.isBuffer(chars)) {
|
|
36
42
|
chars = chars.toString();
|
|
@@ -42,6 +48,12 @@ Base58.validCharacters = function validCharacters(chars) {
|
|
|
42
48
|
);
|
|
43
49
|
};
|
|
44
50
|
|
|
51
|
+
/**
|
|
52
|
+
* Sets the buffer property from the given object.
|
|
53
|
+
* @param {Object} obj - The object containing the buffer to set.
|
|
54
|
+
* @param {Buffer} [obj.buf] - The buffer to assign. If not provided, retains current buffer or sets to undefined.
|
|
55
|
+
* @returns {Base58} Returns the instance for chaining.
|
|
56
|
+
*/
|
|
45
57
|
Base58.prototype.set = function (obj) {
|
|
46
58
|
this.buf = obj.buf || this.buf || undefined;
|
|
47
59
|
return this;
|
|
@@ -52,6 +64,8 @@ Base58.prototype.set = function (obj) {
|
|
|
52
64
|
*
|
|
53
65
|
* @param {Buffer} buf Any buffer to be encoded.
|
|
54
66
|
* @returns {string} A Base 58 encoded string.
|
|
67
|
+
* @throws {Error} If the input is not a buffer.
|
|
68
|
+
* @static
|
|
55
69
|
*/
|
|
56
70
|
Base58.encode = function (buf) {
|
|
57
71
|
if (!Buffer.isBuffer(buf)) {
|
|
@@ -65,6 +79,8 @@ Base58.encode = function (buf) {
|
|
|
65
79
|
*
|
|
66
80
|
* @param {string} str A Base 58 encoded string.
|
|
67
81
|
* @returns {Buffer} The decoded buffer.
|
|
82
|
+
* @throws {Error} If the input is not a string.
|
|
83
|
+
* @static
|
|
68
84
|
*/
|
|
69
85
|
Base58.decode = function (str) {
|
|
70
86
|
if (typeof str !== 'string') {
|
|
@@ -73,37 +89,77 @@ Base58.decode = function (str) {
|
|
|
73
89
|
return Buffer.from(bs58.decode(str));
|
|
74
90
|
};
|
|
75
91
|
|
|
92
|
+
/**
|
|
93
|
+
* Sets the internal buffer to the provided buffer and returns the instance for chaining.
|
|
94
|
+
* @param {Buffer} buf - The buffer to set as the internal buffer.
|
|
95
|
+
* @returns {Base58} The instance for method chaining.
|
|
96
|
+
*/
|
|
76
97
|
Base58.prototype.fromBuffer = function (buf) {
|
|
77
98
|
this.buf = buf;
|
|
78
99
|
return this;
|
|
79
100
|
};
|
|
80
101
|
|
|
102
|
+
/**
|
|
103
|
+
* Creates a Base58 encoded string from a buffer.
|
|
104
|
+
* @param {Buffer} buf - The input buffer to encode.
|
|
105
|
+
* @returns {Base58} A new Base58 instance containing the encoded string.
|
|
106
|
+
* @static
|
|
107
|
+
*/
|
|
81
108
|
Base58.fromBuffer = function (buf) {
|
|
82
109
|
return new Base58().fromBuffer(buf);
|
|
83
110
|
};
|
|
84
111
|
|
|
112
|
+
/**
|
|
113
|
+
* Converts a hex string to Base58 encoded string.
|
|
114
|
+
* @param {string} hex - The hex string to convert.
|
|
115
|
+
* @returns {string} The Base58 encoded string.
|
|
116
|
+
* @static
|
|
117
|
+
*/
|
|
85
118
|
Base58.fromHex = function (hex) {
|
|
86
119
|
return Base58.fromBuffer(Buffer.from(hex, 'hex'));
|
|
87
120
|
};
|
|
88
121
|
|
|
122
|
+
/**
|
|
123
|
+
* Converts a Base58 encoded string to a buffer and stores it in the instance.
|
|
124
|
+
* @param {string} str - The Base58 encoded string to decode.
|
|
125
|
+
* @returns {Base58} The current instance for chaining.
|
|
126
|
+
*/
|
|
89
127
|
Base58.prototype.fromString = function (str) {
|
|
90
128
|
var buf = Base58.decode(str);
|
|
91
129
|
this.buf = buf;
|
|
92
130
|
return this;
|
|
93
131
|
};
|
|
94
132
|
|
|
133
|
+
/**
|
|
134
|
+
* Creates a Base58 instance from a string input.
|
|
135
|
+
* @param {string} str - The string to convert to Base58.
|
|
136
|
+
* @returns {Base58} A new Base58 instance containing the encoded string.
|
|
137
|
+
* @static
|
|
138
|
+
*/
|
|
95
139
|
Base58.fromString = function (str) {
|
|
96
140
|
return new Base58().fromString(str);
|
|
97
141
|
};
|
|
98
142
|
|
|
143
|
+
/**
|
|
144
|
+
* Returns the internal buffer containing the Base58 encoded data.
|
|
145
|
+
* @returns {Buffer} The raw buffer representation of the Base58 data.
|
|
146
|
+
*/
|
|
99
147
|
Base58.prototype.toBuffer = function () {
|
|
100
148
|
return this.buf;
|
|
101
149
|
};
|
|
102
150
|
|
|
151
|
+
/**
|
|
152
|
+
* Converts the Base58 encoded data to a hexadecimal string.
|
|
153
|
+
* @returns {string} Hexadecimal representation of the Base58 data.
|
|
154
|
+
*/
|
|
103
155
|
Base58.prototype.toHex = function () {
|
|
104
156
|
return this.toBuffer().toString('hex');
|
|
105
157
|
};
|
|
106
158
|
|
|
159
|
+
/**
|
|
160
|
+
* Converts the Base58 instance to its string representation.
|
|
161
|
+
* @returns {string} The Base58 encoded string.
|
|
162
|
+
*/
|
|
107
163
|
Base58.prototype.toString = function () {
|
|
108
164
|
return Base58.encode(this.buf);
|
|
109
165
|
};
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var _ = require('../util/_.cjs');
|
|
4
|
+
var Base58 = require('./base58.cjs');
|
|
5
|
+
var Hash = require('../crypto/hash.cjs');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* A Base58check object can encode/decodd Base 58, which is used primarily for
|
|
9
|
+
* string-formatted Bitcoin addresses and private keys. This is the same as
|
|
10
|
+
* Base58, except that it includes a checksum to prevent accidental mistypings.
|
|
11
|
+
* @constructor
|
|
12
|
+
* @param {Buffer|string} obj Can be a string or buffer.
|
|
13
|
+
*/
|
|
14
|
+
function Base58Check(obj) {
|
|
15
|
+
if (!(this instanceof Base58Check)) {
|
|
16
|
+
return new Base58Check(obj);
|
|
17
|
+
}
|
|
18
|
+
if (Buffer.isBuffer(obj)) {
|
|
19
|
+
var buf = obj;
|
|
20
|
+
this.fromBuffer(buf);
|
|
21
|
+
} else if (typeof obj === 'string') {
|
|
22
|
+
var str = obj;
|
|
23
|
+
this.fromString(str);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Sets the buffer property from the given object.
|
|
29
|
+
* @param {Object} obj - The object containing the buffer to set.
|
|
30
|
+
* @returns {Base58Check} Returns the instance for chaining.
|
|
31
|
+
*/
|
|
32
|
+
Base58Check.prototype.set = function (obj) {
|
|
33
|
+
this.buf = obj.buf || this.buf || undefined;
|
|
34
|
+
return this;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Validates the checksum of Base58Check encoded data.
|
|
39
|
+
* @param {Buffer|string} data - The data to validate, either as a Buffer or Base58 encoded string.
|
|
40
|
+
* @param {Buffer|string} [checksum] - Optional checksum to validate against, either as a Buffer or Base58 encoded string.
|
|
41
|
+
* If not provided, the last 4 bytes of the data will be used as checksum.
|
|
42
|
+
* @returns {boolean} True if the computed checksum matches the provided/embedded checksum.
|
|
43
|
+
* @static
|
|
44
|
+
*/
|
|
45
|
+
Base58Check.validChecksum = function validChecksum(data, checksum) {
|
|
46
|
+
if (_.isString(data)) {
|
|
47
|
+
data = Buffer.from(Base58.decode(data));
|
|
48
|
+
}
|
|
49
|
+
if (_.isString(checksum)) {
|
|
50
|
+
checksum = Buffer.from(Base58.decode(checksum));
|
|
51
|
+
}
|
|
52
|
+
if (!checksum) {
|
|
53
|
+
checksum = data.slice(-4);
|
|
54
|
+
data = data.slice(0, -4);
|
|
55
|
+
}
|
|
56
|
+
return Base58Check.checksum(data).toString('hex') === checksum.toString('hex');
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Decodes a Base58Check encoded string and verifies its checksum.
|
|
61
|
+
* @param {string} s - The Base58Check encoded string to decode.
|
|
62
|
+
* @returns {Buffer} The decoded data (excluding checksum).
|
|
63
|
+
* @throws {Error} If input is not a string, too short, or checksum mismatch.
|
|
64
|
+
* @static
|
|
65
|
+
*/
|
|
66
|
+
Base58Check.decode = function (s) {
|
|
67
|
+
if (typeof s !== 'string') {
|
|
68
|
+
throw new Error('Input must be a string');
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
var buf = Buffer.from(Base58.decode(s));
|
|
72
|
+
|
|
73
|
+
if (buf.length < 4) {
|
|
74
|
+
throw new Error('Input string too short');
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
var data = buf.slice(0, -4);
|
|
78
|
+
var csum = buf.slice(-4);
|
|
79
|
+
|
|
80
|
+
var hash = Hash.sha256sha256(data);
|
|
81
|
+
var hash4 = hash.slice(0, 4);
|
|
82
|
+
|
|
83
|
+
if (csum.toString('hex') !== hash4.toString('hex')) {
|
|
84
|
+
throw new Error('Checksum mismatch');
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return data;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Calculates the checksum for a given buffer using double SHA-256 hash.
|
|
92
|
+
* The checksum is the first 4 bytes of the double-hashed result.
|
|
93
|
+
* @param {Buffer} buffer - The input buffer to calculate checksum for
|
|
94
|
+
* @returns {Buffer} The 4-byte checksum
|
|
95
|
+
* @static
|
|
96
|
+
*/
|
|
97
|
+
Base58Check.checksum = function (buffer) {
|
|
98
|
+
return Hash.sha256sha256(buffer).slice(0, 4);
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Encodes a buffer into Base58Check format.
|
|
103
|
+
* @param {Buffer} buf - The input buffer to encode
|
|
104
|
+
* @returns {string} The Base58Check encoded string
|
|
105
|
+
* @throws {Error} If input is not a Buffer
|
|
106
|
+
* @static
|
|
107
|
+
*/
|
|
108
|
+
Base58Check.encode = function (buf) {
|
|
109
|
+
if (!Buffer.isBuffer(buf)) {
|
|
110
|
+
throw new Error('Input must be a buffer');
|
|
111
|
+
}
|
|
112
|
+
var checkedBuf = Buffer.alloc(buf.length + 4);
|
|
113
|
+
var hash = Base58Check.checksum(buf);
|
|
114
|
+
buf.copy(checkedBuf);
|
|
115
|
+
hash.copy(checkedBuf, buf.length);
|
|
116
|
+
return Base58.encode(checkedBuf);
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Sets the internal buffer to the provided Buffer object.
|
|
121
|
+
* @param {Buffer} buf - The buffer to set as the internal state.
|
|
122
|
+
* @returns {Base58Check} Returns the instance for chaining.
|
|
123
|
+
*/
|
|
124
|
+
Base58Check.prototype.fromBuffer = function (buf) {
|
|
125
|
+
this.buf = buf;
|
|
126
|
+
return this;
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Creates a Base58Check encoded string from a buffer.
|
|
131
|
+
* @param {Buffer} buf - The input buffer to encode.
|
|
132
|
+
* @returns {Base58Check} A new Base58Check instance containing the encoded data.
|
|
133
|
+
*/
|
|
134
|
+
Base58Check.fromBuffer = function (buf) {
|
|
135
|
+
return new Base58Check().fromBuffer(buf);
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Converts a hex string to a Base58Check encoded string.
|
|
140
|
+
* @param {string} hex - The hex string to convert.
|
|
141
|
+
* @returns {string} The Base58Check encoded string.
|
|
142
|
+
*/
|
|
143
|
+
Base58Check.fromHex = function (hex) {
|
|
144
|
+
return Base58Check.fromBuffer(Buffer.from(hex, 'hex'));
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Converts a Base58Check encoded string to a buffer and stores it in the instance.
|
|
149
|
+
* @param {string} str - The Base58Check encoded string to decode.
|
|
150
|
+
* @returns {Base58Check} Returns the instance for chaining.
|
|
151
|
+
*/
|
|
152
|
+
Base58Check.prototype.fromString = function (str) {
|
|
153
|
+
var buf = Base58Check.decode(str);
|
|
154
|
+
this.buf = buf;
|
|
155
|
+
return this;
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Converts a Base58Check-encoded string into a Base58 object.
|
|
160
|
+
* @param {string} str - The Base58Check-encoded string to decode.
|
|
161
|
+
* @returns {Base58} A new Base58 instance containing the decoded data.
|
|
162
|
+
*/
|
|
163
|
+
Base58Check.fromString = function (str) {
|
|
164
|
+
var buf = Base58Check.decode(str);
|
|
165
|
+
return new Base58(buf);
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Returns the internal buffer containing the Base58Check encoded data.
|
|
170
|
+
* @returns {Buffer} The raw buffer representation of the Base58Check data.
|
|
171
|
+
*/
|
|
172
|
+
Base58Check.prototype.toBuffer = function () {
|
|
173
|
+
return this.buf;
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Converts the Base58Check encoded data to a hexadecimal string.
|
|
178
|
+
* @returns {string} Hexadecimal representation of the data.
|
|
179
|
+
*/
|
|
180
|
+
Base58Check.prototype.toHex = function () {
|
|
181
|
+
return this.toBuffer().toString('hex');
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Converts the Base58Check instance to its string representation.
|
|
186
|
+
* @returns {string} The Base58Check encoded string.
|
|
187
|
+
*/
|
|
188
|
+
Base58Check.prototype.toString = function () {
|
|
189
|
+
return Base58Check.encode(this.buf);
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
module.exports = Base58Check;
|