@bsv/sdk 2.0.0-beta.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (487) hide show
  1. package/dist/cjs/mod.js +1 -0
  2. package/dist/cjs/mod.js.map +1 -1
  3. package/dist/cjs/package.json +1 -1
  4. package/dist/cjs/src/auth/Peer.js +149 -74
  5. package/dist/cjs/src/auth/Peer.js.map +1 -1
  6. package/dist/cjs/src/auth/SessionManager.js.map +1 -1
  7. package/dist/cjs/src/auth/certificates/Certificate.js +18 -8
  8. package/dist/cjs/src/auth/certificates/Certificate.js.map +1 -1
  9. package/dist/cjs/src/auth/certificates/MasterCertificate.js +19 -9
  10. package/dist/cjs/src/auth/certificates/MasterCertificate.js.map +1 -1
  11. package/dist/cjs/src/auth/certificates/VerifiableCertificate.js +17 -7
  12. package/dist/cjs/src/auth/certificates/VerifiableCertificate.js.map +1 -1
  13. package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
  14. package/dist/cjs/src/auth/clients/AuthFetch.js +30 -10
  15. package/dist/cjs/src/auth/clients/AuthFetch.js.map +1 -1
  16. package/dist/cjs/src/auth/clients/__tests__/AuthFetch.test.js.map +1 -1
  17. package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js +17 -7
  18. package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
  19. package/dist/cjs/src/auth/transports/__tests__/SimplifiedFetchTransport.test.js +17 -7
  20. package/dist/cjs/src/auth/transports/__tests__/SimplifiedFetchTransport.test.js.map +1 -1
  21. package/dist/cjs/src/auth/utils/createNonce.js +18 -9
  22. package/dist/cjs/src/auth/utils/createNonce.js.map +1 -1
  23. package/dist/cjs/src/auth/utils/validateCertificates.js.map +1 -1
  24. package/dist/cjs/src/auth/utils/verifyNonce.js +18 -9
  25. package/dist/cjs/src/auth/utils/verifyNonce.js.map +1 -1
  26. package/dist/cjs/src/compat/BSM.js +17 -7
  27. package/dist/cjs/src/compat/BSM.js.map +1 -1
  28. package/dist/cjs/src/compat/ECIES.js +17 -7
  29. package/dist/cjs/src/compat/ECIES.js.map +1 -1
  30. package/dist/cjs/src/compat/HD.js +17 -7
  31. package/dist/cjs/src/compat/HD.js.map +1 -1
  32. package/dist/cjs/src/compat/Mnemonic.js +17 -7
  33. package/dist/cjs/src/compat/Mnemonic.js.map +1 -1
  34. package/dist/cjs/src/compat/Utxo.js +1 -1
  35. package/dist/cjs/src/compat/Utxo.js.map +1 -1
  36. package/dist/cjs/src/compat/index.js +17 -7
  37. package/dist/cjs/src/compat/index.js.map +1 -1
  38. package/dist/cjs/src/identity/ContactsManager.js +1 -1
  39. package/dist/cjs/src/identity/ContactsManager.js.map +1 -1
  40. package/dist/cjs/src/identity/IdentityClient.js.map +1 -1
  41. package/dist/cjs/src/kvstore/GlobalKVStore.js +20 -10
  42. package/dist/cjs/src/kvstore/GlobalKVStore.js.map +1 -1
  43. package/dist/cjs/src/kvstore/LocalKVStore.js +17 -7
  44. package/dist/cjs/src/kvstore/LocalKVStore.js.map +1 -1
  45. package/dist/cjs/src/kvstore/kvStoreInterpreter.js +17 -7
  46. package/dist/cjs/src/kvstore/kvStoreInterpreter.js.map +1 -1
  47. package/dist/cjs/src/messages/EncryptedMessage.js +19 -0
  48. package/dist/cjs/src/messages/EncryptedMessage.js.map +1 -1
  49. package/dist/cjs/src/messages/SignedMessage.js.map +1 -1
  50. package/dist/cjs/src/messages/index.js +17 -7
  51. package/dist/cjs/src/messages/index.js.map +1 -1
  52. package/dist/cjs/src/overlay-tools/Historian.js.map +1 -1
  53. package/dist/cjs/src/overlay-tools/HostReputationTracker.js.map +1 -1
  54. package/dist/cjs/src/overlay-tools/LookupResolver.js +17 -7
  55. package/dist/cjs/src/overlay-tools/LookupResolver.js.map +1 -1
  56. package/dist/cjs/src/overlay-tools/OverlayAdminTokenTemplate.js.map +1 -1
  57. package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js +17 -7
  58. package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
  59. package/dist/cjs/src/overlay-tools/withDoubleSpendRetry.js +1 -2
  60. package/dist/cjs/src/overlay-tools/withDoubleSpendRetry.js.map +1 -1
  61. package/dist/cjs/src/primitives/AESGCM.js +77 -32
  62. package/dist/cjs/src/primitives/AESGCM.js.map +1 -1
  63. package/dist/cjs/src/primitives/BigNumber.js +28 -54
  64. package/dist/cjs/src/primitives/BigNumber.js.map +1 -1
  65. package/dist/cjs/src/primitives/Curve.js.map +1 -1
  66. package/dist/cjs/src/primitives/DRBG.js.map +1 -1
  67. package/dist/cjs/src/primitives/ECDSA.js +58 -24
  68. package/dist/cjs/src/primitives/ECDSA.js.map +1 -1
  69. package/dist/cjs/src/primitives/Hash.js +6 -6
  70. package/dist/cjs/src/primitives/Hash.js.map +1 -1
  71. package/dist/cjs/src/primitives/JacobianPoint.js.map +1 -1
  72. package/dist/cjs/src/primitives/K256.js.map +1 -1
  73. package/dist/cjs/src/primitives/Mersenne.js.map +1 -1
  74. package/dist/cjs/src/primitives/MontgomoryMethod.js.map +1 -1
  75. package/dist/cjs/src/primitives/Point.js +63 -6
  76. package/dist/cjs/src/primitives/Point.js.map +1 -1
  77. package/dist/cjs/src/primitives/Polynomial.js.map +1 -1
  78. package/dist/cjs/src/primitives/PrivateKey.js +46 -9
  79. package/dist/cjs/src/primitives/PrivateKey.js.map +1 -1
  80. package/dist/cjs/src/primitives/PublicKey.js +1 -1
  81. package/dist/cjs/src/primitives/PublicKey.js.map +1 -1
  82. package/dist/cjs/src/primitives/Random.js.map +1 -1
  83. package/dist/cjs/src/primitives/ReaderUint8Array.js +180 -0
  84. package/dist/cjs/src/primitives/ReaderUint8Array.js.map +1 -0
  85. package/dist/cjs/src/primitives/ReductionContext.js +35 -46
  86. package/dist/cjs/src/primitives/ReductionContext.js.map +1 -1
  87. package/dist/cjs/src/primitives/Schnorr.js.map +1 -1
  88. package/dist/cjs/src/primitives/Secp256r1.js.map +1 -1
  89. package/dist/cjs/src/primitives/Signature.js.map +1 -1
  90. package/dist/cjs/src/primitives/SymmetricKey.js.map +1 -1
  91. package/dist/cjs/src/primitives/TransactionSignature.js +132 -17
  92. package/dist/cjs/src/primitives/TransactionSignature.js.map +1 -1
  93. package/dist/cjs/src/primitives/WriterUint8Array.js +173 -0
  94. package/dist/cjs/src/primitives/WriterUint8Array.js.map +1 -0
  95. package/dist/cjs/src/primitives/hex.js +2 -3
  96. package/dist/cjs/src/primitives/hex.js.map +1 -1
  97. package/dist/cjs/src/primitives/index.js +17 -7
  98. package/dist/cjs/src/primitives/index.js.map +1 -1
  99. package/dist/cjs/src/primitives/utils.js +43 -16
  100. package/dist/cjs/src/primitives/utils.js.map +1 -1
  101. package/dist/cjs/src/registry/RegistryClient.js +2 -2
  102. package/dist/cjs/src/registry/RegistryClient.js.map +1 -1
  103. package/dist/cjs/src/remittance/CommsLayer.js +3 -0
  104. package/dist/cjs/src/remittance/CommsLayer.js.map +1 -0
  105. package/dist/cjs/src/remittance/IdentityLayer.js +3 -0
  106. package/dist/cjs/src/remittance/IdentityLayer.js.map +1 -0
  107. package/dist/cjs/src/remittance/RemittanceManager.js +1245 -0
  108. package/dist/cjs/src/remittance/RemittanceManager.js.map +1 -0
  109. package/dist/cjs/src/remittance/RemittanceModule.js +3 -0
  110. package/dist/cjs/src/remittance/RemittanceModule.js.map +1 -0
  111. package/dist/cjs/src/remittance/index.js +23 -0
  112. package/dist/cjs/src/remittance/index.js.map +1 -0
  113. package/dist/cjs/src/remittance/modules/BasicBRC29.js +225 -0
  114. package/dist/cjs/src/remittance/modules/BasicBRC29.js.map +1 -0
  115. package/dist/cjs/src/remittance/modules/index.js +18 -0
  116. package/dist/cjs/src/remittance/modules/index.js.map +1 -0
  117. package/dist/cjs/src/remittance/types.js +22 -0
  118. package/dist/cjs/src/remittance/types.js.map +1 -0
  119. package/dist/cjs/src/script/OP.js +15 -13
  120. package/dist/cjs/src/script/OP.js.map +1 -1
  121. package/dist/cjs/src/script/Script.js +4 -1
  122. package/dist/cjs/src/script/Script.js.map +1 -1
  123. package/dist/cjs/src/script/Spend.js +145 -53
  124. package/dist/cjs/src/script/Spend.js.map +1 -1
  125. package/dist/cjs/src/script/templates/P2PKH.js.map +1 -1
  126. package/dist/cjs/src/script/templates/PushDrop.js +21 -7
  127. package/dist/cjs/src/script/templates/PushDrop.js.map +1 -1
  128. package/dist/cjs/src/script/templates/RPuzzle.js.map +1 -1
  129. package/dist/cjs/src/storage/StorageDownloader.js.map +1 -1
  130. package/dist/cjs/src/storage/StorageUploader.js +17 -7
  131. package/dist/cjs/src/storage/StorageUploader.js.map +1 -1
  132. package/dist/cjs/src/storage/StorageUtils.js.map +1 -1
  133. package/dist/cjs/src/storage/index.js +17 -7
  134. package/dist/cjs/src/storage/index.js.map +1 -1
  135. package/dist/cjs/src/totp/totp.js.map +1 -1
  136. package/dist/cjs/src/transaction/Beef.js +85 -27
  137. package/dist/cjs/src/transaction/Beef.js.map +1 -1
  138. package/dist/cjs/src/transaction/BeefParty.js.map +1 -1
  139. package/dist/cjs/src/transaction/BeefTx.js +32 -14
  140. package/dist/cjs/src/transaction/BeefTx.js.map +1 -1
  141. package/dist/cjs/src/transaction/Broadcaster.js +2 -3
  142. package/dist/cjs/src/transaction/Broadcaster.js.map +1 -1
  143. package/dist/cjs/src/transaction/MerklePath.js +25 -6
  144. package/dist/cjs/src/transaction/MerklePath.js.map +1 -1
  145. package/dist/cjs/src/transaction/Transaction.js +238 -27
  146. package/dist/cjs/src/transaction/Transaction.js.map +1 -1
  147. package/dist/cjs/src/transaction/broadcasters/ARC.js +23 -0
  148. package/dist/cjs/src/transaction/broadcasters/ARC.js.map +1 -1
  149. package/dist/cjs/src/transaction/broadcasters/DefaultBroadcaster.js +1 -2
  150. package/dist/cjs/src/transaction/broadcasters/DefaultBroadcaster.js.map +1 -1
  151. package/dist/cjs/src/transaction/broadcasters/Teranode.js.map +1 -1
  152. package/dist/cjs/src/transaction/broadcasters/WhatsOnChainBroadcaster.js.map +1 -1
  153. package/dist/cjs/src/transaction/chaintrackers/BlockHeadersService.js.map +1 -1
  154. package/dist/cjs/src/transaction/chaintrackers/DefaultChainTracker.js +1 -2
  155. package/dist/cjs/src/transaction/chaintrackers/DefaultChainTracker.js.map +1 -1
  156. package/dist/cjs/src/transaction/chaintrackers/WhatsOnChain.js.map +1 -1
  157. package/dist/cjs/src/transaction/fee-models/LivePolicy.js.map +1 -1
  158. package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
  159. package/dist/cjs/src/transaction/http/BinaryFetchClient.js +2 -2
  160. package/dist/cjs/src/transaction/http/BinaryFetchClient.js.map +1 -1
  161. package/dist/cjs/src/transaction/http/DefaultHttpClient.js +1 -2
  162. package/dist/cjs/src/transaction/http/DefaultHttpClient.js.map +1 -1
  163. package/dist/cjs/src/transaction/http/NodejsHttpClient.js.map +1 -1
  164. package/dist/cjs/src/wallet/CachedKeyDeriver.js.map +1 -1
  165. package/dist/cjs/src/wallet/KeyDeriver.js.map +1 -1
  166. package/dist/cjs/src/wallet/ProtoWallet.js +1 -1
  167. package/dist/cjs/src/wallet/ProtoWallet.js.map +1 -1
  168. package/dist/cjs/src/wallet/WalletClient.js.map +1 -1
  169. package/dist/cjs/src/wallet/WalletError.js.map +1 -1
  170. package/dist/cjs/src/wallet/index.js +17 -7
  171. package/dist/cjs/src/wallet/index.js.map +1 -1
  172. package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
  173. package/dist/cjs/src/wallet/substrates/HTTPWalletWire.js +17 -7
  174. package/dist/cjs/src/wallet/substrates/HTTPWalletWire.js.map +1 -1
  175. package/dist/cjs/src/wallet/substrates/ReactNativeWebView.js +17 -7
  176. package/dist/cjs/src/wallet/substrates/ReactNativeWebView.js.map +1 -1
  177. package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js +17 -7
  178. package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
  179. package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js +17 -7
  180. package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
  181. package/dist/cjs/src/wallet/substrates/XDM.js +17 -7
  182. package/dist/cjs/src/wallet/substrates/XDM.js.map +1 -1
  183. package/dist/cjs/src/wallet/substrates/utils/toOriginHeader.js +1 -2
  184. package/dist/cjs/src/wallet/substrates/utils/toOriginHeader.js.map +1 -1
  185. package/dist/cjs/src/wallet/substrates/window.CWI.js.map +1 -1
  186. package/dist/cjs/src/wallet/validationHelpers.js +51 -41
  187. package/dist/cjs/src/wallet/validationHelpers.js.map +1 -1
  188. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  189. package/dist/esm/mod.js +1 -0
  190. package/dist/esm/mod.js.map +1 -1
  191. package/dist/esm/src/auth/Peer.js +132 -67
  192. package/dist/esm/src/auth/Peer.js.map +1 -1
  193. package/dist/esm/src/auth/SessionManager.js.map +1 -1
  194. package/dist/esm/src/auth/certificates/Certificate.js +1 -1
  195. package/dist/esm/src/auth/certificates/Certificate.js.map +1 -1
  196. package/dist/esm/src/auth/certificates/MasterCertificate.js +2 -2
  197. package/dist/esm/src/auth/certificates/MasterCertificate.js.map +1 -1
  198. package/dist/esm/src/auth/certificates/VerifiableCertificate.js.map +1 -1
  199. package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
  200. package/dist/esm/src/auth/clients/AuthFetch.js +13 -3
  201. package/dist/esm/src/auth/clients/AuthFetch.js.map +1 -1
  202. package/dist/esm/src/auth/clients/__tests__/AuthFetch.test.js.map +1 -1
  203. package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
  204. package/dist/esm/src/auth/transports/__tests__/SimplifiedFetchTransport.test.js.map +1 -1
  205. package/dist/esm/src/auth/utils/validateCertificates.js.map +1 -1
  206. package/dist/esm/src/compat/BSM.js.map +1 -1
  207. package/dist/esm/src/compat/ECIES.js.map +1 -1
  208. package/dist/esm/src/compat/HD.js.map +1 -1
  209. package/dist/esm/src/compat/Mnemonic.js.map +1 -1
  210. package/dist/esm/src/identity/ContactsManager.js +1 -1
  211. package/dist/esm/src/identity/ContactsManager.js.map +1 -1
  212. package/dist/esm/src/identity/IdentityClient.js.map +1 -1
  213. package/dist/esm/src/kvstore/GlobalKVStore.js +3 -3
  214. package/dist/esm/src/kvstore/GlobalKVStore.js.map +1 -1
  215. package/dist/esm/src/kvstore/LocalKVStore.js.map +1 -1
  216. package/dist/esm/src/kvstore/kvStoreInterpreter.js.map +1 -1
  217. package/dist/esm/src/messages/EncryptedMessage.js +19 -0
  218. package/dist/esm/src/messages/EncryptedMessage.js.map +1 -1
  219. package/dist/esm/src/messages/SignedMessage.js.map +1 -1
  220. package/dist/esm/src/overlay-tools/Historian.js.map +1 -1
  221. package/dist/esm/src/overlay-tools/HostReputationTracker.js.map +1 -1
  222. package/dist/esm/src/overlay-tools/LookupResolver.js.map +1 -1
  223. package/dist/esm/src/overlay-tools/OverlayAdminTokenTemplate.js.map +1 -1
  224. package/dist/esm/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
  225. package/dist/esm/src/overlay-tools/withDoubleSpendRetry.js.map +1 -1
  226. package/dist/esm/src/primitives/AESGCM.js +71 -26
  227. package/dist/esm/src/primitives/AESGCM.js.map +1 -1
  228. package/dist/esm/src/primitives/BigNumber.js +28 -54
  229. package/dist/esm/src/primitives/BigNumber.js.map +1 -1
  230. package/dist/esm/src/primitives/Curve.js.map +1 -1
  231. package/dist/esm/src/primitives/DRBG.js.map +1 -1
  232. package/dist/esm/src/primitives/ECDSA.js +58 -24
  233. package/dist/esm/src/primitives/ECDSA.js.map +1 -1
  234. package/dist/esm/src/primitives/Hash.js.map +1 -1
  235. package/dist/esm/src/primitives/JacobianPoint.js.map +1 -1
  236. package/dist/esm/src/primitives/K256.js.map +1 -1
  237. package/dist/esm/src/primitives/Mersenne.js.map +1 -1
  238. package/dist/esm/src/primitives/MontgomoryMethod.js.map +1 -1
  239. package/dist/esm/src/primitives/Point.js +61 -4
  240. package/dist/esm/src/primitives/Point.js.map +1 -1
  241. package/dist/esm/src/primitives/Polynomial.js.map +1 -1
  242. package/dist/esm/src/primitives/PrivateKey.js +29 -2
  243. package/dist/esm/src/primitives/PrivateKey.js.map +1 -1
  244. package/dist/esm/src/primitives/PublicKey.js +1 -1
  245. package/dist/esm/src/primitives/PublicKey.js.map +1 -1
  246. package/dist/esm/src/primitives/Random.js.map +1 -1
  247. package/dist/esm/src/primitives/ReaderUint8Array.js +176 -0
  248. package/dist/esm/src/primitives/ReaderUint8Array.js.map +1 -0
  249. package/dist/esm/src/primitives/ReductionContext.js +35 -46
  250. package/dist/esm/src/primitives/ReductionContext.js.map +1 -1
  251. package/dist/esm/src/primitives/Schnorr.js.map +1 -1
  252. package/dist/esm/src/primitives/Secp256r1.js.map +1 -1
  253. package/dist/esm/src/primitives/Signature.js.map +1 -1
  254. package/dist/esm/src/primitives/SymmetricKey.js.map +1 -1
  255. package/dist/esm/src/primitives/TransactionSignature.js +115 -10
  256. package/dist/esm/src/primitives/TransactionSignature.js.map +1 -1
  257. package/dist/esm/src/primitives/WriterUint8Array.js +169 -0
  258. package/dist/esm/src/primitives/WriterUint8Array.js.map +1 -0
  259. package/dist/esm/src/primitives/hex.js.map +1 -1
  260. package/dist/esm/src/primitives/utils.js +37 -11
  261. package/dist/esm/src/primitives/utils.js.map +1 -1
  262. package/dist/esm/src/registry/RegistryClient.js.map +1 -1
  263. package/dist/esm/src/remittance/CommsLayer.js +2 -0
  264. package/dist/esm/src/remittance/CommsLayer.js.map +1 -0
  265. package/dist/esm/src/remittance/IdentityLayer.js +2 -0
  266. package/dist/esm/src/remittance/IdentityLayer.js.map +1 -0
  267. package/dist/esm/src/remittance/RemittanceManager.js +1254 -0
  268. package/dist/esm/src/remittance/RemittanceManager.js.map +1 -0
  269. package/dist/esm/src/remittance/RemittanceModule.js +2 -0
  270. package/dist/esm/src/remittance/RemittanceModule.js.map +1 -0
  271. package/dist/esm/src/remittance/index.js +7 -0
  272. package/dist/esm/src/remittance/index.js.map +1 -0
  273. package/dist/esm/src/remittance/modules/BasicBRC29.js +227 -0
  274. package/dist/esm/src/remittance/modules/BasicBRC29.js.map +1 -0
  275. package/dist/esm/src/remittance/modules/index.js +2 -0
  276. package/dist/esm/src/remittance/modules/index.js.map +1 -0
  277. package/dist/esm/src/remittance/types.js +19 -0
  278. package/dist/esm/src/remittance/types.js.map +1 -0
  279. package/dist/esm/src/script/OP.js +15 -13
  280. package/dist/esm/src/script/OP.js.map +1 -1
  281. package/dist/esm/src/script/Script.js +4 -1
  282. package/dist/esm/src/script/Script.js.map +1 -1
  283. package/dist/esm/src/script/Spend.js +129 -46
  284. package/dist/esm/src/script/Spend.js.map +1 -1
  285. package/dist/esm/src/script/templates/P2PKH.js.map +1 -1
  286. package/dist/esm/src/script/templates/PushDrop.js +21 -7
  287. package/dist/esm/src/script/templates/PushDrop.js.map +1 -1
  288. package/dist/esm/src/script/templates/RPuzzle.js.map +1 -1
  289. package/dist/esm/src/storage/StorageDownloader.js.map +1 -1
  290. package/dist/esm/src/storage/StorageUploader.js.map +1 -1
  291. package/dist/esm/src/storage/StorageUtils.js.map +1 -1
  292. package/dist/esm/src/totp/totp.js.map +1 -1
  293. package/dist/esm/src/transaction/Beef.js +86 -28
  294. package/dist/esm/src/transaction/Beef.js.map +1 -1
  295. package/dist/esm/src/transaction/BeefParty.js.map +1 -1
  296. package/dist/esm/src/transaction/BeefTx.js +32 -14
  297. package/dist/esm/src/transaction/BeefTx.js.map +1 -1
  298. package/dist/esm/src/transaction/MerklePath.js +26 -7
  299. package/dist/esm/src/transaction/MerklePath.js.map +1 -1
  300. package/dist/esm/src/transaction/Transaction.js +239 -28
  301. package/dist/esm/src/transaction/Transaction.js.map +1 -1
  302. package/dist/esm/src/transaction/broadcasters/ARC.js +23 -0
  303. package/dist/esm/src/transaction/broadcasters/ARC.js.map +1 -1
  304. package/dist/esm/src/transaction/broadcasters/Teranode.js.map +1 -1
  305. package/dist/esm/src/transaction/broadcasters/WhatsOnChainBroadcaster.js.map +1 -1
  306. package/dist/esm/src/transaction/chaintrackers/BlockHeadersService.js.map +1 -1
  307. package/dist/esm/src/transaction/chaintrackers/WhatsOnChain.js.map +1 -1
  308. package/dist/esm/src/transaction/fee-models/LivePolicy.js.map +1 -1
  309. package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
  310. package/dist/esm/src/transaction/http/BinaryFetchClient.js.map +1 -1
  311. package/dist/esm/src/transaction/http/DefaultHttpClient.js.map +1 -1
  312. package/dist/esm/src/transaction/http/NodejsHttpClient.js.map +1 -1
  313. package/dist/esm/src/wallet/CachedKeyDeriver.js.map +1 -1
  314. package/dist/esm/src/wallet/KeyDeriver.js.map +1 -1
  315. package/dist/esm/src/wallet/ProtoWallet.js +1 -1
  316. package/dist/esm/src/wallet/ProtoWallet.js.map +1 -1
  317. package/dist/esm/src/wallet/WalletClient.js.map +1 -1
  318. package/dist/esm/src/wallet/WalletError.js.map +1 -1
  319. package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
  320. package/dist/esm/src/wallet/substrates/HTTPWalletWire.js.map +1 -1
  321. package/dist/esm/src/wallet/substrates/ReactNativeWebView.js.map +1 -1
  322. package/dist/esm/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
  323. package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
  324. package/dist/esm/src/wallet/substrates/XDM.js.map +1 -1
  325. package/dist/esm/src/wallet/substrates/utils/toOriginHeader.js.map +1 -1
  326. package/dist/esm/src/wallet/substrates/window.CWI.js.map +1 -1
  327. package/dist/esm/src/wallet/validationHelpers.js +1 -1
  328. package/dist/esm/src/wallet/validationHelpers.js.map +1 -1
  329. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  330. package/dist/types/mod.d.ts +1 -0
  331. package/dist/types/mod.d.ts.map +1 -1
  332. package/dist/types/src/auth/Peer.d.ts +12 -7
  333. package/dist/types/src/auth/Peer.d.ts.map +1 -1
  334. package/dist/types/src/auth/certificates/MasterCertificate.d.ts.map +1 -1
  335. package/dist/types/src/auth/clients/AuthFetch.d.ts.map +1 -1
  336. package/dist/types/src/auth/types.d.ts +2 -0
  337. package/dist/types/src/auth/types.d.ts.map +1 -1
  338. package/dist/types/src/auth/utils/getVerifiableCertificates.d.ts.map +1 -1
  339. package/dist/types/src/auth/utils/validateCertificates.d.ts.map +1 -1
  340. package/dist/types/src/compat/BSM.d.ts +1 -1
  341. package/dist/types/src/compat/BSM.d.ts.map +1 -1
  342. package/dist/types/src/messages/EncryptedMessage.d.ts +19 -0
  343. package/dist/types/src/messages/EncryptedMessage.d.ts.map +1 -1
  344. package/dist/types/src/messages/SignedMessage.d.ts.map +1 -1
  345. package/dist/types/src/primitives/AESGCM.d.ts +18 -0
  346. package/dist/types/src/primitives/AESGCM.d.ts.map +1 -1
  347. package/dist/types/src/primitives/BigNumber.d.ts +8 -0
  348. package/dist/types/src/primitives/BigNumber.d.ts.map +1 -1
  349. package/dist/types/src/primitives/ECDSA.d.ts +24 -0
  350. package/dist/types/src/primitives/ECDSA.d.ts.map +1 -1
  351. package/dist/types/src/primitives/Hash.d.ts +8 -8
  352. package/dist/types/src/primitives/Hash.d.ts.map +1 -1
  353. package/dist/types/src/primitives/Point.d.ts +1 -0
  354. package/dist/types/src/primitives/Point.d.ts.map +1 -1
  355. package/dist/types/src/primitives/PrivateKey.d.ts +27 -0
  356. package/dist/types/src/primitives/PrivateKey.d.ts.map +1 -1
  357. package/dist/types/src/primitives/Random.d.ts.map +1 -1
  358. package/dist/types/src/primitives/ReaderUint8Array.d.ts +32 -0
  359. package/dist/types/src/primitives/ReaderUint8Array.d.ts.map +1 -0
  360. package/dist/types/src/primitives/ReductionContext.d.ts +9 -0
  361. package/dist/types/src/primitives/ReductionContext.d.ts.map +1 -1
  362. package/dist/types/src/primitives/Secp256r1.d.ts.map +1 -1
  363. package/dist/types/src/primitives/TransactionSignature.d.ts +16 -4
  364. package/dist/types/src/primitives/TransactionSignature.d.ts.map +1 -1
  365. package/dist/types/src/primitives/WriterUint8Array.d.ts +54 -0
  366. package/dist/types/src/primitives/WriterUint8Array.d.ts.map +1 -0
  367. package/dist/types/src/primitives/utils.d.ts +19 -6
  368. package/dist/types/src/primitives/utils.d.ts.map +1 -1
  369. package/dist/types/src/remittance/CommsLayer.d.ts +50 -0
  370. package/dist/types/src/remittance/CommsLayer.d.ts.map +1 -0
  371. package/dist/types/src/remittance/IdentityLayer.d.ts +35 -0
  372. package/dist/types/src/remittance/IdentityLayer.d.ts.map +1 -0
  373. package/dist/types/src/remittance/RemittanceManager.d.ts +452 -0
  374. package/dist/types/src/remittance/RemittanceManager.d.ts.map +1 -0
  375. package/dist/types/src/remittance/RemittanceModule.d.ts +106 -0
  376. package/dist/types/src/remittance/RemittanceModule.d.ts.map +1 -0
  377. package/dist/types/src/remittance/index.d.ts +7 -0
  378. package/dist/types/src/remittance/index.d.ts.map +1 -0
  379. package/dist/types/src/remittance/modules/BasicBRC29.d.ts +133 -0
  380. package/dist/types/src/remittance/modules/BasicBRC29.d.ts.map +1 -0
  381. package/dist/types/src/remittance/modules/index.d.ts +2 -0
  382. package/dist/types/src/remittance/modules/index.d.ts.map +1 -0
  383. package/dist/types/src/remittance/types.d.ts +238 -0
  384. package/dist/types/src/remittance/types.d.ts.map +1 -0
  385. package/dist/types/src/script/OP.d.ts +5 -3
  386. package/dist/types/src/script/OP.d.ts.map +1 -1
  387. package/dist/types/src/script/Script.d.ts.map +1 -1
  388. package/dist/types/src/script/Spend.d.ts +7 -0
  389. package/dist/types/src/script/Spend.d.ts.map +1 -1
  390. package/dist/types/src/script/templates/PushDrop.d.ts +3 -4
  391. package/dist/types/src/script/templates/PushDrop.d.ts.map +1 -1
  392. package/dist/types/src/storage/StorageUtils.d.ts.map +1 -1
  393. package/dist/types/src/transaction/Beef.d.ts +26 -9
  394. package/dist/types/src/transaction/Beef.d.ts.map +1 -1
  395. package/dist/types/src/transaction/BeefTx.d.ts +13 -6
  396. package/dist/types/src/transaction/BeefTx.d.ts.map +1 -1
  397. package/dist/types/src/transaction/MerklePath.d.ts +16 -3
  398. package/dist/types/src/transaction/MerklePath.d.ts.map +1 -1
  399. package/dist/types/src/transaction/Transaction.d.ts +58 -7
  400. package/dist/types/src/transaction/Transaction.d.ts.map +1 -1
  401. package/dist/types/src/transaction/broadcasters/ARC.d.ts.map +1 -1
  402. package/dist/types/src/transaction/http/BinaryFetchClient.d.ts +0 -2
  403. package/dist/types/src/transaction/http/BinaryFetchClient.d.ts.map +1 -1
  404. package/dist/types/src/wallet/Wallet.interfaces.d.ts +5 -5
  405. package/dist/types/src/wallet/Wallet.interfaces.d.ts.map +1 -1
  406. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  407. package/dist/umd/bundle.js +13 -13
  408. package/dist/umd/bundle.js.map +1 -1
  409. package/docs/index.md +3 -1
  410. package/docs/reference/auth.md +8 -12
  411. package/docs/reference/primitives.md +260 -55
  412. package/docs/reference/remittance.md +2166 -0
  413. package/docs/reference/script.md +12 -4
  414. package/docs/reference/transaction.md +203 -34
  415. package/docs/reference/wallet.md +6 -5
  416. package/docs/remittance-getting-started.md +138 -0
  417. package/mod.ts +1 -0
  418. package/package.json +11 -1
  419. package/src/auth/Peer.ts +196 -85
  420. package/src/auth/__tests/Peer.test.ts +424 -257
  421. package/src/auth/clients/AuthFetch.ts +18 -3
  422. package/src/auth/types.ts +2 -0
  423. package/src/messages/EncryptedMessage.ts +19 -0
  424. package/src/overlay-tools/__tests/SHIPBroadcaster.test.ts +7 -0
  425. package/src/primitives/AESGCM.ts +75 -34
  426. package/src/primitives/BigNumber.ts +27 -31
  427. package/src/primitives/ECDSA.ts +41 -2
  428. package/src/primitives/PrivateKey.ts +27 -0
  429. package/src/primitives/ReaderUint8Array.ts +196 -0
  430. package/src/primitives/ReductionContext.ts +44 -48
  431. package/src/primitives/TransactionSignature.ts +129 -10
  432. package/src/primitives/WriterUint8Array.ts +195 -0
  433. package/src/primitives/__tests/AESGCM.test.ts +31 -0
  434. package/src/primitives/__tests/ECDSA.test.ts +16 -0
  435. package/src/primitives/__tests/ReaderUint8Array.test.ts +317 -0
  436. package/src/primitives/__tests/WriterUint8Array.test.ts +208 -0
  437. package/src/primitives/utils.ts +31 -4
  438. package/src/remittance/CommsLayer.ts +41 -0
  439. package/src/remittance/IdentityLayer.ts +32 -0
  440. package/src/remittance/RemittanceManager.ts +1672 -0
  441. package/src/remittance/RemittanceModule.ts +92 -0
  442. package/src/remittance/__tests/BasicBRC29.test.ts +188 -0
  443. package/src/remittance/__tests/RemittanceManager.test.ts +493 -0
  444. package/src/remittance/__tests/examples.ts +130 -0
  445. package/src/remittance/index.ts +6 -0
  446. package/src/remittance/modules/BasicBRC29.ts +361 -0
  447. package/src/remittance/modules/index.ts +1 -0
  448. package/src/remittance/types.ts +284 -0
  449. package/src/script/OP.ts +15 -13
  450. package/src/script/Script.ts +3 -1
  451. package/src/script/Spend.ts +128 -52
  452. package/src/script/__tests/Chronicle.test.ts +186 -0
  453. package/src/script/__tests/Spend.test.ts +1 -1
  454. package/src/script/__tests/SpendValildVectors.test.ts +63 -0
  455. package/src/script/__tests/lrshiftnum.test.ts +185 -0
  456. package/src/script/__tests/sighashTestData.ts +1031 -0
  457. package/src/script/__tests/spend.valid.vectors.ts +9 -16
  458. package/src/script/templates/PushDrop.ts +32 -17
  459. package/src/script/templates/__tests/PushDrop.test.ts +28 -0
  460. package/src/storage/__tests/StorageUploader.test.ts +1 -1
  461. package/src/transaction/Beef.ts +103 -40
  462. package/src/transaction/BeefTx.ts +38 -19
  463. package/src/transaction/MerklePath.ts +30 -9
  464. package/src/transaction/Transaction.ts +277 -38
  465. package/src/transaction/__tests/Beef.test.ts +77 -0
  466. package/src/transaction/__tests/Transaction.test.ts +641 -3
  467. package/src/transaction/broadcasters/ARC.ts +34 -7
  468. package/src/transaction/broadcasters/__tests/ARC.test.ts +98 -0
  469. package/src/wallet/Wallet.interfaces.ts +5 -5
  470. package/dist/cjs/src/storage/__test/StorageDownloader.test.js +0 -171
  471. package/dist/cjs/src/storage/__test/StorageDownloader.test.js.map +0 -1
  472. package/dist/cjs/src/storage/__test/StorageUploader.test.js +0 -163
  473. package/dist/cjs/src/storage/__test/StorageUploader.test.js.map +0 -1
  474. package/dist/cjs/src/storage/__test/StorageUtils.test.js +0 -97
  475. package/dist/cjs/src/storage/__test/StorageUtils.test.js.map +0 -1
  476. package/dist/esm/src/storage/__test/StorageDownloader.test.js +0 -166
  477. package/dist/esm/src/storage/__test/StorageDownloader.test.js.map +0 -1
  478. package/dist/esm/src/storage/__test/StorageUploader.test.js +0 -135
  479. package/dist/esm/src/storage/__test/StorageUploader.test.js.map +0 -1
  480. package/dist/esm/src/storage/__test/StorageUtils.test.js +0 -72
  481. package/dist/esm/src/storage/__test/StorageUtils.test.js.map +0 -1
  482. package/dist/types/src/storage/__test/StorageDownloader.test.d.ts +0 -2
  483. package/dist/types/src/storage/__test/StorageDownloader.test.d.ts.map +0 -1
  484. package/dist/types/src/storage/__test/StorageUploader.test.d.ts +0 -2
  485. package/dist/types/src/storage/__test/StorageUploader.test.d.ts.map +0 -1
  486. package/dist/types/src/storage/__test/StorageUtils.test.d.ts +0 -2
  487. package/dist/types/src/storage/__test/StorageUtils.test.d.ts.map +0 -1
package/docs/index.md CHANGED
@@ -48,6 +48,7 @@ Finally, you can deep dive into the details of the interface and types in the re
48
48
 
49
49
  ## Reference Material
50
50
 
51
+ - [Remittance Getting Started](./remittance-getting-started.md)
51
52
  - [Wallet](./reference/wallet.md)
52
53
  - [Primitives](./reference/primitives.md)
53
54
  - [Script](./reference/script.md)
@@ -58,6 +59,7 @@ Finally, you can deep dive into the details of the interface and types in the re
58
59
  - [Registry](./reference/registry.md)
59
60
  - [Storage](./reference/storage.md)
60
61
  - [KV Store](./reference/kvstore.md)
62
+ - [Remittance](./reference/remittance.md)
61
63
  - [Messages](./reference/messages.md)
62
64
  - [TOTP](./reference/totp.md)
63
65
  - [Compatibility](./reference/compat.md)
@@ -74,4 +76,4 @@ Finally, you can deep dive into the details of the interface and types in the re
74
76
 
75
77
  ## Performance Reports
76
78
 
77
- - [Benchmarks](./performance.md)
79
+ - [Benchmarks](./performance.md)
@@ -47,6 +47,8 @@ export interface PeerSession {
47
47
  peerNonce?: string;
48
48
  peerIdentityKey?: string;
49
49
  lastUpdate: number;
50
+ certificatesRequired?: boolean;
51
+ certificatesValidated?: boolean;
50
52
  }
51
53
  ```
52
54
 
@@ -679,9 +681,9 @@ export class Peer {
679
681
  public sessionManager: SessionManager;
680
682
  certificatesToRequest: RequestedCertificateSet;
681
683
  constructor(wallet: WalletInterface, transport: Transport, certificatesToRequest?: RequestedCertificateSet, sessionManager?: SessionManager, autoPersistLastSession?: boolean, originator?: OriginatorDomainNameStringUnder250Bytes)
682
- async toPeer(message: number[], identityKey?: string, maxWaitTime?: number): Promise<void>
683
- async requestCertificates(certificatesToRequest: RequestedCertificateSet, identityKey?: string, maxWaitTime = 10000): Promise<void>
684
- async getAuthenticatedSession(identityKey?: string, maxWaitTime?: number): Promise<PeerSession>
684
+ async toPeer(message: number[], identityKey?: string): Promise<void>
685
+ async requestCertificates(certificatesToRequest: RequestedCertificateSet, identityKey?: string): Promise<void>
686
+ async getAuthenticatedSession(identityKey?: string): Promise<PeerSession>
685
687
  listenForGeneralMessages(callback: (senderPublicKey: string, payload: number[]) => void): number
686
688
  stopListeningForGeneralMessages(callbackID: number): void
687
689
  listenForCertificatesReceived(callback: (senderPublicKey: string, certs: VerifiableCertificate[]) => void): number
@@ -726,7 +728,7 @@ or the session is not authenticated, initiates a handshake to create or authenti
726
728
  - If `identityKey` is not provided, but we have a `lastInteractedWithPeer`, we try that key.
727
729
 
728
730
  ```ts
729
- async getAuthenticatedSession(identityKey?: string, maxWaitTime?: number): Promise<PeerSession>
731
+ async getAuthenticatedSession(identityKey?: string): Promise<PeerSession>
730
732
  ```
731
733
  See also: [PeerSession](./auth.md#interface-peersession)
732
734
 
@@ -738,8 +740,6 @@ Argument Details
738
740
 
739
741
  + **identityKey**
740
742
  + The identity public key of the peer.
741
- + **maxWaitTime**
742
- + The maximum time in milliseconds to wait for the handshake.
743
743
 
744
744
  #### Method listenForCertificatesReceived
745
745
 
@@ -801,7 +801,7 @@ This method allows a peer to dynamically request specific certificates after
801
801
  an initial handshake or message has been exchanged.
802
802
 
803
803
  ```ts
804
- async requestCertificates(certificatesToRequest: RequestedCertificateSet, identityKey?: string, maxWaitTime = 10000): Promise<void>
804
+ async requestCertificates(certificatesToRequest: RequestedCertificateSet, identityKey?: string): Promise<void>
805
805
  ```
806
806
  See also: [RequestedCertificateSet](./auth.md#interface-requestedcertificateset)
807
807
 
@@ -815,8 +815,6 @@ Argument Details
815
815
  + Specifies the certifiers and types of certificates required from the peer.
816
816
  + **identityKey**
817
817
  + The identity public key of the peer. If not provided, the current or last session identity is used.
818
- + **maxWaitTime**
819
- + Maximum time in milliseconds to wait for the peer session to be authenticated.
820
818
 
821
819
  Throws
822
820
 
@@ -886,7 +884,7 @@ Argument Details
886
884
  Sends a general message to a peer, and initiates a handshake if necessary.
887
885
 
888
886
  ```ts
889
- async toPeer(message: number[], identityKey?: string, maxWaitTime?: number): Promise<void>
887
+ async toPeer(message: number[], identityKey?: string): Promise<void>
890
888
  ```
891
889
 
892
890
  Argument Details
@@ -895,8 +893,6 @@ Argument Details
895
893
  + The message payload to send.
896
894
  + **identityKey**
897
895
  + The identity public key of the peer. If not provided, uses lastInteractedWithPeer (if any).
898
- + **maxWaitTime**
899
- + optional max wait time in ms
900
896
 
901
897
  Throws
902
898
 
@@ -44,16 +44,17 @@ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](
44
44
 
45
45
  | | | |
46
46
  | --- | --- | --- |
47
- | [BasePoint](#class-basepoint) | [PointInFiniteField](#class-pointinfinitefield) | [SHA256HMAC](#class-sha256hmac) |
48
- | [BigNumber](#class-bignumber) | [Polynomial](#class-polynomial) | [SHA512](#class-sha512) |
49
- | [Curve](#class-curve) | [PrivateKey](#class-privatekey) | [SHA512HMAC](#class-sha512hmac) |
50
- | [DRBG](#class-drbg) | [PublicKey](#class-publickey) | [Schnorr](#class-schnorr) |
51
- | [JacobianPoint](#class-jacobianpoint) | [RIPEMD160](#class-ripemd160) | [Secp256r1](#class-secp256r1) |
52
- | [K256](#class-k256) | [Reader](#class-reader) | [Signature](#class-signature) |
53
- | [KeyShares](#class-keyshares) | [ReductionContext](#class-reductioncontext) | [SymmetricKey](#class-symmetrickey) |
54
- | [Mersenne](#class-mersenne) | [SHA1](#class-sha1) | [TransactionSignature](#class-transactionsignature) |
55
- | [MontgomoryMethod](#class-montgomorymethod) | [SHA1HMAC](#class-sha1hmac) | [Writer](#class-writer) |
47
+ | [BasePoint](#class-basepoint) | [Polynomial](#class-polynomial) | [SHA512](#class-sha512) |
48
+ | [BigNumber](#class-bignumber) | [PrivateKey](#class-privatekey) | [SHA512HMAC](#class-sha512hmac) |
49
+ | [Curve](#class-curve) | [PublicKey](#class-publickey) | [Schnorr](#class-schnorr) |
50
+ | [DRBG](#class-drbg) | [RIPEMD160](#class-ripemd160) | [Secp256r1](#class-secp256r1) |
51
+ | [JacobianPoint](#class-jacobianpoint) | [Reader](#class-reader) | [Signature](#class-signature) |
52
+ | [K256](#class-k256) | [ReaderUint8Array](#class-readeruint8array) | [SymmetricKey](#class-symmetrickey) |
53
+ | [KeyShares](#class-keyshares) | [ReductionContext](#class-reductioncontext) | [TransactionSignature](#class-transactionsignature) |
54
+ | [Mersenne](#class-mersenne) | [SHA1](#class-sha1) | [Writer](#class-writer) |
55
+ | [MontgomoryMethod](#class-montgomorymethod) | [SHA1HMAC](#class-sha1hmac) | [WriterUint8Array](#class-writeruint8array) |
56
56
  | [Point](#class-point) | [SHA256](#class-sha256) | |
57
+ | [PointInFiniteField](#class-pointinfinitefield) | [SHA256HMAC](#class-sha256hmac) | |
57
58
 
58
59
  Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Enums](#enums), [Variables](#variables)
59
60
 
@@ -299,6 +300,13 @@ console.log(BigNumber.wordSize); // output: 26
299
300
  Compute the multiplicative inverse of the current BigNumber in the modulus field specified by `p`.
300
301
  The multiplicative inverse is a number which when multiplied with the current BigNumber gives '1' in the modulus field.
301
302
 
303
+ SECURITY NOTE:
304
+ This implementation avoids variable-time extended Euclidean algorithms
305
+ to reduce timing side-channel leakage. However, JavaScript BigInt arithmetic
306
+ does not provide constant-time guarantees. This implementation is suitable
307
+ for browser and single-tenant environments but is not hardened against
308
+ high-resolution timing attacks in shared CPU contexts.
309
+
302
310
  ```ts
303
311
  _invmp(p: BigNumber): BigNumber
304
312
  ```
@@ -1786,6 +1794,7 @@ export default class Point extends BasePoint {
1786
1794
  getX(): BigNumber
1787
1795
  getY(): BigNumber
1788
1796
  mul(k: BigNumber | number | number[] | string): Point
1797
+ mulCT(k: BigNumber | number | number[] | string): Point
1789
1798
  mulAdd(k1: BigNumber, p2: Point, k2: BigNumber): Point
1790
1799
  jmulAdd(k1: BigNumber, p2: Point, k2: BigNumber): JPoint
1791
1800
  eq(p: Point): boolean
@@ -2508,6 +2517,32 @@ Returns
2508
2517
 
2509
2518
  #### Method deriveChild
2510
2519
 
2520
+ SECURITY NOTE – DETERMINISTIC CHILD KEY DERIVATION
2521
+
2522
+ This method derives child private keys deterministically from the caller’s
2523
+ long-term private key, the counterparty’s public key, and a caller-supplied
2524
+ invoice number using HMAC over an ECDH shared secret (BRC-42 style derivation).
2525
+
2526
+ This construction does NOT implement a formally authenticated key exchange
2527
+ (AKE) and does NOT provide the following security properties:
2528
+
2529
+ - Forward secrecy: Compromise of a long-term private key compromises all
2530
+ past and future child keys derived from it.
2531
+ - Replay protection: Child keys are deterministic for a given invoice
2532
+ number and key pair; previously observed messages can be replayed.
2533
+ - Explicit authentication / identity binding: Possession of a public key
2534
+ alone does not guarantee the intended peer identity, enabling potential
2535
+ identity misbinding attacks if higher-level identity verification is absent.
2536
+
2537
+ This derivation is intended for lightweight, deterministic key hierarchies
2538
+ where both parties already possess and trust each other’s long-term public
2539
+ keys. It SHOULD NOT be used as a drop-in replacement for a standard
2540
+ authenticated key exchange (e.g. X3DH, Noise, or SIGMA) in high-security or
2541
+ high-value contexts.
2542
+
2543
+ Any future protocol providing forward secrecy, replay protection, or strong
2544
+ peer authentication will require a versioned, breaking change.
2545
+
2511
2546
  Derives a child key with BRC-42.
2512
2547
 
2513
2548
  ```ts
@@ -3306,9 +3341,54 @@ See also: [BigNumber](./primitives.md#class-bignumber)
3306
3341
 
3307
3342
  Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Enums](#enums), [Variables](#variables)
3308
3343
 
3344
+ ---
3345
+ ### Class: ReaderUint8Array
3346
+
3347
+ Reader for serialized Uint8Array binary data.
3348
+
3349
+ ```ts
3350
+ export class ReaderUint8Array {
3351
+ public bin: Uint8Array;
3352
+ public pos: number;
3353
+ static makeReader(bin: Uint8Array | number[], pos: number = 0): Reader | ReaderUint8Array
3354
+ constructor(bin: Uint8Array | number[] = new Uint8Array(0), pos: number = 0)
3355
+ public eof(): boolean
3356
+ public read(len = this.length): Uint8Array
3357
+ public readReverse(len = this.length): Uint8Array
3358
+ public readUInt8(): number
3359
+ public readInt8(): number
3360
+ public readUInt16BE(): number
3361
+ public readInt16BE(): number
3362
+ public readUInt16LE(): number
3363
+ public readInt16LE(): number
3364
+ public readUInt32BE(): number
3365
+ public readInt32BE(): number
3366
+ public readUInt32LE(): number
3367
+ public readInt32LE(): number
3368
+ public readUInt64BEBn(): BigNumber
3369
+ public readUInt64LEBn(): BigNumber
3370
+ public readInt64LEBn(): BigNumber
3371
+ public readVarIntNum(signed: boolean = true): number
3372
+ public readVarInt(): Uint8Array
3373
+ public readVarIntBn(): BigNumber
3374
+ }
3375
+ ```
3376
+
3377
+ See also: [BigNumber](./primitives.md#class-bignumber), [Reader](./primitives.md#class-reader)
3378
+
3379
+ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Enums](#enums), [Variables](#variables)
3380
+
3309
3381
  ---
3310
3382
  ### Class: ReductionContext
3311
3383
 
3384
+ SECURITY NOTE:
3385
+ This reduction context avoids obvious variable-time constructs (such as
3386
+ sliding-window exponentiation and conditional modular reduction) to reduce
3387
+ timing side-channel leakage. However, JavaScript BigInt arithmetic does not
3388
+ provide constant-time guarantees. These mitigations improve resistance to
3389
+ coarse timing attacks but do not make the implementation suitable for
3390
+ hostile multi-tenant or shared-CPU environments.
3391
+
3312
3392
  A base reduction engine that provides several arithmetic operations over
3313
3393
  big numbers under a modulus context. It's particularly suitable for
3314
3394
  calculations required in cryptography algorithms and encoding schemas.
@@ -4860,9 +4940,12 @@ export default class TransactionSignature extends Signature {
4860
4940
  public static readonly SIGHASH_ALL = 1;
4861
4941
  public static readonly SIGHASH_NONE = 2;
4862
4942
  public static readonly SIGHASH_SINGLE = 3;
4943
+ public static readonly SIGHASH_CHRONICLE = 32;
4863
4944
  public static readonly SIGHASH_FORKID = 64;
4864
4945
  public static readonly SIGHASH_ANYONECANPAY = 128;
4865
4946
  scope: number;
4947
+ static formatOTDA(params: TransactionSignatureFormatParams): Uint8Array
4948
+ static formatBip143(params: TransactionSignatureFormatParams): Uint8Array
4866
4949
  static format(params: TransactionSignatureFormatParams): number[]
4867
4950
  static formatBytes(params: TransactionSignatureFormatParams): Uint8Array
4868
4951
  static fromChecksigFormat(buf: number[]): TransactionSignature
@@ -4889,12 +4972,12 @@ Argument Details
4889
4972
  + **params.cache**
4890
4973
  + Optional cache storing previously computed `hashPrevouts`, `hashSequence`, or `hashOutputs*` values; it will be populated if present.
4891
4974
 
4892
- #### Method formatBytes
4975
+ #### Method formatBip143
4893
4976
 
4894
4977
  Formats the same SIGHASH preimage bytes as `format`, supporting the optional cache for hash reuse.
4895
4978
 
4896
4979
  ```ts
4897
- static formatBytes(params: TransactionSignatureFormatParams): Uint8Array
4980
+ static formatBip143(params: TransactionSignatureFormatParams): Uint8Array
4898
4981
  ```
4899
4982
 
4900
4983
  Returns
@@ -4908,6 +4991,18 @@ Argument Details
4908
4991
  + **params.cache**
4909
4992
  + Optional `SignatureHashCache` that may already contain hashed prefixes and is populated during formatting.
4910
4993
 
4994
+ #### Method formatOTDA
4995
+
4996
+ Implements the original bitcoin transaction signature digest preimage algorithm (OTDA).
4997
+
4998
+ ```ts
4999
+ static formatOTDA(params: TransactionSignatureFormatParams): Uint8Array
5000
+ ```
5001
+
5002
+ Returns
5003
+
5004
+ preimage as a byte array
5005
+
4911
5006
  #### Method hasLowS
4912
5007
 
4913
5008
  Compares to bitcoind's IsLowDERSignature
@@ -4930,6 +5025,7 @@ export class Writer {
4930
5025
  getLength(): number
4931
5026
  toUint8Array(): Uint8Array
4932
5027
  toArray(): number[]
5028
+ toHex(): string
4933
5029
  write(buf: WriterChunk): this
4934
5030
  writeReverse(buf: number[]): this
4935
5031
  writeUInt8(n: number): this
@@ -4952,7 +5048,91 @@ export class Writer {
4952
5048
  }
4953
5049
  ```
4954
5050
 
4955
- See also: [BigNumber](./primitives.md#class-bignumber), [toArray](./primitives.md#variable-toarray)
5051
+ See also: [BigNumber](./primitives.md#class-bignumber), [toArray](./primitives.md#variable-toarray), [toHex](./primitives.md#variable-tohex), [toUint8Array](./primitives.md#variable-touint8array)
5052
+
5053
+ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Enums](#enums), [Variables](#variables)
5054
+
5055
+ ---
5056
+ ### Class: WriterUint8Array
5057
+
5058
+ WriterUint8Array is a utility class for writing binary data into a dynamically
5059
+ growing Uint8Array buffer. It provides methods to write various integer types
5060
+ and variable-length integers, similar to the Writer class but optimized for
5061
+ Uint8Array usage.
5062
+
5063
+ ```ts
5064
+ export class WriterUint8Array {
5065
+ constructor(bufs?: WriterChunk[], initialCapacity: number = 256)
5066
+ getLength(): number
5067
+ toUint8Array(): Uint8Array
5068
+ toArray(): number[]
5069
+ toUint8ArrayZeroCopy(): Uint8Array
5070
+ write(bytes: WriterChunk): this
5071
+ writeReverse(buf: WriterChunk): this
5072
+ writeUInt8(value: number): this
5073
+ writeInt8(value: number): this
5074
+ writeUInt16LE(value: number): this
5075
+ writeUInt16BE(value: number): this
5076
+ writeInt16LE(value: number): this
5077
+ writeInt16BE(value: number): this
5078
+ writeUInt32LE(value: number): this
5079
+ writeUInt32BE(value: number): this
5080
+ writeInt32LE(value: number): this
5081
+ writeInt32BE(value: number): this
5082
+ writeUInt64BEBn(bn: BigNumber): this
5083
+ writeUInt64LEBn(bn: BigNumber): this
5084
+ writeUInt64LE(n: number): this
5085
+ writeVarIntNum(n: number): this
5086
+ writeVarIntBn(bn: BigNumber): this
5087
+ reset(): void
5088
+ }
5089
+ ```
5090
+
5091
+ See also: [BigNumber](./primitives.md#class-bignumber), [toArray](./primitives.md#variable-toarray), [toUint8Array](./primitives.md#variable-touint8array)
5092
+
5093
+ #### Method getLength
5094
+
5095
+ Returns the current length of written data
5096
+
5097
+ ```ts
5098
+ getLength(): number
5099
+ ```
5100
+
5101
+ #### Method reset
5102
+
5103
+ Resets the writer to empty state (reuses the buffer)
5104
+
5105
+ ```ts
5106
+ reset(): void
5107
+ ```
5108
+
5109
+ #### Method toArray
5110
+
5111
+ Legacy compatibility method – returns number[] (Byte[])
5112
+
5113
+ ```ts
5114
+ toArray(): number[]
5115
+ ```
5116
+
5117
+ #### Method toUint8Array
5118
+
5119
+ ```ts
5120
+ toUint8Array(): Uint8Array
5121
+ ```
5122
+
5123
+ Returns
5124
+
5125
+ the written data as Uint8Array copy of the internal buffer
5126
+
5127
+ #### Method toUint8ArrayZeroCopy
5128
+
5129
+ ```ts
5130
+ toUint8ArrayZeroCopy(): Uint8Array
5131
+ ```
5132
+
5133
+ Returns
5134
+
5135
+ the written data as Uint8Array. CAUTION: This is zero-copy subarray of the internal buffer).
4956
5136
 
4957
5137
  Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Enums](#enums), [Variables](#variables)
4958
5138
 
@@ -5309,24 +5489,25 @@ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](
5309
5489
 
5310
5490
  | | | |
5311
5491
  | --- | --- | --- |
5312
- | [BI_EIGHT](#variable-bi_eight) | [biModSqrt](#variable-bimodsqrt) | [modN](#variable-modn) |
5313
- | [BI_FOUR](#variable-bi_four) | [biModSub](#variable-bimodsub) | [multiply](#variable-multiply) |
5314
- | [BI_ONE](#variable-bi_one) | [checkBit](#variable-checkbit) | [rightShift](#variable-rightshift) |
5315
- | [BI_THREE](#variable-bi_three) | [encode](#variable-encode) | [ripemd160](#variable-ripemd160) |
5316
- | [BI_TWO](#variable-bi_two) | [exclusiveOR](#variable-exclusiveor) | [scalarMultiplyWNAF](#variable-scalarmultiplywnaf) |
5317
- | [BI_ZERO](#variable-bi_zero) | [fromBase58](#variable-frombase58) | [sha1](#variable-sha1) |
5318
- | [GX_BIGINT](#variable-gx_bigint) | [fromBase58Check](#variable-frombase58check) | [sha256](#variable-sha256) |
5319
- | [GY_BIGINT](#variable-gy_bigint) | [getBytes](#variable-getbytes) | [sha256hmac](#variable-sha256hmac) |
5320
- | [MASK_256](#variable-mask_256) | [getBytes64](#variable-getbytes64) | [sha512](#variable-sha512) |
5321
- | [N_BIGINT](#variable-n_bigint) | [hash160](#variable-hash160) | [sha512hmac](#variable-sha512hmac) |
5322
- | [P_BIGINT](#variable-p_bigint) | [hash256](#variable-hash256) | [sign](#variable-sign) |
5323
- | [P_PLUS1_DIV4](#variable-p_plus1_div4) | [incrementLeastSignificantThirtyTwoBits](#variable-incrementleastsignificantthirtytwobits) | [toArray](#variable-toarray) |
5324
- | [biMod](#variable-bimod) | [jpAdd](#variable-jpadd) | [toBase58](#variable-tobase58) |
5325
- | [biModAdd](#variable-bimodadd) | [jpDouble](#variable-jpdouble) | [toBase58Check](#variable-tobase58check) |
5326
- | [biModInv](#variable-bimodinv) | [jpNeg](#variable-jpneg) | [toHex](#variable-tohex) |
5327
- | [biModMul](#variable-bimodmul) | [minimallyEncode](#variable-minimallyencode) | [toUTF8](#variable-toutf8) |
5328
- | [biModPow](#variable-bimodpow) | [modInvN](#variable-modinvn) | [verify](#variable-verify) |
5329
- | [biModSqr](#variable-bimodsqr) | [modMulN](#variable-modmuln) | [zero2](#variable-zero2) |
5492
+ | [BI_EIGHT](#variable-bi_eight) | [biModSub](#variable-bimodsub) | [rightShift](#variable-rightshift) |
5493
+ | [BI_FOUR](#variable-bi_four) | [checkBit](#variable-checkbit) | [ripemd160](#variable-ripemd160) |
5494
+ | [BI_ONE](#variable-bi_one) | [encode](#variable-encode) | [scalarMultiplyWNAF](#variable-scalarmultiplywnaf) |
5495
+ | [BI_THREE](#variable-bi_three) | [exclusiveOR](#variable-exclusiveor) | [sha1](#variable-sha1) |
5496
+ | [BI_TWO](#variable-bi_two) | [fromBase58](#variable-frombase58) | [sha256](#variable-sha256) |
5497
+ | [BI_ZERO](#variable-bi_zero) | [fromBase58Check](#variable-frombase58check) | [sha256hmac](#variable-sha256hmac) |
5498
+ | [GX_BIGINT](#variable-gx_bigint) | [getBytes](#variable-getbytes) | [sha512](#variable-sha512) |
5499
+ | [GY_BIGINT](#variable-gy_bigint) | [getBytes64](#variable-getbytes64) | [sha512hmac](#variable-sha512hmac) |
5500
+ | [MASK_256](#variable-mask_256) | [hash160](#variable-hash160) | [sign](#variable-sign) |
5501
+ | [N_BIGINT](#variable-n_bigint) | [hash256](#variable-hash256) | [toArray](#variable-toarray) |
5502
+ | [P_BIGINT](#variable-p_bigint) | [incrementLeastSignificantThirtyTwoBits](#variable-incrementleastsignificantthirtytwobits) | [toBase58](#variable-tobase58) |
5503
+ | [P_PLUS1_DIV4](#variable-p_plus1_div4) | [jpAdd](#variable-jpadd) | [toBase58Check](#variable-tobase58check) |
5504
+ | [biMod](#variable-bimod) | [jpDouble](#variable-jpdouble) | [toHex](#variable-tohex) |
5505
+ | [biModAdd](#variable-bimodadd) | [jpNeg](#variable-jpneg) | [toUTF8](#variable-toutf8) |
5506
+ | [biModInv](#variable-bimodinv) | [minimallyEncode](#variable-minimallyencode) | [toUint8Array](#variable-touint8array) |
5507
+ | [biModMul](#variable-bimodmul) | [modInvN](#variable-modinvn) | [verify](#variable-verify) |
5508
+ | [biModPow](#variable-bimodpow) | [modMulN](#variable-modmuln) | [zero2](#variable-zero2) |
5509
+ | [biModSqr](#variable-bimodsqr) | [modN](#variable-modn) | |
5510
+ | [biModSqrt](#variable-bimodsqrt) | [multiply](#variable-multiply) | |
5330
5511
 
5331
5512
  Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Enums](#enums), [Variables](#variables)
5332
5513
 
@@ -5923,16 +6104,18 @@ multiply = function (block0: Bytes, block1: Bytes): Bytes {
5923
6104
  const v = block1.slice();
5924
6105
  const z = createZeroBlock(16);
5925
6106
  for (let i = 0; i < 16; i++) {
6107
+ const b = block0[i];
5926
6108
  for (let j = 7; j >= 0; j--) {
5927
- if ((block0[i] & (1 << j)) !== 0) {
5928
- xorInto(z, v);
6109
+ const bit = (b >> j) & 1;
6110
+ const mask = -bit & 255;
6111
+ for (let k = 0; k < 16; k++) {
6112
+ z[k] ^= v[k] & mask;
5929
6113
  }
5930
- if ((v[15] & 1) !== 0) {
5931
- rightShift(v);
5932
- xorInto(v, R);
5933
- }
5934
- else {
5935
- rightShift(v);
6114
+ const lsb = v[15] & 1;
6115
+ const rmask = -lsb & 255;
6116
+ rightShift(v);
6117
+ for (let k = 0; k < 16; k++) {
6118
+ v[k] ^= R[k] & rmask;
5936
6119
  }
5937
6120
  }
5938
6121
  }
@@ -6109,9 +6292,13 @@ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](
6109
6292
 
6110
6293
  ```ts
6111
6294
  sign = (msg: BigNumber, key: BigNumber, forceLowS: boolean = false, customK?: BigNumber | ((iter: number) => BigNumber)): Signature => {
6295
+ const nBitLength = curve.n.bitLength();
6296
+ if (msg.bitLength() > nBitLength) {
6297
+ throw new Error(`ECDSA message is too large: expected <= ${nBitLength} bits. Callers must hash messages before signing.`);
6298
+ }
6112
6299
  msg = truncateToN(msg);
6113
- const msgBig = BigInt("0x" + msg.toString(16));
6114
- const keyBig = BigInt("0x" + key.toString(16));
6300
+ const msgBig = bnToBigInt(msg);
6301
+ const keyBig = bnToBigInt(key);
6115
6302
  const bkey = key.toArray("be", bytes);
6116
6303
  const nonce = msg.toArray("be", bytes);
6117
6304
  const drbg = new DRBG(bkey, nonce);
@@ -6121,26 +6308,24 @@ sign = (msg: BigNumber, key: BigNumber, forceLowS: boolean = false, customK?: Bi
6121
6308
  : BigNumber.isBN(customK)
6122
6309
  ? customK
6123
6310
  : new BigNumber(drbg.generate(bytes), 16);
6124
- if (kBN == null)
6311
+ if (kBN == null) {
6125
6312
  throw new Error("k is undefined");
6313
+ }
6126
6314
  kBN = truncateToN(kBN, true);
6127
6315
  if (kBN.cmpn(1) < 0 || kBN.cmp(ns1) > 0) {
6128
6316
  if (BigNumber.isBN(customK)) {
6129
- throw new Error("Invalid fixed custom K value (must be >1 and <N\u20111)");
6317
+ throw new Error("Invalid fixed custom K value (must be >1 and <N-1)");
6130
6318
  }
6131
6319
  continue;
6132
6320
  }
6133
- const kBig = BigInt("0x" + kBN.toString(16));
6134
- const R = scalarMultiplyWNAF(kBig, { x: GX_BIGINT, y: GY_BIGINT });
6135
- if (R.Z === 0n) {
6321
+ const R = curve.g.mulCT(kBN);
6322
+ if (R.isInfinity()) {
6136
6323
  if (BigNumber.isBN(customK)) {
6137
6324
  throw new Error("Invalid fixed custom K value (k\u00B7G at infinity)");
6138
6325
  }
6139
6326
  continue;
6140
6327
  }
6141
- const zInv = biModInv(R.Z);
6142
- const zInv2 = biModMul(zInv, zInv);
6143
- const xAff = biModMul(R.X, zInv2);
6328
+ const xAff = BigInt("0x" + R.getX().toString(16));
6144
6329
  const rBig = modN(xAff);
6145
6330
  if (rBig === 0n) {
6146
6331
  if (BigNumber.isBN(customK)) {
@@ -6148,6 +6333,7 @@ sign = (msg: BigNumber, key: BigNumber, forceLowS: boolean = false, customK?: Bi
6148
6333
  }
6149
6334
  continue;
6150
6335
  }
6336
+ const kBig = BigInt("0x" + kBN.toString(16));
6151
6337
  const kInv = modInvN(kBig);
6152
6338
  const rTimesKey = modMulN(rBig, keyBig);
6153
6339
  const sum = modN(msgBig + rTimesKey);
@@ -6168,7 +6354,7 @@ sign = (msg: BigNumber, key: BigNumber, forceLowS: boolean = false, customK?: Bi
6168
6354
  }
6169
6355
  ```
6170
6356
 
6171
- See also: [BigNumber](./primitives.md#class-bignumber), [DRBG](./primitives.md#class-drbg), [GX_BIGINT](./primitives.md#variable-gx_bigint), [GY_BIGINT](./primitives.md#variable-gy_bigint), [N_BIGINT](./primitives.md#variable-n_bigint), [Signature](./primitives.md#class-signature), [biModInv](./primitives.md#variable-bimodinv), [biModMul](./primitives.md#variable-bimodmul), [modInvN](./primitives.md#variable-modinvn), [modMulN](./primitives.md#variable-modmuln), [modN](./primitives.md#variable-modn), [scalarMultiplyWNAF](./primitives.md#variable-scalarmultiplywnaf), [toArray](./primitives.md#variable-toarray)
6357
+ See also: [BigNumber](./primitives.md#class-bignumber), [DRBG](./primitives.md#class-drbg), [N_BIGINT](./primitives.md#variable-n_bigint), [Signature](./primitives.md#class-signature), [modInvN](./primitives.md#variable-modinvn), [modMulN](./primitives.md#variable-modmuln), [modN](./primitives.md#variable-modn), [toArray](./primitives.md#variable-toarray)
6172
6358
 
6173
6359
  Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Enums](#enums), [Variables](#variables)
6174
6360
 
@@ -6253,7 +6439,7 @@ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](
6253
6439
  ### Variable: toHex
6254
6440
 
6255
6441
  ```ts
6256
- toHex = (msg: number[]): string => {
6442
+ toHex = (msg: number[] | Uint8Array): string => {
6257
6443
  if (CAN_USE_BUFFER) {
6258
6444
  return BufferCtor.from(msg).toString("hex");
6259
6445
  }
@@ -6280,22 +6466,41 @@ toUTF8 = (arr: number[]): string => {
6280
6466
 
6281
6467
  Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Enums](#enums), [Variables](#variables)
6282
6468
 
6469
+ ---
6470
+ ### Variable: toUint8Array
6471
+
6472
+ ```ts
6473
+ toUint8Array = (msg: any, enc?: "hex" | "utf8" | "base64"): Uint8Array => {
6474
+ if (msg instanceof Uint8Array)
6475
+ return msg;
6476
+ return new Uint8Array(toArray(msg, enc));
6477
+ }
6478
+ ```
6479
+
6480
+ See also: [toArray](./primitives.md#variable-toarray)
6481
+
6482
+ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Enums](#enums), [Variables](#variables)
6483
+
6283
6484
  ---
6284
6485
  ### Variable: verify
6285
6486
 
6286
6487
  ```ts
6287
6488
  verify = (msg: BigNumber, sig: Signature, key: Point): boolean => {
6288
- const hash = BigInt("0x" + msg.toString(16));
6489
+ const nBitLength = curve.n.bitLength();
6490
+ if (msg.bitLength() > nBitLength) {
6491
+ return false;
6492
+ }
6493
+ const hash = bnToBigInt(msg);
6289
6494
  if ((key.x == null) || (key.y == null)) {
6290
6495
  throw new Error("Invalid public key: missing coordinates.");
6291
6496
  }
6292
6497
  const publicKey = {
6293
- x: BigInt("0x" + key.x.toString(16)),
6294
- y: BigInt("0x" + key.y.toString(16))
6498
+ x: bnToBigInt(key.x),
6499
+ y: bnToBigInt(key.y)
6295
6500
  };
6296
6501
  const signature = {
6297
- r: BigInt("0x" + sig.r.toString(16)),
6298
- s: BigInt("0x" + sig.s.toString(16))
6502
+ r: bnToBigInt(sig.r),
6503
+ s: bnToBigInt(sig.s)
6299
6504
  };
6300
6505
  const { r, s } = signature;
6301
6506
  const z = hash;