@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.
Files changed (293) hide show
  1. package/.cjs2esm.json +18 -0
  2. package/.mocharc.yaml +1 -1
  3. package/CHANGELOG.md +12 -0
  4. package/README.md +6 -0
  5. package/{lib/address.js → cjs/address.cjs} +77 -72
  6. package/cjs/block/block.cjs +332 -0
  7. package/{lib/block/blockheader.js → cjs/block/blockheader.cjs} +8 -7
  8. package/cjs/block/index.cjs +2 -0
  9. package/{lib/block/merkleblock.js → cjs/block/merkleblock.cjs} +23 -15
  10. package/cjs/bn.cjs +3411 -0
  11. package/{lib/crypto/bn.js → cjs/crypto/bn.cjs} +3 -3
  12. package/{lib/crypto/ecdsa.js → cjs/crypto/ecdsa.cjs} +150 -14
  13. package/{lib/crypto/hash.node.js → cjs/crypto/hash.cjs} +13 -2
  14. package/cjs/crypto/index.cjs +16 -0
  15. package/{lib/crypto/point.js → cjs/crypto/point.cjs} +11 -4
  16. package/cjs/crypto/random.cjs +18 -0
  17. package/{lib/crypto/signature.js → cjs/crypto/signature.cjs} +158 -8
  18. package/{lib/encoding/base58.js → cjs/encoding/base58.cjs} +58 -2
  19. package/cjs/encoding/base58check.cjs +192 -0
  20. package/cjs/encoding/bufferreader.cjs +333 -0
  21. package/cjs/encoding/bufferwriter.cjs +244 -0
  22. package/{lib/encoding/decode-asm.js → cjs/encoding/decode-asm.cjs} +4 -4
  23. package/{lib/encoding/decode-hex.js → cjs/encoding/decode-hex.cjs} +1 -1
  24. package/cjs/encoding/index.cjs +14 -0
  25. package/cjs/encoding/varint.cjs +116 -0
  26. package/{lib/errors/index.js → cjs/errors/index.cjs} +9 -9
  27. package/{lib/errors/spec.js → cjs/errors/spec.cjs} +2 -2
  28. package/cjs/hash-cache.cjs +98 -0
  29. package/{lib/hdprivatekey.js → cjs/hdprivatekey.cjs} +232 -140
  30. package/{lib/hdpublickey.js → cjs/hdpublickey.cjs} +120 -93
  31. package/cjs/index.cjs +94 -0
  32. package/cjs/interpreter/index.cjs +2 -0
  33. package/cjs/interpreter/interpreter.cjs +1988 -0
  34. package/{lib/script/stack.js → cjs/interpreter/stack.cjs} +9 -2
  35. package/{lib/message/message.js → cjs/message/message.cjs} +62 -25
  36. package/cjs/mnemonic/index.cjs +3 -0
  37. package/{lib/mnemonic/mnemonic.js → cjs/mnemonic/mnemonic.cjs} +44 -13
  38. package/{lib/mnemonic/pbkdf2.node.js → cjs/mnemonic/pbkdf2.cjs} +9 -2
  39. package/cjs/mnemonic/words/index.cjs +66 -0
  40. package/cjs/network.cjs +13 -0
  41. package/cjs/networks.cjs +321 -0
  42. package/{lib/opcode.js → cjs/opcode.cjs} +69 -5
  43. package/cjs/privatekey.cjs +422 -0
  44. package/{lib/publickey.js → cjs/publickey.cjs} +14 -16
  45. package/cjs/script/index.cjs +2 -0
  46. package/{lib/script/script.js → cjs/script/script.cjs} +322 -67
  47. package/cjs/transaction/index.cjs +5 -0
  48. package/cjs/transaction/input/index.cjs +34 -0
  49. package/cjs/transaction/input/input.cjs +396 -0
  50. package/{lib/transaction/input/multisig.js → cjs/transaction/input/multisig.cjs} +112 -18
  51. package/{lib/transaction/input/publickey.js → cjs/transaction/input/publickey.cjs} +29 -19
  52. package/{lib/transaction/input/publickeyhash.js → cjs/transaction/input/publickeyhash.cjs} +25 -17
  53. package/{lib/transaction/output.js → cjs/transaction/output.cjs} +100 -15
  54. package/cjs/transaction/sighash.cjs +187 -0
  55. package/{lib/transaction/signature.js → cjs/transaction/signature.cjs} +30 -6
  56. package/cjs/transaction/transaction.cjs +2000 -0
  57. package/{lib/transaction/unspentoutput.js → cjs/transaction/unspentoutput.cjs} +5 -5
  58. package/cjs/util/derivation.cjs +53 -0
  59. package/cjs/util/index.cjs +11 -0
  60. package/cjs/util/js.cjs +95 -0
  61. package/{lib/util/preconditions.js → cjs/util/preconditions.cjs} +2 -2
  62. package/esm/address.js +483 -0
  63. package/{lib → esm}/block/block.js +82 -27
  64. package/esm/block/blockheader.js +296 -0
  65. package/esm/block/index.js +2 -0
  66. package/esm/block/merkleblock.js +331 -0
  67. package/esm/bn.js +3411 -0
  68. package/esm/crypto/bn.js +278 -0
  69. package/esm/crypto/ecdsa.js +475 -0
  70. package/{lib/crypto/hash.browser.js → esm/crypto/hash.js} +18 -7
  71. package/esm/crypto/index.js +16 -0
  72. package/esm/crypto/point.js +228 -0
  73. package/esm/crypto/random.js +18 -0
  74. package/esm/crypto/signature.js +475 -0
  75. package/esm/encoding/base58.js +167 -0
  76. package/esm/encoding/base58check.js +192 -0
  77. package/esm/encoding/bufferreader.js +333 -0
  78. package/esm/encoding/bufferwriter.js +243 -0
  79. package/esm/encoding/decode-asm.js +24 -0
  80. package/esm/encoding/decode-hex.js +32 -0
  81. package/esm/encoding/decode-script-chunks.js +43 -0
  82. package/esm/encoding/encode-hex.js +284 -0
  83. package/esm/encoding/index.js +14 -0
  84. package/esm/encoding/is-hex.js +7 -0
  85. package/esm/encoding/varint.js +116 -0
  86. package/esm/errors/index.js +54 -0
  87. package/esm/errors/spec.js +314 -0
  88. package/esm/hash-cache.js +98 -0
  89. package/esm/hdprivatekey.js +768 -0
  90. package/esm/hdpublickey.js +549 -0
  91. package/esm/index.js +66 -0
  92. package/esm/interpreter/index.js +2 -0
  93. package/{lib/script → esm/interpreter}/interpreter.js +219 -66
  94. package/esm/interpreter/stack.js +116 -0
  95. package/esm/message/message.js +228 -0
  96. package/esm/mnemonic/index.js +3 -0
  97. package/esm/mnemonic/mnemonic.js +332 -0
  98. package/{lib/mnemonic/pbkdf2.browser.js → esm/mnemonic/pbkdf2.js} +13 -6
  99. package/esm/mnemonic/words/chinese.js +2054 -0
  100. package/esm/mnemonic/words/english.js +2054 -0
  101. package/esm/mnemonic/words/french.js +2054 -0
  102. package/esm/mnemonic/words/index.js +66 -0
  103. package/esm/mnemonic/words/italian.js +2054 -0
  104. package/esm/mnemonic/words/japanese.js +2054 -0
  105. package/esm/mnemonic/words/spanish.js +2054 -0
  106. package/esm/network.js +13 -0
  107. package/{lib → esm}/networks.js +61 -120
  108. package/esm/opcode.js +319 -0
  109. package/{lib → esm}/privatekey.js +76 -28
  110. package/esm/publickey.js +384 -0
  111. package/esm/script/index.js +2 -0
  112. package/esm/script/script.js +1329 -0
  113. package/esm/script/write-i32-le.js +17 -0
  114. package/esm/script/write-push-data.js +35 -0
  115. package/esm/script/write-u16-le.js +12 -0
  116. package/esm/script/write-u32-le.js +16 -0
  117. package/esm/script/write-u64-le.js +24 -0
  118. package/esm/script/write-u8-le.js +8 -0
  119. package/esm/script/write-varint.js +46 -0
  120. package/esm/transaction/index.js +5 -0
  121. package/esm/transaction/input/index.js +33 -0
  122. package/{lib → esm}/transaction/input/input.js +132 -90
  123. package/esm/transaction/input/multisig.js +335 -0
  124. package/esm/transaction/input/publickey.js +108 -0
  125. package/esm/transaction/input/publickeyhash.js +124 -0
  126. package/esm/transaction/output.js +316 -0
  127. package/{lib → esm}/transaction/sighash.js +42 -22
  128. package/esm/transaction/signature.js +120 -0
  129. package/{lib → esm}/transaction/transaction.js +522 -163
  130. package/esm/transaction/unspentoutput.js +112 -0
  131. package/esm/util/_.js +47 -0
  132. package/esm/util/derivation.js +53 -0
  133. package/esm/util/index.js +12 -0
  134. package/esm/util/js.js +95 -0
  135. package/esm/util/preconditions.js +33 -0
  136. package/fixup.cjs +17 -0
  137. package/package.json +18 -4
  138. package/test/{address.js → address.cjs} +14 -43
  139. package/test/block/{block.js → block.cjs} +3 -5
  140. package/test/block/{blockheader.js → blockheader.cjs} +2 -2
  141. package/test/block/{merklebloack.js → merklebloack.cjs} +2 -2
  142. package/test/crypto/{ecdsa.js → ecdsa.cjs} +9 -9
  143. package/test/crypto/{hash.browser.js → hash.browser.cjs} +2 -1
  144. package/test/crypto/{signature.js → signature.cjs} +2 -2
  145. package/test/data/bitcoind/script_tests.json +5 -5
  146. package/test/{hashCache.js → hashCache.cjs} +2 -1
  147. package/test/{hdkeys.js → hdkeys.cjs} +4 -2
  148. package/test/{hdprivatekey.js → hdprivatekey.cjs} +7 -6
  149. package/test/{hdpublickey.js → hdpublickey.cjs} +2 -7
  150. package/test/mnemonic/{pbkdf2.test.js → pbkdf2.test.cjs} +2 -2
  151. package/test/{networks.js → networks.cjs} +12 -31
  152. package/test/{publickey.js → publickey.cjs} +2 -2
  153. package/test/script/{interpreter.js → interpreter.cjs} +5 -5
  154. package/test/script/{script.js → script.cjs} +8 -2
  155. package/test/transaction/{deserialize.js → deserialize.cjs} +2 -2
  156. package/test/transaction/input/{input.js → input.cjs} +1 -1
  157. package/test/transaction/input/{multisig.js → multisig.cjs} +2 -1
  158. package/test/transaction/input/{publickeyhash.js → publickeyhash.cjs} +1 -1
  159. package/test/transaction/{sighash.js → sighash.cjs} +1 -1
  160. package/test/transaction/{transaction.js → transaction.cjs} +2 -2
  161. package/tsconfig.json +13 -0
  162. package/types/address.d.cts +252 -0
  163. package/types/block/block.d.cts +139 -0
  164. package/types/block/blockheader.d.cts +125 -0
  165. package/types/block/index.d.cts +2 -0
  166. package/types/block/merkleblock.d.cts +95 -0
  167. package/types/bn.d.cts +202 -0
  168. package/types/crypto/bn.d.cts +2 -0
  169. package/types/crypto/ecdsa.d.cts +187 -0
  170. package/types/crypto/hash.d.cts +118 -0
  171. package/types/crypto/index.d.cts +7 -0
  172. package/types/crypto/point.d.cts +134 -0
  173. package/types/crypto/random.d.cts +13 -0
  174. package/types/crypto/signature.d.cts +160 -0
  175. package/types/encoding/base58.d.cts +106 -0
  176. package/types/encoding/base58check.d.cts +107 -0
  177. package/types/encoding/bufferreader.d.cts +164 -0
  178. package/types/encoding/bufferwriter.d.cts +126 -0
  179. package/types/encoding/decode-asm.d.cts +2 -0
  180. package/types/encoding/decode-hex.d.cts +2 -0
  181. package/types/encoding/decode-script-chunks.d.cts +14 -0
  182. package/types/encoding/encode-hex.d.cts +2 -0
  183. package/types/encoding/index.d.cts +6 -0
  184. package/types/encoding/is-hex.d.cts +2 -0
  185. package/types/encoding/varint.d.cts +66 -0
  186. package/types/errors/index.d.cts +4 -0
  187. package/types/errors/spec.d.cts +22 -0
  188. package/types/hash-cache.d.cts +65 -0
  189. package/types/hdprivatekey.d.cts +281 -0
  190. package/types/hdpublickey.d.cts +240 -0
  191. package/types/index.d.cts +26 -0
  192. package/types/interpreter/index.d.cts +2 -0
  193. package/types/interpreter/interpreter.d.cts +228 -0
  194. package/types/interpreter/stack.d.cts +35 -0
  195. package/types/message/message.d.cts +110 -0
  196. package/types/mnemonic/index.d.cts +2 -0
  197. package/types/mnemonic/mnemonic.d.cts +171 -0
  198. package/types/mnemonic/pbkdf2.d.cts +14 -0
  199. package/types/mnemonic/words/chinese.d.cts +2 -0
  200. package/types/mnemonic/words/english.d.cts +2 -0
  201. package/types/mnemonic/words/french.d.cts +2 -0
  202. package/types/mnemonic/words/index.d.cts +22 -0
  203. package/types/mnemonic/words/italian.d.cts +2 -0
  204. package/types/mnemonic/words/japanese.d.cts +2 -0
  205. package/types/mnemonic/words/spanish.d.cts +2 -0
  206. package/types/network.d.cts +11 -0
  207. package/types/networks.d.cts +76 -0
  208. package/types/opcode.d.cts +93 -0
  209. package/types/privatekey.d.cts +169 -0
  210. package/types/publickey.d.cts +202 -0
  211. package/types/script/index.d.cts +2 -0
  212. package/types/script/script.d.cts +449 -0
  213. package/types/script/write-i32-le.d.cts +2 -0
  214. package/types/script/write-push-data.d.cts +2 -0
  215. package/types/script/write-u16-le.d.cts +2 -0
  216. package/types/script/write-u32-le.d.cts +2 -0
  217. package/types/script/write-u64-le.d.cts +2 -0
  218. package/types/script/write-u8-le.d.cts +2 -0
  219. package/types/script/write-varint.d.cts +2 -0
  220. package/types/transaction/index.d.cts +2 -0
  221. package/types/transaction/input/index.d.cts +2 -0
  222. package/types/transaction/input/input.d.cts +178 -0
  223. package/types/transaction/input/multisig.d.cts +127 -0
  224. package/types/transaction/input/publickey.d.cts +44 -0
  225. package/types/transaction/input/publickeyhash.d.cts +45 -0
  226. package/types/transaction/output.d.cts +118 -0
  227. package/types/transaction/sighash.d.cts +61 -0
  228. package/types/transaction/signature.d.cts +43 -0
  229. package/types/transaction/transaction.d.cts +716 -0
  230. package/types/transaction/unspentoutput.d.cts +83 -0
  231. package/types/util/_.d.cts +26 -0
  232. package/types/util/derivation.d.cts +21 -0
  233. package/types/util/index.d.cts +5 -0
  234. package/types/util/js.d.cts +50 -0
  235. package/types/util/preconditions.d.cts +3 -0
  236. package/index.d.ts +0 -1541
  237. package/index.js +0 -74
  238. package/lib/block/index.js +0 -4
  239. package/lib/bn.js +0 -3423
  240. package/lib/crypto/hash.js +0 -2
  241. package/lib/crypto/random.browser.js +0 -28
  242. package/lib/crypto/random.js +0 -2
  243. package/lib/crypto/random.node.js +0 -11
  244. package/lib/encoding/base58check.js +0 -121
  245. package/lib/encoding/bufferreader.js +0 -212
  246. package/lib/encoding/bufferwriter.js +0 -140
  247. package/lib/encoding/varint.js +0 -75
  248. package/lib/hash-cache.js +0 -50
  249. package/lib/mnemonic/pbkdf2.js +0 -2
  250. package/lib/mnemonic/words/index.js +0 -8
  251. package/lib/script/index.js +0 -5
  252. package/lib/transaction/index.js +0 -7
  253. package/lib/transaction/input/index.js +0 -5
  254. package/lib/util/js.js +0 -90
  255. /package/{lib/encoding/decode-script-chunks.js → cjs/encoding/decode-script-chunks.cjs} +0 -0
  256. /package/{lib/encoding/encode-hex.js → cjs/encoding/encode-hex.cjs} +0 -0
  257. /package/{lib/encoding/is-hex.js → cjs/encoding/is-hex.cjs} +0 -0
  258. /package/{lib/mnemonic/words/chinese.js → cjs/mnemonic/words/chinese.cjs} +0 -0
  259. /package/{lib/mnemonic/words/english.js → cjs/mnemonic/words/english.cjs} +0 -0
  260. /package/{lib/mnemonic/words/french.js → cjs/mnemonic/words/french.cjs} +0 -0
  261. /package/{lib/mnemonic/words/italian.js → cjs/mnemonic/words/italian.cjs} +0 -0
  262. /package/{lib/mnemonic/words/japanese.js → cjs/mnemonic/words/japanese.cjs} +0 -0
  263. /package/{lib/mnemonic/words/spanish.js → cjs/mnemonic/words/spanish.cjs} +0 -0
  264. /package/{lib/script/write-i32-le.js → cjs/script/write-i32-le.cjs} +0 -0
  265. /package/{lib/script/write-push-data.js → cjs/script/write-push-data.cjs} +0 -0
  266. /package/{lib/script/write-u16-le.js → cjs/script/write-u16-le.cjs} +0 -0
  267. /package/{lib/script/write-u32-le.js → cjs/script/write-u32-le.cjs} +0 -0
  268. /package/{lib/script/write-u64-le.js → cjs/script/write-u64-le.cjs} +0 -0
  269. /package/{lib/script/write-u8-le.js → cjs/script/write-u8-le.cjs} +0 -0
  270. /package/{lib/script/write-varint.js → cjs/script/write-varint.cjs} +0 -0
  271. /package/{lib/util/_.js → cjs/util/_.cjs} +0 -0
  272. /package/test/crypto/{bn.js → bn.cjs} +0 -0
  273. /package/test/crypto/{hash.js → hash.cjs} +0 -0
  274. /package/test/crypto/{point.js → point.cjs} +0 -0
  275. /package/test/crypto/{random.js → random.cjs} +0 -0
  276. /package/test/data/{blk86756-testnet.js → blk86756-testnet.cjs} +0 -0
  277. /package/test/data/{merkleblocks.js → merkleblocks.cjs} +0 -0
  278. /package/test/encoding/{base58.js → base58.cjs} +0 -0
  279. /package/test/encoding/{base58check.js → base58check.cjs} +0 -0
  280. /package/test/encoding/{bufferreader.js → bufferreader.cjs} +0 -0
  281. /package/test/encoding/{bufferwriter.js → bufferwriter.cjs} +0 -0
  282. /package/test/encoding/{varint.js → varint.cjs} +0 -0
  283. /package/test/{index.js → index.cjs} +0 -0
  284. /package/test/message/{message.js → message.cjs} +0 -0
  285. /package/test/mnemonic/{mnemonic.js → mnemonic.cjs} +0 -0
  286. /package/test/{opcode.js → opcode.cjs} +0 -0
  287. /package/test/{privatekey.js → privatekey.cjs} +0 -0
  288. /package/test/transaction/input/{publickey.js → publickey.cjs} +0 -0
  289. /package/test/transaction/{output.js → output.cjs} +0 -0
  290. /package/test/transaction/{signature.js → signature.cjs} +0 -0
  291. /package/test/transaction/{unspentoutput.js → unspentoutput.cjs} +0 -0
  292. /package/test/util/{js.js → js.cjs} +0 -0
  293. /package/test/util/{preconditions.js → preconditions.cjs} +0 -0
@@ -1,11 +1,16 @@
1
1
  'use strict';
2
2
 
3
- var Stack = function Stack(rawstack, varStack) {
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 sha256sha256 = require('../crypto/hash').sha256sha256;
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
- * constructs a new message to sign and verify.
16
- *
17
- * @param {String} message
18
- * @returns {Message}
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
- var Message = function Message(message) {
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
- * @returns {Object} A plain object with the message information
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
- * @returns {String} A JSON representation of the message information
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
- * Will return a the string representation of the message
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
- * Will return a string formatted for the console
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() + '>';
@@ -0,0 +1,3 @@
1
+ var Mnemonic = require('./mnemonic.cjs');
2
+
3
+ module.exports = Mnemonic
@@ -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 {*=} data - a seed, phrase, or entropy to initialize (can be skipped)
31
- * @param {Array=} wordlist - the wordlist to generate mnemonics from
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
- var Mnemonic = function (data, wordlist) {
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
- * Copyright (c) 2014, JP Richardson Copyright (c) 2010-2011 Intalio Pte, All Rights Reserved
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;
@@ -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