@bsv/sdk 1.6.9 → 1.6.10

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 (647) hide show
  1. package/README.md +9 -4
  2. package/dist/cjs/package.json +4 -2
  3. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  4. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  5. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  6. package/docs/concepts/beef.md +84 -0
  7. package/docs/concepts/chain-tracking.md +122 -0
  8. package/docs/concepts/decentralized-identity.md +184 -0
  9. package/docs/concepts/fees.md +217 -0
  10. package/docs/concepts/identity-certificates.md +255 -0
  11. package/docs/concepts/index.md +62 -0
  12. package/docs/concepts/key-management.md +176 -0
  13. package/docs/concepts/script-templates.md +163 -0
  14. package/docs/concepts/sdk-philosophy.md +72 -0
  15. package/docs/concepts/signatures.md +179 -0
  16. package/docs/concepts/spv-verification.md +106 -0
  17. package/docs/concepts/transaction-encoding.md +148 -0
  18. package/docs/concepts/transaction-structure.md +63 -0
  19. package/docs/concepts/trust-model.md +123 -0
  20. package/docs/concepts/verification.md +219 -0
  21. package/docs/concepts/wallet-integration.md +95 -0
  22. package/docs/guides/direct-transaction-creation.md +137 -0
  23. package/docs/guides/http-client-configuration.md +414 -0
  24. package/docs/guides/index.md +30 -0
  25. package/docs/guides/transaction-signing-methods.md +268 -0
  26. package/docs/index.md +74 -0
  27. package/docs/reference/arc-config.md +698 -0
  28. package/docs/reference/brc-100.md +33 -0
  29. package/docs/reference/configuration.md +829 -0
  30. package/docs/reference/debugging.md +700 -0
  31. package/docs/reference/errors.md +547 -0
  32. package/docs/reference/index.md +98 -0
  33. package/docs/reference/network-config.md +914 -0
  34. package/docs/reference/op-codes.md +306 -0
  35. package/docs/reference/transaction-signatures.md +94 -0
  36. package/docs/requirements.txt +3 -0
  37. package/docs/tutorials/advanced-transaction.md +575 -0
  38. package/docs/tutorials/aes-encryption.md +947 -0
  39. package/docs/tutorials/authfetch-tutorial.md +957 -0
  40. package/docs/tutorials/ecdh-key-exchange.md +547 -0
  41. package/docs/tutorials/elliptic-curve-fundamentals.md +603 -0
  42. package/docs/tutorials/error-handling.md +1215 -0
  43. package/docs/tutorials/first-transaction-low-level.md +204 -0
  44. package/docs/tutorials/first-transaction.md +278 -0
  45. package/docs/tutorials/hashes-and-hmacs.md +814 -0
  46. package/docs/tutorials/identity-management.md +702 -0
  47. package/docs/tutorials/index.md +182 -0
  48. package/docs/tutorials/key-management.md +536 -0
  49. package/docs/tutorials/protowallet-development.md +716 -0
  50. package/docs/tutorials/script-construction.md +690 -0
  51. package/docs/tutorials/spv-merkle-proofs.md +682 -0
  52. package/docs/tutorials/testnet-transactions-low-level.md +352 -0
  53. package/docs/tutorials/transaction-broadcasting.md +535 -0
  54. package/docs/tutorials/transaction-types.md +419 -0
  55. package/docs/tutorials/type-42.md +582 -0
  56. package/docs/tutorials/uhrp-storage.md +579 -0
  57. package/package.json +4 -2
  58. package/dist/cjs/src/auth/__tests/Peer.test.js +0 -446
  59. package/dist/cjs/src/auth/__tests/Peer.test.js.map +0 -1
  60. package/dist/cjs/src/auth/__tests/SessionManager.test.js +0 -69
  61. package/dist/cjs/src/auth/__tests/SessionManager.test.js.map +0 -1
  62. package/dist/cjs/src/auth/certificates/__tests/Certificate.test.js +0 -182
  63. package/dist/cjs/src/auth/certificates/__tests/Certificate.test.js.map +0 -1
  64. package/dist/cjs/src/auth/certificates/__tests/MasterCertificate.test.js +0 -184
  65. package/dist/cjs/src/auth/certificates/__tests/MasterCertificate.test.js.map +0 -1
  66. package/dist/cjs/src/auth/certificates/__tests/VerifiableCertificate.test.js +0 -75
  67. package/dist/cjs/src/auth/certificates/__tests/VerifiableCertificate.test.js.map +0 -1
  68. package/dist/cjs/src/auth/utils/__tests/cryptononce.test.js +0 -101
  69. package/dist/cjs/src/auth/utils/__tests/cryptononce.test.js.map +0 -1
  70. package/dist/cjs/src/auth/utils/__tests/getVerifiableCertificates.test.js +0 -106
  71. package/dist/cjs/src/auth/utils/__tests/getVerifiableCertificates.test.js.map +0 -1
  72. package/dist/cjs/src/auth/utils/__tests/validateCertificates.test.js +0 -111
  73. package/dist/cjs/src/auth/utils/__tests/validateCertificates.test.js.map +0 -1
  74. package/dist/cjs/src/auth/utils/certificateHelpers.js +0 -51
  75. package/dist/cjs/src/auth/utils/certificateHelpers.js.map +0 -1
  76. package/dist/cjs/src/compat/__tests/BSM.test.js +0 -69
  77. package/dist/cjs/src/compat/__tests/BSM.test.js.map +0 -1
  78. package/dist/cjs/src/compat/__tests/ECIES.test.js +0 -115
  79. package/dist/cjs/src/compat/__tests/ECIES.test.js.map +0 -1
  80. package/dist/cjs/src/compat/__tests/HD.test.js +0 -336
  81. package/dist/cjs/src/compat/__tests/HD.test.js.map +0 -1
  82. package/dist/cjs/src/compat/__tests/Mnemonic.test.js +0 -150
  83. package/dist/cjs/src/compat/__tests/Mnemonic.test.js.map +0 -1
  84. package/dist/cjs/src/compat/__tests/Mnemonic.vectors.js +0 -175
  85. package/dist/cjs/src/compat/__tests/Mnemonic.vectors.js.map +0 -1
  86. package/dist/cjs/src/messages/__tests/EncryptedMessage.test.js +0 -57
  87. package/dist/cjs/src/messages/__tests/EncryptedMessage.test.js.map +0 -1
  88. package/dist/cjs/src/messages/__tests/SignedMessage.test.js +0 -52
  89. package/dist/cjs/src/messages/__tests/SignedMessage.test.js.map +0 -1
  90. package/dist/cjs/src/overlay-tools/__tests/LookupResolver.test.js +0 -1471
  91. package/dist/cjs/src/overlay-tools/__tests/LookupResolver.test.js.map +0 -1
  92. package/dist/cjs/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.js +0 -78
  93. package/dist/cjs/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.js.map +0 -1
  94. package/dist/cjs/src/overlay-tools/__tests/SHIPBroadcaster.test.js +0 -933
  95. package/dist/cjs/src/overlay-tools/__tests/SHIPBroadcaster.test.js.map +0 -1
  96. package/dist/cjs/src/primitives/__tests/AESGCM.test.js +0 -248
  97. package/dist/cjs/src/primitives/__tests/AESGCM.test.js.map +0 -1
  98. package/dist/cjs/src/primitives/__tests/BRC42.private.vectors.js +0 -36
  99. package/dist/cjs/src/primitives/__tests/BRC42.private.vectors.js.map +0 -1
  100. package/dist/cjs/src/primitives/__tests/BRC42.public.vectors.js +0 -36
  101. package/dist/cjs/src/primitives/__tests/BRC42.public.vectors.js.map +0 -1
  102. package/dist/cjs/src/primitives/__tests/BigNumber.arithmatic.test.js +0 -501
  103. package/dist/cjs/src/primitives/__tests/BigNumber.arithmatic.test.js.map +0 -1
  104. package/dist/cjs/src/primitives/__tests/BigNumber.binary.test.js +0 -185
  105. package/dist/cjs/src/primitives/__tests/BigNumber.binary.test.js.map +0 -1
  106. package/dist/cjs/src/primitives/__tests/BigNumber.constructor.test.js +0 -149
  107. package/dist/cjs/src/primitives/__tests/BigNumber.constructor.test.js.map +0 -1
  108. package/dist/cjs/src/primitives/__tests/BigNumber.dhGroup.test.js +0 -23
  109. package/dist/cjs/src/primitives/__tests/BigNumber.dhGroup.test.js.map +0 -1
  110. package/dist/cjs/src/primitives/__tests/BigNumber.fixtures.js +0 -268
  111. package/dist/cjs/src/primitives/__tests/BigNumber.fixtures.js.map +0 -1
  112. package/dist/cjs/src/primitives/__tests/BigNumber.serializers.test.js +0 -147
  113. package/dist/cjs/src/primitives/__tests/BigNumber.serializers.test.js.map +0 -1
  114. package/dist/cjs/src/primitives/__tests/BigNumber.utils.test.js +0 -322
  115. package/dist/cjs/src/primitives/__tests/BigNumber.utils.test.js.map +0 -1
  116. package/dist/cjs/src/primitives/__tests/Curve.unit.test.js +0 -145
  117. package/dist/cjs/src/primitives/__tests/Curve.unit.test.js.map +0 -1
  118. package/dist/cjs/src/primitives/__tests/DRBG.test.js +0 -22
  119. package/dist/cjs/src/primitives/__tests/DRBG.test.js.map +0 -1
  120. package/dist/cjs/src/primitives/__tests/DRBG.vectors.js +0 -170
  121. package/dist/cjs/src/primitives/__tests/DRBG.vectors.js.map +0 -1
  122. package/dist/cjs/src/primitives/__tests/ECDH.test.js +0 -34
  123. package/dist/cjs/src/primitives/__tests/ECDH.test.js.map +0 -1
  124. package/dist/cjs/src/primitives/__tests/ECDSA.test.js +0 -89
  125. package/dist/cjs/src/primitives/__tests/ECDSA.test.js.map +0 -1
  126. package/dist/cjs/src/primitives/__tests/HMAC.test.js +0 -60
  127. package/dist/cjs/src/primitives/__tests/HMAC.test.js.map +0 -1
  128. package/dist/cjs/src/primitives/__tests/Hash.test.js +0 -159
  129. package/dist/cjs/src/primitives/__tests/Hash.test.js.map +0 -1
  130. package/dist/cjs/src/primitives/__tests/PBKDF2.vectors.js +0 -122
  131. package/dist/cjs/src/primitives/__tests/PBKDF2.vectors.js.map +0 -1
  132. package/dist/cjs/src/primitives/__tests/PrivateKey.split.test.js +0 -105
  133. package/dist/cjs/src/primitives/__tests/PrivateKey.split.test.js.map +0 -1
  134. package/dist/cjs/src/primitives/__tests/PrivateKey.test.js +0 -90
  135. package/dist/cjs/src/primitives/__tests/PrivateKey.test.js.map +0 -1
  136. package/dist/cjs/src/primitives/__tests/PublicKey.test.js +0 -83
  137. package/dist/cjs/src/primitives/__tests/PublicKey.test.js.map +0 -1
  138. package/dist/cjs/src/primitives/__tests/Random.test.js +0 -19
  139. package/dist/cjs/src/primitives/__tests/Random.test.js.map +0 -1
  140. package/dist/cjs/src/primitives/__tests/Reader.test.js +0 -282
  141. package/dist/cjs/src/primitives/__tests/Reader.test.js.map +0 -1
  142. package/dist/cjs/src/primitives/__tests/ReductionContext.test.js +0 -224
  143. package/dist/cjs/src/primitives/__tests/ReductionContext.test.js.map +0 -1
  144. package/dist/cjs/src/primitives/__tests/Schnorr.test.js +0 -213
  145. package/dist/cjs/src/primitives/__tests/Schnorr.test.js.map +0 -1
  146. package/dist/cjs/src/primitives/__tests/SymmetricKey.test.js +0 -51
  147. package/dist/cjs/src/primitives/__tests/SymmetricKey.test.js.map +0 -1
  148. package/dist/cjs/src/primitives/__tests/SymmetricKey.vectors.js +0 -43
  149. package/dist/cjs/src/primitives/__tests/SymmetricKey.vectors.js.map +0 -1
  150. package/dist/cjs/src/primitives/__tests/Writer.test.js +0 -176
  151. package/dist/cjs/src/primitives/__tests/Writer.test.js.map +0 -1
  152. package/dist/cjs/src/primitives/__tests/bug-31.test.js +0 -32
  153. package/dist/cjs/src/primitives/__tests/bug-31.test.js.map +0 -1
  154. package/dist/cjs/src/primitives/__tests/sighash.vectors.js +0 -3506
  155. package/dist/cjs/src/primitives/__tests/sighash.vectors.js.map +0 -1
  156. package/dist/cjs/src/primitives/__tests/utils.test.js +0 -110
  157. package/dist/cjs/src/primitives/__tests/utils.test.js.map +0 -1
  158. package/dist/cjs/src/script/__tests/Script.test.js +0 -347
  159. package/dist/cjs/src/script/__tests/Script.test.js.map +0 -1
  160. package/dist/cjs/src/script/__tests/Spend.test.js +0 -282
  161. package/dist/cjs/src/script/__tests/Spend.test.js.map +0 -1
  162. package/dist/cjs/src/script/__tests/SpendComplex.test.js +0 -52
  163. package/dist/cjs/src/script/__tests/SpendComplex.test.js.map +0 -1
  164. package/dist/cjs/src/script/__tests/script.invalid.vectors.js +0 -2370
  165. package/dist/cjs/src/script/__tests/script.invalid.vectors.js.map +0 -1
  166. package/dist/cjs/src/script/__tests/script.valid.vectors.js +0 -1181
  167. package/dist/cjs/src/script/__tests/script.valid.vectors.js.map +0 -1
  168. package/dist/cjs/src/script/__tests/spend.valid.vectors.js +0 -2298
  169. package/dist/cjs/src/script/__tests/spend.valid.vectors.js.map +0 -1
  170. package/dist/cjs/src/script/templates/__tests/PushDrop.test.js +0 -161
  171. package/dist/cjs/src/script/templates/__tests/PushDrop.test.js.map +0 -1
  172. package/dist/cjs/src/totp/__tests/totp.test.js +0 -67
  173. package/dist/cjs/src/totp/__tests/totp.test.js.map +0 -1
  174. package/dist/cjs/src/transaction/__tests/Beef.test.js +0 -393
  175. package/dist/cjs/src/transaction/__tests/Beef.test.js.map +0 -1
  176. package/dist/cjs/src/transaction/__tests/MerklePath.test.js +0 -209
  177. package/dist/cjs/src/transaction/__tests/MerklePath.test.js.map +0 -1
  178. package/dist/cjs/src/transaction/__tests/Transaction.benchmarks.test.js +0 -219
  179. package/dist/cjs/src/transaction/__tests/Transaction.benchmarks.test.js.map +0 -1
  180. package/dist/cjs/src/transaction/__tests/Transaction.test.js +0 -1073
  181. package/dist/cjs/src/transaction/__tests/Transaction.test.js.map +0 -1
  182. package/dist/cjs/src/transaction/__tests/bigtx.vectors.js +0 -7
  183. package/dist/cjs/src/transaction/__tests/bigtx.vectors.js.map +0 -1
  184. package/dist/cjs/src/transaction/__tests/bump.invalid.vectors.js +0 -11
  185. package/dist/cjs/src/transaction/__tests/bump.invalid.vectors.js.map +0 -1
  186. package/dist/cjs/src/transaction/__tests/bump.valid.vectors.js +0 -7
  187. package/dist/cjs/src/transaction/__tests/bump.valid.vectors.js.map +0 -1
  188. package/dist/cjs/src/transaction/__tests/tx.invalid.vectors.js +0 -230
  189. package/dist/cjs/src/transaction/__tests/tx.invalid.vectors.js.map +0 -1
  190. package/dist/cjs/src/transaction/__tests/tx.valid.vectors.js +0 -296
  191. package/dist/cjs/src/transaction/__tests/tx.valid.vectors.js.map +0 -1
  192. package/dist/cjs/src/transaction/broadcasters/__tests/ARC.test.js +0 -246
  193. package/dist/cjs/src/transaction/broadcasters/__tests/ARC.test.js.map +0 -1
  194. package/dist/cjs/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.js +0 -148
  195. package/dist/cjs/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.js.map +0 -1
  196. package/dist/cjs/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.js +0 -155
  197. package/dist/cjs/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.js.map +0 -1
  198. package/dist/cjs/src/wallet/ScriptTemplateSABPPP.js +0 -39
  199. package/dist/cjs/src/wallet/ScriptTemplateSABPPP.js.map +0 -1
  200. package/dist/cjs/src/wallet/WalletSigner.js +0 -260
  201. package/dist/cjs/src/wallet/WalletSigner.js.map +0 -1
  202. package/dist/cjs/src/wallet/__tests/CachedKeyDeriver.test.js +0 -269
  203. package/dist/cjs/src/wallet/__tests/CachedKeyDeriver.test.js.map +0 -1
  204. package/dist/cjs/src/wallet/__tests/KeyDeriver.test.js +0 -114
  205. package/dist/cjs/src/wallet/__tests/KeyDeriver.test.js.map +0 -1
  206. package/dist/cjs/src/wallet/__tests/ProtoWallet.test.js +0 -475
  207. package/dist/cjs/src/wallet/__tests/ProtoWallet.test.js.map +0 -1
  208. package/dist/cjs/src/wallet/createActionSdk.js +0 -230
  209. package/dist/cjs/src/wallet/createActionSdk.js.map +0 -1
  210. package/dist/cjs/src/wallet/sdk/CachedKeyDeriver.js +0 -174
  211. package/dist/cjs/src/wallet/sdk/CachedKeyDeriver.js.map +0 -1
  212. package/dist/cjs/src/wallet/sdk/CertOps.js +0 -181
  213. package/dist/cjs/src/wallet/sdk/CertOps.js.map +0 -1
  214. package/dist/cjs/src/wallet/sdk/Certificate.js +0 -162
  215. package/dist/cjs/src/wallet/sdk/Certificate.js.map +0 -1
  216. package/dist/cjs/src/wallet/sdk/KeyDeriver.js +0 -176
  217. package/dist/cjs/src/wallet/sdk/KeyDeriver.js.map +0 -1
  218. package/dist/cjs/src/wallet/sdk/ProtoWallet.js +0 -75
  219. package/dist/cjs/src/wallet/sdk/ProtoWallet.js.map +0 -1
  220. package/dist/cjs/src/wallet/sdk/StorageSyncReader.js +0 -3
  221. package/dist/cjs/src/wallet/sdk/StorageSyncReader.js.map +0 -1
  222. package/dist/cjs/src/wallet/sdk/WERR_errors.js +0 -107
  223. package/dist/cjs/src/wallet/sdk/WERR_errors.js.map +0 -1
  224. package/dist/cjs/src/wallet/sdk/Wallet.interfaces.js +0 -3
  225. package/dist/cjs/src/wallet/sdk/Wallet.interfaces.js.map +0 -1
  226. package/dist/cjs/src/wallet/sdk/WalletCrypto.js +0 -171
  227. package/dist/cjs/src/wallet/sdk/WalletCrypto.js.map +0 -1
  228. package/dist/cjs/src/wallet/sdk/WalletError.js +0 -103
  229. package/dist/cjs/src/wallet/sdk/WalletError.js.map +0 -1
  230. package/dist/cjs/src/wallet/sdk/WalletServices.interfaces.js +0 -3
  231. package/dist/cjs/src/wallet/sdk/WalletServices.interfaces.js.map +0 -1
  232. package/dist/cjs/src/wallet/sdk/WalletSigner.interfaces.js +0 -3
  233. package/dist/cjs/src/wallet/sdk/WalletSigner.interfaces.js.map +0 -1
  234. package/dist/cjs/src/wallet/sdk/WalletStorage.interfaces.js +0 -3
  235. package/dist/cjs/src/wallet/sdk/WalletStorage.interfaces.js.map +0 -1
  236. package/dist/cjs/src/wallet/sdk/index.js +0 -31
  237. package/dist/cjs/src/wallet/sdk/index.js.map +0 -1
  238. package/dist/cjs/src/wallet/sdk/types.js +0 -11
  239. package/dist/cjs/src/wallet/sdk/types.js.map +0 -1
  240. package/dist/cjs/src/wallet/sdk/validationHelpers.js +0 -601
  241. package/dist/cjs/src/wallet/sdk/validationHelpers.js.map +0 -1
  242. package/dist/cjs/src/wallet/substrates/__tests/WalletWire.integration.test.js +0 -1962
  243. package/dist/cjs/src/wallet/substrates/__tests/WalletWire.integration.test.js.map +0 -1
  244. package/dist/cjs/src/wallet/substrates/__tests/XDM.test.js +0 -579
  245. package/dist/cjs/src/wallet/substrates/__tests/XDM.test.js.map +0 -1
  246. package/dist/cjs/src/wallet/utilityHelpers.js +0 -305
  247. package/dist/cjs/src/wallet/utilityHelpers.js.map +0 -1
  248. package/dist/cjs/src/wallet/validationHelpers.js +0 -601
  249. package/dist/cjs/src/wallet/validationHelpers.js.map +0 -1
  250. package/dist/esm/src/auth/__tests/Peer.test.js +0 -448
  251. package/dist/esm/src/auth/__tests/Peer.test.js.map +0 -1
  252. package/dist/esm/src/auth/__tests/SessionManager.test.js +0 -69
  253. package/dist/esm/src/auth/__tests/SessionManager.test.js.map +0 -1
  254. package/dist/esm/src/auth/certificates/__tests/Certificate.test.js +0 -182
  255. package/dist/esm/src/auth/certificates/__tests/Certificate.test.js.map +0 -1
  256. package/dist/esm/src/auth/certificates/__tests/MasterCertificate.test.js +0 -184
  257. package/dist/esm/src/auth/certificates/__tests/MasterCertificate.test.js.map +0 -1
  258. package/dist/esm/src/auth/certificates/__tests/VerifiableCertificate.test.js +0 -75
  259. package/dist/esm/src/auth/certificates/__tests/VerifiableCertificate.test.js.map +0 -1
  260. package/dist/esm/src/auth/utils/__tests/cryptononce.test.js +0 -101
  261. package/dist/esm/src/auth/utils/__tests/cryptononce.test.js.map +0 -1
  262. package/dist/esm/src/auth/utils/__tests/getVerifiableCertificates.test.js +0 -106
  263. package/dist/esm/src/auth/utils/__tests/getVerifiableCertificates.test.js.map +0 -1
  264. package/dist/esm/src/auth/utils/__tests/validateCertificates.test.js +0 -111
  265. package/dist/esm/src/auth/utils/__tests/validateCertificates.test.js.map +0 -1
  266. package/dist/esm/src/auth/utils/certificateHelpers.js +0 -47
  267. package/dist/esm/src/auth/utils/certificateHelpers.js.map +0 -1
  268. package/dist/esm/src/compat/__tests/BSM.test.js +0 -69
  269. package/dist/esm/src/compat/__tests/BSM.test.js.map +0 -1
  270. package/dist/esm/src/compat/__tests/ECIES.test.js +0 -115
  271. package/dist/esm/src/compat/__tests/ECIES.test.js.map +0 -1
  272. package/dist/esm/src/compat/__tests/HD.test.js +0 -336
  273. package/dist/esm/src/compat/__tests/HD.test.js.map +0 -1
  274. package/dist/esm/src/compat/__tests/Mnemonic.test.js +0 -150
  275. package/dist/esm/src/compat/__tests/Mnemonic.test.js.map +0 -1
  276. package/dist/esm/src/compat/__tests/Mnemonic.vectors.js +0 -175
  277. package/dist/esm/src/compat/__tests/Mnemonic.vectors.js.map +0 -1
  278. package/dist/esm/src/messages/__tests/EncryptedMessage.test.js +0 -57
  279. package/dist/esm/src/messages/__tests/EncryptedMessage.test.js.map +0 -1
  280. package/dist/esm/src/messages/__tests/SignedMessage.test.js +0 -52
  281. package/dist/esm/src/messages/__tests/SignedMessage.test.js.map +0 -1
  282. package/dist/esm/src/overlay-tools/__tests/LookupResolver.test.js +0 -1471
  283. package/dist/esm/src/overlay-tools/__tests/LookupResolver.test.js.map +0 -1
  284. package/dist/esm/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.js +0 -78
  285. package/dist/esm/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.js.map +0 -1
  286. package/dist/esm/src/overlay-tools/__tests/SHIPBroadcaster.test.js +0 -933
  287. package/dist/esm/src/overlay-tools/__tests/SHIPBroadcaster.test.js.map +0 -1
  288. package/dist/esm/src/primitives/__tests/AESGCM.test.js +0 -248
  289. package/dist/esm/src/primitives/__tests/AESGCM.test.js.map +0 -1
  290. package/dist/esm/src/primitives/__tests/BRC42.private.vectors.js +0 -36
  291. package/dist/esm/src/primitives/__tests/BRC42.private.vectors.js.map +0 -1
  292. package/dist/esm/src/primitives/__tests/BRC42.public.vectors.js +0 -36
  293. package/dist/esm/src/primitives/__tests/BRC42.public.vectors.js.map +0 -1
  294. package/dist/esm/src/primitives/__tests/BigNumber.arithmatic.test.js +0 -501
  295. package/dist/esm/src/primitives/__tests/BigNumber.arithmatic.test.js.map +0 -1
  296. package/dist/esm/src/primitives/__tests/BigNumber.binary.test.js +0 -185
  297. package/dist/esm/src/primitives/__tests/BigNumber.binary.test.js.map +0 -1
  298. package/dist/esm/src/primitives/__tests/BigNumber.constructor.test.js +0 -149
  299. package/dist/esm/src/primitives/__tests/BigNumber.constructor.test.js.map +0 -1
  300. package/dist/esm/src/primitives/__tests/BigNumber.dhGroup.test.js +0 -23
  301. package/dist/esm/src/primitives/__tests/BigNumber.dhGroup.test.js.map +0 -1
  302. package/dist/esm/src/primitives/__tests/BigNumber.fixtures.js +0 -268
  303. package/dist/esm/src/primitives/__tests/BigNumber.fixtures.js.map +0 -1
  304. package/dist/esm/src/primitives/__tests/BigNumber.serializers.test.js +0 -147
  305. package/dist/esm/src/primitives/__tests/BigNumber.serializers.test.js.map +0 -1
  306. package/dist/esm/src/primitives/__tests/BigNumber.utils.test.js +0 -322
  307. package/dist/esm/src/primitives/__tests/BigNumber.utils.test.js.map +0 -1
  308. package/dist/esm/src/primitives/__tests/Curve.unit.test.js +0 -145
  309. package/dist/esm/src/primitives/__tests/Curve.unit.test.js.map +0 -1
  310. package/dist/esm/src/primitives/__tests/DRBG.test.js +0 -22
  311. package/dist/esm/src/primitives/__tests/DRBG.test.js.map +0 -1
  312. package/dist/esm/src/primitives/__tests/DRBG.vectors.js +0 -170
  313. package/dist/esm/src/primitives/__tests/DRBG.vectors.js.map +0 -1
  314. package/dist/esm/src/primitives/__tests/ECDH.test.js +0 -34
  315. package/dist/esm/src/primitives/__tests/ECDH.test.js.map +0 -1
  316. package/dist/esm/src/primitives/__tests/ECDSA.test.js +0 -89
  317. package/dist/esm/src/primitives/__tests/ECDSA.test.js.map +0 -1
  318. package/dist/esm/src/primitives/__tests/HMAC.test.js +0 -60
  319. package/dist/esm/src/primitives/__tests/HMAC.test.js.map +0 -1
  320. package/dist/esm/src/primitives/__tests/Hash.test.js +0 -159
  321. package/dist/esm/src/primitives/__tests/Hash.test.js.map +0 -1
  322. package/dist/esm/src/primitives/__tests/PBKDF2.vectors.js +0 -122
  323. package/dist/esm/src/primitives/__tests/PBKDF2.vectors.js.map +0 -1
  324. package/dist/esm/src/primitives/__tests/PrivateKey.split.test.js +0 -105
  325. package/dist/esm/src/primitives/__tests/PrivateKey.split.test.js.map +0 -1
  326. package/dist/esm/src/primitives/__tests/PrivateKey.test.js +0 -90
  327. package/dist/esm/src/primitives/__tests/PrivateKey.test.js.map +0 -1
  328. package/dist/esm/src/primitives/__tests/PublicKey.test.js +0 -83
  329. package/dist/esm/src/primitives/__tests/PublicKey.test.js.map +0 -1
  330. package/dist/esm/src/primitives/__tests/Random.test.js +0 -19
  331. package/dist/esm/src/primitives/__tests/Random.test.js.map +0 -1
  332. package/dist/esm/src/primitives/__tests/Reader.test.js +0 -282
  333. package/dist/esm/src/primitives/__tests/Reader.test.js.map +0 -1
  334. package/dist/esm/src/primitives/__tests/ReductionContext.test.js +0 -223
  335. package/dist/esm/src/primitives/__tests/ReductionContext.test.js.map +0 -1
  336. package/dist/esm/src/primitives/__tests/Schnorr.test.js +0 -213
  337. package/dist/esm/src/primitives/__tests/Schnorr.test.js.map +0 -1
  338. package/dist/esm/src/primitives/__tests/SymmetricKey.test.js +0 -51
  339. package/dist/esm/src/primitives/__tests/SymmetricKey.test.js.map +0 -1
  340. package/dist/esm/src/primitives/__tests/SymmetricKey.vectors.js +0 -43
  341. package/dist/esm/src/primitives/__tests/SymmetricKey.vectors.js.map +0 -1
  342. package/dist/esm/src/primitives/__tests/Writer.test.js +0 -176
  343. package/dist/esm/src/primitives/__tests/Writer.test.js.map +0 -1
  344. package/dist/esm/src/primitives/__tests/bug-31.test.js +0 -32
  345. package/dist/esm/src/primitives/__tests/bug-31.test.js.map +0 -1
  346. package/dist/esm/src/primitives/__tests/sighash.vectors.js +0 -3506
  347. package/dist/esm/src/primitives/__tests/sighash.vectors.js.map +0 -1
  348. package/dist/esm/src/primitives/__tests/utils.test.js +0 -110
  349. package/dist/esm/src/primitives/__tests/utils.test.js.map +0 -1
  350. package/dist/esm/src/script/__tests/Script.test.js +0 -347
  351. package/dist/esm/src/script/__tests/Script.test.js.map +0 -1
  352. package/dist/esm/src/script/__tests/Spend.test.js +0 -282
  353. package/dist/esm/src/script/__tests/Spend.test.js.map +0 -1
  354. package/dist/esm/src/script/__tests/SpendComplex.test.js +0 -51
  355. package/dist/esm/src/script/__tests/SpendComplex.test.js.map +0 -1
  356. package/dist/esm/src/script/__tests/script.invalid.vectors.js +0 -2370
  357. package/dist/esm/src/script/__tests/script.invalid.vectors.js.map +0 -1
  358. package/dist/esm/src/script/__tests/script.valid.vectors.js +0 -1181
  359. package/dist/esm/src/script/__tests/script.valid.vectors.js.map +0 -1
  360. package/dist/esm/src/script/__tests/spend.valid.vectors.js +0 -2298
  361. package/dist/esm/src/script/__tests/spend.valid.vectors.js.map +0 -1
  362. package/dist/esm/src/script/templates/__tests/PushDrop.test.js +0 -161
  363. package/dist/esm/src/script/templates/__tests/PushDrop.test.js.map +0 -1
  364. package/dist/esm/src/totp/__tests/totp.test.js +0 -67
  365. package/dist/esm/src/totp/__tests/totp.test.js.map +0 -1
  366. package/dist/esm/src/transaction/__tests/Beef.test.js +0 -393
  367. package/dist/esm/src/transaction/__tests/Beef.test.js.map +0 -1
  368. package/dist/esm/src/transaction/__tests/MerklePath.test.js +0 -209
  369. package/dist/esm/src/transaction/__tests/MerklePath.test.js.map +0 -1
  370. package/dist/esm/src/transaction/__tests/Transaction.benchmarks.test.js +0 -219
  371. package/dist/esm/src/transaction/__tests/Transaction.benchmarks.test.js.map +0 -1
  372. package/dist/esm/src/transaction/__tests/Transaction.test.js +0 -1072
  373. package/dist/esm/src/transaction/__tests/Transaction.test.js.map +0 -1
  374. package/dist/esm/src/transaction/__tests/bigtx.vectors.js +0 -7
  375. package/dist/esm/src/transaction/__tests/bigtx.vectors.js.map +0 -1
  376. package/dist/esm/src/transaction/__tests/bump.invalid.vectors.js +0 -11
  377. package/dist/esm/src/transaction/__tests/bump.invalid.vectors.js.map +0 -1
  378. package/dist/esm/src/transaction/__tests/bump.valid.vectors.js +0 -7
  379. package/dist/esm/src/transaction/__tests/bump.valid.vectors.js.map +0 -1
  380. package/dist/esm/src/transaction/__tests/tx.invalid.vectors.js +0 -230
  381. package/dist/esm/src/transaction/__tests/tx.invalid.vectors.js.map +0 -1
  382. package/dist/esm/src/transaction/__tests/tx.valid.vectors.js +0 -296
  383. package/dist/esm/src/transaction/__tests/tx.valid.vectors.js.map +0 -1
  384. package/dist/esm/src/transaction/broadcasters/__tests/ARC.test.js +0 -246
  385. package/dist/esm/src/transaction/broadcasters/__tests/ARC.test.js.map +0 -1
  386. package/dist/esm/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.js +0 -148
  387. package/dist/esm/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.js.map +0 -1
  388. package/dist/esm/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.js +0 -155
  389. package/dist/esm/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.js.map +0 -1
  390. package/dist/esm/src/wallet/ScriptTemplateSABPPP.js +0 -37
  391. package/dist/esm/src/wallet/ScriptTemplateSABPPP.js.map +0 -1
  392. package/dist/esm/src/wallet/WalletSigner.js +0 -263
  393. package/dist/esm/src/wallet/WalletSigner.js.map +0 -1
  394. package/dist/esm/src/wallet/__tests/CachedKeyDeriver.test.js +0 -269
  395. package/dist/esm/src/wallet/__tests/CachedKeyDeriver.test.js.map +0 -1
  396. package/dist/esm/src/wallet/__tests/KeyDeriver.test.js +0 -113
  397. package/dist/esm/src/wallet/__tests/KeyDeriver.test.js.map +0 -1
  398. package/dist/esm/src/wallet/__tests/ProtoWallet.test.js +0 -475
  399. package/dist/esm/src/wallet/__tests/ProtoWallet.test.js.map +0 -1
  400. package/dist/esm/src/wallet/createActionSdk.js +0 -223
  401. package/dist/esm/src/wallet/createActionSdk.js.map +0 -1
  402. package/dist/esm/src/wallet/sdk/CachedKeyDeriver.js +0 -174
  403. package/dist/esm/src/wallet/sdk/CachedKeyDeriver.js.map +0 -1
  404. package/dist/esm/src/wallet/sdk/CertOps.js +0 -181
  405. package/dist/esm/src/wallet/sdk/CertOps.js.map +0 -1
  406. package/dist/esm/src/wallet/sdk/Certificate.js +0 -186
  407. package/dist/esm/src/wallet/sdk/Certificate.js.map +0 -1
  408. package/dist/esm/src/wallet/sdk/KeyDeriver.js +0 -174
  409. package/dist/esm/src/wallet/sdk/KeyDeriver.js.map +0 -1
  410. package/dist/esm/src/wallet/sdk/ProtoWallet.js +0 -71
  411. package/dist/esm/src/wallet/sdk/ProtoWallet.js.map +0 -1
  412. package/dist/esm/src/wallet/sdk/StorageSyncReader.js +0 -2
  413. package/dist/esm/src/wallet/sdk/StorageSyncReader.js.map +0 -1
  414. package/dist/esm/src/wallet/sdk/WERR_errors.js +0 -99
  415. package/dist/esm/src/wallet/sdk/WERR_errors.js.map +0 -1
  416. package/dist/esm/src/wallet/sdk/Wallet.interfaces.js +0 -2
  417. package/dist/esm/src/wallet/sdk/Wallet.interfaces.js.map +0 -1
  418. package/dist/esm/src/wallet/sdk/WalletCrypto.js +0 -168
  419. package/dist/esm/src/wallet/sdk/WalletCrypto.js.map +0 -1
  420. package/dist/esm/src/wallet/sdk/WalletError.js +0 -100
  421. package/dist/esm/src/wallet/sdk/WalletError.js.map +0 -1
  422. package/dist/esm/src/wallet/sdk/WalletServices.interfaces.js +0 -2
  423. package/dist/esm/src/wallet/sdk/WalletServices.interfaces.js.map +0 -1
  424. package/dist/esm/src/wallet/sdk/WalletSigner.interfaces.js +0 -2
  425. package/dist/esm/src/wallet/sdk/WalletSigner.interfaces.js.map +0 -1
  426. package/dist/esm/src/wallet/sdk/WalletStorage.interfaces.js +0 -2
  427. package/dist/esm/src/wallet/sdk/WalletStorage.interfaces.js.map +0 -1
  428. package/dist/esm/src/wallet/sdk/index.js +0 -15
  429. package/dist/esm/src/wallet/sdk/index.js.map +0 -1
  430. package/dist/esm/src/wallet/sdk/types.js +0 -8
  431. package/dist/esm/src/wallet/sdk/types.js.map +0 -1
  432. package/dist/esm/src/wallet/sdk/validationHelpers.js +0 -566
  433. package/dist/esm/src/wallet/sdk/validationHelpers.js.map +0 -1
  434. package/dist/esm/src/wallet/substrates/__tests/WalletWire.integration.test.js +0 -1962
  435. package/dist/esm/src/wallet/substrates/__tests/WalletWire.integration.test.js.map +0 -1
  436. package/dist/esm/src/wallet/substrates/__tests/XDM.test.js +0 -579
  437. package/dist/esm/src/wallet/substrates/__tests/XDM.test.js.map +0 -1
  438. package/dist/esm/src/wallet/utilityHelpers.js +0 -275
  439. package/dist/esm/src/wallet/utilityHelpers.js.map +0 -1
  440. package/dist/esm/src/wallet/validationHelpers.js +0 -566
  441. package/dist/esm/src/wallet/validationHelpers.js.map +0 -1
  442. package/dist/types/src/auth/__tests/Peer.test.d.ts +0 -2
  443. package/dist/types/src/auth/__tests/Peer.test.d.ts.map +0 -1
  444. package/dist/types/src/auth/__tests/SessionManager.test.d.ts +0 -2
  445. package/dist/types/src/auth/__tests/SessionManager.test.d.ts.map +0 -1
  446. package/dist/types/src/auth/certificates/__tests/Certificate.test.d.ts +0 -2
  447. package/dist/types/src/auth/certificates/__tests/Certificate.test.d.ts.map +0 -1
  448. package/dist/types/src/auth/certificates/__tests/MasterCertificate.test.d.ts +0 -2
  449. package/dist/types/src/auth/certificates/__tests/MasterCertificate.test.d.ts.map +0 -1
  450. package/dist/types/src/auth/certificates/__tests/VerifiableCertificate.test.d.ts +0 -2
  451. package/dist/types/src/auth/certificates/__tests/VerifiableCertificate.test.d.ts.map +0 -1
  452. package/dist/types/src/auth/utils/__tests/cryptononce.test.d.ts +0 -2
  453. package/dist/types/src/auth/utils/__tests/cryptononce.test.d.ts.map +0 -1
  454. package/dist/types/src/auth/utils/__tests/getVerifiableCertificates.test.d.ts +0 -2
  455. package/dist/types/src/auth/utils/__tests/getVerifiableCertificates.test.d.ts.map +0 -1
  456. package/dist/types/src/auth/utils/__tests/validateCertificates.test.d.ts +0 -2
  457. package/dist/types/src/auth/utils/__tests/validateCertificates.test.d.ts.map +0 -1
  458. package/dist/types/src/auth/utils/certificateHelpers.d.ts +0 -26
  459. package/dist/types/src/auth/utils/certificateHelpers.d.ts.map +0 -1
  460. package/dist/types/src/compat/__tests/BSM.test.d.ts +0 -2
  461. package/dist/types/src/compat/__tests/BSM.test.d.ts.map +0 -1
  462. package/dist/types/src/compat/__tests/ECIES.test.d.ts +0 -2
  463. package/dist/types/src/compat/__tests/ECIES.test.d.ts.map +0 -1
  464. package/dist/types/src/compat/__tests/HD.test.d.ts +0 -2
  465. package/dist/types/src/compat/__tests/HD.test.d.ts.map +0 -1
  466. package/dist/types/src/compat/__tests/Mnemonic.test.d.ts +0 -2
  467. package/dist/types/src/compat/__tests/Mnemonic.test.d.ts.map +0 -1
  468. package/dist/types/src/compat/__tests/Mnemonic.vectors.d.ts +0 -11
  469. package/dist/types/src/compat/__tests/Mnemonic.vectors.d.ts.map +0 -1
  470. package/dist/types/src/messages/__tests/EncryptedMessage.test.d.ts +0 -2
  471. package/dist/types/src/messages/__tests/EncryptedMessage.test.d.ts.map +0 -1
  472. package/dist/types/src/messages/__tests/SignedMessage.test.d.ts +0 -2
  473. package/dist/types/src/messages/__tests/SignedMessage.test.d.ts.map +0 -1
  474. package/dist/types/src/overlay-tools/__tests/LookupResolver.test.d.ts +0 -2
  475. package/dist/types/src/overlay-tools/__tests/LookupResolver.test.d.ts.map +0 -1
  476. package/dist/types/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.d.ts +0 -2
  477. package/dist/types/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.d.ts.map +0 -1
  478. package/dist/types/src/overlay-tools/__tests/SHIPBroadcaster.test.d.ts +0 -2
  479. package/dist/types/src/overlay-tools/__tests/SHIPBroadcaster.test.d.ts.map +0 -1
  480. package/dist/types/src/primitives/__tests/AESGCM.test.d.ts +0 -2
  481. package/dist/types/src/primitives/__tests/AESGCM.test.d.ts.map +0 -1
  482. package/dist/types/src/primitives/__tests/BRC42.private.vectors.d.ts +0 -8
  483. package/dist/types/src/primitives/__tests/BRC42.private.vectors.d.ts.map +0 -1
  484. package/dist/types/src/primitives/__tests/BRC42.public.vectors.d.ts +0 -8
  485. package/dist/types/src/primitives/__tests/BRC42.public.vectors.d.ts.map +0 -1
  486. package/dist/types/src/primitives/__tests/BigNumber.arithmatic.test.d.ts +0 -2
  487. package/dist/types/src/primitives/__tests/BigNumber.arithmatic.test.d.ts.map +0 -1
  488. package/dist/types/src/primitives/__tests/BigNumber.binary.test.d.ts +0 -2
  489. package/dist/types/src/primitives/__tests/BigNumber.binary.test.d.ts.map +0 -1
  490. package/dist/types/src/primitives/__tests/BigNumber.constructor.test.d.ts +0 -2
  491. package/dist/types/src/primitives/__tests/BigNumber.constructor.test.d.ts.map +0 -1
  492. package/dist/types/src/primitives/__tests/BigNumber.dhGroup.test.d.ts +0 -2
  493. package/dist/types/src/primitives/__tests/BigNumber.dhGroup.test.d.ts.map +0 -1
  494. package/dist/types/src/primitives/__tests/BigNumber.fixtures.d.ts +0 -15
  495. package/dist/types/src/primitives/__tests/BigNumber.fixtures.d.ts.map +0 -1
  496. package/dist/types/src/primitives/__tests/BigNumber.serializers.test.d.ts +0 -2
  497. package/dist/types/src/primitives/__tests/BigNumber.serializers.test.d.ts.map +0 -1
  498. package/dist/types/src/primitives/__tests/BigNumber.utils.test.d.ts +0 -2
  499. package/dist/types/src/primitives/__tests/BigNumber.utils.test.d.ts.map +0 -1
  500. package/dist/types/src/primitives/__tests/Curve.unit.test.d.ts +0 -2
  501. package/dist/types/src/primitives/__tests/Curve.unit.test.d.ts.map +0 -1
  502. package/dist/types/src/primitives/__tests/DRBG.test.d.ts +0 -2
  503. package/dist/types/src/primitives/__tests/DRBG.test.d.ts.map +0 -1
  504. package/dist/types/src/primitives/__tests/DRBG.vectors.d.ts +0 -10
  505. package/dist/types/src/primitives/__tests/DRBG.vectors.d.ts.map +0 -1
  506. package/dist/types/src/primitives/__tests/ECDH.test.d.ts +0 -2
  507. package/dist/types/src/primitives/__tests/ECDH.test.d.ts.map +0 -1
  508. package/dist/types/src/primitives/__tests/ECDSA.test.d.ts +0 -2
  509. package/dist/types/src/primitives/__tests/ECDSA.test.d.ts.map +0 -1
  510. package/dist/types/src/primitives/__tests/HMAC.test.d.ts +0 -2
  511. package/dist/types/src/primitives/__tests/HMAC.test.d.ts.map +0 -1
  512. package/dist/types/src/primitives/__tests/Hash.test.d.ts +0 -2
  513. package/dist/types/src/primitives/__tests/Hash.test.d.ts.map +0 -1
  514. package/dist/types/src/primitives/__tests/PBKDF2.vectors.d.ts +0 -68
  515. package/dist/types/src/primitives/__tests/PBKDF2.vectors.d.ts.map +0 -1
  516. package/dist/types/src/primitives/__tests/PrivateKey.split.test.d.ts +0 -2
  517. package/dist/types/src/primitives/__tests/PrivateKey.split.test.d.ts.map +0 -1
  518. package/dist/types/src/primitives/__tests/PrivateKey.test.d.ts +0 -2
  519. package/dist/types/src/primitives/__tests/PrivateKey.test.d.ts.map +0 -1
  520. package/dist/types/src/primitives/__tests/PublicKey.test.d.ts +0 -2
  521. package/dist/types/src/primitives/__tests/PublicKey.test.d.ts.map +0 -1
  522. package/dist/types/src/primitives/__tests/Random.test.d.ts +0 -2
  523. package/dist/types/src/primitives/__tests/Random.test.d.ts.map +0 -1
  524. package/dist/types/src/primitives/__tests/Reader.test.d.ts +0 -2
  525. package/dist/types/src/primitives/__tests/Reader.test.d.ts.map +0 -1
  526. package/dist/types/src/primitives/__tests/ReductionContext.test.d.ts +0 -2
  527. package/dist/types/src/primitives/__tests/ReductionContext.test.d.ts.map +0 -1
  528. package/dist/types/src/primitives/__tests/Schnorr.test.d.ts +0 -2
  529. package/dist/types/src/primitives/__tests/Schnorr.test.d.ts.map +0 -1
  530. package/dist/types/src/primitives/__tests/SymmetricKey.test.d.ts +0 -2
  531. package/dist/types/src/primitives/__tests/SymmetricKey.test.d.ts.map +0 -1
  532. package/dist/types/src/primitives/__tests/SymmetricKey.vectors.d.ts +0 -20
  533. package/dist/types/src/primitives/__tests/SymmetricKey.vectors.d.ts.map +0 -1
  534. package/dist/types/src/primitives/__tests/Writer.test.d.ts +0 -2
  535. package/dist/types/src/primitives/__tests/Writer.test.d.ts.map +0 -1
  536. package/dist/types/src/primitives/__tests/bug-31.test.d.ts +0 -2
  537. package/dist/types/src/primitives/__tests/bug-31.test.d.ts.map +0 -1
  538. package/dist/types/src/primitives/__tests/sighash.vectors.d.ts +0 -3
  539. package/dist/types/src/primitives/__tests/sighash.vectors.d.ts.map +0 -1
  540. package/dist/types/src/primitives/__tests/utils.test.d.ts +0 -2
  541. package/dist/types/src/primitives/__tests/utils.test.d.ts.map +0 -1
  542. package/dist/types/src/script/__tests/Script.test.d.ts +0 -2
  543. package/dist/types/src/script/__tests/Script.test.d.ts.map +0 -1
  544. package/dist/types/src/script/__tests/Spend.test.d.ts +0 -2
  545. package/dist/types/src/script/__tests/Spend.test.d.ts.map +0 -1
  546. package/dist/types/src/script/__tests/SpendComplex.test.d.ts +0 -2
  547. package/dist/types/src/script/__tests/SpendComplex.test.d.ts.map +0 -1
  548. package/dist/types/src/script/__tests/script.invalid.vectors.d.ts +0 -3
  549. package/dist/types/src/script/__tests/script.invalid.vectors.d.ts.map +0 -1
  550. package/dist/types/src/script/__tests/script.valid.vectors.d.ts +0 -3
  551. package/dist/types/src/script/__tests/script.valid.vectors.d.ts.map +0 -1
  552. package/dist/types/src/script/__tests/spend.valid.vectors.d.ts +0 -3
  553. package/dist/types/src/script/__tests/spend.valid.vectors.d.ts.map +0 -1
  554. package/dist/types/src/script/templates/__tests/PushDrop.test.d.ts +0 -2
  555. package/dist/types/src/script/templates/__tests/PushDrop.test.d.ts.map +0 -1
  556. package/dist/types/src/totp/__tests/totp.test.d.ts +0 -2
  557. package/dist/types/src/totp/__tests/totp.test.d.ts.map +0 -1
  558. package/dist/types/src/transaction/__tests/Beef.test.d.ts +0 -2
  559. package/dist/types/src/transaction/__tests/Beef.test.d.ts.map +0 -1
  560. package/dist/types/src/transaction/__tests/MerklePath.test.d.ts +0 -2
  561. package/dist/types/src/transaction/__tests/MerklePath.test.d.ts.map +0 -1
  562. package/dist/types/src/transaction/__tests/Transaction.benchmarks.test.d.ts +0 -2
  563. package/dist/types/src/transaction/__tests/Transaction.benchmarks.test.d.ts.map +0 -1
  564. package/dist/types/src/transaction/__tests/Transaction.test.d.ts +0 -2
  565. package/dist/types/src/transaction/__tests/Transaction.test.d.ts.map +0 -1
  566. package/dist/types/src/transaction/__tests/bigtx.vectors.d.ts +0 -6
  567. package/dist/types/src/transaction/__tests/bigtx.vectors.d.ts.map +0 -1
  568. package/dist/types/src/transaction/__tests/bump.invalid.vectors.d.ts +0 -6
  569. package/dist/types/src/transaction/__tests/bump.invalid.vectors.d.ts.map +0 -1
  570. package/dist/types/src/transaction/__tests/bump.valid.vectors.d.ts +0 -5
  571. package/dist/types/src/transaction/__tests/bump.valid.vectors.d.ts.map +0 -1
  572. package/dist/types/src/transaction/__tests/tx.invalid.vectors.d.ts +0 -3
  573. package/dist/types/src/transaction/__tests/tx.invalid.vectors.d.ts.map +0 -1
  574. package/dist/types/src/transaction/__tests/tx.valid.vectors.d.ts +0 -3
  575. package/dist/types/src/transaction/__tests/tx.valid.vectors.d.ts.map +0 -1
  576. package/dist/types/src/transaction/broadcasters/__tests/ARC.test.d.ts +0 -2
  577. package/dist/types/src/transaction/broadcasters/__tests/ARC.test.d.ts.map +0 -1
  578. package/dist/types/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.d.ts +0 -2
  579. package/dist/types/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.d.ts.map +0 -1
  580. package/dist/types/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.d.ts +0 -2
  581. package/dist/types/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.d.ts.map +0 -1
  582. package/dist/types/src/wallet/ScriptTemplateSABPPP.d.ts +0 -25
  583. package/dist/types/src/wallet/ScriptTemplateSABPPP.d.ts.map +0 -1
  584. package/dist/types/src/wallet/WalletSigner.d.ts +0 -110
  585. package/dist/types/src/wallet/WalletSigner.d.ts.map +0 -1
  586. package/dist/types/src/wallet/__tests/CachedKeyDeriver.test.d.ts +0 -2
  587. package/dist/types/src/wallet/__tests/CachedKeyDeriver.test.d.ts.map +0 -1
  588. package/dist/types/src/wallet/__tests/KeyDeriver.test.d.ts +0 -2
  589. package/dist/types/src/wallet/__tests/KeyDeriver.test.d.ts.map +0 -1
  590. package/dist/types/src/wallet/__tests/ProtoWallet.test.d.ts +0 -2
  591. package/dist/types/src/wallet/__tests/ProtoWallet.test.d.ts.map +0 -1
  592. package/dist/types/src/wallet/createActionSdk.d.ts +0 -8
  593. package/dist/types/src/wallet/createActionSdk.d.ts.map +0 -1
  594. package/dist/types/src/wallet/sdk/CachedKeyDeriver.d.ts +0 -94
  595. package/dist/types/src/wallet/sdk/CachedKeyDeriver.d.ts.map +0 -1
  596. package/dist/types/src/wallet/sdk/CertOps.d.ts +0 -63
  597. package/dist/types/src/wallet/sdk/CertOps.d.ts.map +0 -1
  598. package/dist/types/src/wallet/sdk/Certificate.d.ts +0 -77
  599. package/dist/types/src/wallet/sdk/Certificate.d.ts.map +0 -1
  600. package/dist/types/src/wallet/sdk/KeyDeriver.d.ts +0 -128
  601. package/dist/types/src/wallet/sdk/KeyDeriver.d.ts.map +0 -1
  602. package/dist/types/src/wallet/sdk/ProtoWallet.d.ts +0 -30
  603. package/dist/types/src/wallet/sdk/ProtoWallet.d.ts.map +0 -1
  604. package/dist/types/src/wallet/sdk/StorageSyncReader.d.ts +0 -102
  605. package/dist/types/src/wallet/sdk/StorageSyncReader.d.ts.map +0 -1
  606. package/dist/types/src/wallet/sdk/WERR_errors.d.ts +0 -84
  607. package/dist/types/src/wallet/sdk/WERR_errors.d.ts.map +0 -1
  608. package/dist/types/src/wallet/sdk/Wallet.interfaces.d.ts +0 -1036
  609. package/dist/types/src/wallet/sdk/Wallet.interfaces.d.ts.map +0 -1
  610. package/dist/types/src/wallet/sdk/WalletCrypto.d.ts +0 -31
  611. package/dist/types/src/wallet/sdk/WalletCrypto.d.ts.map +0 -1
  612. package/dist/types/src/wallet/sdk/WalletError.d.ts +0 -46
  613. package/dist/types/src/wallet/sdk/WalletError.d.ts.map +0 -1
  614. package/dist/types/src/wallet/sdk/WalletServices.interfaces.d.ts +0 -293
  615. package/dist/types/src/wallet/sdk/WalletServices.interfaces.d.ts.map +0 -1
  616. package/dist/types/src/wallet/sdk/WalletSigner.interfaces.d.ts +0 -48
  617. package/dist/types/src/wallet/sdk/WalletSigner.interfaces.d.ts.map +0 -1
  618. package/dist/types/src/wallet/sdk/WalletStorage.interfaces.d.ts +0 -296
  619. package/dist/types/src/wallet/sdk/WalletStorage.interfaces.d.ts.map +0 -1
  620. package/dist/types/src/wallet/sdk/index.d.ts +0 -15
  621. package/dist/types/src/wallet/sdk/index.d.ts.map +0 -1
  622. package/dist/types/src/wallet/sdk/types.d.ts +0 -56
  623. package/dist/types/src/wallet/sdk/types.d.ts.map +0 -1
  624. package/dist/types/src/wallet/sdk/validationHelpers.d.ts +0 -301
  625. package/dist/types/src/wallet/sdk/validationHelpers.d.ts.map +0 -1
  626. package/dist/types/src/wallet/substrates/__tests/WalletWire.integration.test.d.ts +0 -2
  627. package/dist/types/src/wallet/substrates/__tests/WalletWire.integration.test.d.ts.map +0 -1
  628. package/dist/types/src/wallet/substrates/__tests/XDM.test.d.ts +0 -5
  629. package/dist/types/src/wallet/substrates/__tests/XDM.test.d.ts.map +0 -1
  630. package/dist/types/src/wallet/utilityHelpers.d.ts +0 -142
  631. package/dist/types/src/wallet/utilityHelpers.d.ts.map +0 -1
  632. package/dist/types/src/wallet/validationHelpers.d.ts +0 -301
  633. package/dist/types/src/wallet/validationHelpers.d.ts.map +0 -1
  634. package/docs/README.md +0 -21
  635. /package/docs/{auth.md → reference/auth.md} +0 -0
  636. /package/docs/{compat.md → reference/compat.md} +0 -0
  637. /package/docs/{identity.md → reference/identity.md} +0 -0
  638. /package/docs/{kvstore.md → reference/kvstore.md} +0 -0
  639. /package/docs/{messages.md → reference/messages.md} +0 -0
  640. /package/docs/{overlay-tools.md → reference/overlay-tools.md} +0 -0
  641. /package/docs/{primitives.md → reference/primitives.md} +0 -0
  642. /package/docs/{registry.md → reference/registry.md} +0 -0
  643. /package/docs/{script.md → reference/script.md} +0 -0
  644. /package/docs/{storage.md → reference/storage.md} +0 -0
  645. /package/docs/{totp.md → reference/totp.md} +0 -0
  646. /package/docs/{transaction.md → reference/transaction.md} +0 -0
  647. /package/docs/{wallet.md → reference/wallet.md} +0 -0
@@ -0,0 +1,814 @@
1
+ # Cryptographic Hashing and HMACs
2
+
3
+ **Duration**: 75 minutes
4
+ **Prerequisites**: Basic TypeScript knowledge, understanding of cryptographic concepts
5
+
6
+ ## Learning Goals
7
+
8
+ By completing this tutorial, you will:
9
+ - Understand cryptographic hash functions and their properties
10
+ - Master the Hash module classes and helper functions in the BSV TypeScript SDK
11
+ - Implement various hash algorithms (SHA-256, SHA-512, SHA-1, RIPEMD-160)
12
+ - Create and verify HMACs for message authentication
13
+ - Apply Bitcoin-specific hashing patterns (hash256, hash160)
14
+ - Build practical applications using hashing for data integrity and authentication
15
+ - Understand performance considerations and security best practices
16
+
17
+ ## Introduction to Cryptographic Hashing
18
+
19
+ Cryptographic hash functions are mathematical algorithms that transform input data of any size into fixed-size output values. They are fundamental to Bitcoin's security architecture, providing:
20
+
21
+ - **Data Integrity**: Detect any changes to data
22
+ - **Digital Fingerprints**: Unique identifiers for data
23
+ - **Proof of Work**: Foundation for Bitcoin's consensus mechanism
24
+ - **Address Generation**: Converting public keys to Bitcoin addresses
25
+
26
+ The BSV TypeScript SDK provides comprehensive hashing capabilities through the `Hash` module, supporting both class-based and functional approaches.
27
+
28
+ ## Setting Up Your Environment
29
+
30
+ First, import the necessary modules from the BSV SDK:
31
+
32
+ ```typescript
33
+ import { Hash, Utils } from '@bsv/sdk'
34
+ ```
35
+
36
+ The `Hash` module contains:
37
+ - Hash function classes (`SHA256`, `SHA512`, `SHA1`, `RIPEMD160`)
38
+ - HMAC classes (`SHA256HMAC`, `SHA512HMAC`, `SHA1HMAC`)
39
+ - Helper functions (`sha256`, `sha512`, `hash256`, `hash160`, `sha256hmac`)
40
+ - Utility functions for data conversion and encoding
41
+
42
+ ## Basic Hash Function Usage
43
+
44
+ ### SHA-256 Hashing
45
+
46
+ SHA-256 is Bitcoin's primary hash function. Here's how to use it:
47
+
48
+ ```typescript
49
+ // Method 1: Using the SHA256 class
50
+ const sha256Hasher = new Hash.SHA256()
51
+ sha256Hasher.update('Message to hash')
52
+ const hashedMessage = sha256Hasher.digestHex()
53
+ console.log('SHA-256 hash:', hashedMessage)
54
+ // Output: f1aa45b0f5f6703468f9b9bc2b9874d4fa6b001a170d0f132aa5a26d00d0c7e5
55
+
56
+ // Method 2: Using the helper function
57
+ const message = 'Hello, Bitcoin!'
58
+ const hashResult = Hash.sha256(Utils.toArray(message, 'utf8'))
59
+ console.log('SHA-256 hash (binary):', hashResult)
60
+
61
+ // Convert to hex for display
62
+ const hashHex = Utils.toHex(hashResult)
63
+ console.log('SHA-256 hash (hex):', hashHex)
64
+ ```
65
+
66
+ ### Working with Different Data Types
67
+
68
+ The Hash functions can process various data formats:
69
+
70
+ ```typescript
71
+ // String input
72
+ const stringHash = Hash.sha256(Utils.toArray('Hello World', 'utf8'))
73
+
74
+ // Hex string input
75
+ const hexHash = Hash.sha256(Utils.toArray('deadbeef', 'hex'))
76
+
77
+ // Binary array input
78
+ const binaryData = [0x01, 0x02, 0x03, 0x04]
79
+ const binaryHash = Hash.sha256(binaryData)
80
+
81
+ // JSON data hashing
82
+ const jsonData = { name: 'Alice', amount: 100 }
83
+ const jsonString = JSON.stringify(jsonData)
84
+ const jsonHash = Hash.sha256(Utils.toArray(jsonString, 'utf8'))
85
+
86
+ console.log('String hash:', Utils.toHex(stringHash))
87
+ console.log('Hex hash:', Utils.toHex(hexHash))
88
+ console.log('Binary hash:', Utils.toHex(binaryHash))
89
+ console.log('JSON hash:', Utils.toHex(jsonHash))
90
+ ```
91
+
92
+ ### Other Hash Algorithms
93
+
94
+ The SDK supports multiple hash algorithms:
95
+
96
+ ```typescript
97
+ // SHA-512
98
+ const sha512Hasher = new Hash.SHA512()
99
+ sha512Hasher.update('Message for SHA-512')
100
+ const sha512Result = sha512Hasher.digestHex()
101
+ console.log('SHA-512 hash:', sha512Result)
102
+
103
+ // SHA-1 (legacy, use with caution)
104
+ const sha1Hasher = new Hash.SHA1()
105
+ sha1Hasher.update('Message for SHA-1')
106
+ const sha1Result = sha1Hasher.digestHex()
107
+ console.log('SHA-1 hash:', sha1Result)
108
+
109
+ // RIPEMD-160 (used in Bitcoin address generation)
110
+ const ripemdHasher = new Hash.RIPEMD160()
111
+ ripemdHasher.update('Message for RIPEMD-160')
112
+ const ripemdResult = ripemdHasher.digestHex()
113
+ console.log('RIPEMD-160 hash:', ripemdResult)
114
+
115
+ // Using helper functions
116
+ const sha512Helper = Hash.sha512(Utils.toArray('Hello', 'utf8'))
117
+ console.log('SHA-512 helper result:', Utils.toHex(sha512Helper))
118
+ ```
119
+
120
+ ## Bitcoin-Specific Hash Functions
121
+
122
+ ### Double SHA-256 (hash256)
123
+
124
+ Bitcoin uses double SHA-256 hashing for block headers and transaction IDs:
125
+
126
+ ```typescript
127
+ // Double SHA-256 using hash256 helper
128
+ const message = 'Bitcoin transaction data'
129
+ const doubleHash = Hash.hash256(Utils.toArray(message, 'utf8'))
130
+ console.log('Double SHA-256 hash:', Utils.toHex(doubleHash))
131
+
132
+ // Manual double hashing
133
+ const firstHash = Hash.sha256(Utils.toArray(message, 'utf8'))
134
+ const secondHash = Hash.sha256(firstHash)
135
+ console.log('Manual double hash:', Utils.toHex(secondHash))
136
+
137
+ // Both methods produce the same result
138
+ console.log('Results match:', Utils.toHex(doubleHash) === Utils.toHex(secondHash))
139
+ ```
140
+
141
+ ### Hash160 (SHA-256 + RIPEMD-160)
142
+
143
+ Used for Bitcoin address generation:
144
+
145
+ ```typescript
146
+ // Hash160: SHA-256 followed by RIPEMD-160
147
+ const publicKeyData = 'compressed_public_key_hex_data'
148
+ const hash160Result = Hash.hash160(Utils.toArray(publicKeyData, 'hex'))
149
+ console.log('Hash160 result:', Utils.toHex(hash160Result))
150
+
151
+ // Manual implementation
152
+ const sha256First = Hash.sha256(Utils.toArray(publicKeyData, 'hex'))
153
+ const ripemd160Second = new Hash.RIPEMD160().update(sha256First).digest()
154
+ console.log('Manual Hash160:', Utils.toHex(ripemd160Second))
155
+
156
+ // Results should match
157
+ console.log('Hash160 results match:',
158
+ Utils.toHex(hash160Result) === Utils.toHex(ripemd160Second))
159
+ ```
160
+
161
+ ## HMAC Implementation
162
+
163
+ HMACs (Hash-based Message Authentication Codes) provide both data integrity and authentication by incorporating a secret key into the hashing process.
164
+
165
+ ### Basic HMAC Usage
166
+
167
+ ```typescript
168
+ // SHA-256 HMAC
169
+ const key = 'secret_key'
170
+ const message = 'Message to authenticate'
171
+
172
+ // Method 1: Using HMAC class
173
+ const hmacHasher = new Hash.SHA256HMAC(key)
174
+ hmacHasher.update(message)
175
+ const hmacResult = hmacHasher.digestHex()
176
+ console.log('HMAC-SHA256:', hmacResult)
177
+ // Output: b4d897472c73a052733d0796a5f71cf8253bab7d3969811b64f41ff6aa89d86f
178
+
179
+ // Method 2: Using helper function
180
+ const hmacHelper = Hash.sha256hmac(key, message)
181
+ console.log('HMAC helper result:', Utils.toHex(hmacHelper))
182
+
183
+ // Both methods produce the same result
184
+ console.log('HMAC results match:', hmacResult === Utils.toHex(hmacHelper))
185
+ ```
186
+
187
+ ### HMAC with Different Algorithms
188
+
189
+ ```typescript
190
+ // SHA-512 HMAC
191
+ const sha512Hmac = new Hash.SHA512HMAC('my_secret_key')
192
+ sha512Hmac.update('Data to authenticate')
193
+ const sha512HmacResult = sha512Hmac.digestHex()
194
+ console.log('HMAC-SHA512:', sha512HmacResult)
195
+
196
+ // SHA-1 HMAC (legacy)
197
+ const sha1Hmac = new Hash.SHA1HMAC('legacy_key')
198
+ sha1Hmac.update('Legacy data')
199
+ const sha1HmacResult = sha1Hmac.digestHex()
200
+ console.log('HMAC-SHA1:', sha1HmacResult)
201
+ ```
202
+
203
+ ### HMAC Key Management
204
+
205
+ ```typescript
206
+ // Strong key generation
207
+ function generateHmacKey(): string {
208
+ const randomBytes = new Array(32)
209
+ for (let i = 0; i < 32; i++) {
210
+ randomBytes[i] = Math.floor(Math.random() * 256)
211
+ }
212
+ return Utils.toHex(randomBytes)
213
+ }
214
+
215
+ // Key derivation from password
216
+ function deriveKeyFromPassword(password: string, salt: string): number[] {
217
+ const combined = password + salt
218
+ return Hash.sha256(Utils.toArray(combined, 'utf8'))
219
+ }
220
+
221
+ // Example usage
222
+ const strongKey = generateHmacKey()
223
+ const derivedKey = deriveKeyFromPassword('user_password', 'random_salt')
224
+
225
+ console.log('Strong key:', strongKey)
226
+ console.log('Derived key:', Utils.toHex(derivedKey))
227
+
228
+ // Use derived key for HMAC
229
+ const secureHmac = Hash.sha256hmac(derivedKey, 'sensitive_data')
230
+ console.log('Secure HMAC:', Utils.toHex(secureHmac))
231
+ ```
232
+
233
+ ## Practical Applications
234
+
235
+ ### Data Integrity Verification
236
+
237
+ ```typescript
238
+ class DataIntegrityChecker {
239
+ private data: string
240
+ private hash: string
241
+
242
+ constructor(data: string) {
243
+ this.data = data
244
+ this.hash = this.calculateHash(data)
245
+ }
246
+
247
+ private calculateHash(data: string): string {
248
+ const hashResult = Hash.sha256(Utils.toArray(data, 'utf8'))
249
+ return Utils.toHex(hashResult)
250
+ }
251
+
252
+ verify(): boolean {
253
+ const currentHash = this.calculateHash(this.data)
254
+ return currentHash === this.hash
255
+ }
256
+
257
+ getData(): string {
258
+ return this.data
259
+ }
260
+
261
+ getHash(): string {
262
+ return this.hash
263
+ }
264
+
265
+ // Simulate data corruption
266
+ corruptData(): void {
267
+ this.data += '_corrupted'
268
+ }
269
+ }
270
+
271
+ // Example usage
272
+ const checker = new DataIntegrityChecker('Important document content')
273
+ console.log('Original hash:', checker.getHash())
274
+ console.log('Data is valid:', checker.verify()) // true
275
+
276
+ checker.corruptData()
277
+ console.log('After corruption, data is valid:', checker.verify()) // false
278
+ ```
279
+
280
+ ### Message Authentication System
281
+
282
+ ```typescript
283
+ class MessageAuthenticator {
284
+ private secretKey: string
285
+
286
+ constructor(secretKey: string) {
287
+ this.secretKey = secretKey
288
+ }
289
+
290
+ createAuthenticatedMessage(message: string): {
291
+ message: string
292
+ hmac: string
293
+ timestamp: number
294
+ } {
295
+ const timestamp = Date.now()
296
+ const messageWithTimestamp = `${message}:${timestamp}`
297
+ const hmac = Hash.sha256hmac(this.secretKey, messageWithTimestamp)
298
+
299
+ return {
300
+ message,
301
+ hmac: Utils.toHex(hmac),
302
+ timestamp
303
+ }
304
+ }
305
+
306
+ verifyMessage(authenticatedMessage: {
307
+ message: string
308
+ hmac: string
309
+ timestamp: number
310
+ }): boolean {
311
+ try {
312
+ const messageWithTimestamp = `${authenticatedMessage.message}:${authenticatedMessage.timestamp}`
313
+ const expectedHmac = Hash.sha256hmac(this.secretKey, messageWithTimestamp)
314
+ const expectedHmacHex = Utils.toHex(expectedHmac)
315
+
316
+ // Constant-time comparison to prevent timing attacks
317
+ return this.constantTimeCompare(authenticatedMessage.hmac, expectedHmacHex)
318
+ } catch (error) {
319
+ console.error('Verification error:', error)
320
+ return false
321
+ }
322
+ }
323
+
324
+ private constantTimeCompare(a: string, b: string): boolean {
325
+ if (a.length !== b.length) {
326
+ return false
327
+ }
328
+
329
+ let result = 0
330
+ for (let i = 0; i < a.length; i++) {
331
+ result |= a.charCodeAt(i) ^ b.charCodeAt(i)
332
+ }
333
+
334
+ return result === 0
335
+ }
336
+ }
337
+
338
+ // Example usage
339
+ const authenticator = new MessageAuthenticator('super_secret_key_123')
340
+
341
+ const authMessage = authenticator.createAuthenticatedMessage('Transfer 100 satoshis to Alice')
342
+ console.log('Authenticated message:', authMessage)
343
+
344
+ const isValid = authenticator.verifyMessage(authMessage)
345
+ console.log('Message is authentic:', isValid) // true
346
+
347
+ // Tamper with the message
348
+ authMessage.message = 'Transfer 1000 satoshis to Alice'
349
+ const isTamperedValid = authenticator.verifyMessage(authMessage)
350
+ console.log('Tampered message is authentic:', isTamperedValid) // false
351
+ ```
352
+
353
+ ### Transaction Metadata Protection
354
+
355
+ ```typescript
356
+ interface TransactionMetadata {
357
+ description: string
358
+ category: string
359
+ tags: string[]
360
+ amount: number
361
+ }
362
+
363
+ class SecureTransactionMetadata {
364
+ private key: number[]
365
+
366
+ constructor(password: string) {
367
+ // Derive key from password
368
+ this.key = Hash.sha256(Utils.toArray(password, 'utf8'))
369
+ }
370
+
371
+ protectMetadata(metadata: TransactionMetadata): {
372
+ data: string
373
+ integrity: string
374
+ } {
375
+ const jsonData = JSON.stringify(metadata)
376
+ const dataBytes = Utils.toArray(jsonData, 'utf8')
377
+
378
+ // Create integrity hash
379
+ const integrity = Hash.sha256hmac(this.key, dataBytes)
380
+
381
+ return {
382
+ data: Utils.toBase64(dataBytes),
383
+ integrity: Utils.toHex(integrity)
384
+ }
385
+ }
386
+
387
+ verifyAndExtract(protectedData: {
388
+ data: string
389
+ integrity: string
390
+ }): TransactionMetadata | null {
391
+ try {
392
+ const dataBytes = Array.from(Buffer.from(protectedData.data, 'base64'))
393
+ const expectedIntegrity = Hash.sha256hmac(this.key, dataBytes)
394
+ const expectedIntegrityHex = Utils.toHex(expectedIntegrity)
395
+
396
+ if (protectedData.integrity !== expectedIntegrityHex) {
397
+ console.error('Integrity check failed')
398
+ return null
399
+ }
400
+
401
+ const jsonString = Utils.toUTF8(dataBytes)
402
+ return JSON.parse(jsonString) as TransactionMetadata
403
+ } catch (error) {
404
+ console.error('Extraction error:', error)
405
+ return null
406
+ }
407
+ }
408
+ }
409
+
410
+ // Example usage
411
+ const metadataProtector = new SecureTransactionMetadata('user_password_123')
412
+
413
+ const originalMetadata: TransactionMetadata = {
414
+ description: 'Payment for services',
415
+ category: 'business',
416
+ tags: ['consulting', 'development'],
417
+ amount: 100
418
+ }
419
+
420
+ const protectedData = metadataProtector.protectMetadata(originalMetadata)
421
+ console.log('Protected metadata:', protectedData)
422
+
423
+ const extracted = metadataProtector.verifyAndExtract(protectedData)
424
+ console.log('Extracted metadata:', extracted)
425
+ console.log('Metadata matches:', JSON.stringify(originalMetadata) === JSON.stringify(extracted))
426
+ ```
427
+
428
+ ## Performance Optimization
429
+
430
+ ### Batch Hashing
431
+
432
+ ```typescript
433
+ class BatchHashProcessor {
434
+ private hasher: Hash.SHA256
435
+
436
+ constructor() {
437
+ this.hasher = new Hash.SHA256()
438
+ }
439
+
440
+ hashMultipleMessages(messages: string[]): string[] {
441
+ const results: string[] = []
442
+
443
+ for (const message of messages) {
444
+ // Reset hasher for each message
445
+ this.hasher = new Hash.SHA256()
446
+ this.hasher.update(message)
447
+ results.push(this.hasher.digestHex())
448
+ }
449
+
450
+ return results
451
+ }
452
+
453
+ createMerkleRoot(hashes: string[]): string {
454
+ if (hashes.length === 0) {
455
+ throw new Error('Cannot create merkle root from empty array')
456
+ }
457
+
458
+ if (hashes.length === 1) {
459
+ return hashes[0]
460
+ }
461
+
462
+ const nextLevel: string[] = []
463
+
464
+ for (let i = 0; i < hashes.length; i += 2) {
465
+ const left = hashes[i]
466
+ const right = i + 1 < hashes.length ? hashes[i + 1] : left
467
+
468
+ const combined = left + right
469
+ const combinedBytes = Utils.toArray(combined, 'hex')
470
+ const hash = Hash.sha256(combinedBytes)
471
+ nextLevel.push(Utils.toHex(hash))
472
+ }
473
+
474
+ return this.createMerkleRoot(nextLevel)
475
+ }
476
+ }
477
+
478
+ // Performance testing
479
+ function performanceTest() {
480
+ const processor = new BatchHashProcessor()
481
+ const testMessages = Array.from({ length: 1000 }, (_, i) => `Message ${i}`)
482
+
483
+ console.time('Batch hashing 1000 messages')
484
+ const hashes = processor.hashMultipleMessages(testMessages)
485
+ console.timeEnd('Batch hashing 1000 messages')
486
+
487
+ console.time('Creating merkle root')
488
+ const merkleRoot = processor.createMerkleRoot(hashes)
489
+ console.timeEnd('Creating merkle root')
490
+
491
+ console.log('Merkle root:', merkleRoot)
492
+ console.log('Processed', hashes.length, 'messages')
493
+ }
494
+
495
+ performanceTest()
496
+ ```
497
+
498
+ ### Memory-Efficient Streaming
499
+
500
+ ```typescript
501
+ class StreamingHasher {
502
+ private hasher: Hash.SHA256
503
+
504
+ constructor() {
505
+ this.hasher = new Hash.SHA256()
506
+ }
507
+
508
+ processLargeData(data: string, chunkSize: number = 1024): string {
509
+ for (let i = 0; i < data.length; i += chunkSize) {
510
+ const chunk = data.slice(i, i + chunkSize)
511
+ this.hasher.update(chunk)
512
+ }
513
+
514
+ return this.hasher.digestHex()
515
+ }
516
+
517
+ reset(): void {
518
+ this.hasher = new Hash.SHA256()
519
+ }
520
+ }
521
+
522
+ // Example with large data
523
+ const streamingHasher = new StreamingHasher()
524
+ const largeData = 'A'.repeat(1000000) // 1MB of data
525
+ const streamHash = streamingHasher.processLargeData(largeData)
526
+ console.log('Streaming hash result:', streamHash)
527
+ ```
528
+
529
+ ## Security Best Practices
530
+
531
+ ### Secure Key Generation and Storage
532
+
533
+ ```typescript
534
+ class SecureKeyManager {
535
+ static generateSecureKey(length: number = 32): number[] {
536
+ // In production, use a cryptographically secure random number generator
537
+ const key = new Array(length)
538
+ for (let i = 0; i < length; i++) {
539
+ key[i] = Math.floor(Math.random() * 256)
540
+ }
541
+ return key
542
+ }
543
+
544
+ static deriveKeyFromPassword(
545
+ password: string,
546
+ salt: number[],
547
+ iterations: number = 10000
548
+ ): number[] {
549
+ let derived = Hash.sha256(Utils.toArray(password + Utils.toHex(salt), 'utf8'))
550
+
551
+ for (let i = 1; i < iterations; i++) {
552
+ derived = Hash.sha256(derived)
553
+ }
554
+
555
+ return derived
556
+ }
557
+
558
+ static secureCompare(a: number[], b: number[]): boolean {
559
+ if (a.length !== b.length) {
560
+ return false
561
+ }
562
+
563
+ let result = 0
564
+ for (let i = 0; i < a.length; i++) {
565
+ result |= a[i] ^ b[i]
566
+ }
567
+
568
+ return result === 0
569
+ }
570
+
571
+ static clearSensitiveData(data: number[]): void {
572
+ for (let i = 0; i < data.length; i++) {
573
+ data[i] = 0
574
+ }
575
+ }
576
+ }
577
+
578
+ // Example secure usage
579
+ const salt = SecureKeyManager.generateSecureKey(16)
580
+ const derivedKey = SecureKeyManager.deriveKeyFromPassword('user_password', salt)
581
+
582
+ console.log('Salt:', Utils.toHex(salt))
583
+ console.log('Derived key:', Utils.toHex(derivedKey))
584
+
585
+ // Clear sensitive data when done
586
+ SecureKeyManager.clearSensitiveData(derivedKey)
587
+ SecureKeyManager.clearSensitiveData(salt)
588
+ ```
589
+
590
+ ### Input Validation and Error Handling
591
+
592
+ ```typescript
593
+ class SafeHasher {
594
+ static validateInput(input: any): void {
595
+ if (input === null || input === undefined) {
596
+ throw new Error('Input cannot be null or undefined')
597
+ }
598
+
599
+ if (typeof input === 'string' && input.length === 0) {
600
+ throw new Error('Input string cannot be empty')
601
+ }
602
+
603
+ if (Array.isArray(input) && input.length === 0) {
604
+ throw new Error('Input array cannot be empty')
605
+ }
606
+ }
607
+
608
+ static safeHash(input: string | number[], algorithm: 'sha256' | 'sha512' = 'sha256'): string {
609
+ try {
610
+ this.validateInput(input)
611
+
612
+ let data: number[]
613
+ if (typeof input === 'string') {
614
+ data = Utils.toArray(input, 'utf8')
615
+ } else {
616
+ data = input
617
+ }
618
+
619
+ let result: number[]
620
+ switch (algorithm) {
621
+ case 'sha256':
622
+ result = Hash.sha256(data)
623
+ break
624
+ case 'sha512':
625
+ result = Hash.sha512(data)
626
+ break
627
+ default:
628
+ throw new Error(`Unsupported algorithm: ${algorithm}`)
629
+ }
630
+
631
+ return Utils.toHex(result)
632
+ } catch (error) {
633
+ console.error('Hashing error:', error)
634
+ throw new Error(`Failed to hash input: ${error instanceof Error ? error.message : 'Unknown error'}`)
635
+ }
636
+ }
637
+
638
+ static safeHmac(key: string | number[], message: string | number[]): string {
639
+ try {
640
+ this.validateInput(key)
641
+ this.validateInput(message)
642
+
643
+ const result = Hash.sha256hmac(key, message)
644
+ return Utils.toHex(result)
645
+ } catch (error) {
646
+ console.error('HMAC error:', error)
647
+ throw new Error(`Failed to create HMAC: ${error instanceof Error ? error.message : 'Unknown error'}`)
648
+ }
649
+ }
650
+ }
651
+
652
+ // Example safe usage
653
+ try {
654
+ const hash = SafeHasher.safeHash('Valid input')
655
+ console.log('Safe hash:', hash)
656
+
657
+ const hmac = SafeHasher.safeHmac('secret_key', 'message')
658
+ console.log('Safe HMAC:', hmac)
659
+ } catch (error) {
660
+ console.error('Operation failed:', error)
661
+ }
662
+ ```
663
+
664
+ ## Testing Your Implementation
665
+
666
+ ```typescript
667
+ // Comprehensive test suite
668
+ function runHashTests(): void {
669
+ console.log('Running hash function tests...')
670
+
671
+ // Test SHA-256 consistency
672
+ const testMessage = 'Hello, Bitcoin!'
673
+ const hash1 = Hash.sha256(Utils.toArray(testMessage, 'utf8'))
674
+ const hash2 = new Hash.SHA256().update(testMessage).digest()
675
+
676
+ console.assert(
677
+ Utils.toHex(hash1) === Utils.toHex(hash2),
678
+ 'SHA-256 methods should produce same result'
679
+ )
680
+
681
+ // Test HMAC consistency
682
+ const key = 'test_key'
683
+ const message = 'test_message'
684
+ const hmac1 = Hash.sha256hmac(key, message)
685
+ const hmac2 = new Hash.SHA256HMAC(key).update(message).digest()
686
+
687
+ console.assert(
688
+ Utils.toHex(hmac1) === Utils.toHex(hmac2),
689
+ 'HMAC methods should produce same result'
690
+ )
691
+
692
+ // Test Bitcoin-specific functions
693
+ const data = 'bitcoin_data'
694
+ const hash256Result = Hash.hash256(Utils.toArray(data, 'utf8'))
695
+ const manualDouble = Hash.sha256(Hash.sha256(Utils.toArray(data, 'utf8')))
696
+
697
+ console.assert(
698
+ Utils.toHex(hash256Result) === Utils.toHex(manualDouble),
699
+ 'hash256 should equal double SHA-256'
700
+ )
701
+
702
+ console.log('All tests passed!')
703
+ }
704
+
705
+ runHashTests()
706
+ ```
707
+
708
+ ## Troubleshooting Common Issues
709
+
710
+ ### Issue 1: Encoding Problems
711
+
712
+ ```typescript
713
+ // Problem: Incorrect encoding leads to different hashes
714
+ // Note: Hash.sha256() requires number[] input, not strings directly
715
+ const correctHash = Hash.sha256(Utils.toArray('hello', 'utf8')) // Correct approach
716
+
717
+ console.log('Correct hash with proper encoding:', Utils.toHex(correctHash))
718
+ console.log('Always use Utils.toArray() for proper encoding')
719
+ ```
720
+
721
+ ### Issue 2: Key Management
722
+
723
+ ```typescript
724
+ // Problem: Weak keys or improper key derivation
725
+ const weakKey = 'password123' // Weak
726
+ const strongKey = SecureKeyManager.generateSecureKey() // Strong
727
+
728
+ // Problem: Reusing keys across different purposes
729
+ const hmacKey = strongKey
730
+ const encryptionKey = strongKey // Wrong: same key for different purposes
731
+
732
+ // Solution: Derive different keys for different purposes
733
+ const hmacKeyDerived = Hash.sha256(Utils.toArray('hmac:' + Utils.toHex(strongKey), 'utf8'))
734
+ const encryptionKeyDerived = Hash.sha256(Utils.toArray('encrypt:' + Utils.toHex(strongKey), 'utf8'))
735
+ ```
736
+
737
+ ### Issue 3: Performance Problems
738
+
739
+ ```typescript
740
+ // Problem: Creating new hasher instances unnecessarily
741
+ function inefficientHashing(messages: string[]): string[] {
742
+ return messages.map(msg => {
743
+ const hasher = new Hash.SHA256() // Inefficient: new instance each time
744
+ return hasher.update(msg).digestHex()
745
+ })
746
+ }
747
+
748
+ // Solution: Reuse hasher or use helper functions
749
+ function efficientHashing(messages: string[]): string[] {
750
+ return messages.map(msg => {
751
+ return Utils.toHex(Hash.sha256(Utils.toArray(msg, 'utf8'))) // Efficient
752
+ })
753
+ }
754
+ ```
755
+
756
+ ## Summary
757
+
758
+ This tutorial covered comprehensive usage of cryptographic hashing and HMACs in the BSV TypeScript SDK:
759
+
760
+ **Key Concepts Learned:**
761
+ - Hash function fundamentals and Bitcoin-specific applications
762
+ - SHA-256, SHA-512, SHA-1, and RIPEMD-160 implementation
763
+ - HMAC creation and verification for message authentication
764
+ - Bitcoin-specific functions: hash256 (double SHA-256) and hash160
765
+ - Performance optimization techniques for batch processing
766
+ - Security best practices for key management and validation
767
+
768
+ **Practical Applications:**
769
+ - Data integrity verification systems
770
+ - Message authentication protocols
771
+ - Transaction metadata protection
772
+ - Merkle tree construction
773
+ - Secure key derivation patterns
774
+
775
+ **Security Considerations:**
776
+ - Proper input validation and error handling
777
+ - Constant-time comparison to prevent timing attacks
778
+ - Secure key generation and storage practices
779
+ - Memory management for sensitive data
780
+
781
+ The Hash module in the BSV TypeScript SDK provides both low-level control through classes and high-level convenience through helper functions, enabling developers to implement robust cryptographic solutions for Bitcoin applications.
782
+
783
+ Continue exploring advanced cryptographic topics with the [ECDH Key Exchange](./ecdh-key-exchange.md) and [AES Symmetric Encryption](./aes-encryption.md) tutorials to build complete cryptographic systems.
784
+
785
+ ```typescript
786
+ // Example usage
787
+ const metadataProtector = new SecureTransactionMetadata('user_password_123')
788
+
789
+ const originalMetadata: TransactionMetadata = {
790
+ description: 'Payment for services',
791
+ category: 'business',
792
+ tags: ['consulting', 'development'],
793
+ amount: 100
794
+ }
795
+
796
+ const protectedData = metadataProtector.protectMetadata(originalMetadata)
797
+ console.log('Protected metadata:', protectedData)
798
+
799
+ const extracted = metadataProtector.verifyAndExtract(protectedData)
800
+ console.log('Extracted metadata:', extracted)
801
+ console.log('Metadata matches:', JSON.stringify(originalMetadata) === JSON.stringify(extracted))
802
+ ```
803
+
804
+ Follow these instructions to make the following change to my code document.
805
+
806
+ Instruction: Update all occurrences of "WalletClient" to be formatted as inline code `WalletClient`, except in headers and when it appears in actual code blocks.
807
+
808
+ Code Edit:
809
+ ```typescript
810
+ // Understanding of `WalletClient` usage (for practical applications)
811
+ While the `WalletClient` provides high-level transaction operations, understanding hashes and HMACs enables you to build sophisticated cryptographic applications and secure data verification systems.
812
+
813
+ ## Integration with `WalletClient`
814
+ For production applications, the `WalletClient` provides secure hash operations: