xpi-ts 0.2.13 → 0.2.15

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 (277) hide show
  1. package/dist/cjs/lib/bitcore/address.js +75 -74
  2. package/dist/cjs/lib/bitcore/block/block.js +124 -126
  3. package/dist/cjs/lib/bitcore/block/blockheader.js +142 -208
  4. package/dist/cjs/lib/bitcore/block/index.js +3 -1
  5. package/dist/cjs/lib/bitcore/block/merkleblock.js +301 -0
  6. package/dist/cjs/lib/bitcore/crypto/bn.js +18 -22
  7. package/dist/cjs/lib/bitcore/crypto/ecdsa.js +50 -49
  8. package/dist/cjs/lib/bitcore/crypto/hash.js +25 -22
  9. package/dist/cjs/lib/bitcore/crypto/musig2.js +86 -92
  10. package/dist/cjs/lib/bitcore/crypto/point.js +42 -35
  11. package/dist/cjs/lib/bitcore/crypto/random.js +3 -2
  12. package/dist/cjs/lib/bitcore/crypto/schnorr.js +46 -55
  13. package/dist/cjs/lib/bitcore/crypto/signature.js +67 -55
  14. package/dist/cjs/lib/bitcore/crypto/sigtype.js +1 -1
  15. package/dist/cjs/lib/bitcore/encoding/base58.js +5 -4
  16. package/dist/cjs/lib/bitcore/encoding/base58check.js +14 -57
  17. package/dist/cjs/lib/bitcore/encoding/bufferreader.js +17 -17
  18. package/dist/cjs/lib/bitcore/encoding/bufferwriter.js +22 -26
  19. package/dist/cjs/lib/bitcore/encoding/varint.js +12 -11
  20. package/dist/cjs/lib/bitcore/errors.js +1 -0
  21. package/dist/cjs/lib/bitcore/hdprivatekey.js +74 -66
  22. package/dist/cjs/lib/bitcore/hdpublickey.js +96 -116
  23. package/dist/cjs/lib/bitcore/index.js +165 -172
  24. package/dist/cjs/lib/bitcore/message.js +36 -35
  25. package/dist/cjs/lib/bitcore/mnemonic/mnemonic.js +4 -3
  26. package/dist/cjs/lib/bitcore/mnemonic/pbkdf2.js +6 -5
  27. package/dist/cjs/lib/bitcore/mnemonic/words/french.js +2053 -0
  28. package/dist/cjs/lib/bitcore/mnemonic/words/index.js +2 -0
  29. package/dist/cjs/lib/bitcore/musig2/session.js +26 -25
  30. package/dist/cjs/lib/bitcore/musig2/signer.js +17 -16
  31. package/dist/cjs/lib/bitcore/networks.js +4 -3
  32. package/dist/cjs/lib/bitcore/opcode.js +11 -7
  33. package/dist/cjs/lib/bitcore/privatekey.js +42 -42
  34. package/dist/cjs/lib/bitcore/publickey.js +61 -57
  35. package/dist/cjs/lib/bitcore/script/interpreter/condition-stack.js +41 -0
  36. package/dist/cjs/lib/bitcore/script/interpreter/index.js +25 -0
  37. package/dist/cjs/lib/bitcore/script/interpreter/interpreter.js +1362 -0
  38. package/dist/cjs/lib/bitcore/script/interpreter/script-num.js +200 -0
  39. package/dist/cjs/lib/bitcore/script/interpreter/types.js +96 -0
  40. package/dist/cjs/lib/bitcore/{taproot.js → script/taproot.js} +107 -95
  41. package/dist/cjs/lib/bitcore/script.js +163 -104
  42. package/dist/cjs/lib/bitcore/taproot/musig2.js +51 -42
  43. package/dist/cjs/lib/bitcore/transaction/index.js +21 -21
  44. package/dist/cjs/lib/bitcore/transaction/input/multisig.js +10 -0
  45. package/dist/cjs/lib/bitcore/transaction/input/multisigscripthash.js +10 -0
  46. package/dist/cjs/lib/bitcore/transaction/input/publickey.js +10 -0
  47. package/dist/cjs/lib/bitcore/transaction/input/publickeyhash.js +10 -0
  48. package/dist/cjs/lib/bitcore/transaction/input/taproot.js +20 -0
  49. package/dist/cjs/lib/bitcore/transaction/input.js +145 -166
  50. package/dist/cjs/lib/bitcore/transaction/outpoint.js +89 -0
  51. package/dist/cjs/lib/bitcore/transaction/output.js +13 -8
  52. package/dist/cjs/lib/bitcore/transaction/sighash.js +96 -96
  53. package/dist/cjs/lib/bitcore/transaction/signature.js +39 -40
  54. package/dist/cjs/lib/bitcore/transaction/transaction.js +130 -118
  55. package/dist/cjs/lib/bitcore/transaction/unspentoutput.js +27 -23
  56. package/dist/cjs/lib/bitcore/util/bits.js +33 -0
  57. package/dist/cjs/lib/bitcore/util/buffer.js +29 -18
  58. package/dist/cjs/lib/bitcore/util/js.js +0 -3
  59. package/dist/cjs/lib/bitcore/util/merkle.js +53 -0
  60. package/dist/cjs/lib/bitcore/util/preconditions.js +8 -7
  61. package/dist/cjs/lib/bitcore/xaddress.js +27 -23
  62. package/dist/cjs/lib/{bitcore/taproot/nft.js → nft.js} +98 -29
  63. package/dist/cjs/lib/rank/index.js +28 -27
  64. package/dist/cjs/lib/rank/script.js +2 -1
  65. package/dist/cjs/lib/rank/transaction.js +2 -1
  66. package/dist/cjs/utils/string.js +6 -5
  67. package/dist/esm/lib/bitcore/address.js +42 -41
  68. package/dist/esm/lib/bitcore/block/block.js +126 -128
  69. package/dist/esm/lib/bitcore/block/blockheader.js +141 -207
  70. package/dist/esm/lib/bitcore/block/index.js +1 -0
  71. package/dist/esm/lib/bitcore/block/merkleblock.js +295 -0
  72. package/dist/esm/lib/bitcore/crypto/bn.js +18 -22
  73. package/dist/esm/lib/bitcore/crypto/ecdsa.js +25 -24
  74. package/dist/esm/lib/bitcore/crypto/hash.js +25 -22
  75. package/dist/esm/lib/bitcore/crypto/musig2.js +60 -66
  76. package/dist/esm/lib/bitcore/crypto/point.js +22 -15
  77. package/dist/esm/lib/bitcore/crypto/random.js +3 -2
  78. package/dist/esm/lib/bitcore/crypto/schnorr.js +35 -44
  79. package/dist/esm/lib/bitcore/crypto/signature.js +61 -49
  80. package/dist/esm/lib/bitcore/crypto/sigtype.js +1 -1
  81. package/dist/esm/lib/bitcore/encoding/base58.js +5 -4
  82. package/dist/esm/lib/bitcore/encoding/base58check.js +11 -57
  83. package/dist/esm/lib/bitcore/encoding/bufferreader.js +7 -7
  84. package/dist/esm/lib/bitcore/encoding/bufferwriter.js +18 -21
  85. package/dist/esm/lib/bitcore/encoding/varint.js +7 -6
  86. package/dist/esm/lib/bitcore/errors.js +1 -0
  87. package/dist/esm/lib/bitcore/hdprivatekey.js +47 -39
  88. package/dist/esm/lib/bitcore/hdpublickey.js +77 -97
  89. package/dist/esm/lib/bitcore/index.js +42 -45
  90. package/dist/esm/lib/bitcore/message.js +16 -15
  91. package/dist/esm/lib/bitcore/mnemonic/mnemonic.js +4 -3
  92. package/dist/esm/lib/bitcore/mnemonic/pbkdf2.js +5 -4
  93. package/dist/esm/lib/bitcore/mnemonic/words/french.js +2050 -0
  94. package/dist/esm/lib/bitcore/mnemonic/words/index.js +2 -0
  95. package/dist/esm/lib/bitcore/musig2/session.js +17 -16
  96. package/dist/esm/lib/bitcore/musig2/signer.js +19 -18
  97. package/dist/esm/lib/bitcore/networks.js +4 -3
  98. package/dist/esm/lib/bitcore/opcode.js +9 -5
  99. package/dist/esm/lib/bitcore/privatekey.js +25 -25
  100. package/dist/esm/lib/bitcore/publickey.js +46 -42
  101. package/dist/esm/lib/bitcore/script/interpreter/condition-stack.js +37 -0
  102. package/dist/esm/lib/bitcore/script/interpreter/index.js +4 -0
  103. package/dist/esm/lib/bitcore/script/interpreter/interpreter.js +1356 -0
  104. package/dist/esm/lib/bitcore/script/interpreter/script-num.js +195 -0
  105. package/dist/esm/lib/bitcore/script/interpreter/types.js +93 -0
  106. package/dist/esm/lib/bitcore/{taproot.js → script/taproot.js} +92 -81
  107. package/dist/esm/lib/bitcore/script.js +163 -102
  108. package/dist/esm/lib/bitcore/taproot/musig2.js +36 -27
  109. package/dist/esm/lib/bitcore/transaction/index.js +6 -6
  110. package/dist/esm/lib/bitcore/transaction/input/multisig.js +6 -0
  111. package/dist/esm/lib/bitcore/transaction/input/multisigscripthash.js +6 -0
  112. package/dist/esm/lib/bitcore/transaction/input/publickey.js +6 -0
  113. package/dist/esm/lib/bitcore/transaction/input/publickeyhash.js +6 -0
  114. package/dist/esm/lib/bitcore/transaction/input/taproot.js +16 -0
  115. package/dist/esm/lib/bitcore/transaction/input.js +55 -76
  116. package/dist/esm/lib/bitcore/transaction/outpoint.js +85 -0
  117. package/dist/esm/lib/bitcore/transaction/output.js +13 -8
  118. package/dist/esm/lib/bitcore/transaction/sighash.js +22 -22
  119. package/dist/esm/lib/bitcore/transaction/signature.js +16 -17
  120. package/dist/esm/lib/bitcore/transaction/transaction.js +58 -46
  121. package/dist/esm/lib/bitcore/transaction/unspentoutput.js +15 -11
  122. package/dist/esm/lib/bitcore/util/bits.js +27 -0
  123. package/dist/esm/lib/bitcore/util/buffer.js +20 -9
  124. package/dist/esm/lib/bitcore/util/js.js +0 -3
  125. package/dist/esm/lib/bitcore/util/merkle.js +47 -0
  126. package/dist/esm/lib/bitcore/util/preconditions.js +3 -2
  127. package/dist/esm/lib/bitcore/xaddress.js +16 -12
  128. package/dist/esm/lib/{bitcore/taproot/nft.js → nft.js} +97 -28
  129. package/dist/esm/lib/rank/index.js +15 -14
  130. package/dist/esm/lib/rank/script.js +1 -0
  131. package/dist/esm/lib/rank/transaction.js +1 -0
  132. package/dist/esm/utils/string.js +1 -0
  133. package/dist/types/lib/bitcore/address.d.ts +4 -3
  134. package/dist/types/lib/bitcore/address.d.ts.map +1 -1
  135. package/dist/types/lib/bitcore/block/block.d.ts +11 -19
  136. package/dist/types/lib/bitcore/block/block.d.ts.map +1 -1
  137. package/dist/types/lib/bitcore/block/blockheader.d.ts +30 -32
  138. package/dist/types/lib/bitcore/block/blockheader.d.ts.map +1 -1
  139. package/dist/types/lib/bitcore/block/index.d.ts +2 -0
  140. package/dist/types/lib/bitcore/block/index.d.ts.map +1 -1
  141. package/dist/types/lib/bitcore/block/merkleblock.d.ts +53 -0
  142. package/dist/types/lib/bitcore/block/merkleblock.d.ts.map +1 -0
  143. package/dist/types/lib/bitcore/crypto/bn.d.ts +2 -2
  144. package/dist/types/lib/bitcore/crypto/bn.d.ts.map +1 -1
  145. package/dist/types/lib/bitcore/crypto/ecdsa.d.ts +5 -4
  146. package/dist/types/lib/bitcore/crypto/ecdsa.d.ts.map +1 -1
  147. package/dist/types/lib/bitcore/crypto/hash.d.ts +3 -1
  148. package/dist/types/lib/bitcore/crypto/hash.d.ts.map +1 -1
  149. package/dist/types/lib/bitcore/crypto/musig2.d.ts +22 -30
  150. package/dist/types/lib/bitcore/crypto/musig2.d.ts.map +1 -1
  151. package/dist/types/lib/bitcore/crypto/point.d.ts +8 -3
  152. package/dist/types/lib/bitcore/crypto/point.d.ts.map +1 -1
  153. package/dist/types/lib/bitcore/crypto/random.d.ts +1 -0
  154. package/dist/types/lib/bitcore/crypto/random.d.ts.map +1 -1
  155. package/dist/types/lib/bitcore/crypto/schnorr.d.ts +5 -4
  156. package/dist/types/lib/bitcore/crypto/schnorr.d.ts.map +1 -1
  157. package/dist/types/lib/bitcore/crypto/signature.d.ts +4 -1
  158. package/dist/types/lib/bitcore/crypto/signature.d.ts.map +1 -1
  159. package/dist/types/lib/bitcore/crypto/sigtype.d.ts +1 -0
  160. package/dist/types/lib/bitcore/crypto/sigtype.d.ts.map +1 -1
  161. package/dist/types/lib/bitcore/encoding/base58.d.ts +1 -0
  162. package/dist/types/lib/bitcore/encoding/base58.d.ts.map +1 -1
  163. package/dist/types/lib/bitcore/encoding/base58check.d.ts +1 -2
  164. package/dist/types/lib/bitcore/encoding/base58check.d.ts.map +1 -1
  165. package/dist/types/lib/bitcore/encoding/bufferreader.d.ts +2 -1
  166. package/dist/types/lib/bitcore/encoding/bufferreader.d.ts.map +1 -1
  167. package/dist/types/lib/bitcore/encoding/bufferwriter.d.ts +2 -2
  168. package/dist/types/lib/bitcore/encoding/bufferwriter.d.ts.map +1 -1
  169. package/dist/types/lib/bitcore/encoding/varint.d.ts +3 -2
  170. package/dist/types/lib/bitcore/encoding/varint.d.ts.map +1 -1
  171. package/dist/types/lib/bitcore/errors.d.ts +3 -0
  172. package/dist/types/lib/bitcore/errors.d.ts.map +1 -1
  173. package/dist/types/lib/bitcore/hdprivatekey.d.ts +5 -4
  174. package/dist/types/lib/bitcore/hdprivatekey.d.ts.map +1 -1
  175. package/dist/types/lib/bitcore/hdpublickey.d.ts +4 -3
  176. package/dist/types/lib/bitcore/hdpublickey.d.ts.map +1 -1
  177. package/dist/types/lib/bitcore/index.d.ts +55 -60
  178. package/dist/types/lib/bitcore/index.d.ts.map +1 -1
  179. package/dist/types/lib/bitcore/message.d.ts +7 -4
  180. package/dist/types/lib/bitcore/message.d.ts.map +1 -1
  181. package/dist/types/lib/bitcore/mnemonic/mnemonic.d.ts +2 -0
  182. package/dist/types/lib/bitcore/mnemonic/mnemonic.d.ts.map +1 -1
  183. package/dist/types/lib/bitcore/mnemonic/pbkdf2.d.ts +1 -0
  184. package/dist/types/lib/bitcore/mnemonic/pbkdf2.d.ts.map +1 -1
  185. package/dist/types/lib/bitcore/mnemonic/words/french.d.ts +2 -0
  186. package/dist/types/lib/bitcore/mnemonic/words/french.d.ts.map +1 -0
  187. package/dist/types/lib/bitcore/mnemonic/words/index.d.ts +1 -0
  188. package/dist/types/lib/bitcore/mnemonic/words/index.d.ts.map +1 -1
  189. package/dist/types/lib/bitcore/musig2/session.d.ts +8 -7
  190. package/dist/types/lib/bitcore/musig2/session.d.ts.map +1 -1
  191. package/dist/types/lib/bitcore/musig2/signer.d.ts +10 -9
  192. package/dist/types/lib/bitcore/musig2/signer.d.ts.map +1 -1
  193. package/dist/types/lib/bitcore/networks.d.ts +1 -0
  194. package/dist/types/lib/bitcore/networks.d.ts.map +1 -1
  195. package/dist/types/lib/bitcore/opcode.d.ts +5 -0
  196. package/dist/types/lib/bitcore/opcode.d.ts.map +1 -1
  197. package/dist/types/lib/bitcore/privatekey.d.ts +5 -4
  198. package/dist/types/lib/bitcore/privatekey.d.ts.map +1 -1
  199. package/dist/types/lib/bitcore/publickey.d.ts +13 -6
  200. package/dist/types/lib/bitcore/publickey.d.ts.map +1 -1
  201. package/dist/types/lib/bitcore/{chunk.d.ts → script/chunk.d.ts} +1 -0
  202. package/dist/types/lib/bitcore/script/chunk.d.ts.map +1 -0
  203. package/dist/types/lib/bitcore/script/interpreter/condition-stack.d.ts +11 -0
  204. package/dist/types/lib/bitcore/script/interpreter/condition-stack.d.ts.map +1 -0
  205. package/dist/types/lib/bitcore/script/interpreter/index.d.ts +5 -0
  206. package/dist/types/lib/bitcore/script/interpreter/index.d.ts.map +1 -0
  207. package/dist/types/lib/bitcore/script/interpreter/interpreter.d.ts +21 -0
  208. package/dist/types/lib/bitcore/script/interpreter/interpreter.d.ts.map +1 -0
  209. package/dist/types/lib/bitcore/script/interpreter/script-num.d.ts +35 -0
  210. package/dist/types/lib/bitcore/script/interpreter/script-num.d.ts.map +1 -0
  211. package/dist/types/lib/bitcore/script/interpreter/types.d.ts +101 -0
  212. package/dist/types/lib/bitcore/script/interpreter/types.d.ts.map +1 -0
  213. package/dist/types/lib/bitcore/{taproot.d.ts → script/taproot.d.ts} +20 -7
  214. package/dist/types/lib/bitcore/script/taproot.d.ts.map +1 -0
  215. package/dist/types/lib/bitcore/script.d.ts +12 -11
  216. package/dist/types/lib/bitcore/script.d.ts.map +1 -1
  217. package/dist/types/lib/bitcore/taproot/musig2.d.ts +17 -16
  218. package/dist/types/lib/bitcore/taproot/musig2.d.ts.map +1 -1
  219. package/dist/types/lib/bitcore/transaction/index.d.ts +11 -11
  220. package/dist/types/lib/bitcore/transaction/index.d.ts.map +1 -1
  221. package/dist/types/lib/bitcore/transaction/input/multisig.d.ts +5 -0
  222. package/dist/types/lib/bitcore/transaction/input/multisig.d.ts.map +1 -0
  223. package/dist/types/lib/bitcore/transaction/input/multisigscripthash.d.ts +5 -0
  224. package/dist/types/lib/bitcore/transaction/input/multisigscripthash.d.ts.map +1 -0
  225. package/dist/types/lib/bitcore/transaction/input/publickey.d.ts +5 -0
  226. package/dist/types/lib/bitcore/transaction/input/publickey.d.ts.map +1 -0
  227. package/dist/types/lib/bitcore/transaction/input/publickeyhash.d.ts +6 -0
  228. package/dist/types/lib/bitcore/transaction/input/publickeyhash.d.ts.map +1 -0
  229. package/dist/types/lib/bitcore/transaction/input/taproot.d.ts +18 -0
  230. package/dist/types/lib/bitcore/transaction/input/taproot.d.ts.map +1 -0
  231. package/dist/types/lib/bitcore/transaction/input.d.ts +27 -35
  232. package/dist/types/lib/bitcore/transaction/input.d.ts.map +1 -1
  233. package/dist/types/lib/bitcore/transaction/outpoint.d.ts +32 -0
  234. package/dist/types/lib/bitcore/transaction/outpoint.d.ts.map +1 -0
  235. package/dist/types/lib/bitcore/transaction/output.d.ts +3 -1
  236. package/dist/types/lib/bitcore/transaction/output.d.ts.map +1 -1
  237. package/dist/types/lib/bitcore/transaction/sighash.d.ts +8 -7
  238. package/dist/types/lib/bitcore/transaction/sighash.d.ts.map +1 -1
  239. package/dist/types/lib/bitcore/transaction/signature.d.ts +3 -2
  240. package/dist/types/lib/bitcore/transaction/signature.d.ts.map +1 -1
  241. package/dist/types/lib/bitcore/transaction/transaction.d.ts +18 -15
  242. package/dist/types/lib/bitcore/transaction/transaction.d.ts.map +1 -1
  243. package/dist/types/lib/bitcore/transaction/unspentoutput.d.ts +9 -7
  244. package/dist/types/lib/bitcore/transaction/unspentoutput.d.ts.map +1 -1
  245. package/dist/types/lib/bitcore/unit.d.ts.map +1 -1
  246. package/dist/types/lib/bitcore/util/base32.d.ts.map +1 -1
  247. package/dist/types/lib/bitcore/util/bits.d.ts +5 -0
  248. package/dist/types/lib/bitcore/util/bits.d.ts.map +1 -0
  249. package/dist/types/lib/bitcore/util/buffer.d.ts +10 -2
  250. package/dist/types/lib/bitcore/util/buffer.d.ts.map +1 -1
  251. package/dist/types/lib/bitcore/util/js.d.ts +0 -1
  252. package/dist/types/lib/bitcore/util/js.d.ts.map +1 -1
  253. package/dist/types/lib/bitcore/util/merkle.d.ts +6 -0
  254. package/dist/types/lib/bitcore/util/merkle.d.ts.map +1 -0
  255. package/dist/types/lib/bitcore/util/preconditions.d.ts.map +1 -1
  256. package/dist/types/lib/bitcore/xaddress.d.ts +1 -0
  257. package/dist/types/lib/bitcore/xaddress.d.ts.map +1 -1
  258. package/dist/types/lib/{bitcore/taproot/nft.d.ts → nft.d.ts} +26 -12
  259. package/dist/types/lib/nft.d.ts.map +1 -0
  260. package/dist/types/lib/rank/index.d.ts +1 -0
  261. package/dist/types/lib/rank/index.d.ts.map +1 -1
  262. package/dist/types/lib/rank/script.d.ts +1 -0
  263. package/dist/types/lib/rank/script.d.ts.map +1 -1
  264. package/dist/types/lib/rank/transaction.d.ts +1 -0
  265. package/dist/types/lib/rank/transaction.d.ts.map +1 -1
  266. package/dist/types/utils/string.d.ts +1 -0
  267. package/dist/types/utils/string.d.ts.map +1 -1
  268. package/package.json +3 -2
  269. package/dist/cjs/lib/bitcore/script/interpreter.js +0 -1757
  270. package/dist/esm/lib/bitcore/script/interpreter.js +0 -1753
  271. package/dist/types/lib/bitcore/chunk.d.ts.map +0 -1
  272. package/dist/types/lib/bitcore/script/interpreter.d.ts +0 -101
  273. package/dist/types/lib/bitcore/script/interpreter.d.ts.map +0 -1
  274. package/dist/types/lib/bitcore/taproot/nft.d.ts.map +0 -1
  275. package/dist/types/lib/bitcore/taproot.d.ts.map +0 -1
  276. /package/dist/cjs/lib/bitcore/{chunk.js → script/chunk.js} +0 -0
  277. /package/dist/esm/lib/bitcore/{chunk.js → script/chunk.js} +0 -0
@@ -1,4 +1,6 @@
1
1
  import { english } from './english.js';
2
+ import { french } from './french.js';
2
3
  export const Words = {
3
4
  ENGLISH: english,
5
+ FRENCH: french,
4
6
  };
@@ -1,7 +1,8 @@
1
- import { Signature, Random, Hash } from '../crypto/index.js';
2
- import { musigKeyAgg, musigNonceGen, musigNonceAgg, musigPartialSign, musigPartialSigVerify, musigSigAgg, } from '../crypto/musig2.js';
3
- import { verifyTaprootKeyPathMuSigPartial } from '../taproot/musig2.js';
4
- import { calculateTapTweak, tweakPublicKey } from '../taproot.js';
1
+ import { Signature, Random, Hash } from '../crypto/index';
2
+ import { muSig2KeyAgg, muSig2NonceGen, muSig2NonceAgg, muSig2PartialSign, muSig2PartialSigVerify, muSig2SigAgg, } from '../crypto/musig2';
3
+ import { verifyTaprootKeyPathMuSigPartial } from '../taproot/musig2';
4
+ import { calculateTapTweak, tweakPublicKey } from '../script/taproot';
5
+ import { BufferUtil } from '../util/buffer';
5
6
  export var MuSigSessionPhase;
6
7
  (function (MuSigSessionPhase) {
7
8
  MuSigSessionPhase["INIT"] = "init";
@@ -18,7 +19,7 @@ export class MuSigSessionManager {
18
19
  if (!message || message.length === 0) {
19
20
  throw new Error('Cannot create MuSig2 session with empty message');
20
21
  }
21
- const keyAggContext = musigKeyAgg(signers);
22
+ const keyAggContext = muSig2KeyAgg(signers);
22
23
  const myPubKey = myPrivateKey.publicKey;
23
24
  const myIndex = keyAggContext.pubkeys.findIndex(signer => signer.toString() === myPubKey.toString());
24
25
  if (myIndex === -1) {
@@ -49,7 +50,7 @@ export class MuSigSessionManager {
49
50
  throw new Error('Nonces already generated for this session. NEVER reuse nonces!');
50
51
  }
51
52
  const entropy = extraInput !== undefined ? extraInput : Random.getRandomBuffer(32);
52
- const nonce = musigNonceGen(privateKey, session.keyAggContext.aggregatedPubKey, session.message, entropy);
53
+ const nonce = muSig2NonceGen(privateKey, session.keyAggContext.aggregatedPubKey, session.message, entropy);
53
54
  session.mySecretNonce = nonce;
54
55
  session.myPublicNonce = nonce.publicNonces;
55
56
  session.phase = MuSigSessionPhase.NONCE_EXCHANGE;
@@ -97,7 +98,7 @@ export class MuSigSessionManager {
97
98
  session.phase !== MuSigSessionPhase.PARTIAL_SIG_EXCHANGE) {
98
99
  throw new Error(`Cannot create partial signature in phase ${session.phase}. Must be in NONCE_EXCHANGE or PARTIAL_SIG_EXCHANGE.`);
99
100
  }
100
- const partialSig = musigPartialSign(session.mySecretNonce, privateKey, session.keyAggContext, session.myIndex, session.aggregatedNonce, session.message);
101
+ const partialSig = muSig2PartialSign(session.mySecretNonce, privateKey, session.keyAggContext, session.myIndex, session.aggregatedNonce, session.message);
101
102
  session.myPartialSig = partialSig;
102
103
  session.phase = MuSigSessionPhase.PARTIAL_SIG_EXCHANGE;
103
104
  session.updatedAt = Date.now();
@@ -123,12 +124,12 @@ export class MuSigSessionManager {
123
124
  }
124
125
  let isValid;
125
126
  if (session.metadata?.inputScriptType === 'taproot') {
126
- const merkleRoot = Buffer.alloc(32);
127
+ const merkleRoot = BufferUtil.alloc(32);
127
128
  const tweak = calculateTapTweak(session.keyAggContext.aggregatedPubKey, merkleRoot);
128
129
  isValid = verifyTaprootKeyPathMuSigPartial(partialSig, publicNonce, session.signers[signerIndex], session.keyAggContext, signerIndex, session.aggregatedNonce, session.message, tweak);
129
130
  }
130
131
  else {
131
- isValid = musigPartialSigVerify(partialSig, publicNonce, session.signers[signerIndex], session.keyAggContext, signerIndex, session.aggregatedNonce, session.message);
132
+ isValid = muSig2PartialSigVerify(partialSig, publicNonce, session.signers[signerIndex], session.keyAggContext, signerIndex, session.aggregatedNonce, session.message);
132
133
  }
133
134
  if (!isValid) {
134
135
  this._abortSession(session, `Invalid partial signature from signer ${signerIndex}`);
@@ -169,11 +170,11 @@ export class MuSigSessionManager {
169
170
  };
170
171
  }
171
172
  _generateSessionId(signers, message, createdAt = Date.now(), entropy = Random.getRandomBuffer(16)) {
172
- const signersHash = Hash.sha256(Buffer.concat(signers.map(s => s.toBuffer())));
173
+ const signersHash = Hash.sha256(BufferUtil.concat(signers.map(s => s.toBuffer())));
173
174
  const messageHash = Hash.sha256(message);
174
- const timestampBuffer = Buffer.alloc(8);
175
- timestampBuffer.writeBigInt64BE(BigInt(createdAt));
176
- const combined = Buffer.concat([
175
+ const timestampBuffer = BufferUtil.alloc(8);
176
+ timestampBuffer.writeBigInt64BE(createdAt, 0);
177
+ const combined = BufferUtil.concat([
177
178
  signersHash,
178
179
  messageHash,
179
180
  timestampBuffer,
@@ -205,7 +206,7 @@ export class MuSigSessionManager {
205
206
  allNonces.push(nonce);
206
207
  }
207
208
  }
208
- session.aggregatedNonce = musigNonceAgg(allNonces);
209
+ session.aggregatedNonce = muSig2NonceAgg(allNonces);
209
210
  session.updatedAt = Date.now();
210
211
  }
211
212
  _finalizeSignature(session) {
@@ -231,7 +232,7 @@ export class MuSigSessionManager {
231
232
  let pubKeyForAggregation = session.keyAggContext.aggregatedPubKey;
232
233
  let pubKeyForNonceCoef = session.keyAggContext.aggregatedPubKey;
233
234
  if (session.metadata?.inputScriptType === 'taproot') {
234
- const merkleRoot = Buffer.alloc(32);
235
+ const merkleRoot = BufferUtil.alloc(32);
235
236
  const commitment = tweakPublicKey(session.keyAggContext.aggregatedPubKey, merkleRoot);
236
237
  pubKeyForAggregation = commitment;
237
238
  pubKeyForNonceCoef = commitment;
@@ -241,7 +242,7 @@ export class MuSigSessionManager {
241
242
  : session.metadata?.inputScriptType === 'taproot'
242
243
  ? Signature.SIGHASH_ALL | Signature.SIGHASH_LOTUS
243
244
  : undefined;
244
- session.finalSignature = musigSigAgg(allPartialSigs, session.aggregatedNonce, session.message, pubKeyForAggregation, sighashType, pubKeyForNonceCoef);
245
+ session.finalSignature = muSig2SigAgg(allPartialSigs, session.aggregatedNonce, session.message, pubKeyForAggregation, sighashType, pubKeyForNonceCoef);
245
246
  session.phase = MuSigSessionPhase.COMPLETE;
246
247
  session.updatedAt = Date.now();
247
248
  }
@@ -1,11 +1,12 @@
1
1
  import { Signature } from '../crypto/signature.js';
2
2
  import { Hash } from '../crypto/hash.js';
3
3
  import { Random } from '../crypto/random.js';
4
- import { musigKeyAgg, musigNonceGen, musigNonceAgg, musigPartialSign, musigPartialSigVerify, musigSigAgg, } from '../crypto/musig2.js';
4
+ import { muSig2KeyAgg, muSig2NonceGen, muSig2NonceAgg, muSig2PartialSign, muSig2PartialSigVerify, muSig2SigAgg, } from '../crypto/musig2.js';
5
5
  import { MuSigSessionManager, } from './session.js';
6
- import { buildMuSigTaprootKey, signTaprootKeyPathWithMuSig2, } from '../taproot/musig2.js';
6
+ import { buildMuSig2TaprootKey, signTaprootKeyPathWithMuSig2, } from '../taproot/musig2.js';
7
7
  import { sighash } from '../transaction/sighash.js';
8
8
  import { BN } from '../crypto/bn.js';
9
+ import { BufferUtil } from '../util';
9
10
  export class MuSig2Signer {
10
11
  config;
11
12
  sessionManager;
@@ -25,11 +26,11 @@ export class MuSig2Signer {
25
26
  }
26
27
  prepare(message, useSession = false) {
27
28
  const normalizedMessage = this._normalizeMessage(message);
28
- const keyAggContext = musigKeyAgg(this.config.signers);
29
+ const keyAggContext = muSig2KeyAgg(this.config.signers);
29
30
  const entropy = this.config.extraInput !== undefined
30
31
  ? this.config.extraInput
31
32
  : Random.getRandomBuffer(32);
32
- const nonce = musigNonceGen(this.config.myPrivateKey, keyAggContext.aggregatedPubKey, normalizedMessage, entropy);
33
+ const nonce = muSig2NonceGen(this.config.myPrivateKey, keyAggContext.aggregatedPubKey, normalizedMessage, entropy);
33
34
  const myIndex = keyAggContext.pubkeys.findIndex(s => s.toString() === this.config.myPrivateKey.publicKey.toString());
34
35
  const result = {
35
36
  keyAggContext,
@@ -49,17 +50,17 @@ export class MuSig2Signer {
49
50
  }
50
51
  createPartialSignature(prepare, allPublicNonces, message) {
51
52
  const normalizedMessage = this._normalizeMessage(message);
52
- const aggregatedNonce = musigNonceAgg(allPublicNonces);
53
+ const aggregatedNonce = muSig2NonceAgg(allPublicNonces);
53
54
  const secretNonce = {
54
55
  secretNonces: prepare.mySecretNonces,
55
56
  publicNonces: prepare.myPublicNonces,
56
57
  };
57
- return musigPartialSign(secretNonce, this.config.myPrivateKey, prepare.keyAggContext, prepare.myIndex, aggregatedNonce, normalizedMessage);
58
+ return muSig2PartialSign(secretNonce, this.config.myPrivateKey, prepare.keyAggContext, prepare.myIndex, aggregatedNonce, normalizedMessage);
58
59
  }
59
60
  verifyPartialSignature(partialSig, publicNonce, publicKey, signerIndex, prepare, allPublicNonces, message) {
60
61
  const normalizedMessage = this._normalizeMessage(message);
61
- const aggregatedNonce = musigNonceAgg(allPublicNonces);
62
- return musigPartialSigVerify(partialSig, publicNonce, publicKey, prepare.keyAggContext, signerIndex, aggregatedNonce, normalizedMessage);
62
+ const aggregatedNonce = muSig2NonceAgg(allPublicNonces);
63
+ return muSig2PartialSigVerify(partialSig, publicNonce, publicKey, prepare.keyAggContext, signerIndex, aggregatedNonce, normalizedMessage);
63
64
  }
64
65
  sign(prepare, allPublicNonces, message, allPartialSigs) {
65
66
  if (allPublicNonces.length !== this.config.signers.length) {
@@ -69,17 +70,17 @@ export class MuSig2Signer {
69
70
  throw new Error(`Invalid number of partial signatures: expected ${this.config.signers.length}, got ${allPartialSigs.length}`);
70
71
  }
71
72
  const normalizedMessage = this._normalizeMessage(message);
72
- const aggregatedNonce = musigNonceAgg(allPublicNonces);
73
- const signature = musigSigAgg(allPartialSigs, aggregatedNonce, normalizedMessage, prepare.keyAggContext.aggregatedPubKey);
73
+ const aggregatedNonce = muSig2NonceAgg(allPublicNonces);
74
+ const signature = muSig2SigAgg(allPartialSigs, aggregatedNonce, normalizedMessage, prepare.keyAggContext.aggregatedPubKey);
74
75
  return {
75
76
  signature,
76
77
  aggregatedPubKey: prepare.keyAggContext.aggregatedPubKey,
77
78
  isAggregator: true,
78
79
  };
79
80
  }
80
- prepareTaproot(state) {
81
- const result = buildMuSigTaprootKey(this.config.signers, state);
82
- const keyAggContext = musigKeyAgg(this.config.signers);
81
+ prepareTaproot() {
82
+ const result = buildMuSig2TaprootKey(this.config.signers);
83
+ const keyAggContext = muSig2KeyAgg(this.config.signers);
83
84
  return {
84
85
  ...result,
85
86
  keyAggContext,
@@ -90,11 +91,11 @@ export class MuSig2Signer {
90
91
  const satoshisBN = new BN(amount);
91
92
  const sighashBuffer = sighash(transaction, sigType, inputIndex, prepare.script, satoshisBN);
92
93
  const normalizedSighash = this._normalizeMessage(sighashBuffer);
93
- const aggregatedNonce = musigNonceAgg(allPublicNonces);
94
+ const aggregatedNonce = muSig2NonceAgg(allPublicNonces);
94
95
  const entropy = this.config.extraInput !== undefined
95
96
  ? this.config.extraInput
96
97
  : Random.getRandomBuffer(32);
97
- const nonce = musigNonceGen(this.config.myPrivateKey, prepare.keyAggContext.aggregatedPubKey, normalizedSighash, entropy);
98
+ const nonce = muSig2NonceGen(this.config.myPrivateKey, prepare.keyAggContext.aggregatedPubKey, normalizedSighash, entropy);
98
99
  const myIndex = prepare.keyAggContext.pubkeys.findIndex(s => s.toString() === this.config.myPrivateKey.publicKey.toString());
99
100
  return signTaprootKeyPathWithMuSig2(nonce, this.config.myPrivateKey, prepare.keyAggContext, myIndex, aggregatedNonce, normalizedSighash, prepare.tweak);
100
101
  }
@@ -103,8 +104,8 @@ export class MuSig2Signer {
103
104
  const satoshisBN = new BN(amount);
104
105
  const sighashBuffer = sighash(transaction, sigType, inputIndex, prepare.script, satoshisBN);
105
106
  const normalizedSighash = this._normalizeMessage(sighashBuffer);
106
- const aggregatedNonce = musigNonceAgg(allPublicNonces);
107
- return musigSigAgg(allPartialSigs, aggregatedNonce, normalizedSighash, prepare.commitment, undefined, prepare.commitment);
107
+ const aggregatedNonce = muSig2NonceAgg(allPublicNonces);
108
+ return muSig2SigAgg(allPartialSigs, aggregatedNonce, normalizedSighash, prepare.commitment, undefined, prepare.commitment);
108
109
  }
109
110
  createSession(message, metadata) {
110
111
  if (!this.sessionManager) {
@@ -133,7 +134,7 @@ export class MuSig2Signer {
133
134
  }
134
135
  _normalizeMessage(message) {
135
136
  if (typeof message === 'string') {
136
- return Hash.sha256(Buffer.from(message, 'utf8'));
137
+ return Hash.sha256(BufferUtil.from(message, 'utf8'));
137
138
  }
138
139
  if (message.length === 32) {
139
140
  return message;
@@ -1,3 +1,4 @@
1
+ import { BufferUtil } from './util/buffer';
1
2
  function prefixToArray(prefix) {
2
3
  const result = [];
3
4
  for (let i = 0; i < prefix.length; i++) {
@@ -48,7 +49,7 @@ export const livenet = new Network({
48
49
  scripthash: 5,
49
50
  xpubkey: 0x0488b21e,
50
51
  xprivkey: 0x0488ade4,
51
- networkMagic: Buffer.from('ece7eff3', 'hex'),
52
+ networkMagic: BufferUtil.from('ece7eff3', 'hex'),
52
53
  port: 10605,
53
54
  dnsSeeds: ['seed.lotusia.org'],
54
55
  prefixArray: prefixToArray('bitcoincash'),
@@ -63,7 +64,7 @@ export const testnet = new Network({
63
64
  scripthash: 0xc4,
64
65
  xpubkey: 0x043587cf,
65
66
  xprivkey: 0x04358394,
66
- networkMagic: Buffer.from('ecf4f3f4', 'hex'),
67
+ networkMagic: BufferUtil.from('ecf4f3f4', 'hex'),
67
68
  port: 11605,
68
69
  dnsSeeds: ['seed.lotusia.org'],
69
70
  prefixArray: prefixToArray('bchtest'),
@@ -78,7 +79,7 @@ export const regtest = new Network({
78
79
  scripthash: 0xc4,
79
80
  xpubkey: 0x043587cf,
80
81
  xprivkey: 0x04358394,
81
- networkMagic: Buffer.from('ecf2e5e7', 'hex'),
82
+ networkMagic: BufferUtil.from('ecf2e5e7', 'hex'),
82
83
  port: 12605,
83
84
  dnsSeeds: [],
84
85
  prefixArray: prefixToArray('bchreg'),
@@ -1,5 +1,5 @@
1
- import { Preconditions } from './util/preconditions.js';
2
- import { JSUtil } from './util/js.js';
1
+ import { Preconditions as $ } from './util/preconditions';
2
+ import { JSUtil, BufferUtil } from './util';
3
3
  export class Opcode {
4
4
  num;
5
5
  constructor(num) {
@@ -18,12 +18,12 @@ export class Opcode {
18
18
  }
19
19
  }
20
20
  static fromBuffer(buf) {
21
- Preconditions.checkArgument(Buffer.isBuffer(buf), 'buf', 'Must be a Buffer');
22
- Preconditions.checkArgument(buf.length > 0, 'buf', 'Buffer cannot be empty');
21
+ $.checkArgument(BufferUtil.isBuffer(buf), 'buf', 'Must be a Buffer');
22
+ $.checkArgument(buf.length > 0, 'buf', 'Buffer cannot be empty');
23
23
  return new Opcode(buf[0]);
24
24
  }
25
25
  toBuffer() {
26
- return Buffer.from([this.num]);
26
+ return BufferUtil.from([this.num]);
27
27
  }
28
28
  toString() {
29
29
  return this.num.toString();
@@ -147,6 +147,8 @@ export class Opcode {
147
147
  static OP_CHECKDATASIG = 186;
148
148
  static OP_CHECKDATASIGVERIFY = 187;
149
149
  static OP_REVERSEBYTES = 188;
150
+ static OP_MULPOW2 = 189;
151
+ static OP_RAWLEFTBITSHIFT = 190;
150
152
  static map = {
151
153
  OP_0: 0,
152
154
  OP_FALSE: 0,
@@ -266,5 +268,7 @@ export class Opcode {
266
268
  OP_CHECKDATASIG: 186,
267
269
  OP_CHECKDATASIGVERIFY: 187,
268
270
  OP_REVERSEBYTES: 188,
271
+ OP_MULPOW2: 189,
272
+ OP_RAWLEFTBITSHIFT: 190,
269
273
  };
270
274
  }
@@ -1,11 +1,12 @@
1
- import { BN } from './crypto/bn.js';
2
- import { Point } from './crypto/point.js';
3
- import { Random } from './crypto/random.js';
4
- import { Base58Check } from './encoding/base58check.js';
5
- import { JSUtil } from './util/js.js';
6
- import { get as getNetwork, defaultNetwork, } from './networks.js';
7
- import { PublicKey } from './publickey.js';
8
- import { Address } from './address.js';
1
+ import { BN } from './crypto/bn';
2
+ import { Point } from './crypto/point';
3
+ import { Random } from './crypto/random';
4
+ import { Base58Check } from './encoding/base58check';
5
+ import { BufferUtil } from './util/buffer';
6
+ import { JSUtil } from './util/js';
7
+ import { get as getNetwork, defaultNetwork, } from './networks';
8
+ import { PublicKey } from './publickey';
9
+ import { Address } from './address';
9
10
  export class PrivateKey {
10
11
  bn;
11
12
  compressed;
@@ -45,7 +46,7 @@ export class PrivateKey {
45
46
  else if (data instanceof BN) {
46
47
  info.bn = data;
47
48
  }
48
- else if (Buffer.isBuffer(data)) {
49
+ else if (BufferUtil.isBuffer(data)) {
49
50
  const bufferInfo = PrivateKey._transformBuffer(data, network);
50
51
  Object.assign(info, bufferInfo);
51
52
  }
@@ -54,7 +55,7 @@ export class PrivateKey {
54
55
  'compressed' in data &&
55
56
  'buf' in data) {
56
57
  info.compressed = data.compressed;
57
- info.bn = new BN(data.buf, 'be');
58
+ info.bn = BN.fromBuffer(data.buf);
58
59
  }
59
60
  else if (typeof data === 'object' &&
60
61
  data !== null &&
@@ -69,7 +70,7 @@ export class PrivateKey {
69
70
  }
70
71
  else if (typeof data === 'string') {
71
72
  if (JSUtil.isHexa(data)) {
72
- info.bn = new BN(data, 16);
73
+ info.bn = BN.fromString(data, 'hex');
73
74
  }
74
75
  else {
75
76
  const wifInfo = PrivateKey._transformWIF(data, network);
@@ -84,8 +85,7 @@ export class PrivateKey {
84
85
  static _getRandomBN() {
85
86
  let bn;
86
87
  do {
87
- const privbuf = Random.getRandomBuffer(32);
88
- bn = new BN(privbuf, 'be');
88
+ bn = BN.fromBuffer(Random.getRandomBuffer(32));
89
89
  } while (!bn.lt(Point.getN()));
90
90
  return bn;
91
91
  }
@@ -121,14 +121,14 @@ export class PrivateKey {
121
121
  else {
122
122
  throw new Error('Length of buffer must be 33 (uncompressed) or 34 (compressed)');
123
123
  }
124
- info.bn = new BN(buf.subarray(1, 32 + 1), 'be');
124
+ info.bn = BN.fromBuffer(buf.slice(1, 32 + 1));
125
125
  return info;
126
126
  }
127
127
  static _transformBNBuffer(buf, network) {
128
128
  network ||= defaultNetwork;
129
129
  return {
130
130
  network: getNetwork(network),
131
- bn: new BN(buf, 'be'),
131
+ bn: BN.fromBuffer(buf),
132
132
  compressed: true,
133
133
  };
134
134
  }
@@ -136,7 +136,7 @@ export class PrivateKey {
136
136
  return PrivateKey._transformBuffer(Base58Check.decode(str), network);
137
137
  }
138
138
  static _transformObject(json) {
139
- const bn = new BN(json.bn, 16);
139
+ const bn = BN.fromString(json.bn, 'hex');
140
140
  const network = getNetwork(json.network);
141
141
  if (!network) {
142
142
  throw new Error(`Invalid network: ${json.network}`);
@@ -190,16 +190,16 @@ export class PrivateKey {
190
190
  toWIF(compressed = true) {
191
191
  let buf;
192
192
  if (compressed) {
193
- buf = Buffer.concat([
194
- Buffer.from([this.network.privatekey]),
195
- this.bn.toArrayLike(Buffer, 'be', 32),
196
- Buffer.from([0x01]),
193
+ buf = BufferUtil.concat([
194
+ BufferUtil.from([this.network.privatekey]),
195
+ this.bn.toBuffer({ size: 32 }),
196
+ BufferUtil.from([0x01]),
197
197
  ]);
198
198
  }
199
199
  else {
200
- buf = Buffer.concat([
201
- Buffer.from([this.network.privatekey]),
202
- this.bn.toArrayLike(Buffer, 'be', 32),
200
+ buf = BufferUtil.concat([
201
+ BufferUtil.from([this.network.privatekey]),
202
+ this.bn.toBuffer({ size: 32 }),
203
203
  ]);
204
204
  }
205
205
  return Base58Check.encode(buf);
@@ -208,10 +208,10 @@ export class PrivateKey {
208
208
  return this.bn;
209
209
  }
210
210
  toBuffer() {
211
- return this.bn.toArrayLike(Buffer, 'be', 32);
211
+ return this.bn.toBuffer({ size: 32 });
212
212
  }
213
213
  toBufferNoPadding() {
214
- return this.bn.toArrayLike(Buffer, 'be');
214
+ return this.bn.toBuffer();
215
215
  }
216
216
  toPublicKey() {
217
217
  if (!this._pubkey) {
@@ -1,14 +1,23 @@
1
- import { BN } from './crypto/bn.js';
2
- import { Point } from './crypto/point.js';
3
- import { Hash } from './crypto/hash.js';
4
- import { JSUtil } from './util/js.js';
5
- import { get as getNetwork, defaultNetwork, } from './networks.js';
6
- import { PrivateKey } from './privatekey.js';
7
- import { Address } from './address.js';
1
+ import { BN } from './crypto/bn';
2
+ import { Point } from './crypto/point';
3
+ import { Hash } from './crypto/hash';
4
+ import { BufferUtil } from './util/buffer';
5
+ import { JSUtil } from './util/js';
6
+ import { get as getNetwork, defaultNetwork, } from './networks';
7
+ import { PrivateKey } from './privatekey';
8
+ import { Address } from './address';
9
+ export const PUBKEY_PREFIX_EVEN = 0x02;
10
+ export const PUBKEY_PREFIX_ODD = 0x03;
11
+ export const PUBKEY_PREFIX_UNCOMPRESSED = 0x04;
8
12
  export class PublicKey {
9
13
  point;
10
14
  compressed;
11
15
  network;
16
+ static PrefixOddY = BufferUtil.from([PUBKEY_PREFIX_ODD]);
17
+ static PrefixEvenY = BufferUtil.from([PUBKEY_PREFIX_EVEN]);
18
+ static PrefixUncompressed = BufferUtil.from([
19
+ PUBKEY_PREFIX_UNCOMPRESSED,
20
+ ]);
12
21
  constructor(data, extra) {
13
22
  if (data instanceof PublicKey) {
14
23
  return data;
@@ -40,7 +49,7 @@ export class PublicKey {
40
49
  Object.assign(info, objectInfo);
41
50
  }
42
51
  else if (typeof data === 'string') {
43
- const derInfo = PublicKey._transformDER(Buffer.from(data, 'hex'));
52
+ const derInfo = PublicKey._transformDER(BufferUtil.from(data, 'hex'));
44
53
  Object.assign(info, derInfo);
45
54
  }
46
55
  else if (PublicKey._isBuffer(data)) {
@@ -66,7 +75,7 @@ export class PublicKey {
66
75
  return param instanceof PrivateKey;
67
76
  }
68
77
  static _isBuffer(param) {
69
- return Buffer.isBuffer(param) || param instanceof Uint8Array;
78
+ return BufferUtil.isBuffer(param) || param instanceof Uint8Array;
70
79
  }
71
80
  static _transformPrivateKey(privkey) {
72
81
  if (!PublicKey._isPrivateKey(privkey)) {
@@ -88,28 +97,23 @@ export class PublicKey {
88
97
  let y;
89
98
  let xbuf;
90
99
  let ybuf;
91
- if (buf[0] === 0x04 || (!strict && (buf[0] === 0x06 || buf[0] === 0x07))) {
92
- xbuf = buf.subarray(1, 33);
93
- ybuf = buf.subarray(33, 65);
100
+ if (buf[0] === PUBKEY_PREFIX_UNCOMPRESSED ||
101
+ (!strict && (buf[0] === 0x06 || buf[0] === 0x07))) {
102
+ xbuf = buf.slice(1, 33);
103
+ ybuf = buf.slice(33, 65);
94
104
  if (xbuf.length !== 32 || ybuf.length !== 32 || buf.length !== 65) {
95
105
  throw new TypeError('Length of x and y must be 32 bytes');
96
106
  }
97
- x = new BN(xbuf, 'be');
98
- y = new BN(ybuf, 'be');
107
+ x = BN.fromBuffer(xbuf);
108
+ y = BN.fromBuffer(ybuf);
99
109
  point = new Point(x, y);
100
110
  compressed = false;
101
111
  }
102
- else if (buf[0] === 0x03) {
103
- xbuf = buf.subarray(1);
104
- x = new BN(xbuf, 'be');
105
- const xInfo = PublicKey._transformX(true, x);
106
- point = xInfo.point;
107
- compressed = true;
108
- }
109
- else if (buf[0] === 0x02) {
110
- xbuf = buf.subarray(1);
111
- x = new BN(xbuf, 'be');
112
- const xInfo = PublicKey._transformX(false, x);
112
+ else if (buf[0] === PUBKEY_PREFIX_ODD || buf[0] === PUBKEY_PREFIX_EVEN) {
113
+ xbuf = buf.slice(1);
114
+ x = BN.fromBuffer(xbuf);
115
+ const isOdd = buf[0] === PUBKEY_PREFIX_ODD;
116
+ const xInfo = PublicKey._transformX(isOdd, x);
113
117
  point = xInfo.point;
114
118
  compressed = true;
115
119
  }
@@ -131,8 +135,8 @@ export class PublicKey {
131
135
  };
132
136
  }
133
137
  static _transformObject(json) {
134
- const x = new BN(json.x, 16);
135
- const y = new BN(json.y, 16);
138
+ const x = BN.fromString(json.x, 'hex');
139
+ const y = BN.fromString(json.y, 'hex');
136
140
  const point = new Point(x, y);
137
141
  return {
138
142
  point: point,
@@ -170,7 +174,7 @@ export class PublicKey {
170
174
  });
171
175
  }
172
176
  static fromString(str, encoding) {
173
- const buf = Buffer.from(str, encoding || 'hex');
177
+ const buf = BufferUtil.from(str, encoding || 'hex');
174
178
  const info = PublicKey._transformDER(buf);
175
179
  return new PublicKey(info.point, {
176
180
  compressed: info.compressed,
@@ -199,8 +203,8 @@ export class PublicKey {
199
203
  }
200
204
  toObject() {
201
205
  return {
202
- x: this.point.getX().toString(16).padStart(64, '0'),
203
- y: this.point.getY().toString(16).padStart(64, '0'),
206
+ x: this.point.x.toString(16).padStart(64, '0'),
207
+ y: this.point.y.toString(16).padStart(64, '0'),
204
208
  compressed: this.compressed,
205
209
  };
206
210
  }
@@ -208,30 +212,30 @@ export class PublicKey {
208
212
  return this.toObject();
209
213
  }
210
214
  toBigNumber() {
211
- return this.point.getX();
215
+ return this.point.x;
212
216
  }
213
217
  toBuffer() {
214
218
  return this.toDER();
215
219
  }
216
220
  toDER() {
217
- const x = this.point.getX();
218
- const y = this.point.getY();
219
- const xbuf = x.toArrayLike(Buffer, 'be', 32);
220
- const ybuf = y.toArrayLike(Buffer, 'be', 32);
221
+ const x = this.point.x;
222
+ const y = this.point.y;
223
+ const xbuf = x.toBuffer({ size: 32 });
224
+ const ybuf = y.toBuffer({ size: 32 });
221
225
  let prefix;
222
226
  if (!this.compressed) {
223
- prefix = Buffer.from([0x04]);
224
- return Buffer.concat([prefix, xbuf, ybuf]);
227
+ prefix = BufferUtil.from([0x04]);
228
+ return BufferUtil.concat([prefix, xbuf, ybuf]);
225
229
  }
226
230
  else {
227
- const odd = y.mod(new BN(2)).eq(new BN(1));
231
+ const odd = y.mod(new BN(2)).eq(BN.One);
228
232
  if (odd) {
229
- prefix = Buffer.from([0x03]);
233
+ prefix = PublicKey.PrefixOddY;
230
234
  }
231
235
  else {
232
- prefix = Buffer.from([0x02]);
236
+ prefix = PublicKey.PrefixEvenY;
233
237
  }
234
- return Buffer.concat([prefix, xbuf]);
238
+ return BufferUtil.concat([prefix, xbuf]);
235
239
  }
236
240
  }
237
241
  _getID() {
@@ -247,7 +251,7 @@ export class PublicKey {
247
251
  return `<PublicKey: ${this.toString()}${this.compressed ? '' : ', uncompressed'}>`;
248
252
  }
249
253
  addScalar(scalar) {
250
- const scalarBN = Buffer.isBuffer(scalar) ? new BN(scalar) : scalar;
254
+ const scalarBN = BufferUtil.isBuffer(scalar) ? new BN(scalar) : scalar;
251
255
  const G = Point.getG();
252
256
  const tweakPoint = G.mul(scalarBN);
253
257
  const tweakedPoint = this.point.add(tweakPoint);
@@ -0,0 +1,37 @@
1
+ export class ConditionStack {
2
+ static NO_FALSE = 0xffffffff;
3
+ _size = 0;
4
+ _firstFalsePos = ConditionStack.NO_FALSE;
5
+ isEmpty() {
6
+ return this._size === 0;
7
+ }
8
+ allTrue() {
9
+ return this._firstFalsePos === ConditionStack.NO_FALSE;
10
+ }
11
+ pushBack(value) {
12
+ if (this._firstFalsePos === ConditionStack.NO_FALSE && !value) {
13
+ this._firstFalsePos = this._size;
14
+ }
15
+ this._size++;
16
+ }
17
+ popBack() {
18
+ if (this._size === 0) {
19
+ throw new Error('ConditionStack: pop from empty stack');
20
+ }
21
+ this._size--;
22
+ if (this._firstFalsePos === this._size) {
23
+ this._firstFalsePos = ConditionStack.NO_FALSE;
24
+ }
25
+ }
26
+ toggleTop() {
27
+ if (this._size === 0) {
28
+ throw new Error('ConditionStack: toggle on empty stack');
29
+ }
30
+ if (this._firstFalsePos === ConditionStack.NO_FALSE) {
31
+ this._firstFalsePos = this._size - 1;
32
+ }
33
+ else if (this._firstFalsePos === this._size - 1) {
34
+ this._firstFalsePos = ConditionStack.NO_FALSE;
35
+ }
36
+ }
37
+ }
@@ -0,0 +1,4 @@
1
+ export { MAX_SCRIPT_ELEMENT_SIZE, MAX_OPS_PER_SCRIPT, MAX_PUBKEYS_PER_MULTISIG, MAX_SCRIPT_SIZE, MAX_STACK_SIZE, MAX_NUM2BIN_SIZE, LOCKTIME_THRESHOLD, SCRIPTNUM_MAX_ELEMENT_SIZE, STANDARD_SCRIPT_VERIFY_FLAGS, ScriptFlags, ScriptError, NULL_SIGNATURE_CHECKER, } from './types';
2
+ export { ScriptNum, ScriptNumError } from './script-num';
3
+ export { ConditionStack } from './condition-stack';
4
+ export { evalScript, verifyScript, Interpreter } from './interpreter';