@bsv/sdk 2.1.0 → 2.1.2

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 (392) hide show
  1. package/README.md +7 -7
  2. package/dist/cjs/package.json +1 -1
  3. package/dist/cjs/src/auth/Peer.js +8 -13
  4. package/dist/cjs/src/auth/Peer.js.map +1 -1
  5. package/dist/cjs/src/auth/SessionManager.js +4 -7
  6. package/dist/cjs/src/auth/SessionManager.js.map +1 -1
  7. package/dist/cjs/src/auth/certificates/MasterCertificate.js +1 -1
  8. package/dist/cjs/src/auth/certificates/MasterCertificate.js.map +1 -1
  9. package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js +1 -1
  10. package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
  11. package/dist/cjs/src/auth/clients/AuthFetch.js +32 -32
  12. package/dist/cjs/src/auth/clients/AuthFetch.js.map +1 -1
  13. package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js +4 -4
  14. package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
  15. package/dist/cjs/src/compat/ECIES.js +29 -34
  16. package/dist/cjs/src/compat/ECIES.js.map +1 -1
  17. package/dist/cjs/src/compat/HD.js +9 -4
  18. package/dist/cjs/src/compat/HD.js.map +1 -1
  19. package/dist/cjs/src/compat/Mnemonic.js +12 -12
  20. package/dist/cjs/src/compat/Mnemonic.js.map +1 -1
  21. package/dist/cjs/src/identity/ContactsManager.js +212 -234
  22. package/dist/cjs/src/identity/ContactsManager.js.map +1 -1
  23. package/dist/cjs/src/identity/IdentityClient.js +199 -63
  24. package/dist/cjs/src/identity/IdentityClient.js.map +1 -1
  25. package/dist/cjs/src/kvstore/GlobalKVStore.js +30 -31
  26. package/dist/cjs/src/kvstore/GlobalKVStore.js.map +1 -1
  27. package/dist/cjs/src/kvstore/LocalKVStore.js +9 -9
  28. package/dist/cjs/src/kvstore/LocalKVStore.js.map +1 -1
  29. package/dist/cjs/src/kvstore/kvStoreInterpreter.js +2 -2
  30. package/dist/cjs/src/kvstore/kvStoreInterpreter.js.map +1 -1
  31. package/dist/cjs/src/messages/SignedMessage.js +1 -1
  32. package/dist/cjs/src/messages/SignedMessage.js.map +1 -1
  33. package/dist/cjs/src/overlay-tools/Historian.js +1 -1
  34. package/dist/cjs/src/overlay-tools/Historian.js.map +1 -1
  35. package/dist/cjs/src/overlay-tools/LookupResolver.js +213 -93
  36. package/dist/cjs/src/overlay-tools/LookupResolver.js.map +1 -1
  37. package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js +75 -146
  38. package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
  39. package/dist/cjs/src/primitives/AESGCM.js +2 -2
  40. package/dist/cjs/src/primitives/AESGCM.js.map +1 -1
  41. package/dist/cjs/src/primitives/BigNumber.js +164 -148
  42. package/dist/cjs/src/primitives/BigNumber.js.map +1 -1
  43. package/dist/cjs/src/primitives/Curve.js +17 -15
  44. package/dist/cjs/src/primitives/Curve.js.map +1 -1
  45. package/dist/cjs/src/primitives/ECDSA.js +12 -7
  46. package/dist/cjs/src/primitives/ECDSA.js.map +1 -1
  47. package/dist/cjs/src/primitives/Hash.js +312 -105
  48. package/dist/cjs/src/primitives/Hash.js.map +1 -1
  49. package/dist/cjs/src/primitives/JacobianPoint.js +8 -8
  50. package/dist/cjs/src/primitives/JacobianPoint.js.map +1 -1
  51. package/dist/cjs/src/primitives/K256.js +3 -3
  52. package/dist/cjs/src/primitives/K256.js.map +1 -1
  53. package/dist/cjs/src/primitives/Point.js +36 -40
  54. package/dist/cjs/src/primitives/Point.js.map +1 -1
  55. package/dist/cjs/src/primitives/PrivateKey.js +4 -4
  56. package/dist/cjs/src/primitives/PrivateKey.js.map +1 -1
  57. package/dist/cjs/src/primitives/PublicKey.js +4 -4
  58. package/dist/cjs/src/primitives/PublicKey.js.map +1 -1
  59. package/dist/cjs/src/primitives/Random.js +10 -14
  60. package/dist/cjs/src/primitives/Random.js.map +1 -1
  61. package/dist/cjs/src/primitives/ReaderUint8Array.js +6 -6
  62. package/dist/cjs/src/primitives/ReaderUint8Array.js.map +1 -1
  63. package/dist/cjs/src/primitives/Schnorr.js +2 -2
  64. package/dist/cjs/src/primitives/Schnorr.js.map +1 -1
  65. package/dist/cjs/src/primitives/Secp256r1.js +2 -1
  66. package/dist/cjs/src/primitives/Secp256r1.js.map +1 -1
  67. package/dist/cjs/src/primitives/Signature.js +8 -8
  68. package/dist/cjs/src/primitives/Signature.js.map +1 -1
  69. package/dist/cjs/src/primitives/SymmetricKey.js +123 -1
  70. package/dist/cjs/src/primitives/SymmetricKey.js.map +1 -1
  71. package/dist/cjs/src/primitives/TransactionSignature.js +20 -21
  72. package/dist/cjs/src/primitives/TransactionSignature.js.map +1 -1
  73. package/dist/cjs/src/primitives/utils.js +39 -46
  74. package/dist/cjs/src/primitives/utils.js.map +1 -1
  75. package/dist/cjs/src/registry/RegistryClient.js +31 -23
  76. package/dist/cjs/src/registry/RegistryClient.js.map +1 -1
  77. package/dist/cjs/src/remittance/RemittanceManager.js +19 -18
  78. package/dist/cjs/src/remittance/RemittanceManager.js.map +1 -1
  79. package/dist/cjs/src/remittance/modules/BasicBRC29.js.map +1 -1
  80. package/dist/cjs/src/script/Script.js +93 -170
  81. package/dist/cjs/src/script/Script.js.map +1 -1
  82. package/dist/cjs/src/script/ScriptEvaluationError.js +2 -2
  83. package/dist/cjs/src/script/ScriptEvaluationError.js.map +1 -1
  84. package/dist/cjs/src/script/Spend.js +14 -12
  85. package/dist/cjs/src/script/Spend.js.map +1 -1
  86. package/dist/cjs/src/script/templates/PushDrop.js +22 -18
  87. package/dist/cjs/src/script/templates/PushDrop.js.map +1 -1
  88. package/dist/cjs/src/script/templates/RPuzzle.js +2 -4
  89. package/dist/cjs/src/script/templates/RPuzzle.js.map +1 -1
  90. package/dist/cjs/src/storage/StorageDownloader.js +42 -9
  91. package/dist/cjs/src/storage/StorageDownloader.js.map +1 -1
  92. package/dist/cjs/src/totp/totp.js +1 -1
  93. package/dist/cjs/src/totp/totp.js.map +1 -1
  94. package/dist/cjs/src/transaction/Beef.js +239 -192
  95. package/dist/cjs/src/transaction/Beef.js.map +1 -1
  96. package/dist/cjs/src/transaction/BeefConstants.js +19 -0
  97. package/dist/cjs/src/transaction/BeefConstants.js.map +1 -0
  98. package/dist/cjs/src/transaction/BeefTx.js +12 -12
  99. package/dist/cjs/src/transaction/BeefTx.js.map +1 -1
  100. package/dist/cjs/src/transaction/MerklePath.js +4 -4
  101. package/dist/cjs/src/transaction/MerklePath.js.map +1 -1
  102. package/dist/cjs/src/transaction/Transaction.js +49 -52
  103. package/dist/cjs/src/transaction/Transaction.js.map +1 -1
  104. package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js +1 -1
  105. package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
  106. package/dist/cjs/src/transaction/http/BinaryFetchClient.js +9 -9
  107. package/dist/cjs/src/transaction/http/BinaryFetchClient.js.map +1 -1
  108. package/dist/cjs/src/transaction/http/DefaultHttpClient.js +9 -9
  109. package/dist/cjs/src/transaction/http/DefaultHttpClient.js.map +1 -1
  110. package/dist/cjs/src/wallet/CachedKeyDeriver.js +1 -1
  111. package/dist/cjs/src/wallet/CachedKeyDeriver.js.map +1 -1
  112. package/dist/cjs/src/wallet/WalletClient.js.map +1 -1
  113. package/dist/cjs/src/wallet/WalletError.js.map +1 -1
  114. package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js +5 -4
  115. package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
  116. package/dist/cjs/src/wallet/substrates/ReactNativeWebView.js +9 -9
  117. package/dist/cjs/src/wallet/substrates/ReactNativeWebView.js.map +1 -1
  118. package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js +92 -92
  119. package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
  120. package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js +387 -711
  121. package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
  122. package/dist/cjs/src/wallet/substrates/XDM.js +4 -4
  123. package/dist/cjs/src/wallet/substrates/XDM.js.map +1 -1
  124. package/dist/cjs/src/wallet/substrates/window.CWI.js +2 -2
  125. package/dist/cjs/src/wallet/substrates/window.CWI.js.map +1 -1
  126. package/dist/cjs/src/wallet/validationHelpers.js +9 -9
  127. package/dist/cjs/src/wallet/validationHelpers.js.map +1 -1
  128. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  129. package/dist/esm/src/auth/Peer.js +25 -13
  130. package/dist/esm/src/auth/Peer.js.map +1 -1
  131. package/dist/esm/src/auth/SessionManager.js +4 -7
  132. package/dist/esm/src/auth/SessionManager.js.map +1 -1
  133. package/dist/esm/src/auth/certificates/MasterCertificate.js +1 -1
  134. package/dist/esm/src/auth/certificates/MasterCertificate.js.map +1 -1
  135. package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js +1 -1
  136. package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
  137. package/dist/esm/src/auth/clients/AuthFetch.js +32 -32
  138. package/dist/esm/src/auth/clients/AuthFetch.js.map +1 -1
  139. package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js +4 -4
  140. package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
  141. package/dist/esm/src/compat/ECIES.js +29 -34
  142. package/dist/esm/src/compat/ECIES.js.map +1 -1
  143. package/dist/esm/src/compat/HD.js +9 -4
  144. package/dist/esm/src/compat/HD.js.map +1 -1
  145. package/dist/esm/src/compat/Mnemonic.js +12 -12
  146. package/dist/esm/src/compat/Mnemonic.js.map +1 -1
  147. package/dist/esm/src/identity/ContactsManager.js +212 -234
  148. package/dist/esm/src/identity/ContactsManager.js.map +1 -1
  149. package/dist/esm/src/identity/IdentityClient.js +199 -63
  150. package/dist/esm/src/identity/IdentityClient.js.map +1 -1
  151. package/dist/esm/src/kvstore/GlobalKVStore.js +30 -31
  152. package/dist/esm/src/kvstore/GlobalKVStore.js.map +1 -1
  153. package/dist/esm/src/kvstore/LocalKVStore.js +9 -9
  154. package/dist/esm/src/kvstore/LocalKVStore.js.map +1 -1
  155. package/dist/esm/src/kvstore/kvStoreInterpreter.js +2 -2
  156. package/dist/esm/src/kvstore/kvStoreInterpreter.js.map +1 -1
  157. package/dist/esm/src/messages/SignedMessage.js +1 -1
  158. package/dist/esm/src/messages/SignedMessage.js.map +1 -1
  159. package/dist/esm/src/overlay-tools/Historian.js +1 -1
  160. package/dist/esm/src/overlay-tools/Historian.js.map +1 -1
  161. package/dist/esm/src/overlay-tools/LookupResolver.js +213 -93
  162. package/dist/esm/src/overlay-tools/LookupResolver.js.map +1 -1
  163. package/dist/esm/src/overlay-tools/SHIPBroadcaster.js +74 -146
  164. package/dist/esm/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
  165. package/dist/esm/src/primitives/AESGCM.js +2 -2
  166. package/dist/esm/src/primitives/AESGCM.js.map +1 -1
  167. package/dist/esm/src/primitives/BigNumber.js +167 -154
  168. package/dist/esm/src/primitives/BigNumber.js.map +1 -1
  169. package/dist/esm/src/primitives/Curve.js +17 -15
  170. package/dist/esm/src/primitives/Curve.js.map +1 -1
  171. package/dist/esm/src/primitives/ECDSA.js +12 -7
  172. package/dist/esm/src/primitives/ECDSA.js.map +1 -1
  173. package/dist/esm/src/primitives/Hash.js +316 -105
  174. package/dist/esm/src/primitives/Hash.js.map +1 -1
  175. package/dist/esm/src/primitives/JacobianPoint.js +8 -8
  176. package/dist/esm/src/primitives/JacobianPoint.js.map +1 -1
  177. package/dist/esm/src/primitives/K256.js +3 -3
  178. package/dist/esm/src/primitives/K256.js.map +1 -1
  179. package/dist/esm/src/primitives/Point.js +36 -40
  180. package/dist/esm/src/primitives/Point.js.map +1 -1
  181. package/dist/esm/src/primitives/PrivateKey.js +4 -4
  182. package/dist/esm/src/primitives/PrivateKey.js.map +1 -1
  183. package/dist/esm/src/primitives/PublicKey.js +4 -4
  184. package/dist/esm/src/primitives/PublicKey.js.map +1 -1
  185. package/dist/esm/src/primitives/Random.js +10 -14
  186. package/dist/esm/src/primitives/Random.js.map +1 -1
  187. package/dist/esm/src/primitives/ReaderUint8Array.js +6 -6
  188. package/dist/esm/src/primitives/ReaderUint8Array.js.map +1 -1
  189. package/dist/esm/src/primitives/Schnorr.js +1 -1
  190. package/dist/esm/src/primitives/Schnorr.js.map +1 -1
  191. package/dist/esm/src/primitives/Secp256r1.js +2 -1
  192. package/dist/esm/src/primitives/Secp256r1.js.map +1 -1
  193. package/dist/esm/src/primitives/Signature.js +8 -8
  194. package/dist/esm/src/primitives/Signature.js.map +1 -1
  195. package/dist/esm/src/primitives/SymmetricKey.js +123 -1
  196. package/dist/esm/src/primitives/SymmetricKey.js.map +1 -1
  197. package/dist/esm/src/primitives/TransactionSignature.js +20 -21
  198. package/dist/esm/src/primitives/TransactionSignature.js.map +1 -1
  199. package/dist/esm/src/primitives/utils.js +39 -48
  200. package/dist/esm/src/primitives/utils.js.map +1 -1
  201. package/dist/esm/src/registry/RegistryClient.js +31 -23
  202. package/dist/esm/src/registry/RegistryClient.js.map +1 -1
  203. package/dist/esm/src/remittance/RemittanceManager.js +19 -18
  204. package/dist/esm/src/remittance/RemittanceManager.js.map +1 -1
  205. package/dist/esm/src/remittance/modules/BasicBRC29.js.map +1 -1
  206. package/dist/esm/src/script/Script.js +93 -170
  207. package/dist/esm/src/script/Script.js.map +1 -1
  208. package/dist/esm/src/script/ScriptEvaluationError.js +2 -2
  209. package/dist/esm/src/script/ScriptEvaluationError.js.map +1 -1
  210. package/dist/esm/src/script/Spend.js +14 -12
  211. package/dist/esm/src/script/Spend.js.map +1 -1
  212. package/dist/esm/src/script/templates/PushDrop.js +4 -3
  213. package/dist/esm/src/script/templates/PushDrop.js.map +1 -1
  214. package/dist/esm/src/script/templates/RPuzzle.js +2 -4
  215. package/dist/esm/src/script/templates/RPuzzle.js.map +1 -1
  216. package/dist/esm/src/storage/StorageDownloader.js +1 -1
  217. package/dist/esm/src/storage/StorageDownloader.js.map +1 -1
  218. package/dist/esm/src/totp/totp.js +1 -1
  219. package/dist/esm/src/totp/totp.js.map +1 -1
  220. package/dist/esm/src/transaction/Beef.js +229 -186
  221. package/dist/esm/src/transaction/Beef.js.map +1 -1
  222. package/dist/esm/src/transaction/BeefConstants.js +16 -0
  223. package/dist/esm/src/transaction/BeefConstants.js.map +1 -0
  224. package/dist/esm/src/transaction/BeefTx.js +3 -3
  225. package/dist/esm/src/transaction/BeefTx.js.map +1 -1
  226. package/dist/esm/src/transaction/MerklePath.js +4 -4
  227. package/dist/esm/src/transaction/MerklePath.js.map +1 -1
  228. package/dist/esm/src/transaction/Transaction.js +49 -52
  229. package/dist/esm/src/transaction/Transaction.js.map +1 -1
  230. package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js +1 -1
  231. package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
  232. package/dist/esm/src/transaction/http/BinaryFetchClient.js +9 -9
  233. package/dist/esm/src/transaction/http/BinaryFetchClient.js.map +1 -1
  234. package/dist/esm/src/transaction/http/DefaultHttpClient.js +9 -9
  235. package/dist/esm/src/transaction/http/DefaultHttpClient.js.map +1 -1
  236. package/dist/esm/src/wallet/CachedKeyDeriver.js +1 -1
  237. package/dist/esm/src/wallet/CachedKeyDeriver.js.map +1 -1
  238. package/dist/esm/src/wallet/WalletClient.js.map +1 -1
  239. package/dist/esm/src/wallet/WalletError.js.map +1 -1
  240. package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js +5 -4
  241. package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
  242. package/dist/esm/src/wallet/substrates/ReactNativeWebView.js +9 -9
  243. package/dist/esm/src/wallet/substrates/ReactNativeWebView.js.map +1 -1
  244. package/dist/esm/src/wallet/substrates/WalletWireProcessor.js +92 -92
  245. package/dist/esm/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
  246. package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js +387 -711
  247. package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
  248. package/dist/esm/src/wallet/substrates/XDM.js +4 -4
  249. package/dist/esm/src/wallet/substrates/XDM.js.map +1 -1
  250. package/dist/esm/src/wallet/substrates/window.CWI.js +2 -2
  251. package/dist/esm/src/wallet/substrates/window.CWI.js.map +1 -1
  252. package/dist/esm/src/wallet/validationHelpers.js +9 -9
  253. package/dist/esm/src/wallet/validationHelpers.js.map +1 -1
  254. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  255. package/dist/types/src/auth/Peer.d.ts +13 -0
  256. package/dist/types/src/auth/Peer.d.ts.map +1 -1
  257. package/dist/types/src/auth/SessionManager.d.ts.map +1 -1
  258. package/dist/types/src/auth/clients/AuthFetch.d.ts.map +1 -1
  259. package/dist/types/src/compat/ECIES.d.ts.map +1 -1
  260. package/dist/types/src/compat/HD.d.ts.map +1 -1
  261. package/dist/types/src/identity/ContactsManager.d.ts +31 -2
  262. package/dist/types/src/identity/ContactsManager.d.ts.map +1 -1
  263. package/dist/types/src/identity/IdentityClient.d.ts +75 -10
  264. package/dist/types/src/identity/IdentityClient.d.ts.map +1 -1
  265. package/dist/types/src/kvstore/GlobalKVStore.d.ts.map +1 -1
  266. package/dist/types/src/overlay-tools/LookupResolver.d.ts +73 -2
  267. package/dist/types/src/overlay-tools/LookupResolver.d.ts.map +1 -1
  268. package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts +18 -3
  269. package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts.map +1 -1
  270. package/dist/types/src/primitives/BigNumber.d.ts +13 -3
  271. package/dist/types/src/primitives/BigNumber.d.ts.map +1 -1
  272. package/dist/types/src/primitives/Curve.d.ts.map +1 -1
  273. package/dist/types/src/primitives/ECDSA.d.ts.map +1 -1
  274. package/dist/types/src/primitives/Hash.d.ts +22 -17
  275. package/dist/types/src/primitives/Hash.d.ts.map +1 -1
  276. package/dist/types/src/primitives/JacobianPoint.d.ts +3 -1
  277. package/dist/types/src/primitives/JacobianPoint.d.ts.map +1 -1
  278. package/dist/types/src/primitives/Point.d.ts.map +1 -1
  279. package/dist/types/src/primitives/Random.d.ts +2 -2
  280. package/dist/types/src/primitives/Random.d.ts.map +1 -1
  281. package/dist/types/src/primitives/ReaderUint8Array.d.ts.map +1 -1
  282. package/dist/types/src/primitives/Schnorr.d.ts +2 -1
  283. package/dist/types/src/primitives/Schnorr.d.ts.map +1 -1
  284. package/dist/types/src/primitives/Secp256r1.d.ts.map +1 -1
  285. package/dist/types/src/primitives/SymmetricKey.d.ts.map +1 -1
  286. package/dist/types/src/primitives/utils.d.ts +2 -4
  287. package/dist/types/src/primitives/utils.d.ts.map +1 -1
  288. package/dist/types/src/registry/RegistryClient.d.ts.map +1 -1
  289. package/dist/types/src/remittance/RemittanceManager.d.ts.map +1 -1
  290. package/dist/types/src/remittance/modules/BasicBRC29.d.ts.map +1 -1
  291. package/dist/types/src/script/Script.d.ts +15 -8
  292. package/dist/types/src/script/Script.d.ts.map +1 -1
  293. package/dist/types/src/script/Spend.d.ts.map +1 -1
  294. package/dist/types/src/script/templates/PushDrop.d.ts +3 -1
  295. package/dist/types/src/script/templates/PushDrop.d.ts.map +1 -1
  296. package/dist/types/src/script/templates/RPuzzle.d.ts.map +1 -1
  297. package/dist/types/src/transaction/Beef.d.ts +46 -8
  298. package/dist/types/src/transaction/Beef.d.ts.map +1 -1
  299. package/dist/types/src/transaction/BeefConstants.d.ts +15 -0
  300. package/dist/types/src/transaction/BeefConstants.d.ts.map +1 -0
  301. package/dist/types/src/transaction/Transaction.d.ts.map +1 -1
  302. package/dist/types/src/wallet/CachedKeyDeriver.d.ts.map +1 -1
  303. package/dist/types/src/wallet/KeyDeriver.d.ts +1 -1
  304. package/dist/types/src/wallet/KeyDeriver.d.ts.map +1 -1
  305. package/dist/types/src/wallet/Wallet.interfaces.d.ts +18 -3
  306. package/dist/types/src/wallet/Wallet.interfaces.d.ts.map +1 -1
  307. package/dist/types/src/wallet/WalletClient.d.ts +8 -8
  308. package/dist/types/src/wallet/WalletClient.d.ts.map +1 -1
  309. package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts +7 -7
  310. package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts.map +1 -1
  311. package/dist/types/src/wallet/substrates/WalletWireTransceiver.d.ts +36 -7
  312. package/dist/types/src/wallet/substrates/WalletWireTransceiver.d.ts.map +1 -1
  313. package/dist/types/src/wallet/substrates/window.CWI.d.ts +9 -9
  314. package/dist/types/src/wallet/substrates/window.CWI.d.ts.map +1 -1
  315. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  316. package/dist/umd/bundle.js +3 -3
  317. package/package.json +1 -1
  318. package/src/auth/Peer.ts +26 -13
  319. package/src/auth/SessionManager.ts +4 -7
  320. package/src/auth/certificates/MasterCertificate.ts +1 -1
  321. package/src/auth/certificates/__tests/CompletedProtoWallet.ts +1 -1
  322. package/src/auth/clients/AuthFetch.ts +41 -41
  323. package/src/auth/transports/SimplifiedFetchTransport.ts +4 -4
  324. package/src/compat/ECIES.ts +29 -34
  325. package/src/compat/HD.ts +10 -5
  326. package/src/compat/Mnemonic.ts +11 -11
  327. package/src/compat/__tests/HD.test.ts +19 -0
  328. package/src/identity/ContactsManager.ts +236 -258
  329. package/src/identity/IdentityClient.ts +244 -71
  330. package/src/identity/__tests/IdentityClient.additional.test.ts +150 -1
  331. package/src/identity/__tests/IdentityClient.test.ts +27 -3
  332. package/src/kvstore/GlobalKVStore.ts +31 -32
  333. package/src/kvstore/LocalKVStore.ts +8 -8
  334. package/src/kvstore/kvStoreInterpreter.ts +2 -2
  335. package/src/messages/SignedMessage.ts +1 -1
  336. package/src/overlay-tools/Historian.ts +1 -1
  337. package/src/overlay-tools/LookupResolver.ts +264 -90
  338. package/src/overlay-tools/SHIPBroadcaster.ts +92 -168
  339. package/src/primitives/AESGCM.ts +2 -2
  340. package/src/primitives/BigNumber.ts +122 -113
  341. package/src/primitives/Curve.ts +16 -15
  342. package/src/primitives/ECDSA.ts +10 -8
  343. package/src/primitives/Hash.ts +381 -146
  344. package/src/primitives/JacobianPoint.ts +13 -11
  345. package/src/primitives/K256.ts +3 -3
  346. package/src/primitives/Point.ts +35 -38
  347. package/src/primitives/PrivateKey.ts +3 -3
  348. package/src/primitives/PublicKey.ts +3 -3
  349. package/src/primitives/Random.ts +11 -14
  350. package/src/primitives/ReaderUint8Array.ts +7 -7
  351. package/src/primitives/Schnorr.ts +2 -1
  352. package/src/primitives/Secp256r1.ts +2 -1
  353. package/src/primitives/Signature.ts +8 -8
  354. package/src/primitives/SymmetricKey.ts +145 -1
  355. package/src/primitives/TransactionSignature.ts +16 -16
  356. package/src/primitives/__tests/Hash.additional.test.ts +65 -0
  357. package/src/primitives/__tests/Hash.test.ts +6 -1
  358. package/src/primitives/utils.ts +37 -47
  359. package/src/registry/RegistryClient.ts +25 -25
  360. package/src/remittance/RemittanceManager.ts +17 -18
  361. package/src/remittance/modules/BasicBRC29.ts +2 -5
  362. package/src/script/Script.ts +114 -170
  363. package/src/script/ScriptEvaluationError.ts +2 -2
  364. package/src/script/Spend.ts +14 -15
  365. package/src/script/templates/PushDrop.ts +5 -3
  366. package/src/script/templates/RPuzzle.ts +2 -4
  367. package/src/storage/StorageDownloader.ts +1 -1
  368. package/src/totp/totp.ts +1 -1
  369. package/src/transaction/Beef.ts +241 -203
  370. package/src/transaction/BeefConstants.ts +16 -0
  371. package/src/transaction/BeefTx.ts +3 -3
  372. package/src/transaction/MerklePath.ts +4 -4
  373. package/src/transaction/Transaction.ts +48 -51
  374. package/src/transaction/fee-models/SatoshisPerKilobyte.ts +1 -1
  375. package/src/transaction/http/BinaryFetchClient.ts +8 -8
  376. package/src/transaction/http/DefaultHttpClient.ts +8 -8
  377. package/src/wallet/CachedKeyDeriver.ts +8 -6
  378. package/src/wallet/KeyDeriver.ts +1 -1
  379. package/src/wallet/Wallet.interfaces.ts +18 -5
  380. package/src/wallet/WalletClient.ts +9 -9
  381. package/src/wallet/WalletError.ts +1 -1
  382. package/src/wallet/__tests/WalletClient.substrate.test.ts +10 -6
  383. package/src/wallet/substrates/HTTPWalletJSON.ts +22 -21
  384. package/src/wallet/substrates/ReactNativeWebView.ts +9 -9
  385. package/src/wallet/substrates/WalletWireProcessor.ts +83 -83
  386. package/src/wallet/substrates/WalletWireTransceiver.ts +528 -938
  387. package/src/wallet/substrates/XDM.ts +4 -4
  388. package/src/wallet/substrates/__tests/HTTPWalletJSON.test.ts +38 -25
  389. package/src/wallet/substrates/__tests/ReactNativeWebView.test.ts +174 -0
  390. package/src/wallet/substrates/__tests/window.CWI.test.ts +256 -0
  391. package/src/wallet/substrates/window.CWI.ts +11 -11
  392. package/src/wallet/validationHelpers.ts +9 -9
@@ -2,6 +2,8 @@ import BasePoint from './BasePoint.js'
2
2
  import BigNumber from './BigNumber.js'
3
3
  import Point from './Point.js'
4
4
 
5
+ type JacobianCoord = string | BigNumber | null
6
+
5
7
  /**
6
8
  * The `JacobianPoint` class extends the `BasePoint` class for handling Jacobian coordinates on an Elliptic Curve.
7
9
  * This class defines the properties and the methods needed to work with points in Jacobian coordinates.
@@ -39,9 +41,9 @@ export default class JacobianPoint extends BasePoint {
39
41
  * const pointJ2 = new JacobianPoint('3', '4', '1'); // creates point (3, 4, 1)
40
42
  */
41
43
  constructor (
42
- x: string | BigNumber | null,
43
- y: string | BigNumber | null,
44
- z: string | BigNumber | null
44
+ x: JacobianCoord,
45
+ y: JacobianCoord,
46
+ z: JacobianCoord
45
47
  ) {
46
48
  super('jacobian')
47
49
  if (x === null && y === null && z === null) {
@@ -157,10 +159,10 @@ export default class JacobianPoint extends BasePoint {
157
159
  const h = u1.redSub(u2)
158
160
  const r = s1.redSub(s2)
159
161
  if (h.cmpn(0) === 0) {
160
- if (r.cmpn(0) !== 0) {
161
- return new JacobianPoint(null, null, null)
162
- } else {
162
+ if (r.cmpn(0) === 0) {
163
163
  return this.dbl()
164
+ } else {
165
+ return new JacobianPoint(null, null, null)
164
166
  }
165
167
  }
166
168
 
@@ -215,10 +217,10 @@ export default class JacobianPoint extends BasePoint {
215
217
  const h = u1.redSub(u2)
216
218
  const r = s1.redSub(s2)
217
219
  if (h.cmpn(0) === 0) {
218
- if (r.cmpn(0) !== 0) {
219
- return new JacobianPoint(null, null, null)
220
- } else {
220
+ if (r.cmpn(0) === 0) {
221
221
  return this.dbl()
222
+ } else {
223
+ return new JacobianPoint(null, null, null)
222
224
  }
223
225
  }
224
226
 
@@ -251,7 +253,7 @@ export default class JacobianPoint extends BasePoint {
251
253
  if (this.isInfinity()) {
252
254
  return this
253
255
  }
254
- if (typeof pow === 'undefined') {
256
+ if (pow === undefined) {
255
257
  return this.dbl()
256
258
  }
257
259
 
@@ -414,7 +416,7 @@ export default class JacobianPoint extends BasePoint {
414
416
  }
415
417
 
416
418
  const xc = x.clone()
417
- if (this.curve === null || (this.curve.redN == null)) {
419
+ if (this.curve?.redN == null) {
418
420
  throw new Error('Curve or redN is not initialized.')
419
421
  }
420
422
 
@@ -77,7 +77,7 @@ export default class K256 extends Mersenne {
77
77
  let currentInputNewWordCount = 0
78
78
 
79
79
  for (let i = 10; i < inputNominalLength; i++) {
80
- const next = inputWords[i] | 0
80
+ const next = Math.trunc(inputWords[i])
81
81
  if (currentInputNewWordCount < tempInputNewWords.length) { // Boundary check
82
82
  tempInputNewWords[currentInputNewWordCount++] = ((next & mask) << 4) | (prev >>> 22)
83
83
  }
@@ -123,10 +123,10 @@ export default class K256 extends Mersenne {
123
123
 
124
124
  let lo = 0
125
125
  for (let i = 0; i < newNominalLength; i++) { // Iterate up to new expanded length
126
- const w = tempWords[i] | 0
126
+ const w = Math.trunc(tempWords[i])
127
127
  lo += w * 0x3d1 // 0x3d1 = 977
128
128
  tempWords[i] = lo & 0x3ffffff // 26-bit mask
129
- lo = w * 0x40 + ((lo / 0x4000000) | 0) // 0x40 = 64. 0x4000000 = 2^26
129
+ lo = w * 0x40 + Math.trunc(lo / 0x4000000) // 0x40 = 64. 0x4000000 = 2^26
130
130
  }
131
131
 
132
132
  num.words = tempWords // Use setter to re-initialize from tempWords
@@ -163,20 +163,17 @@ export const scalarMultiplyWNAF = (
163
163
  ): JacobianPointBI => {
164
164
  const key = `${window}:${P0.x.toString(16)}:${P0.y.toString(16)}`
165
165
  let tbl = WNAF_TABLE_CACHE.get(key)
166
- let P: JacobianPointBI
167
166
  if (tbl === undefined) {
168
167
  // Convert affine to Jacobian and pre-compute odd multiples
169
168
  const tblSize = 1 << (window - 1) // e.g. w=5 → 16 entries
170
169
  tbl = new Array(tblSize)
171
- P = { X: P0.x, Y: P0.y, Z: BI_ONE }
170
+ const P: JacobianPointBI = { X: P0.x, Y: P0.y, Z: BI_ONE }
172
171
  tbl[0] = P
173
172
  const twoP = jpDouble(P)
174
173
  for (let i = 1; i < tblSize; i++) {
175
174
  tbl[i] = jpAdd(tbl[i - 1], twoP)
176
175
  }
177
176
  WNAF_TABLE_CACHE.set(key, tbl)
178
- } else {
179
- P = tbl[0]
180
177
  }
181
178
 
182
179
  // Build wNAF representation of k
@@ -277,11 +274,11 @@ export default class Point extends BasePoint {
277
274
  bytes.length - 1 === 2 * len
278
275
  ) {
279
276
  if (bytes[0] === 0x06) {
280
- if (bytes[bytes.length - 1] % 2 !== 0) {
277
+ if (bytes.at(-1) % 2 !== 0) {
281
278
  throw new Error('Point string value is wrong length')
282
279
  }
283
280
  } else if (bytes[0] === 0x07) {
284
- if (bytes[bytes.length - 1] % 2 !== 1) {
281
+ if (bytes.at(-1) % 2 !== 1) {
285
282
  throw new Error('Point string value is wrong length')
286
283
  }
287
284
  }
@@ -523,10 +520,10 @@ export default class Point extends BasePoint {
523
520
  } else {
524
521
  res = [0x04].concat(x, this.getY().toArray('be', len))
525
522
  }
526
- if (enc !== 'hex') {
527
- return res
528
- } else {
523
+ if (enc === 'hex') {
529
524
  return toHex(res)
525
+ } else {
526
+ return res
530
527
  }
531
528
  }
532
529
 
@@ -573,19 +570,19 @@ export default class Point extends BasePoint {
573
570
  typeof this.precomputed === 'object' && this.precomputed !== null
574
571
  ? {
575
572
  doubles:
576
- this.precomputed.doubles != null
577
- ? {
573
+ this.precomputed.doubles == null
574
+ ? undefined
575
+ : {
578
576
  step: this.precomputed.doubles.step,
579
577
  points: this.precomputed.doubles.points.slice(1)
580
- }
581
- : undefined,
578
+ },
582
579
  naf:
583
- this.precomputed.naf != null
584
- ? {
580
+ this.precomputed.naf == null
581
+ ? undefined
582
+ : {
585
583
  wnd: this.precomputed.naf.wnd,
586
584
  points: this.precomputed.naf.points.slice(1)
587
585
  }
588
- : undefined
589
586
  }
590
587
  : undefined
591
588
  ]
@@ -827,8 +824,8 @@ export default class Point extends BasePoint {
827
824
  let R1: JacobianPointBI = { X: Px, Y: Py, Z: 1n }
828
825
 
829
826
  const bits = kBig.toString(2)
830
- for (let i = 0; i < bits.length; i++) {
831
- const bit = bits[i] === '1' ? 1n : 0n
827
+ for (const bitChar of bits) {
828
+ const bit = bitChar === '1' ? 1n : 0n
832
829
  ctSwap(bit, R0, R1)
833
830
  R1 = jpAdd(R0, R1)
834
831
  R0 = jpDouble(R0)
@@ -927,18 +924,18 @@ export default class Point extends BasePoint {
927
924
  const pre = this.precomputed
928
925
  const negate = (p: Point): Point => p.neg()
929
926
  res.precomputed = {
930
- naf: pre.naf != null
931
- ? {
927
+ naf: pre.naf == null
928
+ ? undefined
929
+ : {
932
930
  wnd: pre.naf.wnd,
933
931
  points: pre.naf.points.map(negate) as BasePoint[]
934
- }
935
- : undefined,
936
- doubles: pre.doubles != null
937
- ? {
932
+ },
933
+ doubles: pre.doubles == null
934
+ ? undefined
935
+ : {
938
936
  step: pre.doubles.step,
939
937
  points: pre.doubles.points.map((p) => (p as Point).neg())
940
- }
941
- : undefined,
938
+ },
942
939
  beta: undefined
943
940
  }
944
941
  }
@@ -1019,19 +1016,19 @@ export default class Point extends BasePoint {
1019
1016
  beta.precomputed = {
1020
1017
  beta: null,
1021
1018
  naf:
1022
- pre.naf != null
1023
- ? {
1019
+ pre.naf == null
1020
+ ? undefined
1021
+ : {
1024
1022
  wnd: pre.naf.wnd,
1025
1023
  points: pre.naf.points.map(endoMul)
1026
- }
1027
- : undefined,
1024
+ },
1028
1025
  doubles:
1029
- pre.doubles != null
1030
- ? {
1026
+ pre.doubles == null
1027
+ ? undefined
1028
+ : {
1031
1029
  step: pre.doubles.step,
1032
1030
  points: pre.doubles.points.map(endoMul)
1033
1031
  }
1034
- : undefined
1035
1032
  }
1036
1033
  }
1037
1034
  return beta
@@ -1142,8 +1139,8 @@ export default class Point extends BasePoint {
1142
1139
  naf[a] = new Array(max)
1143
1140
  naf[b] = new Array(max)
1144
1141
  for (let j = 0; j < max; j++) {
1145
- const ja = jsf[0][j] | 0
1146
- const jb = jsf[1][j] | 0
1142
+ const ja = Math.trunc(jsf[0][j])
1143
+ const jb = Math.trunc(jsf[1][j])
1147
1144
 
1148
1145
  naf[a][j] = index[(ja + 1) * 3 + (jb + 1)]
1149
1146
  naf[b][j] = 0
@@ -1187,10 +1184,10 @@ export default class Point extends BasePoint {
1187
1184
 
1188
1185
  if (z.cmpn(0) === 0) { // Check if z is 0
1189
1186
  continue
1190
- } else if (!z.isNeg()) { // If z is positive
1191
- p = wnd[j][z.sub(one).div(two).toNumber()]
1192
- } else { // If z is negative
1187
+ } else if (z.isNeg()) { // If z is negative
1193
1188
  p = wnd[j][z.neg().sub(one).div(two).toNumber()].neg()
1189
+ } else { // If z is positive
1190
+ p = wnd[j][z.sub(one).div(two).toNumber()]
1194
1191
  }
1195
1192
 
1196
1193
  if (p.type === 'affine') {
@@ -399,13 +399,13 @@ export default class PrivateKey extends BigNumber {
399
399
  let sharedSecret: Point
400
400
  if (typeof retrieveCachedSharedSecret === 'function') {
401
401
  const retrieved = retrieveCachedSharedSecret(this, publicKey)
402
- if (retrieved !== undefined) {
403
- sharedSecret = retrieved
404
- } else {
402
+ if (retrieved === undefined) {
405
403
  sharedSecret = this.deriveSharedSecret(publicKey)
406
404
  if (typeof cacheSharedSecret === 'function') {
407
405
  cacheSharedSecret(this, publicKey, sharedSecret)
408
406
  }
407
+ } else {
408
+ sharedSecret = retrieved
409
409
  }
410
410
  } else {
411
411
  sharedSecret = this.deriveSharedSecret(publicKey)
@@ -215,13 +215,13 @@ export default class PublicKey extends Point {
215
215
  let sharedSecret: Point
216
216
  if (typeof retrieveCachedSharedSecret === 'function') {
217
217
  const retrieved = retrieveCachedSharedSecret(privateKey, this)
218
- if (typeof retrieved !== 'undefined') {
219
- sharedSecret = retrieved
220
- } else {
218
+ if (retrieved === undefined) {
221
219
  sharedSecret = this.deriveSharedSecret(privateKey)
222
220
  if (typeof cacheSharedSecret === 'function') {
223
221
  cacheSharedSecret(privateKey, this, sharedSecret)
224
222
  }
223
+ } else {
224
+ sharedSecret = retrieved
225
225
  }
226
226
  } else {
227
227
  sharedSecret = this.deriveSharedSecret(privateKey)
@@ -31,7 +31,6 @@ class Rand {
31
31
  // Try globalThis.crypto (works in Node.js 18+, modern browsers, and Deno)
32
32
  if (typeof globalThis !== 'undefined' && typeof (globalThis as any).crypto?.getRandomValues === 'function') {
33
33
  this._rand = (n) => {
34
- /* eslint-disable-next-line */
35
34
  return this.getRandomValues(globalThis as any, n)
36
35
  }
37
36
  return
@@ -41,32 +40,30 @@ class Rand {
41
40
  if (typeof process !== 'undefined' && process.release?.name === 'node') {
42
41
  try {
43
42
  // eslint-disable-next-line @typescript-eslint/no-var-requires
44
- const crypto = require('crypto')
43
+ const crypto = require('node:crypto')
45
44
  if (typeof crypto.randomBytes === 'function') {
46
45
  this._rand = (n) => {
47
46
  return Array.from(crypto.randomBytes(n))
48
47
  }
49
48
  return
50
49
  }
51
- } catch (e) {
52
- // crypto module not available, continue to other checks
50
+ } catch (_cryptoModuleUnavailable) {
51
+ // node:crypto not available in this runtime; continue to other crypto API checks
53
52
  }
54
53
  }
55
54
 
56
55
  // Try self.crypto (Web Workers and Service Workers)
57
- if (typeof self !== 'undefined' && typeof self.crypto?.getRandomValues === 'function') {
56
+ if (typeof globalThis.self !== 'undefined' && typeof globalThis.self.crypto?.getRandomValues === 'function') {
58
57
  this._rand = (n) => {
59
- /* eslint-disable-next-line */
60
- return this.getRandomValues(self as any, n)
58
+ return this.getRandomValues(globalThis.self, n)
61
59
  }
62
60
  return
63
61
  }
64
62
 
65
63
  // Try window.crypto (browsers)
66
- if (typeof window !== 'undefined' && typeof (window as any).crypto?.getRandomValues === 'function') {
64
+ if (typeof globalThis.window !== 'undefined' && typeof (globalThis.window as any).crypto?.getRandomValues === 'function') {
67
65
  this._rand = (n) => {
68
- /* eslint-disable-next-line */
69
- return this.getRandomValues(window as any, n)
66
+ return this.getRandomValues(globalThis.window, n)
70
67
  }
71
68
  return
72
69
  }
@@ -93,9 +90,9 @@ let ayn: Rand | null = null
93
90
  * import Random from '@bsv/sdk/primitives/Random'
94
91
  * const bytes = Random(32) // Produces 32 random bytes
95
92
  */
96
- export default (len: number): number[] => {
97
- if (ayn == null) {
98
- ayn = new Rand()
99
- }
93
+ const Random = (len: number): number[] => {
94
+ ayn ??= new Rand()
100
95
  return ayn.generate(len)
101
96
  }
97
+
98
+ export default Random
@@ -25,7 +25,7 @@ export class ReaderUint8Array {
25
25
  } else if (Array.isArray(bin)) {
26
26
  this.bin = new Uint8Array(bin)
27
27
  } else {
28
- throw new Error('ReaderUint8Array constructor: bin must be Uint8Array or number[]')
28
+ throw new TypeError('ReaderUint8Array constructor: bin must be Uint8Array or number[]')
29
29
  }
30
30
  this.pos = pos
31
31
  this.length = this.bin.length
@@ -61,7 +61,7 @@ export class ReaderUint8Array {
61
61
  const val = this.bin[this.pos]
62
62
  this.pos += 1
63
63
  // If the sign bit is set, convert to negative value
64
- return (val & 0x80) !== 0 ? val - 0x100 : val
64
+ return (val & 0x80) === 0 ? val : val - 0x100
65
65
  }
66
66
 
67
67
  public readUInt16BE (): number {
@@ -73,10 +73,10 @@ export class ReaderUint8Array {
73
73
  public readInt16BE (): number {
74
74
  const val = this.readUInt16BE()
75
75
  // If the sign bit is set, convert to negative value
76
- return (val & 0x8000) !== 0 ? val - 0x10000 : val
76
+ return (val & 0x8000) === 0 ? val : val - 0x10000
77
77
  }
78
78
 
79
- public readUInt16LE (): number {
79
+ public readUInt16LE(): number {
80
80
  const val = this.bin[this.pos] | (this.bin[this.pos + 1] << 8)
81
81
  this.pos += 2
82
82
  return val
@@ -85,7 +85,7 @@ export class ReaderUint8Array {
85
85
  public readInt16LE (): number {
86
86
  const val = this.readUInt16LE()
87
87
  // If the sign bit is set, convert to negative value
88
- const x = (val & 0x8000) !== 0 ? val - 0x10000 : val
88
+ const x = (val & 0x8000) === 0 ? val : val - 0x10000
89
89
  return x
90
90
  }
91
91
 
@@ -102,7 +102,7 @@ export class ReaderUint8Array {
102
102
  public readInt32BE (): number {
103
103
  const val = this.readUInt32BE()
104
104
  // If the sign bit is set, convert to negative value
105
- return (val & 0x80000000) !== 0 ? val - 0x100000000 : val
105
+ return (val & 0x80000000) === 0 ? val : val - 0x100000000
106
106
  }
107
107
 
108
108
  public readUInt32LE (): number {
@@ -119,7 +119,7 @@ export class ReaderUint8Array {
119
119
  public readInt32LE (): number {
120
120
  const val = this.readUInt32LE()
121
121
  // Explicitly check if the sign bit is set and then convert to a negative value
122
- return (val & 0x80000000) !== 0 ? val - 0x100000000 : val
122
+ return (val & 0x80000000) === 0 ? val : val - 0x100000000
123
123
  }
124
124
 
125
125
  public readUInt64BEBn (): BigNumber {
@@ -2,7 +2,8 @@ import BigNumber from './BigNumber.js'
2
2
  import Curve from './Curve.js'
3
3
  import Point from './Point.js'
4
4
  import { sha256 } from './Hash.js'
5
- import { PrivateKey, PublicKey } from './index.js'
5
+ import PrivateKey from './PrivateKey.js'
6
+ import PublicKey from './PublicKey.js'
6
7
 
7
8
  /**
8
9
  * Class representing the Schnorr Zero-Knowledge Proof (ZKP) protocol.
@@ -189,7 +189,8 @@ export default class Secp256r1 {
189
189
  try {
190
190
  this.assertOnCurve(p)
191
191
  return true
192
- } catch (err) {
192
+ } catch (_notOnCurve) {
193
+ // assertOnCurve throws when the point is not on the curve; return false
193
194
  return false
194
195
  }
195
196
  }
@@ -82,17 +82,17 @@ export default class Signature {
82
82
  }
83
83
  let s = data.slice(p.place, slen + p.place)
84
84
  if (r[0] === 0) {
85
- if ((r[1] & 0x80) !== 0) {
86
- r = r.slice(1)
87
- } else {
85
+ if ((r[1] & 0x80) === 0) {
88
86
  throw new Error('Invalid R-value in signature DER')
87
+ } else {
88
+ r = r.slice(1)
89
89
  }
90
90
  }
91
91
  if (s[0] === 0) {
92
- if ((s[1] & 0x80) !== 0) {
93
- s = s.slice(1)
94
- } else {
92
+ if ((s[1] & 0x80) === 0) {
95
93
  throw new Error('Invalid S-value in signature DER')
94
+ } else {
95
+ s = s.slice(1)
96
96
  }
97
97
  }
98
98
 
@@ -285,7 +285,7 @@ export default class Signature {
285
285
  ): number[] | string {
286
286
  if (recovery < 0 || recovery > 3) throw new Error('Invalid recovery param')
287
287
  if (typeof compressed !== 'boolean') {
288
- throw new Error('Invalid compressed param')
288
+ throw new TypeError('Invalid compressed param')
289
289
  }
290
290
  let compactByte = 27 + recovery
291
291
  if (compressed) {
@@ -332,7 +332,7 @@ export default class Signature {
332
332
  const G = curve.g
333
333
 
334
334
  // 1.1 LEt x = r + jn
335
- const x = isSecondKey !== 0 ? r.add(n) : r
335
+ const x = isSecondKey === 0 ? r : r.add(n)
336
336
  const R = Point.fromX(x, isYOdd)
337
337
 
338
338
  // 1.4 Check that nR is at infinity
@@ -3,6 +3,124 @@ import { AESGCM, AESGCMDecrypt } from './AESGCM.js'
3
3
  import Random from './Random.js'
4
4
  import { toArray, encode } from './utils.js'
5
5
 
6
+ // ---------------------------------------------------------------------------
7
+ // Native AES-GCM fast-path via node:crypto / react-native-quick-crypto
8
+ //
9
+ // Resolved once at module load using the same pattern as Hash.ts. When
10
+ // `node:crypto` (or a compatible shim) is available and exposes
11
+ // `createCipheriv` / `createDecipheriv`, encrypt and decrypt will use it
12
+ // instead of the pure-TS implementation. The pure-TS path remains the
13
+ // unconditional fallback — any error in the native path causes silent
14
+ // re-execution through the pure-TS implementation.
15
+ // ---------------------------------------------------------------------------
16
+ const NODE_CRYPTO_SYM = (() => {
17
+ const processLike =
18
+ typeof globalThis === 'undefined' ? undefined : (globalThis as any).process
19
+ const getBuiltinModule = processLike?.getBuiltinModule
20
+ if (typeof getBuiltinModule === 'function') {
21
+ try {
22
+ const crypto = getBuiltinModule.call(processLike, 'node:crypto')
23
+ if (crypto != null) return crypto
24
+ } catch {
25
+ // continue to CommonJS fallback
26
+ }
27
+ }
28
+ try {
29
+ if (typeof require === 'function') {
30
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
31
+ return require('node:crypto')
32
+ }
33
+ } catch {
34
+ // node:crypto is unavailable in this runtime
35
+ }
36
+ return undefined
37
+ })()
38
+
39
+ /** True when the runtime provides a usable createCipheriv for aes-256-gcm. */
40
+ const NATIVE_AES_GCM_AVAILABLE: boolean = (() => {
41
+ if (NODE_CRYPTO_SYM == null) return false
42
+ return (
43
+ typeof NODE_CRYPTO_SYM.createCipheriv === 'function' &&
44
+ typeof NODE_CRYPTO_SYM.createDecipheriv === 'function'
45
+ )
46
+ })()
47
+
48
+ /**
49
+ * Encrypt `plaintext` with AES-256-GCM via node:crypto.
50
+ * Returns `iv (32 bytes) || ciphertext || authTag (16 bytes)` — identical
51
+ * layout to the pure-TS AESGCM path used by SymmetricKey.encrypt.
52
+ *
53
+ * Returns `null` on any failure so the caller can fall back to pure-TS.
54
+ */
55
+ function nativeEncrypt (
56
+ plaintext: Uint8Array,
57
+ iv: Uint8Array,
58
+ key: Uint8Array
59
+ ): Uint8Array | null {
60
+ try {
61
+ const cipher = NODE_CRYPTO_SYM.createCipheriv(
62
+ 'aes-256-gcm',
63
+ Buffer.from(key.buffer, key.byteOffset, key.byteLength),
64
+ Buffer.from(iv.buffer, iv.byteOffset, iv.byteLength)
65
+ )
66
+ const encrypted: Buffer = Buffer.concat([
67
+ cipher.update(Buffer.from(plaintext.buffer, plaintext.byteOffset, plaintext.byteLength)),
68
+ cipher.final()
69
+ ])
70
+ const authTag: Buffer = cipher.getAuthTag() // always 16 bytes for GCM
71
+
72
+ const out = new Uint8Array(iv.length + encrypted.length + authTag.length)
73
+ let offset = 0
74
+ out.set(iv, offset); offset += iv.length
75
+ out.set(encrypted, offset); offset += encrypted.length
76
+ out.set(authTag, offset)
77
+ return out
78
+ } catch {
79
+ return null
80
+ }
81
+ }
82
+
83
+ /**
84
+ * Decrypt an `iv || ciphertext || authTag` bundle produced by nativeEncrypt
85
+ * (or by the pure-TS SymmetricKey.encrypt path) using node:crypto.
86
+ *
87
+ * Returns the plaintext on success, `null` on authentication failure, or
88
+ * `undefined` to signal a non-auth error so the caller can fall back.
89
+ */
90
+ function nativeDecrypt (
91
+ msgBytes: Uint8Array,
92
+ ivLength: number,
93
+ tagLength: number,
94
+ key: Uint8Array
95
+ ): Uint8Array | null | undefined {
96
+ try {
97
+ const iv = msgBytes.slice(0, ivLength)
98
+ const tagStart = msgBytes.length - tagLength
99
+ const ciphertext = msgBytes.slice(ivLength, tagStart)
100
+ const messageTag = msgBytes.slice(tagStart)
101
+
102
+ const decipher = NODE_CRYPTO_SYM.createDecipheriv(
103
+ 'aes-256-gcm',
104
+ Buffer.from(key.buffer, key.byteOffset, key.byteLength),
105
+ Buffer.from(iv.buffer, iv.byteOffset, iv.byteLength)
106
+ )
107
+ decipher.setAuthTag(Buffer.from(messageTag.buffer, messageTag.byteOffset, messageTag.byteLength))
108
+
109
+ // Decryption authenticates on final(); throws if tag is wrong.
110
+ const decrypted: Buffer = Buffer.concat([
111
+ decipher.update(Buffer.from(ciphertext.buffer, ciphertext.byteOffset, ciphertext.byteLength)),
112
+ decipher.final()
113
+ ])
114
+ return new Uint8Array(decrypted.buffer, decrypted.byteOffset, decrypted.byteLength)
115
+ } catch {
116
+ // Node throws "Unsupported state or unable to authenticate data" on auth
117
+ // failure. Treat any error as auth failure so SymmetricKey.decrypt re-throws
118
+ // its own descriptive message — pure-TS fallback would return null in the
119
+ // same scenario.
120
+ return null
121
+ }
122
+ }
123
+
6
124
  /**
7
125
  * `SymmetricKey` is a class that extends the `BigNumber` class and implements symmetric encryption and decryption methods.
8
126
  * Symmetric-Key encryption is a form of encryption where the same key is used to encrypt and decrypt the message.
@@ -45,6 +163,16 @@ export default class SymmetricKey extends BigNumber {
45
163
  const msgBytes = new Uint8Array(toArray(msg, enc))
46
164
  const keyBytes = new Uint8Array(this.toArray('be', 32))
47
165
 
166
+ // Fast path: native AES-256-GCM via node:crypto / react-native-quick-crypto.
167
+ // Falls back to pure-TS on any failure.
168
+ if (NATIVE_AES_GCM_AVAILABLE) {
169
+ const nativeResult = nativeEncrypt(msgBytes, iv, keyBytes)
170
+ if (nativeResult !== null) {
171
+ return encode(Array.from(nativeResult), enc)
172
+ }
173
+ }
174
+
175
+ // Pure-TS fallback.
48
176
  const { result, authenticationTag } = AESGCM(
49
177
  msgBytes,
50
178
  iv,
@@ -90,12 +218,28 @@ export default class SymmetricKey extends BigNumber {
90
218
  throw new Error('Ciphertext too short')
91
219
  }
92
220
 
221
+ const keyBytes = new Uint8Array(this.toArray('be', 32))
222
+
223
+ // Fast path: native AES-256-GCM via node:crypto / react-native-quick-crypto.
224
+ // Falls back to pure-TS on null/undefined return.
225
+ if (NATIVE_AES_GCM_AVAILABLE) {
226
+ const nativeResult = nativeDecrypt(msgBytes, ivLength, tagLength, keyBytes)
227
+ if (nativeResult !== undefined) {
228
+ // nativeResult is Uint8Array on success or null on auth/decryption failure.
229
+ if (nativeResult === null) {
230
+ throw new Error('Decryption failed!')
231
+ }
232
+ return encode(Array.from(nativeResult), enc)
233
+ }
234
+ // undefined means unexpected setup error — fall through to pure-TS.
235
+ }
236
+
237
+ // Pure-TS fallback.
93
238
  const iv = msgBytes.slice(0, ivLength)
94
239
  const tagStart = msgBytes.length - tagLength
95
240
  const ciphertext = msgBytes.slice(ivLength, tagStart)
96
241
  const messageTag = msgBytes.slice(tagStart)
97
242
 
98
- const keyBytes = new Uint8Array(this.toArray('be', 32))
99
243
  const result = AESGCMDecrypt(
100
244
  ciphertext,
101
245
  iv,