@bsv/sdk 1.0.0

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 (464) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +40 -0
  2. package/.github/ISSUE_TEMPLATE/discussion.md +24 -0
  3. package/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +23 -0
  4. package/CHANGELOG.md +72 -0
  5. package/CONTRIBUTING.md +85 -0
  6. package/LICENSE.txt +28 -0
  7. package/README.md +87 -0
  8. package/ROADMAP.md +3 -0
  9. package/dist/cjs/mod.js +25 -0
  10. package/dist/cjs/mod.js.map +1 -0
  11. package/dist/cjs/package.json +42 -0
  12. package/dist/cjs/src/compat/BIP39.js +272 -0
  13. package/dist/cjs/src/compat/BIP39.js.map +1 -0
  14. package/dist/cjs/src/compat/BSM.js +77 -0
  15. package/dist/cjs/src/compat/BSM.js.map +1 -0
  16. package/dist/cjs/src/compat/ECIES.js +483 -0
  17. package/dist/cjs/src/compat/ECIES.js.map +1 -0
  18. package/dist/cjs/src/compat/HD.js +326 -0
  19. package/dist/cjs/src/compat/HD.js.map +1 -0
  20. package/dist/cjs/src/compat/Mnemonic.js +298 -0
  21. package/dist/cjs/src/compat/Mnemonic.js.map +1 -0
  22. package/dist/cjs/src/compat/bip-39-wordlist-en.js +2057 -0
  23. package/dist/cjs/src/compat/bip-39-wordlist-en.js.map +1 -0
  24. package/dist/cjs/src/compat/index.js +37 -0
  25. package/dist/cjs/src/compat/index.js.map +1 -0
  26. package/dist/cjs/src/messages/EncryptedMessage.js +69 -0
  27. package/dist/cjs/src/messages/EncryptedMessage.js.map +1 -0
  28. package/dist/cjs/src/messages/SignedMessage.js +85 -0
  29. package/dist/cjs/src/messages/SignedMessage.js.map +1 -0
  30. package/dist/cjs/src/messages/index.js +29 -0
  31. package/dist/cjs/src/messages/index.js.map +1 -0
  32. package/dist/cjs/src/primitives/AESGCM.js +384 -0
  33. package/dist/cjs/src/primitives/AESGCM.js.map +1 -0
  34. package/dist/cjs/src/primitives/BasePoint.js +19 -0
  35. package/dist/cjs/src/primitives/BasePoint.js.map +1 -0
  36. package/dist/cjs/src/primitives/BigNumber.js +4269 -0
  37. package/dist/cjs/src/primitives/BigNumber.js.map +1 -0
  38. package/dist/cjs/src/primitives/Curve.js +1126 -0
  39. package/dist/cjs/src/primitives/Curve.js.map +1 -0
  40. package/dist/cjs/src/primitives/DRBG.js +99 -0
  41. package/dist/cjs/src/primitives/DRBG.js.map +1 -0
  42. package/dist/cjs/src/primitives/ECDSA.js +169 -0
  43. package/dist/cjs/src/primitives/ECDSA.js.map +1 -0
  44. package/dist/cjs/src/primitives/Hash.js +1332 -0
  45. package/dist/cjs/src/primitives/Hash.js.map +1 -0
  46. package/dist/cjs/src/primitives/JacobianPoint.js +400 -0
  47. package/dist/cjs/src/primitives/JacobianPoint.js.map +1 -0
  48. package/dist/cjs/src/primitives/K256.js +111 -0
  49. package/dist/cjs/src/primitives/K256.js.map +1 -0
  50. package/dist/cjs/src/primitives/Mersenne.js +118 -0
  51. package/dist/cjs/src/primitives/Mersenne.js.map +1 -0
  52. package/dist/cjs/src/primitives/MontgomoryMethod.js +150 -0
  53. package/dist/cjs/src/primitives/MontgomoryMethod.js.map +1 -0
  54. package/dist/cjs/src/primitives/Point.js +819 -0
  55. package/dist/cjs/src/primitives/Point.js.map +1 -0
  56. package/dist/cjs/src/primitives/PrivateKey.js +190 -0
  57. package/dist/cjs/src/primitives/PrivateKey.js.map +1 -0
  58. package/dist/cjs/src/primitives/PublicKey.js +151 -0
  59. package/dist/cjs/src/primitives/PublicKey.js.map +1 -0
  60. package/dist/cjs/src/primitives/Random.js +57 -0
  61. package/dist/cjs/src/primitives/Random.js.map +1 -0
  62. package/dist/cjs/src/primitives/ReductionContext.js +490 -0
  63. package/dist/cjs/src/primitives/ReductionContext.js.map +1 -0
  64. package/dist/cjs/src/primitives/Signature.js +220 -0
  65. package/dist/cjs/src/primitives/Signature.js.map +1 -0
  66. package/dist/cjs/src/primitives/SymmetricKey.js +69 -0
  67. package/dist/cjs/src/primitives/SymmetricKey.js.map +1 -0
  68. package/dist/cjs/src/primitives/TransactionSignature.js +172 -0
  69. package/dist/cjs/src/primitives/TransactionSignature.js.map +1 -0
  70. package/dist/cjs/src/primitives/index.js +45 -0
  71. package/dist/cjs/src/primitives/index.js.map +1 -0
  72. package/dist/cjs/src/primitives/utils.js +615 -0
  73. package/dist/cjs/src/primitives/utils.js.map +1 -0
  74. package/dist/cjs/src/script/LockingScript.js +35 -0
  75. package/dist/cjs/src/script/LockingScript.js.map +1 -0
  76. package/dist/cjs/src/script/OP.js +208 -0
  77. package/dist/cjs/src/script/OP.js.map +1 -0
  78. package/dist/cjs/src/script/Script.js +429 -0
  79. package/dist/cjs/src/script/Script.js.map +1 -0
  80. package/dist/cjs/src/script/ScriptChunk.js +3 -0
  81. package/dist/cjs/src/script/ScriptChunk.js.map +1 -0
  82. package/dist/cjs/src/script/ScriptTemplate.js +3 -0
  83. package/dist/cjs/src/script/ScriptTemplate.js.map +1 -0
  84. package/dist/cjs/src/script/Spend.js +1252 -0
  85. package/dist/cjs/src/script/Spend.js.map +1 -0
  86. package/dist/cjs/src/script/UnlockingScript.js +35 -0
  87. package/dist/cjs/src/script/UnlockingScript.js.map +1 -0
  88. package/dist/cjs/src/script/index.js +32 -0
  89. package/dist/cjs/src/script/index.js.map +1 -0
  90. package/dist/cjs/src/script/templates/P2PKH.js +98 -0
  91. package/dist/cjs/src/script/templates/P2PKH.js.map +1 -0
  92. package/dist/cjs/src/script/templates/RPuzzle.js +125 -0
  93. package/dist/cjs/src/script/templates/RPuzzle.js.map +1 -0
  94. package/dist/cjs/src/script/templates/index.js +11 -0
  95. package/dist/cjs/src/script/templates/index.js.map +1 -0
  96. package/dist/cjs/src/transaction/Broadcaster.js +3 -0
  97. package/dist/cjs/src/transaction/Broadcaster.js.map +1 -0
  98. package/dist/cjs/src/transaction/ChainTracker.js +3 -0
  99. package/dist/cjs/src/transaction/ChainTracker.js.map +1 -0
  100. package/dist/cjs/src/transaction/FeeModel.js +3 -0
  101. package/dist/cjs/src/transaction/FeeModel.js.map +1 -0
  102. package/dist/cjs/src/transaction/MerklePath.js +239 -0
  103. package/dist/cjs/src/transaction/MerklePath.js.map +1 -0
  104. package/dist/cjs/src/transaction/Transaction.js +557 -0
  105. package/dist/cjs/src/transaction/Transaction.js.map +1 -0
  106. package/dist/cjs/src/transaction/TransactionInput.js +3 -0
  107. package/dist/cjs/src/transaction/TransactionInput.js.map +1 -0
  108. package/dist/cjs/src/transaction/TransactionOutput.js +3 -0
  109. package/dist/cjs/src/transaction/TransactionOutput.js.map +1 -0
  110. package/dist/cjs/src/transaction/broadcasters/ARC.js +101 -0
  111. package/dist/cjs/src/transaction/broadcasters/ARC.js.map +1 -0
  112. package/dist/cjs/src/transaction/broadcasters/index.js +9 -0
  113. package/dist/cjs/src/transaction/broadcasters/index.js.map +1 -0
  114. package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js +69 -0
  115. package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -0
  116. package/dist/cjs/src/transaction/fee-models/index.js +9 -0
  117. package/dist/cjs/src/transaction/fee-models/index.js.map +1 -0
  118. package/dist/cjs/src/transaction/index.js +11 -0
  119. package/dist/cjs/src/transaction/index.js.map +1 -0
  120. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
  121. package/dist/esm/mod.js +9 -0
  122. package/dist/esm/mod.js.map +1 -0
  123. package/dist/esm/src/compat/BIP39.js +272 -0
  124. package/dist/esm/src/compat/BIP39.js.map +1 -0
  125. package/dist/esm/src/compat/BSM.js +45 -0
  126. package/dist/esm/src/compat/BSM.js.map +1 -0
  127. package/dist/esm/src/compat/ECIES.js +454 -0
  128. package/dist/esm/src/compat/ECIES.js.map +1 -0
  129. package/dist/esm/src/compat/HD.js +304 -0
  130. package/dist/esm/src/compat/HD.js.map +1 -0
  131. package/dist/esm/src/compat/Mnemonic.js +272 -0
  132. package/dist/esm/src/compat/Mnemonic.js.map +1 -0
  133. package/dist/esm/src/compat/bip-39-wordlist-en.js +2054 -0
  134. package/dist/esm/src/compat/bip-39-wordlist-en.js.map +1 -0
  135. package/dist/esm/src/compat/index.js +5 -0
  136. package/dist/esm/src/compat/index.js.map +1 -0
  137. package/dist/esm/src/messages/EncryptedMessage.js +61 -0
  138. package/dist/esm/src/messages/EncryptedMessage.js.map +1 -0
  139. package/dist/esm/src/messages/SignedMessage.js +77 -0
  140. package/dist/esm/src/messages/SignedMessage.js.map +1 -0
  141. package/dist/esm/src/messages/index.js +3 -0
  142. package/dist/esm/src/messages/index.js.map +1 -0
  143. package/dist/esm/src/primitives/AESGCM.js +371 -0
  144. package/dist/esm/src/primitives/AESGCM.js.map +1 -0
  145. package/dist/esm/src/primitives/BasePoint.js +16 -0
  146. package/dist/esm/src/primitives/BasePoint.js.map +1 -0
  147. package/dist/esm/src/primitives/BigNumber.js +4304 -0
  148. package/dist/esm/src/primitives/BigNumber.js.map +1 -0
  149. package/dist/esm/src/primitives/Curve.js +1141 -0
  150. package/dist/esm/src/primitives/Curve.js.map +1 -0
  151. package/dist/esm/src/primitives/DRBG.js +98 -0
  152. package/dist/esm/src/primitives/DRBG.js.map +1 -0
  153. package/dist/esm/src/primitives/ECDSA.js +161 -0
  154. package/dist/esm/src/primitives/ECDSA.js.map +1 -0
  155. package/dist/esm/src/primitives/Hash.js +1336 -0
  156. package/dist/esm/src/primitives/Hash.js.map +1 -0
  157. package/dist/esm/src/primitives/JacobianPoint.js +398 -0
  158. package/dist/esm/src/primitives/JacobianPoint.js.map +1 -0
  159. package/dist/esm/src/primitives/K256.js +105 -0
  160. package/dist/esm/src/primitives/K256.js.map +1 -0
  161. package/dist/esm/src/primitives/Mersenne.js +117 -0
  162. package/dist/esm/src/primitives/Mersenne.js.map +1 -0
  163. package/dist/esm/src/primitives/MontgomoryMethod.js +149 -0
  164. package/dist/esm/src/primitives/MontgomoryMethod.js.map +1 -0
  165. package/dist/esm/src/primitives/Point.js +816 -0
  166. package/dist/esm/src/primitives/Point.js.map +1 -0
  167. package/dist/esm/src/primitives/PrivateKey.js +184 -0
  168. package/dist/esm/src/primitives/PrivateKey.js.map +1 -0
  169. package/dist/esm/src/primitives/PublicKey.js +145 -0
  170. package/dist/esm/src/primitives/PublicKey.js.map +1 -0
  171. package/dist/esm/src/primitives/Random.js +56 -0
  172. package/dist/esm/src/primitives/Random.js.map +1 -0
  173. package/dist/esm/src/primitives/ReductionContext.js +486 -0
  174. package/dist/esm/src/primitives/ReductionContext.js.map +1 -0
  175. package/dist/esm/src/primitives/Signature.js +223 -0
  176. package/dist/esm/src/primitives/Signature.js.map +1 -0
  177. package/dist/esm/src/primitives/SymmetricKey.js +63 -0
  178. package/dist/esm/src/primitives/SymmetricKey.js.map +1 -0
  179. package/dist/esm/src/primitives/TransactionSignature.js +144 -0
  180. package/dist/esm/src/primitives/TransactionSignature.js.map +1 -0
  181. package/dist/esm/src/primitives/index.js +9 -0
  182. package/dist/esm/src/primitives/index.js.map +1 -0
  183. package/dist/esm/src/primitives/utils.js +601 -0
  184. package/dist/esm/src/primitives/utils.js.map +1 -0
  185. package/dist/esm/src/script/LockingScript.js +29 -0
  186. package/dist/esm/src/script/LockingScript.js.map +1 -0
  187. package/dist/esm/src/script/OP.js +206 -0
  188. package/dist/esm/src/script/OP.js.map +1 -0
  189. package/dist/esm/src/script/Script.js +424 -0
  190. package/dist/esm/src/script/Script.js.map +1 -0
  191. package/dist/esm/src/script/ScriptChunk.js +2 -0
  192. package/dist/esm/src/script/ScriptChunk.js.map +1 -0
  193. package/dist/esm/src/script/ScriptTemplate.js +2 -0
  194. package/dist/esm/src/script/ScriptTemplate.js.map +1 -0
  195. package/dist/esm/src/script/Spend.js +1240 -0
  196. package/dist/esm/src/script/Spend.js.map +1 -0
  197. package/dist/esm/src/script/UnlockingScript.js +29 -0
  198. package/dist/esm/src/script/UnlockingScript.js.map +1 -0
  199. package/dist/esm/src/script/index.js +7 -0
  200. package/dist/esm/src/script/index.js.map +1 -0
  201. package/dist/esm/src/script/templates/P2PKH.js +92 -0
  202. package/dist/esm/src/script/templates/P2PKH.js.map +1 -0
  203. package/dist/esm/src/script/templates/RPuzzle.js +119 -0
  204. package/dist/esm/src/script/templates/RPuzzle.js.map +1 -0
  205. package/dist/esm/src/script/templates/index.js +3 -0
  206. package/dist/esm/src/script/templates/index.js.map +1 -0
  207. package/dist/esm/src/transaction/Broadcaster.js +2 -0
  208. package/dist/esm/src/transaction/Broadcaster.js.map +1 -0
  209. package/dist/esm/src/transaction/ChainTracker.js +2 -0
  210. package/dist/esm/src/transaction/ChainTracker.js.map +1 -0
  211. package/dist/esm/src/transaction/FeeModel.js +2 -0
  212. package/dist/esm/src/transaction/FeeModel.js.map +1 -0
  213. package/dist/esm/src/transaction/MerklePath.js +237 -0
  214. package/dist/esm/src/transaction/MerklePath.js.map +1 -0
  215. package/dist/esm/src/transaction/Transaction.js +557 -0
  216. package/dist/esm/src/transaction/Transaction.js.map +1 -0
  217. package/dist/esm/src/transaction/TransactionInput.js +2 -0
  218. package/dist/esm/src/transaction/TransactionInput.js.map +1 -0
  219. package/dist/esm/src/transaction/TransactionOutput.js +2 -0
  220. package/dist/esm/src/transaction/TransactionOutput.js.map +1 -0
  221. package/dist/esm/src/transaction/broadcasters/ARC.js +100 -0
  222. package/dist/esm/src/transaction/broadcasters/ARC.js.map +1 -0
  223. package/dist/esm/src/transaction/broadcasters/index.js +2 -0
  224. package/dist/esm/src/transaction/broadcasters/index.js.map +1 -0
  225. package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js +71 -0
  226. package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -0
  227. package/dist/esm/src/transaction/fee-models/index.js +2 -0
  228. package/dist/esm/src/transaction/fee-models/index.js.map +1 -0
  229. package/dist/esm/src/transaction/index.js +3 -0
  230. package/dist/esm/src/transaction/index.js.map +1 -0
  231. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
  232. package/dist/types/mod.d.ts +9 -0
  233. package/dist/types/mod.d.ts.map +1 -0
  234. package/dist/types/src/compat/BIP39.d.ts +132 -0
  235. package/dist/types/src/compat/BIP39.d.ts.map +1 -0
  236. package/dist/types/src/compat/BSM.d.ts +28 -0
  237. package/dist/types/src/compat/BSM.d.ts.map +1 -0
  238. package/dist/types/src/compat/ECIES.d.ts +62 -0
  239. package/dist/types/src/compat/ECIES.d.ts.map +1 -0
  240. package/dist/types/src/compat/HD.d.ts +117 -0
  241. package/dist/types/src/compat/HD.d.ts.map +1 -0
  242. package/dist/types/src/compat/Mnemonic.d.ts +132 -0
  243. package/dist/types/src/compat/Mnemonic.d.ts.map +1 -0
  244. package/dist/types/src/compat/bip-39-wordlist-en.d.ts +5 -0
  245. package/dist/types/src/compat/bip-39-wordlist-en.d.ts.map +1 -0
  246. package/dist/types/src/compat/index.d.ts +5 -0
  247. package/dist/types/src/compat/index.d.ts.map +1 -0
  248. package/dist/types/src/messages/EncryptedMessage.d.ts +20 -0
  249. package/dist/types/src/messages/EncryptedMessage.d.ts.map +1 -0
  250. package/dist/types/src/messages/SignedMessage.d.ts +21 -0
  251. package/dist/types/src/messages/SignedMessage.d.ts.map +1 -0
  252. package/dist/types/src/messages/index.d.ts +3 -0
  253. package/dist/types/src/messages/index.d.ts.map +1 -0
  254. package/dist/types/src/primitives/AESGCM.d.ts +14 -0
  255. package/dist/types/src/primitives/AESGCM.d.ts.map +1 -0
  256. package/dist/types/src/primitives/BasePoint.d.ts +22 -0
  257. package/dist/types/src/primitives/BasePoint.d.ts.map +1 -0
  258. package/dist/types/src/primitives/BigNumber.d.ts +1895 -0
  259. package/dist/types/src/primitives/BigNumber.d.ts.map +1 -0
  260. package/dist/types/src/primitives/Curve.d.ts +55 -0
  261. package/dist/types/src/primitives/Curve.d.ts.map +1 -0
  262. package/dist/types/src/primitives/DRBG.d.ts +54 -0
  263. package/dist/types/src/primitives/DRBG.d.ts.map +1 -0
  264. package/dist/types/src/primitives/ECDSA.d.ts +39 -0
  265. package/dist/types/src/primitives/ECDSA.d.ts.map +1 -0
  266. package/dist/types/src/primitives/Hash.d.ts +411 -0
  267. package/dist/types/src/primitives/Hash.d.ts.map +1 -0
  268. package/dist/types/src/primitives/JacobianPoint.d.ts +164 -0
  269. package/dist/types/src/primitives/JacobianPoint.d.ts.map +1 -0
  270. package/dist/types/src/primitives/K256.d.ts +53 -0
  271. package/dist/types/src/primitives/K256.d.ts.map +1 -0
  272. package/dist/types/src/primitives/Mersenne.d.ts +72 -0
  273. package/dist/types/src/primitives/Mersenne.d.ts.map +1 -0
  274. package/dist/types/src/primitives/MontgomoryMethod.d.ts +96 -0
  275. package/dist/types/src/primitives/MontgomoryMethod.d.ts.map +1 -0
  276. package/dist/types/src/primitives/Point.d.ts +303 -0
  277. package/dist/types/src/primitives/Point.d.ts.map +1 -0
  278. package/dist/types/src/primitives/PrivateKey.d.ts +143 -0
  279. package/dist/types/src/primitives/PrivateKey.d.ts.map +1 -0
  280. package/dist/types/src/primitives/PublicKey.d.ts +108 -0
  281. package/dist/types/src/primitives/PublicKey.d.ts.map +1 -0
  282. package/dist/types/src/primitives/Random.d.ts +14 -0
  283. package/dist/types/src/primitives/Random.d.ts.map +1 -0
  284. package/dist/types/src/primitives/ReductionContext.d.ts +308 -0
  285. package/dist/types/src/primitives/ReductionContext.d.ts.map +1 -0
  286. package/dist/types/src/primitives/Signature.d.ts +100 -0
  287. package/dist/types/src/primitives/Signature.d.ts.map +1 -0
  288. package/dist/types/src/primitives/SymmetricKey.d.ts +44 -0
  289. package/dist/types/src/primitives/SymmetricKey.d.ts.map +1 -0
  290. package/dist/types/src/primitives/TransactionSignature.d.ts +36 -0
  291. package/dist/types/src/primitives/TransactionSignature.d.ts.map +1 -0
  292. package/dist/types/src/primitives/index.d.ts +9 -0
  293. package/dist/types/src/primitives/index.d.ts.map +1 -0
  294. package/dist/types/src/primitives/utils.d.ts +118 -0
  295. package/dist/types/src/primitives/utils.d.ts.map +1 -0
  296. package/dist/types/src/script/LockingScript.d.ts +25 -0
  297. package/dist/types/src/script/LockingScript.d.ts.map +1 -0
  298. package/dist/types/src/script/OP.d.ts +193 -0
  299. package/dist/types/src/script/OP.d.ts.map +1 -0
  300. package/dist/types/src/script/Script.d.ts +148 -0
  301. package/dist/types/src/script/Script.d.ts.map +1 -0
  302. package/dist/types/src/script/ScriptChunk.d.ts +8 -0
  303. package/dist/types/src/script/ScriptChunk.d.ts.map +1 -0
  304. package/dist/types/src/script/ScriptTemplate.d.ts +33 -0
  305. package/dist/types/src/script/ScriptTemplate.d.ts.map +1 -0
  306. package/dist/types/src/script/Spend.d.ts +103 -0
  307. package/dist/types/src/script/Spend.d.ts.map +1 -0
  308. package/dist/types/src/script/UnlockingScript.d.ts +25 -0
  309. package/dist/types/src/script/UnlockingScript.d.ts.map +1 -0
  310. package/dist/types/src/script/index.d.ts +8 -0
  311. package/dist/types/src/script/index.d.ts.map +1 -0
  312. package/dist/types/src/script/templates/P2PKH.d.ts +37 -0
  313. package/dist/types/src/script/templates/P2PKH.d.ts.map +1 -0
  314. package/dist/types/src/script/templates/RPuzzle.d.ts +47 -0
  315. package/dist/types/src/script/templates/RPuzzle.d.ts.map +1 -0
  316. package/dist/types/src/script/templates/index.d.ts +3 -0
  317. package/dist/types/src/script/templates/index.d.ts.map +1 -0
  318. package/dist/types/src/transaction/Broadcaster.d.ts +39 -0
  319. package/dist/types/src/transaction/Broadcaster.d.ts.map +1 -0
  320. package/dist/types/src/transaction/ChainTracker.d.ts +23 -0
  321. package/dist/types/src/transaction/ChainTracker.d.ts.map +1 -0
  322. package/dist/types/src/transaction/FeeModel.d.ts +12 -0
  323. package/dist/types/src/transaction/FeeModel.d.ts.map +1 -0
  324. package/dist/types/src/transaction/MerklePath.d.ts +91 -0
  325. package/dist/types/src/transaction/MerklePath.d.ts.map +1 -0
  326. package/dist/types/src/transaction/Transaction.d.ts +181 -0
  327. package/dist/types/src/transaction/Transaction.d.ts.map +1 -0
  328. package/dist/types/src/transaction/TransactionInput.d.ts +63 -0
  329. package/dist/types/src/transaction/TransactionInput.d.ts.map +1 -0
  330. package/dist/types/src/transaction/TransactionOutput.d.ts +36 -0
  331. package/dist/types/src/transaction/TransactionOutput.d.ts.map +1 -0
  332. package/dist/types/src/transaction/broadcasters/ARC.d.ts +28 -0
  333. package/dist/types/src/transaction/broadcasters/ARC.d.ts.map +1 -0
  334. package/dist/types/src/transaction/broadcasters/index.d.ts +2 -0
  335. package/dist/types/src/transaction/broadcasters/index.d.ts.map +1 -0
  336. package/dist/types/src/transaction/fee-models/SatoshisPerKilobyte.d.ts +26 -0
  337. package/dist/types/src/transaction/fee-models/SatoshisPerKilobyte.d.ts.map +1 -0
  338. package/dist/types/src/transaction/fee-models/index.d.ts +2 -0
  339. package/dist/types/src/transaction/fee-models/index.d.ts.map +1 -0
  340. package/dist/types/src/transaction/index.d.ts +7 -0
  341. package/dist/types/src/transaction/index.d.ts.map +1 -0
  342. package/dist/types/tsconfig.types.tsbuildinfo +1 -0
  343. package/docs/README.md +9 -0
  344. package/docs/compat.md +2856 -0
  345. package/docs/getting-started/COMMONJS.md +94 -0
  346. package/docs/getting-started/REACT-TS.md +131 -0
  347. package/docs/getting-started/TS-NODE.md +106 -0
  348. package/docs/getting-started/VUE.md +103 -0
  349. package/docs/messages.md +146 -0
  350. package/docs/primitives.md +7440 -0
  351. package/docs/script.md +766 -0
  352. package/docs/transaction.md +741 -0
  353. package/jest.config.js +6 -0
  354. package/mod.ts +8 -0
  355. package/package.json +137 -0
  356. package/src/compat/BSM.ts +51 -0
  357. package/src/compat/ECIES.ts +557 -0
  358. package/src/compat/HD.ts +348 -0
  359. package/src/compat/Mnemonic.ts +295 -0
  360. package/src/compat/__tests/BSM.test.ts +38 -0
  361. package/src/compat/__tests/ECIES.test.ts +90 -0
  362. package/src/compat/__tests/HD.test.ts +405 -0
  363. package/src/compat/__tests/Mnemonic.test.ts +177 -0
  364. package/src/compat/__tests/Mnemonic.vectors.ts +172 -0
  365. package/src/compat/bip-39-wordlist-en.ts +2053 -0
  366. package/src/compat/index.ts +4 -0
  367. package/src/messages/EncryptedMessage.ts +70 -0
  368. package/src/messages/SignedMessage.ts +87 -0
  369. package/src/messages/__tests/EncryptedMessage.test.ts +36 -0
  370. package/src/messages/__tests/SignedMessage.test.ts +53 -0
  371. package/src/messages/index.ts +2 -0
  372. package/src/primitives/AESGCM.ts +479 -0
  373. package/src/primitives/BasePoint.ts +21 -0
  374. package/src/primitives/BigNumber.ts +4619 -0
  375. package/src/primitives/Curve.ts +1163 -0
  376. package/src/primitives/DRBG.ts +102 -0
  377. package/src/primitives/ECDSA.ts +164 -0
  378. package/src/primitives/Hash.ts +1420 -0
  379. package/src/primitives/JacobianPoint.ts +410 -0
  380. package/src/primitives/K256.ts +116 -0
  381. package/src/primitives/Mersenne.ts +123 -0
  382. package/src/primitives/MontgomoryMethod.ts +160 -0
  383. package/src/primitives/Point.ts +852 -0
  384. package/src/primitives/PrivateKey.ts +195 -0
  385. package/src/primitives/PublicKey.ts +154 -0
  386. package/src/primitives/Random.ts +55 -0
  387. package/src/primitives/ReductionContext.ts +528 -0
  388. package/src/primitives/Signature.ts +235 -0
  389. package/src/primitives/SymmetricKey.ts +75 -0
  390. package/src/primitives/TransactionSignature.ts +189 -0
  391. package/src/primitives/__tests/AESGCM.test.ts +338 -0
  392. package/src/primitives/__tests/BRC42.private.vectors.ts +33 -0
  393. package/src/primitives/__tests/BRC42.public.vectors.ts +33 -0
  394. package/src/primitives/__tests/BigNumber.arithmatic.test.ts +572 -0
  395. package/src/primitives/__tests/BigNumber.binary.test.ts +203 -0
  396. package/src/primitives/__tests/BigNumber.constructor.test.ts +176 -0
  397. package/src/primitives/__tests/BigNumber.dhGroup.test.ts +18 -0
  398. package/src/primitives/__tests/BigNumber.fixtures.ts +264 -0
  399. package/src/primitives/__tests/BigNumber.serializers.test.ts +157 -0
  400. package/src/primitives/__tests/BigNumber.utils.test.ts +347 -0
  401. package/src/primitives/__tests/Curve.unit.test.ts +192 -0
  402. package/src/primitives/__tests/DRBG.test.ts +18 -0
  403. package/src/primitives/__tests/DRBG.vectors.ts +167 -0
  404. package/src/primitives/__tests/ECDH.test.ts +31 -0
  405. package/src/primitives/__tests/ECDSA.test.ts +58 -0
  406. package/src/primitives/__tests/HMAC.test.ts +59 -0
  407. package/src/primitives/__tests/Hash.test.ts +121 -0
  408. package/src/primitives/__tests/PBKDF2.vectors.ts +119 -0
  409. package/src/primitives/__tests/PrivateKey.test.ts +17 -0
  410. package/src/primitives/__tests/PublicKey.test.ts +66 -0
  411. package/src/primitives/__tests/Random.test.ts +14 -0
  412. package/src/primitives/__tests/Reader.test.ts +296 -0
  413. package/src/primitives/__tests/ReductionContext.test.ts +279 -0
  414. package/src/primitives/__tests/SymmetricKey.test.ts +58 -0
  415. package/src/primitives/__tests/SymmetricKey.vectors.ts +40 -0
  416. package/src/primitives/__tests/Writer.test.ts +198 -0
  417. package/src/primitives/__tests/sighash.vectors.ts +3503 -0
  418. package/src/primitives/__tests/utils.test.ts +108 -0
  419. package/src/primitives/index.ts +8 -0
  420. package/src/primitives/utils.ts +665 -0
  421. package/src/script/LockingScript.ts +30 -0
  422. package/src/script/OP.ts +219 -0
  423. package/src/script/Script.ts +426 -0
  424. package/src/script/ScriptChunk.ts +7 -0
  425. package/src/script/ScriptTemplate.ts +36 -0
  426. package/src/script/Spend.ts +1379 -0
  427. package/src/script/UnlockingScript.ts +30 -0
  428. package/src/script/__tests/Script.test.ts +369 -0
  429. package/src/script/__tests/Spend.test.ts +248 -0
  430. package/src/script/__tests/script.invalid.vectors.ts +925 -0
  431. package/src/script/__tests/script.valid.vectors.ts +1120 -0
  432. package/src/script/__tests/scriptFromVector.ts +42 -0
  433. package/src/script/__tests/spend.valid.vectors.ts +2288 -0
  434. package/src/script/index.ts +7 -0
  435. package/src/script/templates/P2PKH.ts +109 -0
  436. package/src/script/templates/RPuzzle.ts +140 -0
  437. package/src/script/templates/index.ts +2 -0
  438. package/src/transaction/Broadcaster.ts +42 -0
  439. package/src/transaction/ChainTracker.ts +22 -0
  440. package/src/transaction/FeeModel.ts +13 -0
  441. package/src/transaction/MerklePath.ts +259 -0
  442. package/src/transaction/Transaction.ts +602 -0
  443. package/src/transaction/TransactionInput.ts +63 -0
  444. package/src/transaction/TransactionOutput.ts +37 -0
  445. package/src/transaction/__tests/MerklePath.test.ts +181 -0
  446. package/src/transaction/__tests/Transaction.test.ts +413 -0
  447. package/src/transaction/__tests/bigtx.vectors.ts +4 -0
  448. package/src/transaction/__tests/bump.invalid.vectors.ts +8 -0
  449. package/src/transaction/__tests/bump.valid.vectors.ts +4 -0
  450. package/src/transaction/__tests/tx.invalid.vectors.ts +281 -0
  451. package/src/transaction/__tests/tx.valid.vectors.ts +364 -0
  452. package/src/transaction/broadcasters/ARC.ts +106 -0
  453. package/src/transaction/broadcasters/__tests/ARC.test.ts +115 -0
  454. package/src/transaction/broadcasters/index.ts +1 -0
  455. package/src/transaction/fee-models/SatoshisPerKilobyte.ts +71 -0
  456. package/src/transaction/fee-models/index.ts +1 -0
  457. package/src/transaction/index.ts +6 -0
  458. package/ts2md.json +5 -0
  459. package/tsconfig.base.json +26 -0
  460. package/tsconfig.cjs.json +11 -0
  461. package/tsconfig.eslint.json +12 -0
  462. package/tsconfig.esm.json +9 -0
  463. package/tsconfig.json +17 -0
  464. package/tsconfig.types.json +11 -0
@@ -0,0 +1,203 @@
1
+ /* eslint-env jest */
2
+ import BigNumber from '../../../dist/cjs/src/primitives/BigNumber'
3
+
4
+ describe('BN.js/Binary', function () {
5
+ describe('.shl()', function () {
6
+ it('should shl numbers', function () {
7
+ expect(new BigNumber('69527932928').shln(13).toString(16)).toEqual('2060602000000')
8
+ expect(new BigNumber('69527932928').shln(45).toString(16)).toEqual('206060200000000000000')
9
+ })
10
+
11
+ it('should ushl numbers', function () {
12
+ expect(new BigNumber('69527932928').ushln(13).toString(16)).toEqual('2060602000000')
13
+ expect(new BigNumber('69527932928').ushln(45).toString(16)).toEqual('206060200000000000000')
14
+ })
15
+ })
16
+
17
+ describe('.shr()', function () {
18
+ it('should shr numbers', function () {
19
+ expect(new BigNumber('69527932928').shrn(13).toString(16)).toEqual('818180')
20
+ expect(new BigNumber('69527932928').shrn(17).toString(16)).toEqual('81818')
21
+ expect(new BigNumber('69527932928').shrn(256).toString(16)).toEqual('0')
22
+ })
23
+
24
+ it('should ushr numbers', function () {
25
+ expect(new BigNumber('69527932928').ushrn(13).toString(16)).toEqual('818180')
26
+ expect(new BigNumber('69527932928').ushrn(17).toString(16)).toEqual('81818')
27
+ expect(new BigNumber('69527932928').ushrn(256).toString(16)).toEqual('0')
28
+ })
29
+ })
30
+
31
+ describe('.bincn()', function () {
32
+ it('should increment bit', function () {
33
+ expect(new BigNumber(0).bincn(1).toString(16)).toEqual('2')
34
+ expect(new BigNumber(2).bincn(1).toString(16)).toEqual('4')
35
+ expect(new BigNumber(2).bincn(1).bincn(1).toString(16)).toEqual(new BigNumber(2).bincn(2).toString(16))
36
+ expect(new BigNumber(0xffffff).bincn(1).toString(16)).toEqual('1000001')
37
+ expect(new BigNumber(2).bincn(63).toString(16)).toEqual('8000000000000002')
38
+ })
39
+ })
40
+
41
+ describe('.imaskn()', function () {
42
+ it('should mask bits in-place', function () {
43
+ expect(new BigNumber(0).imaskn(1).toString(16)).toEqual('0')
44
+ expect(new BigNumber(3).imaskn(1).toString(16)).toEqual('1')
45
+ expect(new BigNumber('123456789', 16).imaskn(4).toString(16)).toEqual('9')
46
+ expect(new BigNumber('123456789', 16).imaskn(16).toString(16)).toEqual('6789')
47
+ expect(new BigNumber('123456789', 16).imaskn(28).toString(16)).toEqual('3456789')
48
+ })
49
+
50
+ it('should not mask when number is bigger than length', function () {
51
+ expect(new BigNumber(0xe3).imaskn(56).toString(16)).toEqual('e3')
52
+ expect(new BigNumber(0xe3).imaskn(26).toString(16)).toEqual('e3')
53
+ })
54
+ })
55
+
56
+ describe('.testn()', function () {
57
+ it('should support test specific bit', function () {
58
+ [
59
+ 'ff',
60
+ 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'
61
+ ].forEach(function (hex) {
62
+ const bn = new BigNumber(hex, 16)
63
+ const bl = bn.bitLength()
64
+
65
+ for (let i = 0; i < bl; ++i) {
66
+ expect(bn.testn(i)).toEqual(true)
67
+ }
68
+
69
+ // test off the end
70
+ expect(bn.testn(bl)).toEqual(false)
71
+ })
72
+
73
+ const xbits = '01111001010111001001000100011101' +
74
+ '11010011101100011000111001011101' +
75
+ '10010100111000000001011000111101' +
76
+ '01011111001111100100011110000010' +
77
+ '01011010100111010001010011000100' +
78
+ '01101001011110100001001111100110' +
79
+ '001110010111'
80
+
81
+ const x = new BigNumber(
82
+ '23478905234580795234378912401239784125643978256123048348957342'
83
+ )
84
+ for (let i = 0; i < x.bitLength(); ++i) {
85
+ expect(x.testn(i)).toEqual(xbits.charAt(i) === '1')
86
+ }
87
+ })
88
+
89
+ it('should have short-cuts', function () {
90
+ const x = new BigNumber('abcd', 16)
91
+ expect(!x.testn(128)).toEqual(true)
92
+ })
93
+ })
94
+
95
+ describe('.and()', function () {
96
+ it('should and numbers', function () {
97
+ expect(new BigNumber('1010101010101010101010101010101010101010', 2)
98
+ .and(new BigNumber('101010101010101010101010101010101010101', 2))
99
+ .toString(2)).toEqual('0')
100
+ })
101
+
102
+ it('should and numbers of different limb-length', function () {
103
+ expect(
104
+ new BigNumber('abcd0000ffff', 16)
105
+ .and(new BigNumber('abcd', 16)).toString(16)).toEqual('abcd')
106
+ })
107
+ })
108
+
109
+ describe('.iand()', function () {
110
+ it('should iand numbers', function () {
111
+ expect(new BigNumber('1010101010101010101010101010101010101010', 2)
112
+ .iand(new BigNumber('101010101010101010101010101010101010101', 2))
113
+ .toString(2)).toEqual('0')
114
+ expect(new BigNumber('1000000000000000000000000000000000000001', 2)
115
+ .iand(new BigNumber('1', 2))
116
+ .toString(2)).toEqual('1')
117
+ expect(new BigNumber('1', 2)
118
+ .iand(new BigNumber('1000000000000000000000000000000000000001', 2))
119
+ .toString(2)).toEqual('1')
120
+ })
121
+ })
122
+
123
+ describe('.or()', function () {
124
+ it('should or numbers', function () {
125
+ expect(new BigNumber('1010101010101010101010101010101010101010', 2)
126
+ .or(new BigNumber('101010101010101010101010101010101010101', 2))
127
+ .toString(2)).toEqual('1111111111111111111111111111111111111111')
128
+ })
129
+
130
+ it('should or numbers of different limb-length', function () {
131
+ expect(
132
+ new BigNumber('abcd00000000', 16)
133
+ .or(new BigNumber('abcd', 16)).toString(16)).toEqual('abcd0000abcd')
134
+ })
135
+ })
136
+
137
+ describe('.ior()', function () {
138
+ it('should ior numbers', function () {
139
+ expect(new BigNumber('1010101010101010101010101010101010101010', 2)
140
+ .ior(new BigNumber('101010101010101010101010101010101010101', 2))
141
+ .toString(2)).toEqual('1111111111111111111111111111111111111111')
142
+ expect(new BigNumber('1000000000000000000000000000000000000000', 2)
143
+ .ior(new BigNumber('1', 2))
144
+ .toString(2)).toEqual('1000000000000000000000000000000000000001')
145
+ expect(new BigNumber('1', 2)
146
+ .ior(new BigNumber('1000000000000000000000000000000000000000', 2))
147
+ .toString(2)).toEqual('1000000000000000000000000000000000000001')
148
+ })
149
+ })
150
+
151
+ describe('.xor()', function () {
152
+ it('should xor numbers', function () {
153
+ expect(new BigNumber('11001100110011001100110011001100', 2)
154
+ .xor(new BigNumber('1100110011001100110011001100110', 2))
155
+ .toString(2)).toEqual('10101010101010101010101010101010')
156
+ })
157
+ })
158
+
159
+ describe('.ixor()', function () {
160
+ it('should ixor numbers', function () {
161
+ expect(new BigNumber('11001100110011001100110011001100', 2)
162
+ .ixor(new BigNumber('1100110011001100110011001100110', 2))
163
+ .toString(2)).toEqual('10101010101010101010101010101010')
164
+ expect(new BigNumber('11001100110011001100110011001100', 2)
165
+ .ixor(new BigNumber('1', 2))
166
+ .toString(2)).toEqual('11001100110011001100110011001101')
167
+ expect(new BigNumber('1', 2)
168
+ .ixor(new BigNumber('11001100110011001100110011001100', 2))
169
+ .toString(2)).toEqual('11001100110011001100110011001101')
170
+ })
171
+
172
+ it('should and numbers of different limb-length', function () {
173
+ expect(
174
+ new BigNumber('abcd0000ffff', 16)
175
+ .ixor(new BigNumber('abcd', 16)).toString(16)).toEqual('abcd00005432')
176
+ })
177
+ })
178
+
179
+ describe('.setn()', function () {
180
+ it('should allow single bits to be set', function () {
181
+ expect(new BigNumber(0).setn(2, true).toString(2)).toEqual('100')
182
+ expect(new BigNumber(0).setn(27, true).toString(2)).toEqual('1000000000000000000000000000')
183
+ expect(new BigNumber(0).setn(63, true).toString(16)).toEqual(new BigNumber(1).iushln(63).toString(16))
184
+ expect(new BigNumber('1000000000000000000000000001', 2).setn(27, false).toString(2)).toEqual('1')
185
+ expect(new BigNumber('101', 2).setn(2, false).toString(2)).toEqual('1')
186
+ })
187
+ })
188
+
189
+ describe('.notn()', function () {
190
+ it('should allow bitwise negation', function () {
191
+ expect(new BigNumber('111000111', 2).notn(9).toString(2)).toEqual('111000')
192
+ expect(new BigNumber('000111000', 2).notn(9).toString(2)).toEqual('111000111')
193
+ expect(new BigNumber('111000111', 2).notn(9).toString(2)).toEqual('111000')
194
+ expect(new BigNumber('000111000', 2).notn(9).toString(2)).toEqual('111000111')
195
+ expect(new BigNumber('111000111', 2).notn(32).toString(2)).toEqual('11111111111111111111111000111000')
196
+ expect(new BigNumber('000111000', 2).notn(32).toString(2)).toEqual('11111111111111111111111111000111')
197
+ expect(new BigNumber('111000111', 2).notn(68).toString(2)).toEqual('11111111111111111111111111111111' +
198
+ '111111111111111111111111111000111000')
199
+ expect(new BigNumber('000111000', 2).notn(68).toString(2)).toEqual('11111111111111111111111111111111' +
200
+ '111111111111111111111111111111000111')
201
+ })
202
+ })
203
+ })
@@ -0,0 +1,176 @@
1
+ import BigNumber from '../../../dist/cjs/src/primitives/BigNumber'
2
+
3
+ describe('BN.js/Constructor', () => {
4
+ describe('with Smi input', () => {
5
+ it('should accept one limb number', () => {
6
+ expect(new BigNumber(12345).toString(16)).toEqual('3039')
7
+ })
8
+
9
+ it('should accept two-limb number', () => {
10
+ expect(new BigNumber(0x4123456).toString(16)).toEqual('4123456')
11
+ })
12
+
13
+ it('should accept 52 bits of precision', () => {
14
+ const num = Math.pow(2, 52)
15
+ expect(new BigNumber(num, 10).toString(10)).toEqual(num.toString(10))
16
+ })
17
+
18
+ it('should accept max safe integer', () => {
19
+ const num = Math.pow(2, 53) - 1
20
+ expect(new BigNumber(num, 10).toString(10)).toEqual(num.toString(10))
21
+ })
22
+
23
+ it('should not accept an unsafe integer', () => {
24
+ const num = Math.pow(2, 53)
25
+
26
+ expect(() => {
27
+ return new BigNumber(num, 10)
28
+ }).toThrow(new Error('The number is larger than 2 ^ 53 (unsafe)'))
29
+ })
30
+
31
+ it('should accept two-limb LE number', () => {
32
+ expect(new BigNumber(0x4123456, undefined, 'le').toString(16)).toEqual('56341204')
33
+ })
34
+ })
35
+
36
+ describe('with String input', () => {
37
+ it('should accept base-16', () => {
38
+ expect(new BigNumber('1A6B765D8CDF', 16).toString(16)).toEqual('1a6b765d8cdf')
39
+ expect(new BigNumber('1A6B765D8CDF', 16).toString()).toEqual('29048849665247')
40
+ })
41
+
42
+ it('should accept base-hex', () => {
43
+ expect(new BigNumber('FF', 'hex').toString()).toEqual('255')
44
+ })
45
+
46
+ it('should accept base-16 with spaces', () => {
47
+ const num = 'a89c e5af8724 c0a23e0e 0ff77500'
48
+ expect(new BigNumber(num, 16).toString(16)).toEqual(num.replace(/ /g, ''))
49
+ })
50
+
51
+ it('should accept long base-16', () => {
52
+ const num = '123456789abcdef123456789abcdef123456789abcdef'
53
+ expect(new BigNumber(num, 16).toString(16)).toEqual(num)
54
+ })
55
+
56
+ it('should accept positive base-10', () => {
57
+ expect(new BigNumber('10654321').toString()).toEqual('10654321')
58
+ expect(new BigNumber('29048849665247').toString(16)).toEqual('1a6b765d8cdf')
59
+ })
60
+
61
+ it('should accept negative base-10', () => {
62
+ expect(new BigNumber('-29048849665247').toString(16)).toEqual('-1a6b765d8cdf')
63
+ })
64
+
65
+ it('should accept long base-10', () => {
66
+ const num = '10000000000000000'
67
+ expect(new BigNumber(num).toString(10)).toEqual(num)
68
+ })
69
+
70
+ it('should accept base-2', () => {
71
+ const base2 = '11111111111111111111111111111111111111111111111111111'
72
+ expect(new BigNumber(base2, 2).toString(2)).toEqual(base2)
73
+ })
74
+
75
+ it('should accept base-36', () => {
76
+ const base36 = 'zzZzzzZzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz'
77
+ expect(new BigNumber(base36, 36).toString(36)).toEqual(base36.toLowerCase())
78
+ })
79
+
80
+ it('should not overflow limbs during base-10', () => {
81
+ const num = '65820182292848241686198767302293' +
82
+ '20890292528855852623664389292032'
83
+ expect(new BigNumber(num).words[0]).toBeLessThan(0x4000000)
84
+ })
85
+
86
+ it('should accept base-16 LE integer', () => {
87
+ expect(new BigNumber('1A6B765D8CDF', 16, 'le').toString(16))
88
+ .toEqual('df8c5d766b1a')
89
+ })
90
+
91
+ it('should accept base-16 LE integer with leading zeros', () => {
92
+ expect(new BigNumber('0010', 16, 'le').toNumber()).toEqual(4096)
93
+ expect(new BigNumber('-010', 16, 'le').toNumber()).toEqual(-4096)
94
+ expect(new BigNumber('010', 16, 'le').toNumber()).toEqual(4096)
95
+ })
96
+
97
+ it('should not accept wrong characters for base', () => {
98
+ expect(() => {
99
+ return new BigNumber('01FF')
100
+ }).toThrow(new Error('Invalid character'))
101
+ })
102
+
103
+ it('should not accept decimal', () => {
104
+ expect(() => {
105
+ new BigNumber('10.00', 10) // eslint-disable-line no-new
106
+ }).toThrow(new Error('Invalid character'))
107
+
108
+ expect(() => {
109
+ new BigNumber('16.00', 16) // eslint-disable-line no-new
110
+ }).toThrow(/* new Error('Invalid character') */)
111
+ })
112
+
113
+ it('should not accept non-hex characters', () => {
114
+ [
115
+ '0000000z',
116
+ '000000gg',
117
+ '0000gg00',
118
+ 'fffggfff',
119
+ '/0000000',
120
+ '0-000000', // if -, is first, that is OK
121
+ 'ff.fffff',
122
+ 'hexadecimal'
123
+ ].forEach(function (str) {
124
+ expect(() => {
125
+ new BigNumber(str, 16) // eslint-disable-line no-new
126
+ }).toThrow(/* Invalid character in */)
127
+ })
128
+ })
129
+ })
130
+
131
+ describe('with Array input', () => {
132
+ it('should not fail on empty array', () => {
133
+ expect(new BigNumber([]).toString(16)).toEqual('0')
134
+ })
135
+
136
+ it('should import/export big endian', () => {
137
+ expect(new BigNumber([0, 1], 16).toString(16)).toEqual('1')
138
+ expect(new BigNumber([1, 2, 3]).toString(16)).toEqual('10203')
139
+ expect(new BigNumber([1, 2, 3, 4]).toString(16)).toEqual('1020304')
140
+ expect(new BigNumber([1, 2, 3, 4, 5]).toString(16)).toEqual('102030405')
141
+ expect(new BigNumber([1, 2, 3, 4, 5, 6, 7, 8]).toString(16)).toEqual(
142
+ '102030405060708')
143
+ expect(new BigNumber([1, 2, 3, 4]).toArray().join(',')).toEqual('1,2,3,4')
144
+ expect(new BigNumber([1, 2, 3, 4, 5, 6, 7, 8]).toArray().join(',')).toEqual('1,2,3,4,5,6,7,8')
145
+ })
146
+
147
+ it('should import little endian', () => {
148
+ expect(new BigNumber([0, 1], 16, 'le').toString(16)).toEqual('100')
149
+ expect(new BigNumber([1, 2, 3], 16, 'le').toString(16)).toEqual('30201')
150
+ expect(new BigNumber([1, 2, 3, 4], 16, 'le').toString(16)).toEqual('4030201')
151
+ expect(new BigNumber([1, 2, 3, 4, 5], 16, 'le').toString(16)).toEqual('504030201')
152
+ expect(new BigNumber([1, 2, 3, 4, 5, 6, 7, 8], 'le').toString(16)).toEqual('807060504030201')
153
+ expect(new BigNumber([1, 2, 3, 4]).toArray('le').join(',')).toEqual('4,3,2,1')
154
+ expect(new BigNumber([1, 2, 3, 4, 5, 6, 7, 8]).toArray('le').join(',')).toEqual('8,7,6,5,4,3,2,1')
155
+ })
156
+
157
+ it('should import big endian with implicit base', () => {
158
+ expect(new BigNumber([1, 2, 3, 4, 5], 'le').toString(16)).toEqual('504030201')
159
+ })
160
+ })
161
+
162
+ // the Array code is able to handle Buffer
163
+ describe('with Buffer input', () => {
164
+ it('should not fail on empty Buffer', () => {
165
+ expect(new BigNumber(Buffer.alloc(0)).toString(16)).toEqual('0')
166
+ })
167
+
168
+ it('should import/export big endian', () => {
169
+ expect(new BigNumber(Buffer.from('010203', 'hex')).toString(16)).toEqual('10203')
170
+ })
171
+
172
+ it('should import little endian', () => {
173
+ expect(new BigNumber(Buffer.from('010203', 'hex'), 'le').toString(16)).toEqual('30201')
174
+ })
175
+ })
176
+ })
@@ -0,0 +1,18 @@
1
+ /* eslint-env jest */
2
+ import BigNumber from '../../../dist/cjs/src/primitives/BigNumber'
3
+ import ReductionContext from '../../../dist/cjs/src/primitives/ReductionContext'
4
+ import { dhGroups } from './BigNumber.fixtures'
5
+
6
+ describe('BN.js/Slow DH test', () => {
7
+ Object.keys(dhGroups).forEach(function (name) {
8
+ it('should match public key for ' + name + ' group', () => {
9
+ const group = dhGroups[name]
10
+ const base = new BigNumber(2)
11
+ const mont = new ReductionContext(new BigNumber(group.prime, 16))
12
+ const priv = new BigNumber(group.priv, 16)
13
+ const multed = base.toRed(mont).redPow(priv).fromRed()
14
+ const actual = Buffer.from(multed.toArray())
15
+ expect(actual.toString('hex')).toEqual(group.pub)
16
+ }, 3600 * 1000)
17
+ })
18
+ })
@@ -0,0 +1,264 @@
1
+ export const dhGroups = {
2
+ p16: {
3
+ prime: 'ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd1' +
4
+ '29024e088a67cc74020bbea63b139b22514a08798e3404dd' +
5
+ 'ef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245' +
6
+ 'e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7ed' +
7
+ 'ee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3d' +
8
+ 'c2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f' +
9
+ '83655d23dca3ad961c62f356208552bb9ed529077096966d' +
10
+ '670c354e4abc9804f1746c08ca18217c32905e462e36ce3b' +
11
+ 'e39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9' +
12
+ 'de2bcbf6955817183995497cea956ae515d2261898fa0510' +
13
+ '15728e5a8aaac42dad33170d04507a33a85521abdf1cba64' +
14
+ 'ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7' +
15
+ 'abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6b' +
16
+ 'f12ffa06d98a0864d87602733ec86a64521f2b18177b200c' +
17
+ 'bbe117577a615d6c770988c0bad946e208e24fa074e5ab31' +
18
+ '43db5bfce0fd108e4b82d120a92108011a723c12a787e6d7' +
19
+ '88719a10bdba5b2699c327186af4e23c1a946834b6150bda' +
20
+ '2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6' +
21
+ '287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed' +
22
+ '1f612970cee2d7afb81bdd762170481cd0069127d5b05aa9' +
23
+ '93b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199' +
24
+ 'ffffffffffffffff',
25
+ priv: '6d5923e6449122cbbcc1b96093e0b7e4fd3e469f58daddae' +
26
+ '53b49b20664f4132675df9ce98ae0cfdcac0f4181ccb643b' +
27
+ '625f98104dcf6f7d8e81961e2cab4b5014895260cb977c7d' +
28
+ '2f981f8532fb5da60b3676dfe57f293f05d525866053ac7e' +
29
+ '65abfd19241146e92e64f309a97ef3b529af4d6189fa416c' +
30
+ '9e1a816c3bdf88e5edf48fbd8233ef9038bb46faa95122c0' +
31
+ '5a426be72039639cd2d53d37254b3d258960dcb33c255ede' +
32
+ '20e9d7b4b123c8b4f4b986f53cdd510d042166f7dd7dca98' +
33
+ '7c39ab36381ba30a5fdd027eb6128d2ef8e5802a2194d422' +
34
+ 'b05fe6e1cb4817789b923d8636c1ec4b7601c90da3ddc178' +
35
+ '52f59217ae070d87f2e75cbfb6ff92430ad26a71c8373452' +
36
+ 'ae1cc5c93350e2d7b87e0acfeba401aaf518580937bf0b6c' +
37
+ '341f8c49165a47e49ce50853989d07171c00f43dcddddf72' +
38
+ '94fb9c3f4e1124e98ef656b797ef48974ddcd43a21fa06d0' +
39
+ '565ae8ce494747ce9e0ea0166e76eb45279e5c6471db7df8' +
40
+ 'cc88764be29666de9c545e72da36da2f7a352fb17bdeb982' +
41
+ 'a6dc0193ec4bf00b2e533efd6cd4d46e6fb237b775615576' +
42
+ 'dd6c7c7bbc087a25e6909d1ebc6e5b38e5c8472c0fc429c6' +
43
+ 'f17da1838cbcd9bbef57c5b5522fd6053e62ba21fe97c826' +
44
+ 'd3889d0cc17e5fa00b54d8d9f0f46fb523698af965950f4b' +
45
+ '941369e180f0aece3870d9335f2301db251595d173902cad' +
46
+ '394eaa6ffef8be6c',
47
+ pub: 'd53703b7340bc89bfc47176d351e5cf86d5a18d9662eca3c' +
48
+ '9759c83b6ccda8859649a5866524d77f79e501db923416ca' +
49
+ '2636243836d3e6df752defc0fb19cc386e3ae48ad647753f' +
50
+ 'bf415e2612f8a9fd01efe7aca249589590c7e6a0332630bb' +
51
+ '29c5b3501265d720213790556f0f1d114a9e2071be3620bd' +
52
+ '4ee1e8bb96689ac9e226f0a4203025f0267adc273a43582b' +
53
+ '00b70b490343529eaec4dcff140773cd6654658517f51193' +
54
+ '13f21f0a8e04fe7d7b21ffeca85ff8f87c42bb8d9cb13a72' +
55
+ 'c00e9c6e9dfcedda0777af951cc8ccab90d35e915e707d8e' +
56
+ '4c2aca219547dd78e9a1a0730accdc9ad0b854e51edd1e91' +
57
+ '4756760bab156ca6e3cb9c625cf0870def34e9ac2e552800' +
58
+ 'd6ce506d43dbbc75acfa0c8d8fb12daa3c783fb726f187d5' +
59
+ '58131779239c912d389d0511e0f3a81969d12aeee670e48f' +
60
+ 'ba41f7ed9f10705543689c2506b976a8ffabed45e33795b0' +
61
+ '1df4f6b993a33d1deab1316a67419afa31fbb6fdd252ee8c' +
62
+ '7c7d1d016c44e3fcf6b41898d7f206aa33760b505e4eff2e' +
63
+ 'c624bc7fe636b1d59e45d6f904fc391419f13d1f0cdb5b6c' +
64
+ '2378b09434159917dde709f8a6b5dc30994d056e3f964371' +
65
+ '11587ac7af0a442b8367a7bd940f752ddabf31cf01171e24' +
66
+ 'd78df136e9681cd974ce4f858a5fb6efd3234a91857bb52d' +
67
+ '9e7b414a8bc66db4b5a73bbeccfb6eb764b4f0cbf0375136' +
68
+ 'b024b04e698d54a5'
69
+ },
70
+ p17: {
71
+ prime: 'ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd1' +
72
+ '29024e088a67cc74020bbea63b139b22514a08798e3404dd' +
73
+ 'ef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245' +
74
+ 'e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7ed' +
75
+ 'ee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3d' +
76
+ 'c2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f' +
77
+ '83655d23dca3ad961c62f356208552bb9ed529077096966d' +
78
+ '670c354e4abc9804f1746c08ca18217c32905e462e36ce3b' +
79
+ 'e39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9' +
80
+ 'de2bcbf6955817183995497cea956ae515d2261898fa0510' +
81
+ '15728e5a8aaac42dad33170d04507a33a85521abdf1cba64' +
82
+ 'ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7' +
83
+ 'abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6b' +
84
+ 'f12ffa06d98a0864d87602733ec86a64521f2b18177b200c' +
85
+ 'bbe117577a615d6c770988c0bad946e208e24fa074e5ab31' +
86
+ '43db5bfce0fd108e4b82d120a92108011a723c12a787e6d7' +
87
+ '88719a10bdba5b2699c327186af4e23c1a946834b6150bda' +
88
+ '2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6' +
89
+ '287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed' +
90
+ '1f612970cee2d7afb81bdd762170481cd0069127d5b05aa9' +
91
+ '93b4ea988d8fddc186ffb7dc90a6c08f4df435c934028492' +
92
+ '36c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bd' +
93
+ 'f8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831' +
94
+ '179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1b' +
95
+ 'db7f1447e6cc254b332051512bd7af426fb8f401378cd2bf' +
96
+ '5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6' +
97
+ 'd55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f3' +
98
+ '23a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aa' +
99
+ 'cc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be328' +
100
+ '06a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55c' +
101
+ 'da56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee' +
102
+ '12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff',
103
+ priv: '6017f2bc23e1caff5b0a8b4e1fc72422b5204415787801dc' +
104
+ '025762b8dbb98ab57603aaaa27c4e6bdf742b4a1726b9375' +
105
+ 'a8ca3cf07771779589831d8bd18ddeb79c43e7e77d433950' +
106
+ 'e652e49df35b11fa09644874d71d62fdaffb580816c2c88c' +
107
+ '2c4a2eefd4a660360316741b05a15a2e37f236692ad3c463' +
108
+ 'fff559938fc6b77176e84e1bb47fb41af691c5eb7bb81bd8' +
109
+ 'c918f52625a1128f754b08f5a1403b84667231c4dfe07ed4' +
110
+ '326234c113931ce606037e960f35a2dfdec38a5f057884d3' +
111
+ '0af8fab3be39c1eeb390205fd65982191fc21d5aa30ddf51' +
112
+ 'a8e1c58c0c19fc4b4a7380ea9e836aaf671c90c29bc4bcc7' +
113
+ '813811aa436a7a9005de9b507957c56a9caa1351b6efc620' +
114
+ '7225a18f6e97f830fb6a8c4f03b82f4611e67ab9497b9271' +
115
+ 'd6ac252793cc3e5538990dbd894d2dbc2d152801937d9f74' +
116
+ 'da4b741b50b4d40e4c75e2ac163f7b397fd555648b249f97' +
117
+ 'ffe58ffb6d096aa84534c4c5729cff137759bd34e80db4ab' +
118
+ '47e2b9c52064e7f0bf677f72ac9e5d0c6606943683f9d12f' +
119
+ '180cf065a5cb8ec3179a874f358847a907f8471d15f1e728' +
120
+ '7023249d6d13c82da52628654438f47b8b5cdf4761fbf6ad' +
121
+ '9219eceac657dbd06cf2ab776ad4c968f81c3d039367f0a4' +
122
+ 'd77c7ec4435c27b6c147071665100063b5666e06eb2fb2cc' +
123
+ '3159ba34bc98ca346342195f6f1fb053ddc3bc1873564d40' +
124
+ '1c6738cdf764d6e1ff25ca5926f80102ea6593c17170966b' +
125
+ 'b5d7352dd7fb821230237ea3ebed1f920feaadbd21be295a' +
126
+ '69f2083deae9c5cdf5f4830eb04b7c1f80cc61c17232d79f' +
127
+ '7ecc2cc462a7965f804001c89982734e5abba2d31df1b012' +
128
+ '152c6b226dff34510b54be8c2cd68d795def66c57a3abfb6' +
129
+ '896f1d139e633417f8c694764974d268f46ece3a8d6616ea' +
130
+ 'a592144be48ee1e0a1595d3e5edfede5b27cec6c48ceb2ff' +
131
+ 'b42cb44275851b0ebf87dfc9aa2d0cb0805e9454b051dfe8' +
132
+ 'a29fadd82491a4b4c23f2d06ba45483ab59976da1433c9ce' +
133
+ '500164b957a04cf62dd67595319b512fc4b998424d1164dd' +
134
+ 'bbe5d1a0f7257cbb04ec9b5ed92079a1502d98725023ecb2',
135
+ pub: '3bf836229c7dd874fe37c1790d201e82ed8e192ed61571ca' +
136
+ '7285264974eb2a0171f3747b2fc23969a916cbd21e14f7e2' +
137
+ 'f0d72dcd2247affba926f9e7bb99944cb5609aed85e71b89' +
138
+ 'e89d2651550cb5bd8281bd3144066af78f194032aa777739' +
139
+ 'cccb7862a1af401f99f7e5c693f25ddce2dedd9686633820' +
140
+ 'd28d0f5ed0c6b5a094f5fe6170b8e2cbc9dff118398baee6' +
141
+ 'e895a6301cb6e881b3cae749a5bdf5c56fc897ff68bc73f2' +
142
+ '4811bb108b882872bade1f147d886a415cda2b93dd90190c' +
143
+ 'be5c2dd53fe78add5960e97f58ff2506afe437f4cf4c912a' +
144
+ '397c1a2139ac6207d3ab76e6b7ffd23bb6866dd7f87a9ae5' +
145
+ '578789084ff2d06ea0d30156d7a10496e8ebe094f5703539' +
146
+ '730f5fdbebc066de417be82c99c7da59953071f49da7878d' +
147
+ 'a588775ff2a7f0084de390f009f372af75cdeba292b08ea8' +
148
+ '4bd13a87e1ca678f9ad148145f7cef3620d69a891be46fbb' +
149
+ 'cad858e2401ec0fd72abdea2f643e6d0197b7646fbb83220' +
150
+ '0f4cf7a7f6a7559f9fb0d0f1680822af9dbd8dec4cd1b5e1' +
151
+ '7bc799e902d9fe746ddf41da3b7020350d3600347398999a' +
152
+ 'baf75d53e03ad2ee17de8a2032f1008c6c2e6618b62f225b' +
153
+ 'a2f350179445debe68500fcbb6cae970a9920e321b468b74' +
154
+ '5fb524fb88abbcacdca121d737c44d30724227a99745c209' +
155
+ 'b970d1ff93bbc9f28b01b4e714d6c9cbd9ea032d4e964d8e' +
156
+ '8fff01db095160c20b7646d9fcd314c4bc11bcc232aeccc0' +
157
+ 'fbedccbc786951025597522eef283e3f56b44561a0765783' +
158
+ '420128638c257e54b972a76e4261892d81222b3e2039c61a' +
159
+ 'ab8408fcaac3d634f848ab3ee65ea1bd13c6cd75d2e78060' +
160
+ 'e13cf67fbef8de66d2049e26c0541c679fff3e6afc290efe' +
161
+ '875c213df9678e4a7ec484bc87dae5f0a1c26d7583e38941' +
162
+ 'b7c68b004d4df8b004b666f9448aac1cc3ea21461f41ea5d' +
163
+ 'd0f7a9e6161cfe0f58bcfd304bdc11d78c2e9d542e86c0b5' +
164
+ '6985cc83f693f686eaac17411a8247bf62f5ccc7782349b5' +
165
+ 'cc1f20e312fa2acc0197154d1bfee507e8db77e8f2732f2d' +
166
+ '641440ccf248e8643b2bd1e1f9e8239356ab91098fcb431d',
167
+ q: 'a899c59999bf877d96442d284359783bdc64b5f878b688fe' +
168
+ '51407f0526e616553ad0aaaac4d5bed3046f10a1faaf42bb' +
169
+ '2342dc4b7908eea0c46e4c4576897675c2bfdc4467870d3d' +
170
+ 'cd90adaed4359237a4bc6924bfb99aa6bf5f5ede15b574ea' +
171
+ 'e977eac096f3c67d09bda574c6306c6123fa89d2f086b8dc' +
172
+ 'ff92bc570c18d83fe6c810ccfd22ce4c749ef5e6ead3fffe' +
173
+ 'c63d95e0e3fde1df9db6a35fa1d107058f37e41957769199' +
174
+ 'd945dd7a373622c65f0af3fd9eb1ddc5c764bbfaf7a3dc37' +
175
+ '2548e683b970dac4aa4b9869080d2376c9adecebb84e172c' +
176
+ '09aeeb25fb8df23e60033260c4f8aac6b8b98ab894b1fb84' +
177
+ 'ebb83c0fb2081c3f3eee07f44e24d8fabf76f19ed167b0d7' +
178
+ 'ff971565aa4efa3625fce5a43ceeaa3eebb3ce88a00f597f' +
179
+ '048c69292b38dba2103ecdd5ec4ccfe3b2d87fa6202f334b' +
180
+ 'c1cab83b608dfc875b650b69f2c7e23c0b2b4adf149a6100' +
181
+ 'db1b6dbad4679ecb1ea95eafaba3bd00db11c2134f5a8686' +
182
+ '358b8b2ab49a1b2e85e1e45caeac5cd4dc0b3b5fffba8871' +
183
+ '1c6baf399edd48dad5e5c313702737a6dbdcede80ca358e5' +
184
+ '1d1c4fe42e8948a084403f61baed38aa9a1a5ce2918e9f33' +
185
+ '100050a430b47bc592995606440272a4994677577a6aaa1b' +
186
+ 'a101045dbec5a4e9566dab5445d1af3ed19519f07ac4e2a8' +
187
+ 'bd0a84b01978f203a9125a0be020f71fab56c2c9e344d4f4' +
188
+ '12d53d3cd8eb74ca5122002e931e3cb0bd4b7492436be17a' +
189
+ 'd7ebe27148671f59432c36d8c56eb762655711cfc8471f70' +
190
+ '83a8b7283bcb3b1b1d47d37c23d030288cfcef05fbdb4e16' +
191
+ '652ee03ee7b77056a808cd700bc3d9ef826eca9a59be959c' +
192
+ '947c865d6b372a1ca2d503d7df6d7611b12111665438475a' +
193
+ '1c64145849b3da8c2d343410df892d958db232617f9896f1' +
194
+ 'de95b8b5a47132be80dd65298c7f2047858409bf762dbc05' +
195
+ 'a62ca392ac40cfb8201a0607a2cae07d99a307625f2b2d04' +
196
+ 'fe83fbd3ab53602263410f143b73d5b46fc761882e78c782' +
197
+ 'd2c36e716a770a7aefaf7f76cea872db7bffefdbc4c2f9e0' +
198
+ '39c19adac915e7a63dcb8c8c78c113f29a3e0bc10e100ce0',
199
+ qs: '6f0a2fb763eaeb8eb324d564f03d4a55fdcd709e5f1b65e9' +
200
+ '5702b0141182f9f945d71bc3e64a7dfdae7482a7dd5a4e58' +
201
+ 'bc38f78de2013f2c468a621f08536969d2c8d011bb3bc259' +
202
+ '2124692c91140a5472cad224acdacdeae5751dadfdf068b8' +
203
+ '77bfa7374694c6a7be159fc3d24ff9eeeecaf62580427ad8' +
204
+ '622d48c51a1c4b1701d768c79d8c819776e096d2694107a2' +
205
+ 'f3ec0c32224795b59d32894834039dacb369280afb221bc0' +
206
+ '90570a93cf409889b818bb30cccee98b2aa26dbba0f28499' +
207
+ '08e1a3cd43fa1f1fb71049e5c77c3724d74dc351d9989057' +
208
+ '37bbda3805bd6b1293da8774410fb66e3194e18cdb304dd9' +
209
+ 'a0b59b583dcbc9fc045ac9d56aea5cfc9f8a0b95da1e11b7' +
210
+ '574d1f976e45fe12294997fac66ca0b83fc056183549e850' +
211
+ 'a11413cc4abbe39a211e8c8cbf82f2a23266b3c10ab9e286' +
212
+ '07a1b6088909cddff856e1eb6b2cde8bdac53fa939827736' +
213
+ 'ca1b892f6c95899613442bd02dbdb747f02487718e2d3f22' +
214
+ 'f73734d29767ed8d0e346d0c4098b6fdcb4df7d0c4d29603' +
215
+ '5bffe80d6c65ae0a1b814150d349096baaf950f2caf298d2' +
216
+ 'b292a1d48cf82b10734fe8cedfa16914076dfe3e9b51337b' +
217
+ 'ed28ea1e6824bb717b641ca0e526e175d3e5ed7892aebab0' +
218
+ 'f207562cc938a821e2956107c09b6ce4049adddcd0b7505d' +
219
+ '49ae6c69a20122461102d465d93dc03db026be54c303613a' +
220
+ 'b8e5ce3fd4f65d0b6162ff740a0bf5469ffd442d8c509cd2' +
221
+ '3b40dab90f6776ca17fc0678774bd6eee1fa85ababa52ec1' +
222
+ 'a15031eb677c6c488661dddd8b83d6031fe294489ded5f08' +
223
+ '8ad1689a14baeae7e688afa3033899c81f58de39b392ca94' +
224
+ 'af6f15a46f19fa95c06f9493c8b96a9be25e78b9ea35013b' +
225
+ 'caa76de6303939299d07426a88a334278fc3d0d9fa71373e' +
226
+ 'be51d3c1076ab93a11d3d0d703366ff8cde4c11261d488e5' +
227
+ '60a2bdf3bfe2476032294800d6a4a39d306e65c6d7d8d66e' +
228
+ '5ec63eee94531e83a9bddc458a2b508285c0ee10b7bd94da' +
229
+ '2815a0c5bd5b2e15cbe66355e42f5af8955cdfc0b3a4996d' +
230
+ '288db1f4b32b15643b18193e378cb7491f3c3951cdd044b1' +
231
+ 'a519571bffac2da986f5f1d506c66530a55f70751e24fa8e' +
232
+ 'd83ac2347f4069fb561a5565e78c6f0207da24e889a93a96' +
233
+ '65f717d9fe8a2938a09ab5f81be7ccecf466c0397fc15a57' +
234
+ '469939793f302739765773c256a3ca55d0548afd117a7cae' +
235
+ '98ca7e0d749a130c7b743d376848e255f8fdbe4cb4480b63' +
236
+ 'cd2c015d1020cf095d175f3ca9dcdfbaf1b2a6e6468eee4c' +
237
+ 'c750f2132a77f376bd9782b9d0ff4da98621b898e251a263' +
238
+ '4301ba2214a8c430b2f7a79dbbfd6d7ff6e9b0c137b025ff' +
239
+ '587c0bf912f0b19d4fff96b1ecd2ca990c89b386055c60f2' +
240
+ '3b94214bd55096f17a7b2c0fa12b333235101cd6f28a128c' +
241
+ '782e8a72671adadebbd073ded30bd7f09fb693565dcf0bf3' +
242
+ '090c21d13e5b0989dd8956f18f17f4f69449a13549c9d80a' +
243
+ '77e5e61b5aeeee9528634100e7bc390672f0ded1ca53555b' +
244
+ 'abddbcf700b9da6192255bddf50a76b709fbed251dce4c7e' +
245
+ '1ca36b85d1e97c1bc9d38c887a5adf140f9eeef674c31422' +
246
+ 'e65f63cae719f8c1324e42fa5fd8500899ef5aa3f9856aa7' +
247
+ 'ce10c85600a040343204f36bfeab8cfa6e9deb8a2edd2a8e' +
248
+ '018d00c7c9fa3a251ad0f57183c37e6377797653f382ec7a' +
249
+ '2b0145e16d3c856bc3634b46d90d7198aff12aff88a30e34' +
250
+ 'e2bfaf62705f3382576a9d3eeb0829fca2387b5b654af46e' +
251
+ '5cf6316fb57d59e5ea6c369061ac64d99671b0e516529dd5' +
252
+ 'd9c48ea0503e55fee090d36c5ea8b5954f6fcc0060794e1c' +
253
+ 'b7bc24aa1e5c0142fd4ce6e8fd5aa92a7bf84317ea9e1642' +
254
+ 'b6995bac6705adf93cbce72433ed0871139970d640f67b78' +
255
+ 'e63a7a6d849db2567df69ac7d79f8c62664ac221df228289' +
256
+ 'd0a4f9ebd9acb4f87d49da64e51a619fd3f3baccbd9feb12' +
257
+ '5abe0cc2c8d17ed1d8546da2b6c641f4d3020a5f9b9f26ac' +
258
+ '16546c2d61385505612275ea344c2bbf1ce890023738f715' +
259
+ '5e9eba6a071678c8ebd009c328c3eb643679de86e69a9fa5' +
260
+ '67a9e146030ff03d546310a0a568c5ba0070e0da22f2cef8' +
261
+ '54714b04d399bbc8fd261f9e8efcd0e83bdbc3f5cfb2d024' +
262
+ '3e398478cc598e000124eb8858f9df8f52946c2a1ca5c400'
263
+ }
264
+ }