@opcat-labs/opcat 1.0.1 → 1.0.3
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 +12 -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 +18 -4
- 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,16 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Represents a stack structure with optional variable stack support.
|
|
5
|
+
* @constructor
|
|
6
|
+
* @param {Array} rawstack - The initial stack array
|
|
7
|
+
* @param {Array} [varStack] - Optional variable stack array
|
|
8
|
+
*/
|
|
9
|
+
function Stack(rawstack, varStack) {
|
|
4
10
|
this.stack = rawstack;
|
|
5
11
|
this.varStack = varStack || [];
|
|
6
12
|
};
|
|
7
13
|
|
|
8
|
-
module.exports = Stack;
|
|
9
14
|
|
|
10
15
|
Stack.prototype.pushVar = function (varName) {
|
|
11
16
|
this.varStack.push(varName || '$tmp');
|
|
@@ -107,3 +112,5 @@ Object.defineProperty(Stack.prototype, 'rawstack', {
|
|
|
107
112
|
return this.stack;
|
|
108
113
|
},
|
|
109
114
|
});
|
|
115
|
+
|
|
116
|
+
module.exports = Stack;
|
|
@@ -1,23 +1,25 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var _ = require('../util/_');
|
|
4
|
-
var PrivateKey = require('../privatekey');
|
|
5
|
-
var PublicKey = require('../publickey');
|
|
6
|
-
var Address = require('../address');
|
|
7
|
-
var BufferWriter = require('../encoding/bufferwriter');
|
|
8
|
-
var ECDSA = require('../crypto/ecdsa');
|
|
9
|
-
var Signature = require('../crypto/signature');
|
|
10
|
-
var
|
|
11
|
-
var JSUtil = require('../util/js');
|
|
12
|
-
var $ = require('../util/preconditions');
|
|
3
|
+
var _ = require('../util/_.cjs');
|
|
4
|
+
var PrivateKey = require('../privatekey.cjs');
|
|
5
|
+
var PublicKey = require('../publickey.cjs');
|
|
6
|
+
var Address = require('../address.cjs');
|
|
7
|
+
var BufferWriter = require('../encoding/bufferwriter.cjs');
|
|
8
|
+
var ECDSA = require('../crypto/ecdsa.cjs');
|
|
9
|
+
var Signature = require('../crypto/signature.cjs');
|
|
10
|
+
var Hash = require('../crypto/hash.cjs');
|
|
11
|
+
var JSUtil = require('../util/js.cjs');
|
|
12
|
+
var $ = require('../util/preconditions.cjs');
|
|
13
|
+
|
|
13
14
|
|
|
14
15
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* @param {
|
|
18
|
-
* @
|
|
16
|
+
* Creates a Message instance from a string or Buffer.
|
|
17
|
+
* @constructor
|
|
18
|
+
* @param {string|Buffer} message - The message content as either a string or Buffer
|
|
19
|
+
* @throws {Error} Will throw if message is not a string or Buffer
|
|
20
|
+
* @returns {Message} A new Message instance containing the message buffer
|
|
19
21
|
*/
|
|
20
|
-
|
|
22
|
+
function Message(message) {
|
|
21
23
|
if (!(this instanceof Message)) {
|
|
22
24
|
return new Message(message);
|
|
23
25
|
}
|
|
@@ -37,6 +39,12 @@ var Message = function Message(message) {
|
|
|
37
39
|
return this;
|
|
38
40
|
};
|
|
39
41
|
|
|
42
|
+
/**
|
|
43
|
+
* Signs a message with the given private key.
|
|
44
|
+
* @param {string|Buffer} message - The message to sign.
|
|
45
|
+
* @param {PrivateKey} privateKey - The private key used for signing.
|
|
46
|
+
* @returns {Message} The signed message instance.
|
|
47
|
+
*/
|
|
40
48
|
Message.sign = function (message, privateKey) {
|
|
41
49
|
return new Message(message).sign(privateKey);
|
|
42
50
|
};
|
|
@@ -47,14 +55,26 @@ Message.verify = function (message, address, signature) {
|
|
|
47
55
|
|
|
48
56
|
Message.MAGIC_BYTES = Buffer.from('Bitcoin Signed Message:\n');
|
|
49
57
|
|
|
58
|
+
/**
|
|
59
|
+
* Calculates the magic hash for the message by concatenating magic bytes prefixes
|
|
60
|
+
* with the message buffer and computing a double SHA-256 hash.
|
|
61
|
+
* @returns {Buffer} The resulting 32-byte hash.
|
|
62
|
+
*/
|
|
50
63
|
Message.prototype.magicHash = function magicHash() {
|
|
51
64
|
var prefix1 = BufferWriter.varintBufNum(Message.MAGIC_BYTES.length);
|
|
52
65
|
var prefix2 = BufferWriter.varintBufNum(this.messageBuffer.length);
|
|
53
66
|
var buf = Buffer.concat([prefix1, Message.MAGIC_BYTES, prefix2, this.messageBuffer]);
|
|
54
|
-
var hash = sha256sha256(buf);
|
|
67
|
+
var hash = Hash.sha256sha256(buf);
|
|
55
68
|
return hash;
|
|
56
69
|
};
|
|
57
70
|
|
|
71
|
+
/**
|
|
72
|
+
* Signs the message with the provided private key.
|
|
73
|
+
* @private
|
|
74
|
+
* @param {PrivateKey} privateKey - The private key instance to sign with.
|
|
75
|
+
* @returns {Buffer} The signature generated using ECDSA.
|
|
76
|
+
* @throws {Error} If the first argument is not a PrivateKey instance.
|
|
77
|
+
*/
|
|
58
78
|
Message.prototype._sign = function _sign(privateKey) {
|
|
59
79
|
$.checkArgument(
|
|
60
80
|
privateKey instanceof PrivateKey,
|
|
@@ -75,6 +95,13 @@ Message.prototype.sign = function sign(privateKey) {
|
|
|
75
95
|
return signature.toCompact().toString('base64');
|
|
76
96
|
};
|
|
77
97
|
|
|
98
|
+
/**
|
|
99
|
+
* Verifies the message signature using the provided public key.
|
|
100
|
+
* @param {PublicKey} publicKey - The public key to verify against
|
|
101
|
+
* @param {Signature} signature - The signature to verify
|
|
102
|
+
* @returns {boolean} True if signature is valid, false otherwise
|
|
103
|
+
* @throws {Error} If arguments are not valid PublicKey/Signature instances
|
|
104
|
+
*/
|
|
78
105
|
Message.prototype._verify = function _verify(publicKey, signature) {
|
|
79
106
|
$.checkArgument(
|
|
80
107
|
publicKey instanceof PublicKey,
|
|
@@ -115,7 +142,7 @@ Message.prototype.verify = function verify(bitcoinAddress, signatureString) {
|
|
|
115
142
|
ecdsa.sig = signature;
|
|
116
143
|
var publicKey = ecdsa.toPublicKey();
|
|
117
144
|
|
|
118
|
-
var signatureAddress = Address.fromPublicKey(publicKey, bitcoinAddress.network);
|
|
145
|
+
var signatureAddress = Address.fromPublicKey(publicKey.toBuffer(), bitcoinAddress.network);
|
|
119
146
|
|
|
120
147
|
// check that the recovered address and specified address match
|
|
121
148
|
if (bitcoinAddress.toString() !== signatureAddress.toString()) {
|
|
@@ -149,8 +176,10 @@ Message.fromJSON = function fromJSON(json) {
|
|
|
149
176
|
return Message.fromObject(json);
|
|
150
177
|
};
|
|
151
178
|
|
|
179
|
+
|
|
152
180
|
/**
|
|
153
|
-
*
|
|
181
|
+
* Converts the message to a plain object with hex representation.
|
|
182
|
+
* @returns {Object} An object containing the hex string of the message buffer.
|
|
154
183
|
*/
|
|
155
184
|
Message.prototype.toObject = function toObject() {
|
|
156
185
|
return {
|
|
@@ -158,31 +187,39 @@ Message.prototype.toObject = function toObject() {
|
|
|
158
187
|
};
|
|
159
188
|
};
|
|
160
189
|
|
|
190
|
+
/**
|
|
191
|
+
* Creates a Message instance from an object containing a hex-encoded message.
|
|
192
|
+
* @param {Object} obj - The source object containing the message data.
|
|
193
|
+
* @param {string} obj.messageHex - Hex-encoded message string.
|
|
194
|
+
* @returns {Message} A new Message instance created from the decoded buffer.
|
|
195
|
+
*/
|
|
161
196
|
Message.fromObject = function (obj) {
|
|
162
197
|
let messageBuffer = Buffer.from(obj.messageHex, 'hex');
|
|
163
198
|
return new Message(messageBuffer);
|
|
164
199
|
};
|
|
165
200
|
|
|
201
|
+
|
|
166
202
|
/**
|
|
167
|
-
*
|
|
203
|
+
* Converts the Message instance to a JSON string representation.
|
|
204
|
+
* @returns {string} The JSON string representation of the Message object.
|
|
168
205
|
*/
|
|
169
206
|
Message.prototype.toJSON = function toJSON() {
|
|
170
207
|
return JSON.stringify(this.toObject());
|
|
171
208
|
};
|
|
172
209
|
|
|
210
|
+
|
|
173
211
|
/**
|
|
174
|
-
*
|
|
175
|
-
*
|
|
176
|
-
* @returns {String} Message
|
|
212
|
+
* Converts the message buffer to a string representation.
|
|
213
|
+
* @returns {string} The string representation of the message buffer.
|
|
177
214
|
*/
|
|
178
215
|
Message.prototype.toString = function () {
|
|
179
216
|
return this.messageBuffer.toString();
|
|
180
217
|
};
|
|
181
218
|
|
|
219
|
+
|
|
182
220
|
/**
|
|
183
|
-
*
|
|
184
|
-
*
|
|
185
|
-
* @returns {String} Message
|
|
221
|
+
* Custom inspect method for Message instances.
|
|
222
|
+
* @returns {string} String representation in format '<Message: [content]>'.
|
|
186
223
|
*/
|
|
187
224
|
Message.prototype.inspect = function () {
|
|
188
225
|
return '<Message: ' + this.toString() + '>';
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
var BN = require('../crypto/bn');
|
|
3
|
-
var Hash = require('../crypto/hash');
|
|
4
|
-
var Random = require('../crypto/random');
|
|
2
|
+
var BN = require('../crypto/bn.cjs');
|
|
3
|
+
var Hash = require('../crypto/hash.cjs');
|
|
4
|
+
var Random = require('../crypto/random.cjs');
|
|
5
5
|
var unorm = require('unorm');
|
|
6
|
-
var _ = require('../util/_');
|
|
6
|
+
var _ = require('../util/_.cjs');
|
|
7
7
|
|
|
8
|
-
var pbkdf2 = require('./pbkdf2');
|
|
9
|
-
var errors = require('../errors');
|
|
8
|
+
var pbkdf2 = require('./pbkdf2.cjs');
|
|
9
|
+
var errors = require('../errors/index.cjs');
|
|
10
|
+
|
|
11
|
+
var $ = require('../util/preconditions.cjs');
|
|
12
|
+
var HDPrivateKey = require('../hdprivatekey.cjs');
|
|
13
|
+
var Words = require('./words/index.cjs');
|
|
10
14
|
|
|
11
|
-
var $ = require('../util/preconditions');
|
|
12
|
-
var HDPrivateKey = require('../hdprivatekey');
|
|
13
15
|
|
|
14
16
|
/**
|
|
15
17
|
* This is an immutable class that represents a BIP39 Mnemonic code.
|
|
@@ -27,12 +29,16 @@ var HDPrivateKey = require('../hdprivatekey');
|
|
|
27
29
|
* var mnemonic = new Mnemonic(Mnemonic.Words.SPANISH);
|
|
28
30
|
* var xprivkey = mnemonic.toHDPrivateKey();
|
|
29
31
|
*
|
|
30
|
-
* @param {
|
|
31
|
-
* @param {Array
|
|
32
|
+
* @param {Buffer|string|number} [data] - Input data (Buffer for seed, string for phrase, or number for entropy bits)
|
|
33
|
+
* @param {Array} [wordlist] - Optional wordlist for phrase generation/validation
|
|
34
|
+
* @throws {InvalidArgument} If invalid data type provided
|
|
35
|
+
* @throws {Mnemonic.UnknownWordlist} If phrase language can't be detected
|
|
36
|
+
* @throws {Mnemonic.InvalidMnemonic} If phrase is invalid
|
|
37
|
+
* @throws {InvalidArgument} If invalid ENT value (must be >=128 and divisible by 32)
|
|
32
38
|
* @returns {Mnemonic} A new instance of Mnemonic
|
|
33
39
|
* @constructor
|
|
34
40
|
*/
|
|
35
|
-
|
|
41
|
+
function Mnemonic (data, wordlist) {
|
|
36
42
|
if (!(this instanceof Mnemonic)) {
|
|
37
43
|
return new Mnemonic(data, wordlist);
|
|
38
44
|
}
|
|
@@ -87,16 +93,25 @@ var Mnemonic = function (data, wordlist) {
|
|
|
87
93
|
});
|
|
88
94
|
};
|
|
89
95
|
|
|
96
|
+
/**
|
|
97
|
+
* Creates a new Mnemonic instance with random entropy using the specified wordlist.
|
|
98
|
+
* @param {Array} [wordlist=Mnemonic.Words.ENGLISH] - The wordlist to use for mnemonic generation (defaults to English).
|
|
99
|
+
* @returns {Mnemonic} A new Mnemonic instance with random entropy.
|
|
100
|
+
*/
|
|
90
101
|
Mnemonic.fromRandom = function (wordlist = Mnemonic.Words.ENGLISH) {
|
|
91
102
|
return new Mnemonic(wordlist);
|
|
92
103
|
};
|
|
93
104
|
|
|
105
|
+
/**
|
|
106
|
+
* Creates a Mnemonic instance from a mnemonic string.
|
|
107
|
+
* @param {string} mnemonic - The mnemonic phrase string.
|
|
108
|
+
* @param {string} [wordlist=Mnemonic.Words.ENGLISH] - Optional wordlist (defaults to English).
|
|
109
|
+
* @returns {Mnemonic} A new Mnemonic instance.
|
|
110
|
+
*/
|
|
94
111
|
Mnemonic.fromString = function (mnemonic, wordlist = Mnemonic.Words.ENGLISH) {
|
|
95
112
|
return new Mnemonic(mnemonic, wordlist);
|
|
96
113
|
};
|
|
97
114
|
|
|
98
|
-
Mnemonic.Words = require('./words');
|
|
99
|
-
|
|
100
115
|
/**
|
|
101
116
|
* Will return a boolean if the mnemonic is valid
|
|
102
117
|
*
|
|
@@ -142,6 +157,7 @@ Mnemonic.isValid = function (mnemonic, wordlist) {
|
|
|
142
157
|
* @param {String} mnemonic - The mnemonic string
|
|
143
158
|
* @param {String} wordlist - The wordlist
|
|
144
159
|
* @returns {boolean}
|
|
160
|
+
* @private
|
|
145
161
|
*/
|
|
146
162
|
Mnemonic._belongsToWordlist = function (mnemonic, wordlist) {
|
|
147
163
|
var words = unorm.nfkd(mnemonic).split(' ');
|
|
@@ -157,6 +173,7 @@ Mnemonic._belongsToWordlist = function (mnemonic, wordlist) {
|
|
|
157
173
|
*
|
|
158
174
|
* @param {String} mnemonic - The mnemonic string
|
|
159
175
|
* @returns {Array} the wordlist or null
|
|
176
|
+
* @private
|
|
160
177
|
*/
|
|
161
178
|
Mnemonic._getDictionary = function (mnemonic) {
|
|
162
179
|
if (!mnemonic) return null;
|
|
@@ -239,6 +256,7 @@ Mnemonic.prototype.inspect = function () {
|
|
|
239
256
|
* @param {Number} ENT - Entropy size, defaults to 128
|
|
240
257
|
* @param {Array} wordlist - Array of words to generate the mnemonic
|
|
241
258
|
* @returns {String} Mnemonic string
|
|
259
|
+
* @private
|
|
242
260
|
*/
|
|
243
261
|
Mnemonic._mnemonic = function (ENT, wordlist) {
|
|
244
262
|
var buf = Random.getRandomBuffer(ENT / 8);
|
|
@@ -251,6 +269,7 @@ Mnemonic._mnemonic = function (ENT, wordlist) {
|
|
|
251
269
|
* @param {Number} entropy - Entropy buffer
|
|
252
270
|
* @param {Array} wordlist - Array of words to generate the mnemonic
|
|
253
271
|
* @returns {String} Mnemonic string
|
|
272
|
+
* @private
|
|
254
273
|
*/
|
|
255
274
|
Mnemonic._entropy2mnemonic = function (entropy, wordlist) {
|
|
256
275
|
var bin = '';
|
|
@@ -299,5 +318,17 @@ Mnemonic._entropyChecksum = function (entropy) {
|
|
|
299
318
|
|
|
300
319
|
return checksum;
|
|
301
320
|
};
|
|
321
|
+
/**
|
|
322
|
+
* The list of valid mnemonic words used by the Mnemonic class.
|
|
323
|
+
* @type {Words}
|
|
324
|
+
*/
|
|
325
|
+
Mnemonic.Words = Words;
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* Assigns the pbkdf2 function to Mnemonic.pbkdf2 for key derivation.
|
|
329
|
+
* @type {Function}
|
|
330
|
+
*/
|
|
331
|
+
Mnemonic.pbkdf2 = pbkdf2;
|
|
302
332
|
|
|
303
333
|
module.exports = Mnemonic;
|
|
334
|
+
|
|
@@ -3,9 +3,16 @@
|
|
|
3
3
|
var crypto = require('crypto');
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* PDKBF2
|
|
6
|
+
* PDKBF2: Derives a key using PBKDF2 (Password-Based Key Derivation Function 2) with HMAC-SHA512.
|
|
7
7
|
* Credit to: https://github.com/stayradiated/pbkdf2-sha512
|
|
8
|
-
*
|
|
8
|
+
*
|
|
9
|
+
* @param {string|Buffer} key - The input key/password (as string or Buffer)
|
|
10
|
+
* @param {string|Buffer} salt - The salt value (as string or Buffer)
|
|
11
|
+
* @param {number} iterations - Number of iterations to perform
|
|
12
|
+
* @param {number} dkLen - Desired length of the derived key in bytes
|
|
13
|
+
* @returns {Buffer} Derived key as Buffer
|
|
14
|
+
* @throws {TypeError} If key or salt are not strings or Buffers
|
|
15
|
+
* @throws {Error} If requested key length is too long
|
|
9
16
|
*/
|
|
10
17
|
function pbkdf2(key, salt, iterations, dkLen) {
|
|
11
18
|
var hLen = 64; // SHA512 Mac length
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
var chinese = require('./chinese.cjs');
|
|
2
|
+
var english = require('./english.cjs');
|
|
3
|
+
var french = require('./french.cjs');
|
|
4
|
+
var italian = require('./italian.cjs');
|
|
5
|
+
var japanese = require('./japanese.cjs');
|
|
6
|
+
var spanish = require('./spanish.cjs');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Represents a collection of words for mnemonic purposes.
|
|
11
|
+
* @constructor
|
|
12
|
+
*/
|
|
13
|
+
function Words() {
|
|
14
|
+
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Chinese word list for mnemonic generation.
|
|
19
|
+
* @memberof Words
|
|
20
|
+
* @type {string[]}
|
|
21
|
+
* @name CHINESE
|
|
22
|
+
*/
|
|
23
|
+
Words.CHINESE = chinese;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* English word list for mnemonic generation.
|
|
27
|
+
* @memberof Words
|
|
28
|
+
* @type {string[]}
|
|
29
|
+
* @name ENGLISH
|
|
30
|
+
*/
|
|
31
|
+
Words.ENGLISH = english;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* French word list for mnemonic generation.
|
|
35
|
+
* @memberof Words
|
|
36
|
+
* @type {string[]}
|
|
37
|
+
* @name FRENCH
|
|
38
|
+
*/
|
|
39
|
+
Words.FRENCH = french;
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Italian word list for mnemonic generation.
|
|
44
|
+
* @memberof Words
|
|
45
|
+
* @type {string[]}
|
|
46
|
+
* @name ITALIAN
|
|
47
|
+
*/
|
|
48
|
+
Words.ITALIAN = italian;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Japanese word list for mnemonic generation.
|
|
52
|
+
* @memberof Words
|
|
53
|
+
* @type {string[]}
|
|
54
|
+
* @name JAPANESE
|
|
55
|
+
*/
|
|
56
|
+
Words.JAPANESE = japanese;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Spanish word list for mnemonic generation.
|
|
60
|
+
* @memberof Words
|
|
61
|
+
* @type {string[]}
|
|
62
|
+
* @name SPANISH
|
|
63
|
+
*/
|
|
64
|
+
Words.SPANISH = spanish;
|
|
65
|
+
|
|
66
|
+
module.exports = Words;
|
package/cjs/network.cjs
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A network is merely a map containing values that correspond to version
|
|
3
|
+
* numbers for each bitcoin network. Currently only supporting "livenet"
|
|
4
|
+
* (a.k.a. "mainnet"), "testnet", "regtest".
|
|
5
|
+
* @constructor
|
|
6
|
+
*/
|
|
7
|
+
function Network() { }
|
|
8
|
+
|
|
9
|
+
Network.prototype.toString = function toString() {
|
|
10
|
+
return this.name;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
module.exports = Network
|