@bsv/sdk 1.3.12 → 1.3.14

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 (607) hide show
  1. package/dist/cjs/package.json +15 -3
  2. package/dist/cjs/src/auth/Peer.js +83 -57
  3. package/dist/cjs/src/auth/Peer.js.map +1 -1
  4. package/dist/cjs/src/auth/SessionManager.js +14 -9
  5. package/dist/cjs/src/auth/SessionManager.js.map +1 -1
  6. package/dist/cjs/src/auth/certificates/Certificate.js +16 -10
  7. package/dist/cjs/src/auth/certificates/Certificate.js.map +1 -1
  8. package/dist/cjs/src/auth/certificates/MasterCertificate.js +25 -23
  9. package/dist/cjs/src/auth/certificates/MasterCertificate.js.map +1 -1
  10. package/dist/cjs/src/auth/certificates/VerifiableCertificate.js +2 -2
  11. package/dist/cjs/src/auth/certificates/VerifiableCertificate.js.map +1 -1
  12. package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js +62 -46
  13. package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
  14. package/dist/cjs/src/auth/clients/AuthFetch.js +1 -0
  15. package/dist/cjs/src/auth/clients/AuthFetch.js.map +1 -1
  16. package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js +70 -43
  17. package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
  18. package/dist/cjs/src/auth/utils/createNonce.js +2 -1
  19. package/dist/cjs/src/auth/utils/createNonce.js.map +1 -1
  20. package/dist/cjs/src/auth/utils/getVerifiableCertificates.js.map +1 -1
  21. package/dist/cjs/src/auth/utils/validateCertificates.js +5 -2
  22. package/dist/cjs/src/auth/utils/validateCertificates.js.map +1 -1
  23. package/dist/cjs/src/auth/utils/verifyNonce.js +2 -1
  24. package/dist/cjs/src/auth/utils/verifyNonce.js.map +1 -1
  25. package/dist/cjs/src/compat/BSM.js +7 -17
  26. package/dist/cjs/src/compat/BSM.js.map +1 -1
  27. package/dist/cjs/src/compat/ECIES.js +172 -133
  28. package/dist/cjs/src/compat/ECIES.js.map +1 -1
  29. package/dist/cjs/src/compat/HD.js +63 -73
  30. package/dist/cjs/src/compat/HD.js.map +1 -1
  31. package/dist/cjs/src/compat/Mnemonic.js +102 -106
  32. package/dist/cjs/src/compat/Mnemonic.js.map +1 -1
  33. package/dist/cjs/src/compat/Utxo.js +2 -2
  34. package/dist/cjs/src/compat/Utxo.js.map +1 -1
  35. package/dist/cjs/src/compat/index.js +7 -17
  36. package/dist/cjs/src/compat/index.js.map +1 -1
  37. package/dist/cjs/src/messages/EncryptedMessage.js +3 -1
  38. package/dist/cjs/src/messages/EncryptedMessage.js.map +1 -1
  39. package/dist/cjs/src/messages/SignedMessage.js +1 -0
  40. package/dist/cjs/src/messages/SignedMessage.js.map +1 -1
  41. package/dist/cjs/src/messages/index.js +7 -17
  42. package/dist/cjs/src/messages/index.js.map +1 -1
  43. package/dist/cjs/src/overlay-tools/LookupResolver.js +54 -35
  44. package/dist/cjs/src/overlay-tools/LookupResolver.js.map +1 -1
  45. package/dist/cjs/src/overlay-tools/OverlayAdminTokenTemplate.js +32 -20
  46. package/dist/cjs/src/overlay-tools/OverlayAdminTokenTemplate.js.map +1 -1
  47. package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js +40 -28
  48. package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
  49. package/dist/cjs/src/primitives/AESGCM.js +6 -5
  50. package/dist/cjs/src/primitives/AESGCM.js.map +1 -1
  51. package/dist/cjs/src/primitives/BasePoint.js +1 -1
  52. package/dist/cjs/src/primitives/BasePoint.js.map +1 -1
  53. package/dist/cjs/src/primitives/BigNumber.js +50 -62
  54. package/dist/cjs/src/primitives/BigNumber.js.map +1 -1
  55. package/dist/cjs/src/primitives/Curve.js +46 -22
  56. package/dist/cjs/src/primitives/Curve.js.map +1 -1
  57. package/dist/cjs/src/primitives/DRBG.js +2 -8
  58. package/dist/cjs/src/primitives/DRBG.js.map +1 -1
  59. package/dist/cjs/src/primitives/ECDSA.js +51 -35
  60. package/dist/cjs/src/primitives/ECDSA.js.map +1 -1
  61. package/dist/cjs/src/primitives/Hash.js +191 -216
  62. package/dist/cjs/src/primitives/Hash.js.map +1 -1
  63. package/dist/cjs/src/primitives/JacobianPoint.js +19 -5
  64. package/dist/cjs/src/primitives/JacobianPoint.js.map +1 -1
  65. package/dist/cjs/src/primitives/K256.js.map +1 -1
  66. package/dist/cjs/src/primitives/Mersenne.js.map +1 -1
  67. package/dist/cjs/src/primitives/MontgomoryMethod.js.map +1 -1
  68. package/dist/cjs/src/primitives/Point.js +117 -88
  69. package/dist/cjs/src/primitives/Point.js.map +1 -1
  70. package/dist/cjs/src/primitives/Polynomial.js +4 -2
  71. package/dist/cjs/src/primitives/Polynomial.js.map +1 -1
  72. package/dist/cjs/src/primitives/PrivateKey.js +32 -33
  73. package/dist/cjs/src/primitives/PrivateKey.js.map +1 -1
  74. package/dist/cjs/src/primitives/PublicKey.js.map +1 -1
  75. package/dist/cjs/src/primitives/Random.js +6 -5
  76. package/dist/cjs/src/primitives/Random.js.map +1 -1
  77. package/dist/cjs/src/primitives/ReductionContext.js +1 -1
  78. package/dist/cjs/src/primitives/ReductionContext.js.map +1 -1
  79. package/dist/cjs/src/primitives/Schnorr.js +21 -15
  80. package/dist/cjs/src/primitives/Schnorr.js.map +1 -1
  81. package/dist/cjs/src/primitives/Signature.js +8 -7
  82. package/dist/cjs/src/primitives/Signature.js.map +1 -1
  83. package/dist/cjs/src/primitives/SymmetricKey.js +13 -13
  84. package/dist/cjs/src/primitives/SymmetricKey.js.map +1 -1
  85. package/dist/cjs/src/primitives/TransactionSignature.js +31 -29
  86. package/dist/cjs/src/primitives/TransactionSignature.js.map +1 -1
  87. package/dist/cjs/src/primitives/index.js +7 -17
  88. package/dist/cjs/src/primitives/index.js.map +1 -1
  89. package/dist/cjs/src/primitives/utils.js +79 -68
  90. package/dist/cjs/src/primitives/utils.js.map +1 -1
  91. package/dist/cjs/src/script/OP.js +3 -3
  92. package/dist/cjs/src/script/OP.js.map +1 -1
  93. package/dist/cjs/src/script/Script.js +12 -10
  94. package/dist/cjs/src/script/Script.js.map +1 -1
  95. package/dist/cjs/src/script/Spend.js +47 -49
  96. package/dist/cjs/src/script/Spend.js.map +1 -1
  97. package/dist/cjs/src/script/templates/P2PKH.js +24 -12
  98. package/dist/cjs/src/script/templates/P2PKH.js.map +1 -1
  99. package/dist/cjs/src/script/templates/PushDrop.js +28 -23
  100. package/dist/cjs/src/script/templates/PushDrop.js.map +1 -1
  101. package/dist/cjs/src/script/templates/RPuzzle.js +10 -6
  102. package/dist/cjs/src/script/templates/RPuzzle.js.map +1 -1
  103. package/dist/cjs/src/totp/totp.js +2 -1
  104. package/dist/cjs/src/totp/totp.js.map +1 -1
  105. package/dist/cjs/src/transaction/Beef.js +177 -154
  106. package/dist/cjs/src/transaction/Beef.js.map +1 -1
  107. package/dist/cjs/src/transaction/BeefParty.js +24 -24
  108. package/dist/cjs/src/transaction/BeefParty.js.map +1 -1
  109. package/dist/cjs/src/transaction/BeefTx.js +26 -18
  110. package/dist/cjs/src/transaction/BeefTx.js.map +1 -1
  111. package/dist/cjs/src/transaction/Broadcaster.js +3 -2
  112. package/dist/cjs/src/transaction/Broadcaster.js.map +1 -1
  113. package/dist/cjs/src/transaction/MerklePath.js +64 -37
  114. package/dist/cjs/src/transaction/MerklePath.js.map +1 -1
  115. package/dist/cjs/src/transaction/Transaction.js +111 -137
  116. package/dist/cjs/src/transaction/Transaction.js.map +1 -1
  117. package/dist/cjs/src/transaction/broadcasters/ARC.js +25 -16
  118. package/dist/cjs/src/transaction/broadcasters/ARC.js.map +1 -1
  119. package/dist/cjs/src/transaction/broadcasters/DefaultBroadcaster.js +2 -1
  120. package/dist/cjs/src/transaction/broadcasters/DefaultBroadcaster.js.map +1 -1
  121. package/dist/cjs/src/transaction/broadcasters/WhatsOnChainBroadcaster.js.map +1 -1
  122. package/dist/cjs/src/transaction/chaintrackers/DefaultChainTracker.js +2 -1
  123. package/dist/cjs/src/transaction/chaintrackers/DefaultChainTracker.js.map +1 -1
  124. package/dist/cjs/src/transaction/chaintrackers/WhatsOnChain.js +3 -3
  125. package/dist/cjs/src/transaction/chaintrackers/WhatsOnChain.js.map +1 -1
  126. package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
  127. package/dist/cjs/src/transaction/http/DefaultHttpClient.js +5 -3
  128. package/dist/cjs/src/transaction/http/DefaultHttpClient.js.map +1 -1
  129. package/dist/cjs/src/transaction/http/FetchHttpClient.js +5 -2
  130. package/dist/cjs/src/transaction/http/FetchHttpClient.js.map +1 -1
  131. package/dist/cjs/src/transaction/http/NodejsHttpClient.js +5 -3
  132. package/dist/cjs/src/transaction/http/NodejsHttpClient.js.map +1 -1
  133. package/dist/cjs/src/transaction/http/index.js.map +1 -1
  134. package/dist/cjs/src/transaction/index.js.map +1 -1
  135. package/dist/cjs/src/wallet/CachedKeyDeriver.js +91 -66
  136. package/dist/cjs/src/wallet/CachedKeyDeriver.js.map +1 -1
  137. package/dist/cjs/src/wallet/KeyDeriver.js +61 -52
  138. package/dist/cjs/src/wallet/KeyDeriver.js.map +1 -1
  139. package/dist/cjs/src/wallet/ProtoWallet.js +79 -29
  140. package/dist/cjs/src/wallet/ProtoWallet.js.map +1 -1
  141. package/dist/cjs/src/wallet/WalletClient.js +7 -2
  142. package/dist/cjs/src/wallet/WalletClient.js.map +1 -1
  143. package/dist/cjs/src/wallet/WalletError.js +2 -2
  144. package/dist/cjs/src/wallet/WalletError.js.map +1 -1
  145. package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js +4 -3
  146. package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
  147. package/dist/cjs/src/wallet/substrates/HTTPWalletWire.js +2 -2
  148. package/dist/cjs/src/wallet/substrates/HTTPWalletWire.js.map +1 -1
  149. package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js +1239 -1261
  150. package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
  151. package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js +102 -43
  152. package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
  153. package/dist/cjs/src/wallet/substrates/XDM.js +8 -3
  154. package/dist/cjs/src/wallet/substrates/XDM.js.map +1 -1
  155. package/dist/cjs/src/wallet/substrates/window.CWI.js +28 -28
  156. package/dist/cjs/src/wallet/substrates/window.CWI.js.map +1 -1
  157. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  158. package/dist/esm/mod.js +15 -15
  159. package/dist/esm/src/auth/Peer.js +75 -54
  160. package/dist/esm/src/auth/Peer.js.map +1 -1
  161. package/dist/esm/src/auth/SessionManager.js +14 -9
  162. package/dist/esm/src/auth/SessionManager.js.map +1 -1
  163. package/dist/esm/src/auth/certificates/Certificate.js +15 -11
  164. package/dist/esm/src/auth/certificates/Certificate.js.map +1 -1
  165. package/dist/esm/src/auth/certificates/MasterCertificate.js +25 -23
  166. package/dist/esm/src/auth/certificates/MasterCertificate.js.map +1 -1
  167. package/dist/esm/src/auth/certificates/VerifiableCertificate.js +2 -2
  168. package/dist/esm/src/auth/certificates/VerifiableCertificate.js.map +1 -1
  169. package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js +64 -47
  170. package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
  171. package/dist/esm/src/auth/clients/AuthFetch.js +1 -0
  172. package/dist/esm/src/auth/clients/AuthFetch.js.map +1 -1
  173. package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js +69 -43
  174. package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
  175. package/dist/esm/src/auth/utils/createNonce.js.map +1 -1
  176. package/dist/esm/src/auth/utils/getVerifiableCertificates.js +1 -1
  177. package/dist/esm/src/auth/utils/getVerifiableCertificates.js.map +1 -1
  178. package/dist/esm/src/auth/utils/validateCertificates.js +6 -3
  179. package/dist/esm/src/auth/utils/validateCertificates.js.map +1 -1
  180. package/dist/esm/src/auth/utils/verifyNonce.js.map +1 -1
  181. package/dist/esm/src/compat/BSM.js.map +1 -1
  182. package/dist/esm/src/compat/ECIES.js +165 -116
  183. package/dist/esm/src/compat/ECIES.js.map +1 -1
  184. package/dist/esm/src/compat/HD.js +56 -56
  185. package/dist/esm/src/compat/HD.js.map +1 -1
  186. package/dist/esm/src/compat/Mnemonic.js +95 -89
  187. package/dist/esm/src/compat/Mnemonic.js.map +1 -1
  188. package/dist/esm/src/compat/Utxo.js +1 -1
  189. package/dist/esm/src/compat/Utxo.js.map +1 -1
  190. package/dist/esm/src/messages/EncryptedMessage.js +3 -1
  191. package/dist/esm/src/messages/EncryptedMessage.js.map +1 -1
  192. package/dist/esm/src/messages/SignedMessage.js +1 -0
  193. package/dist/esm/src/messages/SignedMessage.js.map +1 -1
  194. package/dist/esm/src/overlay-tools/LookupResolver.js +53 -35
  195. package/dist/esm/src/overlay-tools/LookupResolver.js.map +1 -1
  196. package/dist/esm/src/overlay-tools/OverlayAdminTokenTemplate.js +32 -20
  197. package/dist/esm/src/overlay-tools/OverlayAdminTokenTemplate.js.map +1 -1
  198. package/dist/esm/src/overlay-tools/SHIPBroadcaster.js +40 -28
  199. package/dist/esm/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
  200. package/dist/esm/src/primitives/AESGCM.js +1 -0
  201. package/dist/esm/src/primitives/AESGCM.js.map +1 -1
  202. package/dist/esm/src/primitives/BasePoint.js +1 -1
  203. package/dist/esm/src/primitives/BasePoint.js.map +1 -1
  204. package/dist/esm/src/primitives/BigNumber.js +50 -62
  205. package/dist/esm/src/primitives/BigNumber.js.map +1 -1
  206. package/dist/esm/src/primitives/Curve.js +45 -22
  207. package/dist/esm/src/primitives/Curve.js.map +1 -1
  208. package/dist/esm/src/primitives/DRBG.js +2 -8
  209. package/dist/esm/src/primitives/DRBG.js.map +1 -1
  210. package/dist/esm/src/primitives/ECDSA.js +50 -35
  211. package/dist/esm/src/primitives/ECDSA.js.map +1 -1
  212. package/dist/esm/src/primitives/Hash.js +188 -213
  213. package/dist/esm/src/primitives/Hash.js.map +1 -1
  214. package/dist/esm/src/primitives/JacobianPoint.js +18 -5
  215. package/dist/esm/src/primitives/JacobianPoint.js.map +1 -1
  216. package/dist/esm/src/primitives/K256.js.map +1 -1
  217. package/dist/esm/src/primitives/Mersenne.js.map +1 -1
  218. package/dist/esm/src/primitives/MontgomoryMethod.js.map +1 -1
  219. package/dist/esm/src/primitives/Point.js +107 -88
  220. package/dist/esm/src/primitives/Point.js.map +1 -1
  221. package/dist/esm/src/primitives/Polynomial.js +4 -2
  222. package/dist/esm/src/primitives/Polynomial.js.map +1 -1
  223. package/dist/esm/src/primitives/PrivateKey.js +25 -16
  224. package/dist/esm/src/primitives/PrivateKey.js.map +1 -1
  225. package/dist/esm/src/primitives/PublicKey.js.map +1 -1
  226. package/dist/esm/src/primitives/Random.js +7 -6
  227. package/dist/esm/src/primitives/Random.js.map +1 -1
  228. package/dist/esm/src/primitives/ReductionContext.js +1 -1
  229. package/dist/esm/src/primitives/ReductionContext.js.map +1 -1
  230. package/dist/esm/src/primitives/Schnorr.js +21 -15
  231. package/dist/esm/src/primitives/Schnorr.js.map +1 -1
  232. package/dist/esm/src/primitives/Signature.js +8 -7
  233. package/dist/esm/src/primitives/Signature.js.map +1 -1
  234. package/dist/esm/src/primitives/SymmetricKey.js +13 -13
  235. package/dist/esm/src/primitives/SymmetricKey.js.map +1 -1
  236. package/dist/esm/src/primitives/TransactionSignature.js +22 -12
  237. package/dist/esm/src/primitives/TransactionSignature.js.map +1 -1
  238. package/dist/esm/src/primitives/utils.js +76 -66
  239. package/dist/esm/src/primitives/utils.js.map +1 -1
  240. package/dist/esm/src/script/OP.js +3 -3
  241. package/dist/esm/src/script/OP.js.map +1 -1
  242. package/dist/esm/src/script/Script.js +12 -10
  243. package/dist/esm/src/script/Script.js.map +1 -1
  244. package/dist/esm/src/script/Spend.js +39 -32
  245. package/dist/esm/src/script/Spend.js.map +1 -1
  246. package/dist/esm/src/script/templates/P2PKH.js +26 -11
  247. package/dist/esm/src/script/templates/P2PKH.js.map +1 -1
  248. package/dist/esm/src/script/templates/PushDrop.js +29 -22
  249. package/dist/esm/src/script/templates/PushDrop.js.map +1 -1
  250. package/dist/esm/src/script/templates/RPuzzle.js +11 -6
  251. package/dist/esm/src/script/templates/RPuzzle.js.map +1 -1
  252. package/dist/esm/src/totp/totp.js +2 -1
  253. package/dist/esm/src/totp/totp.js.map +1 -1
  254. package/dist/esm/src/transaction/Beef.js +176 -154
  255. package/dist/esm/src/transaction/Beef.js.map +1 -1
  256. package/dist/esm/src/transaction/BeefParty.js +24 -24
  257. package/dist/esm/src/transaction/BeefParty.js.map +1 -1
  258. package/dist/esm/src/transaction/BeefTx.js +26 -18
  259. package/dist/esm/src/transaction/BeefTx.js.map +1 -1
  260. package/dist/esm/src/transaction/Broadcaster.js.map +1 -1
  261. package/dist/esm/src/transaction/MerklePath.js +61 -36
  262. package/dist/esm/src/transaction/MerklePath.js.map +1 -1
  263. package/dist/esm/src/transaction/Transaction.js +105 -138
  264. package/dist/esm/src/transaction/Transaction.js.map +1 -1
  265. package/dist/esm/src/transaction/broadcasters/ARC.js +25 -16
  266. package/dist/esm/src/transaction/broadcasters/ARC.js.map +1 -1
  267. package/dist/esm/src/transaction/broadcasters/DefaultBroadcaster.js.map +1 -1
  268. package/dist/esm/src/transaction/broadcasters/WhatsOnChainBroadcaster.js.map +1 -1
  269. package/dist/esm/src/transaction/chaintrackers/WhatsOnChain.js +3 -3
  270. package/dist/esm/src/transaction/chaintrackers/WhatsOnChain.js.map +1 -1
  271. package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
  272. package/dist/esm/src/transaction/http/DefaultHttpClient.js +3 -2
  273. package/dist/esm/src/transaction/http/DefaultHttpClient.js.map +1 -1
  274. package/dist/esm/src/transaction/http/FetchHttpClient.js +4 -2
  275. package/dist/esm/src/transaction/http/FetchHttpClient.js.map +1 -1
  276. package/dist/esm/src/transaction/http/NodejsHttpClient.js +5 -3
  277. package/dist/esm/src/transaction/http/NodejsHttpClient.js.map +1 -1
  278. package/dist/esm/src/transaction/http/index.js.map +1 -1
  279. package/dist/esm/src/transaction/index.js.map +1 -1
  280. package/dist/esm/src/wallet/CachedKeyDeriver.js +91 -66
  281. package/dist/esm/src/wallet/CachedKeyDeriver.js.map +1 -1
  282. package/dist/esm/src/wallet/KeyDeriver.js +60 -52
  283. package/dist/esm/src/wallet/KeyDeriver.js.map +1 -1
  284. package/dist/esm/src/wallet/ProtoWallet.js +75 -29
  285. package/dist/esm/src/wallet/ProtoWallet.js.map +1 -1
  286. package/dist/esm/src/wallet/WalletClient.js +7 -2
  287. package/dist/esm/src/wallet/WalletClient.js.map +1 -1
  288. package/dist/esm/src/wallet/WalletError.js +2 -2
  289. package/dist/esm/src/wallet/WalletError.js.map +1 -1
  290. package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js +4 -4
  291. package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
  292. package/dist/esm/src/wallet/substrates/HTTPWalletWire.js +2 -2
  293. package/dist/esm/src/wallet/substrates/HTTPWalletWire.js.map +1 -1
  294. package/dist/esm/src/wallet/substrates/WalletWireProcessor.js +1239 -1261
  295. package/dist/esm/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
  296. package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js +95 -43
  297. package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
  298. package/dist/esm/src/wallet/substrates/XDM.js +8 -3
  299. package/dist/esm/src/wallet/substrates/XDM.js.map +1 -1
  300. package/dist/esm/src/wallet/substrates/window.CWI.js +28 -28
  301. package/dist/esm/src/wallet/substrates/window.CWI.js.map +1 -1
  302. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  303. package/dist/types/mod.d.ts +15 -15
  304. package/dist/types/src/auth/Peer.d.ts +10 -10
  305. package/dist/types/src/auth/Peer.d.ts.map +1 -1
  306. package/dist/types/src/auth/SessionManager.d.ts +4 -4
  307. package/dist/types/src/auth/SessionManager.d.ts.map +1 -1
  308. package/dist/types/src/auth/certificates/Certificate.d.ts +6 -6
  309. package/dist/types/src/auth/certificates/Certificate.d.ts.map +1 -1
  310. package/dist/types/src/auth/certificates/MasterCertificate.d.ts +5 -5
  311. package/dist/types/src/auth/certificates/MasterCertificate.d.ts.map +1 -1
  312. package/dist/types/src/auth/certificates/VerifiableCertificate.d.ts.map +1 -1
  313. package/dist/types/src/auth/certificates/__tests/CompletedProtoWallet.d.ts +23 -22
  314. package/dist/types/src/auth/certificates/__tests/CompletedProtoWallet.d.ts.map +1 -1
  315. package/dist/types/src/auth/clients/AuthFetch.d.ts.map +1 -1
  316. package/dist/types/src/auth/transports/SimplifiedFetchTransport.d.ts +1 -1
  317. package/dist/types/src/auth/transports/SimplifiedFetchTransport.d.ts.map +1 -1
  318. package/dist/types/src/auth/utils/createNonce.d.ts.map +1 -1
  319. package/dist/types/src/auth/utils/getVerifiableCertificates.d.ts +3 -3
  320. package/dist/types/src/auth/utils/getVerifiableCertificates.d.ts.map +1 -1
  321. package/dist/types/src/auth/utils/validateCertificates.d.ts +2 -2
  322. package/dist/types/src/auth/utils/validateCertificates.d.ts.map +1 -1
  323. package/dist/types/src/auth/utils/verifyNonce.d.ts +1 -1
  324. package/dist/types/src/auth/utils/verifyNonce.d.ts.map +1 -1
  325. package/dist/types/src/compat/BSM.d.ts +1 -1
  326. package/dist/types/src/compat/BSM.d.ts.map +1 -1
  327. package/dist/types/src/compat/ECIES.d.ts +36 -36
  328. package/dist/types/src/compat/ECIES.d.ts.map +1 -1
  329. package/dist/types/src/compat/HD.d.ts +51 -51
  330. package/dist/types/src/compat/HD.d.ts.map +1 -1
  331. package/dist/types/src/compat/Mnemonic.d.ts +79 -79
  332. package/dist/types/src/compat/Mnemonic.d.ts.map +1 -1
  333. package/dist/types/src/compat/Utxo.d.ts.map +1 -1
  334. package/dist/types/src/messages/EncryptedMessage.d.ts.map +1 -1
  335. package/dist/types/src/messages/SignedMessage.d.ts.map +1 -1
  336. package/dist/types/src/overlay-tools/LookupResolver.d.ts +9 -9
  337. package/dist/types/src/overlay-tools/LookupResolver.d.ts.map +1 -1
  338. package/dist/types/src/overlay-tools/OverlayAdminTokenTemplate.d.ts +17 -17
  339. package/dist/types/src/overlay-tools/OverlayAdminTokenTemplate.d.ts.map +1 -1
  340. package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts +14 -14
  341. package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts.map +1 -1
  342. package/dist/types/src/primitives/AESGCM.d.ts.map +1 -1
  343. package/dist/types/src/primitives/BasePoint.d.ts +8 -8
  344. package/dist/types/src/primitives/BasePoint.d.ts.map +1 -1
  345. package/dist/types/src/primitives/BigNumber.d.ts.map +1 -1
  346. package/dist/types/src/primitives/Curve.d.ts +14 -7
  347. package/dist/types/src/primitives/Curve.d.ts.map +1 -1
  348. package/dist/types/src/primitives/DRBG.d.ts.map +1 -1
  349. package/dist/types/src/primitives/ECDSA.d.ts +1 -1
  350. package/dist/types/src/primitives/ECDSA.d.ts.map +1 -1
  351. package/dist/types/src/primitives/Hash.d.ts +11 -11
  352. package/dist/types/src/primitives/Hash.d.ts.map +1 -1
  353. package/dist/types/src/primitives/JacobianPoint.d.ts.map +1 -1
  354. package/dist/types/src/primitives/Point.d.ts +14 -10
  355. package/dist/types/src/primitives/Point.d.ts.map +1 -1
  356. package/dist/types/src/primitives/Polynomial.d.ts.map +1 -1
  357. package/dist/types/src/primitives/PrivateKey.d.ts +2 -2
  358. package/dist/types/src/primitives/PrivateKey.d.ts.map +1 -1
  359. package/dist/types/src/primitives/PublicKey.d.ts.map +1 -1
  360. package/dist/types/src/primitives/Random.d.ts.map +1 -1
  361. package/dist/types/src/primitives/Schnorr.d.ts +14 -14
  362. package/dist/types/src/primitives/Schnorr.d.ts.map +1 -1
  363. package/dist/types/src/primitives/Signature.d.ts +1 -1
  364. package/dist/types/src/primitives/Signature.d.ts.map +1 -1
  365. package/dist/types/src/primitives/SymmetricKey.d.ts +13 -13
  366. package/dist/types/src/primitives/SymmetricKey.d.ts.map +1 -1
  367. package/dist/types/src/primitives/TransactionSignature.d.ts +4 -4
  368. package/dist/types/src/primitives/TransactionSignature.d.ts.map +1 -1
  369. package/dist/types/src/primitives/utils.d.ts +3 -6
  370. package/dist/types/src/primitives/utils.d.ts.map +1 -1
  371. package/dist/types/src/script/Script.d.ts +3 -3
  372. package/dist/types/src/script/Script.d.ts.map +1 -1
  373. package/dist/types/src/script/ScriptTemplate.d.ts +2 -2
  374. package/dist/types/src/script/ScriptTemplate.d.ts.map +1 -1
  375. package/dist/types/src/script/Spend.d.ts.map +1 -1
  376. package/dist/types/src/script/templates/P2PKH.d.ts.map +1 -1
  377. package/dist/types/src/script/templates/PushDrop.d.ts +1 -2
  378. package/dist/types/src/script/templates/PushDrop.d.ts.map +1 -1
  379. package/dist/types/src/script/templates/RPuzzle.d.ts.map +1 -1
  380. package/dist/types/src/totp/totp.d.ts.map +1 -1
  381. package/dist/types/src/transaction/Beef.d.ts +96 -96
  382. package/dist/types/src/transaction/Beef.d.ts.map +1 -1
  383. package/dist/types/src/transaction/BeefParty.d.ts +22 -22
  384. package/dist/types/src/transaction/BeefParty.d.ts.map +1 -1
  385. package/dist/types/src/transaction/BeefTx.d.ts +5 -5
  386. package/dist/types/src/transaction/BeefTx.d.ts.map +1 -1
  387. package/dist/types/src/transaction/Broadcaster.d.ts.map +1 -1
  388. package/dist/types/src/transaction/ChainTracker.d.ts +2 -2
  389. package/dist/types/src/transaction/FeeModel.d.ts.map +1 -1
  390. package/dist/types/src/transaction/MerklePath.d.ts.map +1 -1
  391. package/dist/types/src/transaction/Transaction.d.ts +4 -12
  392. package/dist/types/src/transaction/Transaction.d.ts.map +1 -1
  393. package/dist/types/src/transaction/TransactionOutput.d.ts.map +1 -1
  394. package/dist/types/src/transaction/broadcasters/ARC.d.ts +1 -1
  395. package/dist/types/src/transaction/broadcasters/ARC.d.ts.map +1 -1
  396. package/dist/types/src/transaction/broadcasters/DefaultBroadcaster.d.ts.map +1 -1
  397. package/dist/types/src/transaction/broadcasters/WhatsOnChainBroadcaster.d.ts.map +1 -1
  398. package/dist/types/src/transaction/chaintrackers/DefaultChainTracker.d.ts.map +1 -1
  399. package/dist/types/src/transaction/chaintrackers/WhatsOnChain.d.ts.map +1 -1
  400. package/dist/types/src/transaction/fee-models/SatoshisPerKilobyte.d.ts.map +1 -1
  401. package/dist/types/src/transaction/http/DefaultHttpClient.d.ts +1 -1
  402. package/dist/types/src/transaction/http/DefaultHttpClient.d.ts.map +1 -1
  403. package/dist/types/src/transaction/http/FetchHttpClient.d.ts +5 -5
  404. package/dist/types/src/transaction/http/FetchHttpClient.d.ts.map +1 -1
  405. package/dist/types/src/transaction/http/HttpClient.d.ts +4 -4
  406. package/dist/types/src/transaction/http/HttpClient.d.ts.map +1 -1
  407. package/dist/types/src/transaction/http/NodejsHttpClient.d.ts +3 -3
  408. package/dist/types/src/transaction/http/NodejsHttpClient.d.ts.map +1 -1
  409. package/dist/types/src/transaction/http/index.d.ts.map +1 -1
  410. package/dist/types/src/transaction/index.d.ts.map +1 -1
  411. package/dist/types/src/wallet/CachedKeyDeriver.d.ts +58 -58
  412. package/dist/types/src/wallet/CachedKeyDeriver.d.ts.map +1 -1
  413. package/dist/types/src/wallet/KeyDeriver.d.ts +78 -78
  414. package/dist/types/src/wallet/KeyDeriver.d.ts.map +1 -1
  415. package/dist/types/src/wallet/ProtoWallet.d.ts +10 -10
  416. package/dist/types/src/wallet/ProtoWallet.d.ts.map +1 -1
  417. package/dist/types/src/wallet/Wallet.interfaces.d.ts +151 -152
  418. package/dist/types/src/wallet/Wallet.interfaces.d.ts.map +1 -1
  419. package/dist/types/src/wallet/WalletClient.d.ts +5 -5
  420. package/dist/types/src/wallet/WalletClient.d.ts.map +1 -1
  421. package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts +6 -6
  422. package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts.map +1 -1
  423. package/dist/types/src/wallet/substrates/HTTPWalletWire.d.ts.map +1 -1
  424. package/dist/types/src/wallet/substrates/WalletWireProcessor.d.ts.map +1 -1
  425. package/dist/types/src/wallet/substrates/WalletWireTransceiver.d.ts.map +1 -1
  426. package/dist/types/src/wallet/substrates/XDM.d.ts +1 -1
  427. package/dist/types/src/wallet/substrates/XDM.d.ts.map +1 -1
  428. package/dist/types/src/wallet/substrates/window.CWI.d.ts +6 -6
  429. package/dist/types/src/wallet/substrates/window.CWI.d.ts.map +1 -1
  430. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  431. package/dist/umd/bundle.js +1 -1
  432. package/docs/auth.md +92 -82
  433. package/docs/compat.md +24 -24
  434. package/docs/messages.md +7 -5
  435. package/docs/overlay-tools.md +21 -21
  436. package/docs/primitives.md +336 -315
  437. package/docs/script.md +35 -35
  438. package/docs/swagger/dist/swagger-initializer.js +7 -7
  439. package/docs/swagger/dist/swagger-ui-bundle.js +1 -1
  440. package/docs/swagger/dist/swagger-ui-es-bundle-core.js +2 -2
  441. package/docs/swagger/dist/swagger-ui-es-bundle.js +1 -1
  442. package/docs/swagger/dist/swagger-ui-standalone-preset.js +1 -1
  443. package/docs/swagger/dist/swagger-ui.js +2 -2
  444. package/docs/totp.md +5 -5
  445. package/docs/transaction.md +103 -105
  446. package/docs/wallet-substrates.md +17 -17
  447. package/docs/wallet.md +202 -204
  448. package/mod.ts +15 -15
  449. package/package.json +15 -3
  450. package/src/auth/Peer.ts +271 -121
  451. package/src/auth/SessionManager.ts +17 -10
  452. package/src/auth/__tests/Peer.test.ts +361 -179
  453. package/src/auth/__tests/SessionManager.test.ts +67 -19
  454. package/src/auth/__tests/build.test.ts +11 -0
  455. package/src/auth/certificates/Certificate.ts +27 -14
  456. package/src/auth/certificates/MasterCertificate.ts +106 -62
  457. package/src/auth/certificates/VerifiableCertificate.ts +30 -8
  458. package/src/auth/certificates/__tests/Certificate.test.ts +32 -17
  459. package/src/auth/certificates/__tests/CompletedProtoWallet.ts +171 -68
  460. package/src/auth/certificates/__tests/MasterCertificate.test.ts +63 -47
  461. package/src/auth/certificates/__tests/VerifiableCertificate.test.ts +42 -31
  462. package/src/auth/certificates/index.ts +1 -1
  463. package/src/auth/clients/AuthFetch.ts +1 -0
  464. package/src/auth/clients/index.ts +1 -1
  465. package/src/auth/transports/SimplifiedFetchTransport.ts +145 -72
  466. package/src/auth/transports/index.ts +1 -1
  467. package/src/auth/utils/__tests/cryptononce.test.ts +52 -23
  468. package/src/auth/utils/__tests/getVerifiableCertificates.test.ts +56 -30
  469. package/src/auth/utils/__tests/validateCertificates.test.ts +53 -31
  470. package/src/auth/utils/createNonce.ts +11 -3
  471. package/src/auth/utils/getVerifiableCertificates.ts +12 -7
  472. package/src/auth/utils/validateCertificates.ts +57 -39
  473. package/src/auth/utils/verifyNonce.ts +6 -2
  474. package/src/compat/BSM.ts +10 -2
  475. package/src/compat/ECIES.ts +265 -141
  476. package/src/compat/HD.ts +81 -63
  477. package/src/compat/Mnemonic.ts +104 -91
  478. package/src/compat/Utxo.ts +8 -5
  479. package/src/compat/__tests/BSM.test.ts +42 -16
  480. package/src/compat/__tests/ECIES.test.ts +117 -52
  481. package/src/compat/__tests/HD.test.ts +55 -42
  482. package/src/compat/__tests/Mnemonic.test.ts +11 -12
  483. package/src/compat/__tests/Mnemonic.vectors.ts +110 -55
  484. package/src/messages/EncryptedMessage.ts +6 -2
  485. package/src/messages/SignedMessage.ts +14 -8
  486. package/src/messages/__tests/EncryptedMessage.test.ts +23 -24
  487. package/src/messages/__tests/SignedMessage.test.ts +17 -11
  488. package/src/overlay-tools/LookupResolver.ts +108 -56
  489. package/src/overlay-tools/OverlayAdminTokenTemplate.ts +52 -23
  490. package/src/overlay-tools/SHIPBroadcaster.ts +135 -59
  491. package/src/overlay-tools/__tests/LookupResolver.test.ts +723 -323
  492. package/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.ts +50 -22
  493. package/src/overlay-tools/__tests/SHIPBroadcaster.test.ts +607 -290
  494. package/src/primitives/AESGCM.ts +2 -0
  495. package/src/primitives/BasePoint.ts +4 -4
  496. package/src/primitives/BigNumber.ts +99 -90
  497. package/src/primitives/Curve.ts +117 -46
  498. package/src/primitives/DRBG.ts +9 -11
  499. package/src/primitives/ECDSA.ts +109 -63
  500. package/src/primitives/Hash.ts +492 -321
  501. package/src/primitives/JacobianPoint.ts +67 -19
  502. package/src/primitives/Point.ts +254 -152
  503. package/src/primitives/Polynomial.ts +8 -3
  504. package/src/primitives/PrivateKey.ts +41 -17
  505. package/src/primitives/PublicKey.ts +13 -3
  506. package/src/primitives/Random.ts +14 -8
  507. package/src/primitives/ReductionContext.ts +1 -1
  508. package/src/primitives/Schnorr.ts +40 -18
  509. package/src/primitives/Signature.ts +26 -16
  510. package/src/primitives/SymmetricKey.ts +14 -14
  511. package/src/primitives/TransactionSignature.ts +41 -17
  512. package/src/primitives/__tests/AESGCM.test.ts +457 -151
  513. package/src/primitives/__tests/BRC42.private.vectors.ts +30 -15
  514. package/src/primitives/__tests/BRC42.public.vectors.ts +30 -15
  515. package/src/primitives/__tests/BigNumber.arithmatic.test.ts +344 -125
  516. package/src/primitives/__tests/BigNumber.binary.test.ts +148 -67
  517. package/src/primitives/__tests/BigNumber.constructor.test.ts +65 -25
  518. package/src/primitives/__tests/BigNumber.dhGroup.test.ts +15 -11
  519. package/src/primitives/__tests/BigNumber.fixtures.ts +16 -8
  520. package/src/primitives/__tests/BigNumber.serializers.test.ts +41 -15
  521. package/src/primitives/__tests/BigNumber.utils.test.ts +132 -42
  522. package/src/primitives/__tests/Curve.unit.test.ts +75 -53
  523. package/src/primitives/__tests/DRBG.test.ts +1 -1
  524. package/src/primitives/__tests/DRBG.vectors.ts +45 -75
  525. package/src/primitives/__tests/ECDH.test.ts +15 -8
  526. package/src/primitives/__tests/ECDSA.test.ts +12 -6
  527. package/src/primitives/__tests/HMAC.test.ts +24 -18
  528. package/src/primitives/__tests/Hash.test.ts +57 -46
  529. package/src/primitives/__tests/PBKDF2.vectors.ts +130 -117
  530. package/src/primitives/__tests/PrivateKey.split.test.ts +33 -11
  531. package/src/primitives/__tests/PrivateKey.test.ts +11 -10
  532. package/src/primitives/__tests/PublicKey.test.ts +64 -53
  533. package/src/primitives/__tests/Random.test.ts +1 -1
  534. package/src/primitives/__tests/Reader.test.ts +240 -219
  535. package/src/primitives/__tests/ReductionContext.test.ts +98 -61
  536. package/src/primitives/__tests/Schnorr.test.ts +249 -237
  537. package/src/primitives/__tests/SymmetricKey.test.ts +18 -15
  538. package/src/primitives/__tests/SymmetricKey.vectors.ts +16 -8
  539. package/src/primitives/__tests/Writer.test.ts +23 -13
  540. package/src/primitives/__tests/bug-31.test.ts +6 -10
  541. package/src/primitives/__tests/utils.test.ts +70 -19
  542. package/src/primitives/utils.ts +103 -79
  543. package/src/script/Script.ts +18 -12
  544. package/src/script/ScriptTemplate.ts +3 -5
  545. package/src/script/Spend.ts +306 -108
  546. package/src/script/__tests/Script.test.ts +73 -55
  547. package/src/script/__tests/Spend.test.ts +208 -83
  548. package/src/script/__tests/SpendComplex.test.ts +19 -13
  549. package/src/script/__tests/script.invalid.vectors.ts +428 -1796
  550. package/src/script/__tests/script.valid.vectors.ts +728 -2764
  551. package/src/script/templates/P2PKH.ts +34 -12
  552. package/src/script/templates/PushDrop.ts +65 -31
  553. package/src/script/templates/RPuzzle.ts +29 -8
  554. package/src/script/templates/__tests/PushDrop.test.ts +146 -41
  555. package/src/totp/__tests/totp.test.ts +45 -44
  556. package/src/totp/totp.ts +3 -2
  557. package/src/transaction/Beef.ts +269 -174
  558. package/src/transaction/BeefParty.ts +41 -31
  559. package/src/transaction/BeefTx.ts +36 -26
  560. package/src/transaction/Broadcaster.ts +10 -6
  561. package/src/transaction/ChainTracker.ts +2 -2
  562. package/src/transaction/FeeModel.ts +0 -1
  563. package/src/transaction/MerklePath.ts +124 -59
  564. package/src/transaction/Transaction.ts +188 -187
  565. package/src/transaction/TransactionOutput.ts +0 -1
  566. package/src/transaction/__tests/Beef.test.ts +390 -287
  567. package/src/transaction/__tests/MerklePath.test.ts +59 -26
  568. package/src/transaction/__tests/Transaction.benchmarks.test.ts +231 -201
  569. package/src/transaction/__tests/Transaction.test.ts +758 -482
  570. package/src/transaction/__tests/bigtx.vectors.ts +2 -1
  571. package/src/transaction/__tests/bump.invalid.vectors.ts +24 -6
  572. package/src/transaction/__tests/bump.valid.vectors.ts +6 -2
  573. package/src/transaction/__tests/tx.invalid.vectors.ts +881 -185
  574. package/src/transaction/__tests/tx.valid.vectors.ts +1210 -257
  575. package/src/transaction/broadcasters/ARC.ts +69 -38
  576. package/src/transaction/broadcasters/DefaultBroadcaster.ts +9 -3
  577. package/src/transaction/broadcasters/WhatsOnChainBroadcaster.ts +20 -7
  578. package/src/transaction/broadcasters/__tests/ARC.test.ts +127 -59
  579. package/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.ts +27 -18
  580. package/src/transaction/chaintrackers/DefaultChainTracker.ts +1 -1
  581. package/src/transaction/chaintrackers/WhatsOnChain.ts +27 -11
  582. package/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.ts +59 -23
  583. package/src/transaction/fee-models/SatoshisPerKilobyte.ts +9 -5
  584. package/src/transaction/http/DefaultHttpClient.ts +5 -4
  585. package/src/transaction/http/FetchHttpClient.ts +18 -9
  586. package/src/transaction/http/HttpClient.ts +27 -22
  587. package/src/transaction/http/NodejsHttpClient.ts +23 -9
  588. package/src/transaction/http/index.ts +5 -1
  589. package/src/transaction/index.ts +5 -1
  590. package/src/wallet/CachedKeyDeriver.ts +151 -82
  591. package/src/wallet/KeyDeriver.ts +186 -105
  592. package/src/wallet/ProtoWallet.ts +121 -52
  593. package/src/wallet/Wallet.interfaces.ts +167 -156
  594. package/src/wallet/WalletClient.ts +314 -59
  595. package/src/wallet/WalletError.ts +2 -2
  596. package/src/wallet/__tests/CachedKeyDeriver.test.ts +86 -27
  597. package/src/wallet/__tests/KeyDeriver.test.ts +136 -33
  598. package/src/wallet/__tests/ProtoWallet.test.ts +190 -102
  599. package/src/wallet/substrates/HTTPWalletJSON.ts +250 -67
  600. package/src/wallet/substrates/HTTPWalletWire.ts +7 -3
  601. package/src/wallet/substrates/WalletWireCalls.ts +2 -2
  602. package/src/wallet/substrates/WalletWireProcessor.ts +1412 -1277
  603. package/src/wallet/substrates/WalletWireTransceiver.ts +713 -138
  604. package/src/wallet/substrates/XDM.ts +425 -36
  605. package/src/wallet/substrates/__tests/WalletWire.integration.test.ts +488 -225
  606. package/src/wallet/substrates/__tests/XDM.test.ts +232 -234
  607. package/src/wallet/substrates/window.CWI.ts +520 -61
@@ -23,13 +23,13 @@ export default class Curve {
23
23
  tinv: BigNumber
24
24
  zeroA: boolean
25
25
  threeA: boolean
26
- endo: any // beta, lambda, basis
27
- _endoWnafT1: any[]
28
- _endoWnafT2: any[]
29
- _wnafT1: any[]
30
- _wnafT2: any[]
31
- _wnafT3: any[]
32
- _wnafT4: any[]
26
+ endo: { beta: BigNumber, lambda: BigNumber, basis: Array<{ a: BigNumber, b: BigNumber }> } | undefined // beta, lambda, basis
27
+ _endoWnafT1: BigNumber[]
28
+ _endoWnafT2: BigNumber[]
29
+ _wnafT1: BigNumber[]
30
+ _wnafT2: BigNumber[]
31
+ _wnafT3: BigNumber[]
32
+ _wnafT4: BigNumber[]
33
33
  _bitLength: number
34
34
 
35
35
  // Represent num in a w-NAF form
@@ -53,7 +53,11 @@ export default class Curve {
53
53
  let z
54
54
  const mod = k.andln(ws - 1)
55
55
  if (k.isOdd()) {
56
- if (mod > (ws >> 1) - 1) { z = (ws >> 1) - mod } else { z = mod }
56
+ if (mod > (ws >> 1) - 1) {
57
+ z = (ws >> 1) - mod
58
+ } else {
59
+ z = mod
60
+ }
57
61
  k.isubn(z)
58
62
  } else {
59
63
  z = 0
@@ -68,10 +72,7 @@ export default class Curve {
68
72
 
69
73
  // Represent k1, k2 in a Joint Sparse Form
70
74
  getJSF (k1: BigNumber, k2: BigNumber): number[][] {
71
- const jsf: any[][] = [
72
- [],
73
- []
74
- ]
75
+ const jsf: number[][] = [[], []]
75
76
 
76
77
  k1 = k1.clone()
77
78
  k2 = k2.clone()
@@ -81,8 +82,12 @@ export default class Curve {
81
82
  // First phase
82
83
  let m14 = (k1.andln(3) + d1) & 3
83
84
  let m24 = (k2.andln(3) + d2) & 3
84
- if (m14 === 3) { m14 = -1 }
85
- if (m24 === 3) { m24 = -1 }
85
+ if (m14 === 3) {
86
+ m14 = -1
87
+ }
88
+ if (m24 === 3) {
89
+ m24 = -1
90
+ }
86
91
  let u1: number
87
92
  if ((m14 & 1) === 0) {
88
93
  u1 = 0
@@ -101,13 +106,21 @@ export default class Curve {
101
106
  u2 = 0
102
107
  } else {
103
108
  const m8 = (k2.andln(7) + d2) & 7
104
- if ((m8 === 3 || m8 === 5) && m14 === 2) { u2 = -m24 } else { u2 = m24 }
109
+ if ((m8 === 3 || m8 === 5) && m14 === 2) {
110
+ u2 = -m24
111
+ } else {
112
+ u2 = m24
113
+ }
105
114
  }
106
115
  jsf[1].push(u2)
107
116
 
108
117
  // Second phase
109
- if (2 * d1 === u1 + 1) { d1 = 1 - d1 }
110
- if (2 * d2 === u2 + 1) { d2 = 1 - d2 }
118
+ if (2 * d1 === u1 + 1) {
119
+ d1 = 1 - d1
120
+ }
121
+ if (2 * d2 === u2 + 1) {
122
+ d2 = 1 - d2
123
+ }
111
124
  k1.iushrn(1)
112
125
  k2.iushrn(1)
113
126
  }
@@ -118,17 +131,14 @@ export default class Curve {
118
131
  static cachedProperty (obj, name: string, computer): void {
119
132
  const key = '_' + name
120
133
  obj.prototype[name] = function cachedProperty () {
121
- const r = this[key] !== undefined
122
- ? this[key]
123
- : this[key] = computer.call(this)
134
+ const r =
135
+ this[key] !== undefined ? this[key] : (this[key] = computer.call(this))
124
136
  return r
125
137
  }
126
138
  }
127
139
 
128
140
  static parseBytes (bytes: string | number[]): number[] {
129
- return typeof bytes === 'string'
130
- ? toArray(bytes, 'hex')
131
- : bytes
141
+ return typeof bytes === 'string' ? toArray(bytes, 'hex') : bytes
132
142
  }
133
143
 
134
144
  static intFromLE (bytes: number[]): BigNumber {
@@ -933,7 +943,8 @@ export default class Curve {
933
943
 
934
944
  // Precomputed endomorphism
935
945
  beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
936
- lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
946
+ lambda:
947
+ '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
937
948
  basis: [
938
949
  {
939
950
  a: '3086d221a7d46bcde86c90e49284eb15',
@@ -965,7 +976,7 @@ export default class Curve {
965
976
 
966
977
  // Curve configuration, optional
967
978
  this.n = new BigNumber(conf.n, 16)
968
- this.g = Point.fromJSON(conf.g, conf.gRed)
979
+ this.g = Point.fromJSON(conf.g as [string, string, { doubles?: { step: number, points: Array<[string, string]> }, naf?: { wnd: number, points: Array<[string, string]> } }], conf.gRed)
969
980
 
970
981
  // Temporary arrays
971
982
  this._wnafT1 = new Array(4)
@@ -988,35 +999,70 @@ export default class Curve {
988
999
  this._endoWnafT2 = new Array(4)
989
1000
  }
990
1001
 
991
- _getEndomorphism (conf): {
1002
+ _getEndomorphism (conf):
1003
+ | {
992
1004
  beta: BigNumber
993
1005
  lambda: BigNumber
994
1006
  basis: Array<{ a: BigNumber, b: BigNumber }>
995
- } | undefined {
1007
+ }
1008
+ | undefined {
996
1009
  // No efficient endomorphism
997
- if (!this.zeroA || this.p.modrn(3) !== 1) { return }
1010
+ if (!this.zeroA || this.p.modrn(3) !== 1) {
1011
+ return
1012
+ }
998
1013
 
999
1014
  // Compute beta and lambda, that lambda * P = (beta * Px; Py)
1000
1015
  let beta: BigNumber
1001
1016
  let lambda: BigNumber
1017
+
1002
1018
  if (conf.beta !== undefined) {
1003
1019
  beta = new BigNumber(conf.beta, 16).toRed(this.red)
1004
1020
  } else {
1005
1021
  const betas = this._getEndoRoots(this.p)
1022
+ if (betas === null) {
1023
+ throw new Error('Failed to get endomorphism roots for beta.')
1024
+ }
1006
1025
  // Choose the smallest beta
1007
1026
  beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1]
1008
1027
  beta = beta.toRed(this.red)
1009
1028
  }
1029
+
1010
1030
  if (conf.lambda !== undefined) {
1011
1031
  lambda = new BigNumber(conf.lambda, 16)
1012
1032
  } else {
1013
- // Choose the lambda that is matching selected beta
1033
+ // Choose the lambda that matches selected beta
1014
1034
  const lambdas = this._getEndoRoots(this.n)
1015
- if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
1035
+ if (lambdas === null) {
1036
+ throw new Error('Failed to get endomorphism roots for lambda.')
1037
+ }
1038
+
1039
+ if (this.g == null) {
1040
+ throw new Error('Curve generator point (g) is not defined.')
1041
+ }
1042
+
1043
+ const gMulX = this.g.mul(lambdas[0])?.x
1044
+ const gXRedMulBeta = (this.g.x != null) ? this.g.x.redMul(beta) : undefined
1045
+
1046
+ if ((gMulX != null) && (gXRedMulBeta != null) && gMulX.cmp(gXRedMulBeta) === 0) {
1016
1047
  lambda = lambdas[0]
1017
1048
  } else {
1018
1049
  lambda = lambdas[1]
1019
- Curve.assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0)
1050
+
1051
+ if (this.g == null) {
1052
+ throw new Error('Curve generator point (g) is not defined.')
1053
+ }
1054
+
1055
+ const gMulX = this.g.mul(lambda)?.x
1056
+ const gXRedMulBeta = (this.g.x != null) ? this.g.x.redMul(beta) : undefined
1057
+
1058
+ if ((gMulX == null) || (gXRedMulBeta == null)) {
1059
+ throw new Error('Lambda computation failed: g.mul(lambda).x or g.x.redMul(beta) is undefined.')
1060
+ }
1061
+
1062
+ Curve.assert(
1063
+ gMulX.cmp(gXRedMulBeta) === 0,
1064
+ 'Lambda selection does not match computed beta.'
1065
+ )
1020
1066
  }
1021
1067
  }
1022
1068
 
@@ -1038,7 +1084,7 @@ export default class Curve {
1038
1084
  lambda,
1039
1085
  basis
1040
1086
  }
1041
- };
1087
+ }
1042
1088
 
1043
1089
  _getEndoRoots (num: BigNumber): [BigNumber, BigNumber] {
1044
1090
  // Find roots of for x^2 + x + 1 in F
@@ -1053,9 +1099,11 @@ export default class Curve {
1053
1099
  const l1 = ntinv.redAdd(s).fromRed()
1054
1100
  const l2 = ntinv.redSub(s).fromRed()
1055
1101
  return [l1, l2]
1056
- };
1102
+ }
1057
1103
 
1058
- _getEndoBasis (lambda: BigNumber): [{ a: BigNumber, b: BigNumber }, { a: BigNumber, b: BigNumber }] {
1104
+ _getEndoBasis (
1105
+ lambda: BigNumber
1106
+ ): [{ a: BigNumber, b: BigNumber }, { a: BigNumber, b: BigNumber }] {
1059
1107
  // aprxSqrt >= sqrt(this.n)
1060
1108
  const aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2))
1061
1109
 
@@ -1069,31 +1117,32 @@ export default class Curve {
1069
1117
  let y2 = new BigNumber(1)
1070
1118
 
1071
1119
  // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
1072
- let a0: BigNumber
1073
- let b0: BigNumber
1120
+ let a0: BigNumber | undefined
1121
+ let b0: BigNumber | undefined
1074
1122
  // First vector
1075
- let a1: BigNumber
1076
- let b1: BigNumber
1123
+ let a1: BigNumber | undefined
1124
+ let b1: BigNumber | undefined
1077
1125
  // Second vector
1078
1126
  let a2: BigNumber
1079
1127
  let b2: BigNumber
1080
1128
 
1081
- let prevR
1129
+ let prevR: BigNumber = new BigNumber(0)
1082
1130
  let i = 0
1083
- let r
1084
- let x
1131
+ let r: BigNumber = new BigNumber(0)
1132
+ let x: BigNumber = new BigNumber(0) // Ensure x is initialized
1133
+
1085
1134
  while (u.cmpn(0) !== 0) {
1086
1135
  const q = v.div(u)
1087
1136
  r = v.sub(q.mul(u))
1088
- x = x2.sub(q.mul(x1))
1137
+ x = x2.sub(q.mul(x1)) // Now TypeScript knows x is always assigned
1089
1138
  const y = y2.sub(q.mul(y1))
1090
1139
 
1091
- if (typeof a1 !== 'object' && r.cmp(aprxSqrt) < 0) {
1140
+ if (a1 === undefined && r.cmp(aprxSqrt) < 0) {
1092
1141
  a0 = prevR.neg()
1093
1142
  b0 = x1
1094
1143
  a1 = r.neg()
1095
1144
  b1 = x
1096
- } else if (typeof a1 === 'object' && ++i === 2) {
1145
+ } else if (a1 !== undefined && ++i === 2) {
1097
1146
  break
1098
1147
  }
1099
1148
  prevR = r
@@ -1105,11 +1154,23 @@ export default class Curve {
1105
1154
  y2 = y1
1106
1155
  y1 = y
1107
1156
  }
1157
+
1158
+ // Ensure a0 and b0 have been assigned
1159
+ if (
1160
+ a0 === undefined ||
1161
+ b0 === undefined ||
1162
+ a1 === undefined ||
1163
+ b1 === undefined
1164
+ ) {
1165
+ throw new Error('Failed to compute Endo Basis values')
1166
+ }
1167
+
1108
1168
  a2 = r.neg()
1109
1169
  b2 = x
1110
1170
 
1111
1171
  const len1 = a1.sqr().add(b1.sqr())
1112
1172
  const len2 = a2.sqr().add(b2.sqr())
1173
+
1113
1174
  if (len2.cmp(len1) >= 0) {
1114
1175
  a2 = a0
1115
1176
  b2 = b0
@@ -1132,6 +1193,9 @@ export default class Curve {
1132
1193
  }
1133
1194
 
1134
1195
  _endoSplit (k: BigNumber): { k1: BigNumber, k2: BigNumber } {
1196
+ if (this.endo == null) {
1197
+ throw new Error('Endomorphism is not defined.')
1198
+ }
1135
1199
  const basis = this.endo.basis
1136
1200
  const v1 = basis[0]
1137
1201
  const v2 = basis[1]
@@ -1151,13 +1215,20 @@ export default class Curve {
1151
1215
  }
1152
1216
 
1153
1217
  validate (point: Point): boolean {
1154
- if (point.inf) { return true }
1218
+ if (point.inf) {
1219
+ return true
1220
+ }
1155
1221
 
1156
1222
  const x = point.x
1157
1223
  const y = point.y
1158
1224
 
1225
+ // Ensure x and y are not null before proceeding
1226
+ if (x === null || y === null) {
1227
+ throw new Error('Point coordinates cannot be null')
1228
+ }
1229
+
1159
1230
  const ax = this.a.redMul(x)
1160
1231
  const rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b)
1161
1232
  return y.redSqr().redISub(rhs).cmpn(0) === 0
1162
- };
1233
+ }
1163
1234
  }
@@ -61,19 +61,17 @@ export default class DRBG {
61
61
  * drbg.update('e13af...');
62
62
  */
63
63
  update (seed?): void {
64
- let kmac = this.hmac()
65
- .update(this.V)
66
- .update([0x00])
67
- if (seed !== undefined) { kmac = kmac.update(seed) }
64
+ let kmac = this.hmac().update(this.V).update([0x00])
65
+ if (seed !== undefined) {
66
+ kmac = kmac.update(seed)
67
+ }
68
68
  this.K = kmac.digest()
69
69
  this.V = this.hmac().update(this.V).digest()
70
- if (seed === undefined) { return }
70
+ if (seed === undefined) {
71
+ return
72
+ }
71
73
 
72
- this.K = this.hmac()
73
- .update(this.V)
74
- .update([0x01])
75
- .update(seed)
76
- .digest()
74
+ this.K = this.hmac().update(this.V).update([0x01]).update(seed).digest()
77
75
  this.V = this.hmac().update(this.V).digest()
78
76
  }
79
77
 
@@ -89,7 +87,7 @@ export default class DRBG {
89
87
  * const randomHex = drbg.generate(256);
90
88
  */
91
89
  generate (len: number): string {
92
- let temp = []
90
+ let temp: number[] = []
93
91
  while (temp.length < len) {
94
92
  this.V = this.hmac().update(this.V).digest()
95
93
  temp = temp.concat(this.V)
@@ -23,10 +23,16 @@ import DRBG from './DRBG.js'
23
23
  * let msg = new BigNumber('1234567890abcdef', 16);
24
24
  * let truncatedMsg = truncateToN(msg);
25
25
  */
26
- function truncateToN (msg: BigNumber, truncOnly?: boolean, curve = new Curve()): BigNumber {
26
+ function truncateToN (
27
+ msg: BigNumber,
28
+ truncOnly?: boolean,
29
+ curve = new Curve()
30
+ ): BigNumber {
27
31
  const delta = msg.byteLength() * 8 - curve.n.bitLength()
28
- if (delta > 0) { msg.iushrn(delta) }
29
- if (!truncOnly && msg.cmp(curve.n) >= 0) {
32
+ if (delta > 0) {
33
+ msg.iushrn(delta)
34
+ }
35
+ if (truncOnly === null && msg.cmp(curve.n) >= 0) {
30
36
  return msg.sub(curve.n)
31
37
  } else {
32
38
  return msg
@@ -48,7 +54,12 @@ function truncateToN (msg: BigNumber, truncOnly?: boolean, curve = new Curve()):
48
54
  * const key = new BigNumber('123456')
49
55
  * const signature = sign(msg, key)
50
56
  */
51
- export const sign = (msg: BigNumber, key: BigNumber, forceLowS: boolean = false, customK?: BigNumber | Function): Signature => {
57
+ export const sign = (
58
+ msg: BigNumber,
59
+ key: BigNumber,
60
+ forceLowS: boolean = false,
61
+ customK?: BigNumber | ((iter: number) => BigNumber)
62
+ ): Signature => {
52
63
  if (typeof BigInt === 'function') {
53
64
  // Curve parameters for secp256k1
54
65
  const zero = BigInt(0)
@@ -103,7 +114,11 @@ export const sign = (msg: BigNumber, key: BigNumber, forceLowS: boolean = false,
103
114
  let iter = 0
104
115
 
105
116
  // Truncate to N function for BigInt
106
- function truncateToN (k: bigint, n: bigint, truncOnly: boolean = true): bigint {
117
+ function truncateToN (
118
+ k: bigint,
119
+ n: bigint,
120
+ truncOnly: boolean = true
121
+ ): bigint {
107
122
  const kBitLength = k.toString(2).length
108
123
  const nBitLength = n.toString(2).length
109
124
  const delta = kBitLength - nBitLength
@@ -117,21 +132,23 @@ export const sign = (msg: BigNumber, key: BigNumber, forceLowS: boolean = false,
117
132
  }
118
133
  }
119
134
 
120
- function generateK (): bigint {
135
+ function generateK (
136
+ customK?: BigNumber | ((iter: number) => BigNumber)
137
+ ): bigint {
121
138
  if (typeof customK === 'function') {
122
139
  // Call customK function to get k as BigNumber
123
- const k_bn = customK(iter)
140
+ const kbn = customK(iter)
124
141
  // Convert k_bn (BigNumber) to BigInt
125
- const k_str = k_bn.toString(16)
126
- return BigInt('0x' + k_str)
127
- } else if (BigNumber.isBN(customK)) {
142
+ const kstr = kbn.toString(16)
143
+ return BigInt('0x' + kstr)
144
+ } else if ((customK != null) && BigNumber.isBN(customK)) {
128
145
  // Use customK provided, convert to BigInt
129
- const k_str = customK.toString(16)
130
- return BigInt('0x' + k_str)
146
+ const kstr = customK.toString(16)
147
+ return BigInt('0x' + kstr)
131
148
  } else {
132
149
  // Use DRBG to generate k
133
- const k_hex = drbg.generate(bytes) // Generate hex string
134
- return BigInt('0x' + k_hex)
150
+ const khex = drbg.generate(bytes) // Generate hex string
151
+ return BigInt('0x' + khex)
135
152
  }
136
153
  }
137
154
 
@@ -192,23 +209,33 @@ export const sign = (msg: BigNumber, key: BigNumber, forceLowS: boolean = false,
192
209
  function scalarMul (
193
210
  k: bigint,
194
211
  P: { x: bigint, y: bigint }
195
- ): { x: bigint, y: bigint } | null {
212
+ ): { x: bigint, y: bigint } {
196
213
  let N = P
197
- let Q = null // Point at infinity
214
+ let Q: { x: bigint, y: bigint } | null = null
198
215
 
199
- while (k > zero) {
200
- if (k % two === one) {
201
- Q = pointAdd(Q, N)
216
+ while (k > BigInt(0)) {
217
+ if (k % BigInt(2) === BigInt(1)) {
218
+ Q = Q === null ? N : (pointAdd(Q, N) ?? Q)
202
219
  }
203
- N = pointAdd(N, N)
204
- k >>= one
220
+ N = pointAdd(N, N) ?? N
221
+ k >>= BigInt(1)
205
222
  }
223
+
224
+ if (Q === null) {
225
+ throw new Error('Scalar multiplication resulted in an invalid point.')
226
+ }
227
+
206
228
  return Q
207
229
  }
208
230
 
209
- while (true) {
210
- let k = generateK()
231
+ let validSignature = false
232
+ while (!validSignature) {
211
233
  iter += 1
234
+ validSignature = true
235
+ iter += 1
236
+
237
+ // Generate k value
238
+ let k = generateK(customK)
212
239
 
213
240
  // Truncate k to n bits
214
241
  k = truncateToN(k, n, true)
@@ -264,9 +291,9 @@ export const sign = (msg: BigNumber, key: BigNumber, forceLowS: boolean = false,
264
291
  }
265
292
 
266
293
  // Return signature as BigNumbers
267
- const r_bn = new BigNumber(r.toString(16), 16)
268
- const s_bn = new BigNumber(s.toString(16), 16)
269
- return new Signature(r_bn, s_bn)
294
+ const rbn = new BigNumber(r.toString(16), 16)
295
+ const sbn = new BigNumber(s.toString(16), 16)
296
+ return new Signature(rbn, sbn)
270
297
  }
271
298
  } else {
272
299
  const curve = new Curve()
@@ -287,15 +314,22 @@ export const sign = (msg: BigNumber, key: BigNumber, forceLowS: boolean = false,
287
314
 
288
315
  for (let iter = 0; ; iter++) {
289
316
  // Compute the k-value
290
- let k = typeof customK === 'function'
291
- ? customK(iter)
292
- : BigNumber.isBN(customK)
293
- ? customK
294
- : new BigNumber(drbg.generate(bytes), 16)
295
- k = truncateToN(k, true)
317
+ let k =
318
+ typeof customK === 'function'
319
+ ? customK(iter)
320
+ : BigNumber.isBN(customK)
321
+ ? customK
322
+ : new BigNumber(drbg.generate(bytes), 16)
323
+ if (k != null) {
324
+ k = truncateToN(k, true)
325
+ } else {
326
+ throw new Error('k is undefined')
327
+ }
296
328
  if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0) {
297
329
  if (BigNumber.isBN(customK)) {
298
- throw new Error('Invalid fixed custom K value (must be more than 1 and less than N-1)')
330
+ throw new Error(
331
+ 'Invalid fixed custom K value (must be more than 1 and less than N-1)'
332
+ )
299
333
  } else {
300
334
  continue
301
335
  }
@@ -304,7 +338,9 @@ export const sign = (msg: BigNumber, key: BigNumber, forceLowS: boolean = false,
304
338
  const kp = curve.g.mul(k)
305
339
  if (kp.isInfinity()) {
306
340
  if (BigNumber.isBN(customK)) {
307
- throw new Error('Invalid fixed custom K value (must not create a point at infinity when multiplied by the generator point)')
341
+ throw new Error(
342
+ 'Invalid fixed custom K value (must not create a point at infinity when multiplied by the generator point)'
343
+ )
308
344
  } else {
309
345
  continue
310
346
  }
@@ -314,7 +350,9 @@ export const sign = (msg: BigNumber, key: BigNumber, forceLowS: boolean = false,
314
350
  const r = kpX.umod(curve.n)
315
351
  if (r.cmpn(0) === 0) {
316
352
  if (BigNumber.isBN(customK)) {
317
- throw new Error('Invalid fixed custom K value (when multiplied by G, the resulting x coordinate mod N must not be zero)')
353
+ throw new Error(
354
+ 'Invalid fixed custom K value (when multiplied by G, the resulting x coordinate mod N must not be zero)'
355
+ )
318
356
  } else {
319
357
  continue
320
358
  }
@@ -324,7 +362,9 @@ export const sign = (msg: BigNumber, key: BigNumber, forceLowS: boolean = false,
324
362
  s = s.umod(curve.n)
325
363
  if (s.cmpn(0) === 0) {
326
364
  if (BigNumber.isBN(customK)) {
327
- throw new Error('Invalid fixed custom K value (when used with the key, it cannot create a zero value for S)')
365
+ throw new Error(
366
+ 'Invalid fixed custom K value (when used with the key, it cannot create a zero value for S)'
367
+ )
328
368
  } else {
329
369
  continue
330
370
  }
@@ -337,6 +377,7 @@ export const sign = (msg: BigNumber, key: BigNumber, forceLowS: boolean = false,
337
377
  return new Signature(r, s)
338
378
  }
339
379
  }
380
+ throw new Error('Failed to generate a valid signature')
340
381
  }
341
382
 
342
383
  /**
@@ -384,22 +425,18 @@ export const verify = (msg: BigNumber, sig: Signature, key: Point): boolean => {
384
425
  const mod = (a: bigint, m: bigint): bigint => ((a % m) + m) % m
385
426
  const modInv = (a: bigint, m: bigint): bigint => {
386
427
  // Extended Euclidean Algorithm for modular inverse
387
- let [old_r, r] = [a, m]
388
- let [old_s, s] = [BigInt(1), BigInt(0)]
428
+ let [oldr, r] = [a, m]
429
+ let [olds, s] = [BigInt(1), BigInt(0)]
389
430
  while (r !== zero) {
390
- const q = old_r / r;
391
- [old_r, r] = [r, old_r - q * r];
392
- [old_s, s] = [s, old_s - q * s]
431
+ const q = oldr / r;
432
+ [oldr, r] = [r, oldr - q * r];
433
+ [olds, s] = [s, olds - q * s]
393
434
  }
394
- if (old_r > one) return zero // No inverse
395
- return mod(old_s, m)
435
+ if (oldr > one) return zero // No inverse
436
+ return mod(olds, m)
396
437
  }
397
- const modMul = (a: bigint, b: bigint, m: bigint): bigint =>
398
- mod(a * b, m)
399
- const modSub = (a: bigint, b: bigint, m: bigint): bigint =>
400
- mod(a - b, m)
401
- const modAdd = (a: bigint, b: bigint, m: bigint): bigint =>
402
- mod(a + b, m)
438
+ const modMul = (a: bigint, b: bigint, m: bigint): bigint => mod(a * b, m)
439
+ const modSub = (a: bigint, b: bigint, m: bigint): bigint => mod(a - b, m)
403
440
 
404
441
  // Define constants
405
442
  const four = BigInt(4)
@@ -420,13 +457,13 @@ export const verify = (msg: BigNumber, sig: Signature, key: Point): boolean => {
420
457
  return { X: zero, Y: one, Z: zero } // Point at infinity
421
458
  }
422
459
 
423
- const Y1_sq = modMul(Y1, Y1, p) // Y1^2
424
- const S = modMul(four, modMul(X1, Y1_sq, p), p) // S = 4 * X1 * Y1^2
460
+ const Y1sq = modMul(Y1, Y1, p) // Y1^2
461
+ const S = modMul(four, modMul(X1, Y1sq, p), p) // S = 4 * X1 * Y1^2
425
462
  const M = modMul(three, modMul(X1, X1, p), p) // M = 3 * X1^2
426
463
  const X3 = modSub(modMul(M, M, p), modMul(two, S, p), p) // X3 = M^2 - 2 * S
427
464
  const Y3 = modSub(
428
465
  modMul(M, modSub(S, X3, p), p),
429
- modMul(eight, modMul(Y1_sq, Y1_sq, p), p),
466
+ modMul(eight, modMul(Y1sq, Y1sq, p), p),
430
467
  p
431
468
  ) // Y3 = M * (S - X3) - 8 * Y1^4
432
469
  const Z3 = modMul(two, modMul(Y1, Z1, p), p) // Z3 = 2 * Y1 * Z1
@@ -464,18 +501,17 @@ export const verify = (msg: BigNumber, sig: Signature, key: Point): boolean => {
464
501
  const V = modMul(U1, HH, p)
465
502
 
466
503
  const X3 = modSub(modSub(modMul(r, r, p), HHH, p), modMul(two, V, p), p)
467
- const Y3 = modSub(
468
- modMul(r, modSub(V, X3, p), p),
469
- modMul(S1, HHH, p),
470
- p
471
- )
504
+ const Y3 = modSub(modMul(r, modSub(V, X3, p), p), modMul(S1, HHH, p), p)
472
505
  const Z3 = modMul(H, modMul(P.Z, Q.Z, p), p)
473
506
 
474
507
  return { X: X3, Y: Y3, Z: Z3 }
475
508
  }
476
509
 
477
510
  // Scalar Multiplication
478
- const scalarMultiply = (k: bigint, P: { x: bigint, y: bigint }): JacobianPoint => {
511
+ const scalarMultiply = (
512
+ k: bigint,
513
+ P: { x: bigint, y: bigint }
514
+ ): JacobianPoint => {
479
515
  const N: JacobianPoint = { X: P.x, Y: P.y, Z: one }
480
516
  let Q: JacobianPoint = { X: zero, Y: one, Z: zero } // Point at infinity
481
517
 
@@ -526,10 +562,10 @@ export const verify = (msg: BigNumber, sig: Signature, key: Point): boolean => {
526
562
  return false // No inverse exists
527
563
  }
528
564
  const ZInv2 = modMul(ZInv, ZInv, p)
529
- const x1_affine = modMul(R.X, ZInv2, p)
565
+ const x1affine = modMul(R.X, ZInv2, p)
530
566
 
531
567
  // Compute v = x1_affine mod n
532
- const v = mod(x1_affine, n)
568
+ const v = mod(x1affine, n)
533
569
 
534
570
  // Signature is valid if v == r mod n
535
571
  return v === r
@@ -537,6 +573,10 @@ export const verify = (msg: BigNumber, sig: Signature, key: Point): boolean => {
537
573
 
538
574
  // Convert inputs to BigInt
539
575
  const hash = BigInt('0x' + msg.toString(16))
576
+ if ((key.x == null) || (key.y == null)) {
577
+ throw new Error('Invalid public key: missing coordinates.')
578
+ }
579
+
540
580
  const publicKey = {
541
581
  x: BigInt('0x' + key.x.toString(16)),
542
582
  y: BigInt('0x' + key.y.toString(16))
@@ -553,8 +593,12 @@ export const verify = (msg: BigNumber, sig: Signature, key: Point): boolean => {
553
593
  // Perform primitive values validation
554
594
  const r = sig.r
555
595
  const s = sig.s
556
- if (r.cmpn(1) < 0 || r.cmp(curve.n) >= 0) { return false }
557
- if (s.cmpn(1) < 0 || s.cmp(curve.n) >= 0) { return false }
596
+ if (r.cmpn(1) < 0 || r.cmp(curve.n) >= 0) {
597
+ return false
598
+ }
599
+ if (s.cmpn(1) < 0 || s.cmp(curve.n) >= 0) {
600
+ return false
601
+ }
558
602
 
559
603
  // Validate signature
560
604
  const sinv = s.invm(curve.n)
@@ -564,7 +608,9 @@ export const verify = (msg: BigNumber, sig: Signature, key: Point): boolean => {
564
608
  // NOTE: Greg Maxwell's trick, inspired by:
565
609
  // https://git.io/vad3K
566
610
  const p = curve.g.jmulAdd(u1, key, u2)
567
- if (p.isInfinity()) { return false }
611
+ if (p.isInfinity()) {
612
+ return false
613
+ }
568
614
 
569
615
  // Compare `p.x` of Jacobian point with `r`,
570
616
  // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the