@bsv/sdk 1.3.12 → 1.3.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (607) hide show
  1. package/dist/cjs/package.json +15 -3
  2. package/dist/cjs/src/auth/Peer.js +83 -57
  3. package/dist/cjs/src/auth/Peer.js.map +1 -1
  4. package/dist/cjs/src/auth/SessionManager.js +14 -9
  5. package/dist/cjs/src/auth/SessionManager.js.map +1 -1
  6. package/dist/cjs/src/auth/certificates/Certificate.js +16 -10
  7. package/dist/cjs/src/auth/certificates/Certificate.js.map +1 -1
  8. package/dist/cjs/src/auth/certificates/MasterCertificate.js +25 -23
  9. package/dist/cjs/src/auth/certificates/MasterCertificate.js.map +1 -1
  10. package/dist/cjs/src/auth/certificates/VerifiableCertificate.js +2 -2
  11. package/dist/cjs/src/auth/certificates/VerifiableCertificate.js.map +1 -1
  12. package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js +62 -46
  13. package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
  14. package/dist/cjs/src/auth/clients/AuthFetch.js +1 -0
  15. package/dist/cjs/src/auth/clients/AuthFetch.js.map +1 -1
  16. package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js +70 -43
  17. package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
  18. package/dist/cjs/src/auth/utils/createNonce.js +2 -1
  19. package/dist/cjs/src/auth/utils/createNonce.js.map +1 -1
  20. package/dist/cjs/src/auth/utils/getVerifiableCertificates.js.map +1 -1
  21. package/dist/cjs/src/auth/utils/validateCertificates.js +5 -2
  22. package/dist/cjs/src/auth/utils/validateCertificates.js.map +1 -1
  23. package/dist/cjs/src/auth/utils/verifyNonce.js +2 -1
  24. package/dist/cjs/src/auth/utils/verifyNonce.js.map +1 -1
  25. package/dist/cjs/src/compat/BSM.js +7 -17
  26. package/dist/cjs/src/compat/BSM.js.map +1 -1
  27. package/dist/cjs/src/compat/ECIES.js +172 -133
  28. package/dist/cjs/src/compat/ECIES.js.map +1 -1
  29. package/dist/cjs/src/compat/HD.js +63 -73
  30. package/dist/cjs/src/compat/HD.js.map +1 -1
  31. package/dist/cjs/src/compat/Mnemonic.js +102 -106
  32. package/dist/cjs/src/compat/Mnemonic.js.map +1 -1
  33. package/dist/cjs/src/compat/Utxo.js +2 -2
  34. package/dist/cjs/src/compat/Utxo.js.map +1 -1
  35. package/dist/cjs/src/compat/index.js +7 -17
  36. package/dist/cjs/src/compat/index.js.map +1 -1
  37. package/dist/cjs/src/messages/EncryptedMessage.js +3 -1
  38. package/dist/cjs/src/messages/EncryptedMessage.js.map +1 -1
  39. package/dist/cjs/src/messages/SignedMessage.js +1 -0
  40. package/dist/cjs/src/messages/SignedMessage.js.map +1 -1
  41. package/dist/cjs/src/messages/index.js +7 -17
  42. package/dist/cjs/src/messages/index.js.map +1 -1
  43. package/dist/cjs/src/overlay-tools/LookupResolver.js +54 -35
  44. package/dist/cjs/src/overlay-tools/LookupResolver.js.map +1 -1
  45. package/dist/cjs/src/overlay-tools/OverlayAdminTokenTemplate.js +32 -20
  46. package/dist/cjs/src/overlay-tools/OverlayAdminTokenTemplate.js.map +1 -1
  47. package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js +40 -28
  48. package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
  49. package/dist/cjs/src/primitives/AESGCM.js +6 -5
  50. package/dist/cjs/src/primitives/AESGCM.js.map +1 -1
  51. package/dist/cjs/src/primitives/BasePoint.js +1 -1
  52. package/dist/cjs/src/primitives/BasePoint.js.map +1 -1
  53. package/dist/cjs/src/primitives/BigNumber.js +50 -62
  54. package/dist/cjs/src/primitives/BigNumber.js.map +1 -1
  55. package/dist/cjs/src/primitives/Curve.js +46 -22
  56. package/dist/cjs/src/primitives/Curve.js.map +1 -1
  57. package/dist/cjs/src/primitives/DRBG.js +2 -8
  58. package/dist/cjs/src/primitives/DRBG.js.map +1 -1
  59. package/dist/cjs/src/primitives/ECDSA.js +51 -35
  60. package/dist/cjs/src/primitives/ECDSA.js.map +1 -1
  61. package/dist/cjs/src/primitives/Hash.js +191 -216
  62. package/dist/cjs/src/primitives/Hash.js.map +1 -1
  63. package/dist/cjs/src/primitives/JacobianPoint.js +19 -5
  64. package/dist/cjs/src/primitives/JacobianPoint.js.map +1 -1
  65. package/dist/cjs/src/primitives/K256.js.map +1 -1
  66. package/dist/cjs/src/primitives/Mersenne.js.map +1 -1
  67. package/dist/cjs/src/primitives/MontgomoryMethod.js.map +1 -1
  68. package/dist/cjs/src/primitives/Point.js +117 -88
  69. package/dist/cjs/src/primitives/Point.js.map +1 -1
  70. package/dist/cjs/src/primitives/Polynomial.js +4 -2
  71. package/dist/cjs/src/primitives/Polynomial.js.map +1 -1
  72. package/dist/cjs/src/primitives/PrivateKey.js +32 -33
  73. package/dist/cjs/src/primitives/PrivateKey.js.map +1 -1
  74. package/dist/cjs/src/primitives/PublicKey.js.map +1 -1
  75. package/dist/cjs/src/primitives/Random.js +6 -5
  76. package/dist/cjs/src/primitives/Random.js.map +1 -1
  77. package/dist/cjs/src/primitives/ReductionContext.js +1 -1
  78. package/dist/cjs/src/primitives/ReductionContext.js.map +1 -1
  79. package/dist/cjs/src/primitives/Schnorr.js +21 -15
  80. package/dist/cjs/src/primitives/Schnorr.js.map +1 -1
  81. package/dist/cjs/src/primitives/Signature.js +8 -7
  82. package/dist/cjs/src/primitives/Signature.js.map +1 -1
  83. package/dist/cjs/src/primitives/SymmetricKey.js +13 -13
  84. package/dist/cjs/src/primitives/SymmetricKey.js.map +1 -1
  85. package/dist/cjs/src/primitives/TransactionSignature.js +31 -29
  86. package/dist/cjs/src/primitives/TransactionSignature.js.map +1 -1
  87. package/dist/cjs/src/primitives/index.js +7 -17
  88. package/dist/cjs/src/primitives/index.js.map +1 -1
  89. package/dist/cjs/src/primitives/utils.js +79 -68
  90. package/dist/cjs/src/primitives/utils.js.map +1 -1
  91. package/dist/cjs/src/script/OP.js +3 -3
  92. package/dist/cjs/src/script/OP.js.map +1 -1
  93. package/dist/cjs/src/script/Script.js +12 -10
  94. package/dist/cjs/src/script/Script.js.map +1 -1
  95. package/dist/cjs/src/script/Spend.js +47 -49
  96. package/dist/cjs/src/script/Spend.js.map +1 -1
  97. package/dist/cjs/src/script/templates/P2PKH.js +24 -12
  98. package/dist/cjs/src/script/templates/P2PKH.js.map +1 -1
  99. package/dist/cjs/src/script/templates/PushDrop.js +28 -23
  100. package/dist/cjs/src/script/templates/PushDrop.js.map +1 -1
  101. package/dist/cjs/src/script/templates/RPuzzle.js +10 -6
  102. package/dist/cjs/src/script/templates/RPuzzle.js.map +1 -1
  103. package/dist/cjs/src/totp/totp.js +2 -1
  104. package/dist/cjs/src/totp/totp.js.map +1 -1
  105. package/dist/cjs/src/transaction/Beef.js +177 -154
  106. package/dist/cjs/src/transaction/Beef.js.map +1 -1
  107. package/dist/cjs/src/transaction/BeefParty.js +24 -24
  108. package/dist/cjs/src/transaction/BeefParty.js.map +1 -1
  109. package/dist/cjs/src/transaction/BeefTx.js +26 -18
  110. package/dist/cjs/src/transaction/BeefTx.js.map +1 -1
  111. package/dist/cjs/src/transaction/Broadcaster.js +3 -2
  112. package/dist/cjs/src/transaction/Broadcaster.js.map +1 -1
  113. package/dist/cjs/src/transaction/MerklePath.js +64 -37
  114. package/dist/cjs/src/transaction/MerklePath.js.map +1 -1
  115. package/dist/cjs/src/transaction/Transaction.js +111 -137
  116. package/dist/cjs/src/transaction/Transaction.js.map +1 -1
  117. package/dist/cjs/src/transaction/broadcasters/ARC.js +25 -16
  118. package/dist/cjs/src/transaction/broadcasters/ARC.js.map +1 -1
  119. package/dist/cjs/src/transaction/broadcasters/DefaultBroadcaster.js +2 -1
  120. package/dist/cjs/src/transaction/broadcasters/DefaultBroadcaster.js.map +1 -1
  121. package/dist/cjs/src/transaction/broadcasters/WhatsOnChainBroadcaster.js.map +1 -1
  122. package/dist/cjs/src/transaction/chaintrackers/DefaultChainTracker.js +2 -1
  123. package/dist/cjs/src/transaction/chaintrackers/DefaultChainTracker.js.map +1 -1
  124. package/dist/cjs/src/transaction/chaintrackers/WhatsOnChain.js +3 -3
  125. package/dist/cjs/src/transaction/chaintrackers/WhatsOnChain.js.map +1 -1
  126. package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
  127. package/dist/cjs/src/transaction/http/DefaultHttpClient.js +5 -3
  128. package/dist/cjs/src/transaction/http/DefaultHttpClient.js.map +1 -1
  129. package/dist/cjs/src/transaction/http/FetchHttpClient.js +5 -2
  130. package/dist/cjs/src/transaction/http/FetchHttpClient.js.map +1 -1
  131. package/dist/cjs/src/transaction/http/NodejsHttpClient.js +5 -3
  132. package/dist/cjs/src/transaction/http/NodejsHttpClient.js.map +1 -1
  133. package/dist/cjs/src/transaction/http/index.js.map +1 -1
  134. package/dist/cjs/src/transaction/index.js.map +1 -1
  135. package/dist/cjs/src/wallet/CachedKeyDeriver.js +91 -66
  136. package/dist/cjs/src/wallet/CachedKeyDeriver.js.map +1 -1
  137. package/dist/cjs/src/wallet/KeyDeriver.js +61 -52
  138. package/dist/cjs/src/wallet/KeyDeriver.js.map +1 -1
  139. package/dist/cjs/src/wallet/ProtoWallet.js +79 -29
  140. package/dist/cjs/src/wallet/ProtoWallet.js.map +1 -1
  141. package/dist/cjs/src/wallet/WalletClient.js +7 -2
  142. package/dist/cjs/src/wallet/WalletClient.js.map +1 -1
  143. package/dist/cjs/src/wallet/WalletError.js +2 -2
  144. package/dist/cjs/src/wallet/WalletError.js.map +1 -1
  145. package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js +4 -3
  146. package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
  147. package/dist/cjs/src/wallet/substrates/HTTPWalletWire.js +2 -2
  148. package/dist/cjs/src/wallet/substrates/HTTPWalletWire.js.map +1 -1
  149. package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js +1239 -1261
  150. package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
  151. package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js +102 -43
  152. package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
  153. package/dist/cjs/src/wallet/substrates/XDM.js +8 -3
  154. package/dist/cjs/src/wallet/substrates/XDM.js.map +1 -1
  155. package/dist/cjs/src/wallet/substrates/window.CWI.js +28 -28
  156. package/dist/cjs/src/wallet/substrates/window.CWI.js.map +1 -1
  157. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  158. package/dist/esm/mod.js +15 -15
  159. package/dist/esm/src/auth/Peer.js +75 -54
  160. package/dist/esm/src/auth/Peer.js.map +1 -1
  161. package/dist/esm/src/auth/SessionManager.js +14 -9
  162. package/dist/esm/src/auth/SessionManager.js.map +1 -1
  163. package/dist/esm/src/auth/certificates/Certificate.js +15 -11
  164. package/dist/esm/src/auth/certificates/Certificate.js.map +1 -1
  165. package/dist/esm/src/auth/certificates/MasterCertificate.js +25 -23
  166. package/dist/esm/src/auth/certificates/MasterCertificate.js.map +1 -1
  167. package/dist/esm/src/auth/certificates/VerifiableCertificate.js +2 -2
  168. package/dist/esm/src/auth/certificates/VerifiableCertificate.js.map +1 -1
  169. package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js +64 -47
  170. package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
  171. package/dist/esm/src/auth/clients/AuthFetch.js +1 -0
  172. package/dist/esm/src/auth/clients/AuthFetch.js.map +1 -1
  173. package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js +69 -43
  174. package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
  175. package/dist/esm/src/auth/utils/createNonce.js.map +1 -1
  176. package/dist/esm/src/auth/utils/getVerifiableCertificates.js +1 -1
  177. package/dist/esm/src/auth/utils/getVerifiableCertificates.js.map +1 -1
  178. package/dist/esm/src/auth/utils/validateCertificates.js +6 -3
  179. package/dist/esm/src/auth/utils/validateCertificates.js.map +1 -1
  180. package/dist/esm/src/auth/utils/verifyNonce.js.map +1 -1
  181. package/dist/esm/src/compat/BSM.js.map +1 -1
  182. package/dist/esm/src/compat/ECIES.js +165 -116
  183. package/dist/esm/src/compat/ECIES.js.map +1 -1
  184. package/dist/esm/src/compat/HD.js +56 -56
  185. package/dist/esm/src/compat/HD.js.map +1 -1
  186. package/dist/esm/src/compat/Mnemonic.js +95 -89
  187. package/dist/esm/src/compat/Mnemonic.js.map +1 -1
  188. package/dist/esm/src/compat/Utxo.js +1 -1
  189. package/dist/esm/src/compat/Utxo.js.map +1 -1
  190. package/dist/esm/src/messages/EncryptedMessage.js +3 -1
  191. package/dist/esm/src/messages/EncryptedMessage.js.map +1 -1
  192. package/dist/esm/src/messages/SignedMessage.js +1 -0
  193. package/dist/esm/src/messages/SignedMessage.js.map +1 -1
  194. package/dist/esm/src/overlay-tools/LookupResolver.js +53 -35
  195. package/dist/esm/src/overlay-tools/LookupResolver.js.map +1 -1
  196. package/dist/esm/src/overlay-tools/OverlayAdminTokenTemplate.js +32 -20
  197. package/dist/esm/src/overlay-tools/OverlayAdminTokenTemplate.js.map +1 -1
  198. package/dist/esm/src/overlay-tools/SHIPBroadcaster.js +40 -28
  199. package/dist/esm/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
  200. package/dist/esm/src/primitives/AESGCM.js +1 -0
  201. package/dist/esm/src/primitives/AESGCM.js.map +1 -1
  202. package/dist/esm/src/primitives/BasePoint.js +1 -1
  203. package/dist/esm/src/primitives/BasePoint.js.map +1 -1
  204. package/dist/esm/src/primitives/BigNumber.js +50 -62
  205. package/dist/esm/src/primitives/BigNumber.js.map +1 -1
  206. package/dist/esm/src/primitives/Curve.js +45 -22
  207. package/dist/esm/src/primitives/Curve.js.map +1 -1
  208. package/dist/esm/src/primitives/DRBG.js +2 -8
  209. package/dist/esm/src/primitives/DRBG.js.map +1 -1
  210. package/dist/esm/src/primitives/ECDSA.js +50 -35
  211. package/dist/esm/src/primitives/ECDSA.js.map +1 -1
  212. package/dist/esm/src/primitives/Hash.js +188 -213
  213. package/dist/esm/src/primitives/Hash.js.map +1 -1
  214. package/dist/esm/src/primitives/JacobianPoint.js +18 -5
  215. package/dist/esm/src/primitives/JacobianPoint.js.map +1 -1
  216. package/dist/esm/src/primitives/K256.js.map +1 -1
  217. package/dist/esm/src/primitives/Mersenne.js.map +1 -1
  218. package/dist/esm/src/primitives/MontgomoryMethod.js.map +1 -1
  219. package/dist/esm/src/primitives/Point.js +107 -88
  220. package/dist/esm/src/primitives/Point.js.map +1 -1
  221. package/dist/esm/src/primitives/Polynomial.js +4 -2
  222. package/dist/esm/src/primitives/Polynomial.js.map +1 -1
  223. package/dist/esm/src/primitives/PrivateKey.js +25 -16
  224. package/dist/esm/src/primitives/PrivateKey.js.map +1 -1
  225. package/dist/esm/src/primitives/PublicKey.js.map +1 -1
  226. package/dist/esm/src/primitives/Random.js +7 -6
  227. package/dist/esm/src/primitives/Random.js.map +1 -1
  228. package/dist/esm/src/primitives/ReductionContext.js +1 -1
  229. package/dist/esm/src/primitives/ReductionContext.js.map +1 -1
  230. package/dist/esm/src/primitives/Schnorr.js +21 -15
  231. package/dist/esm/src/primitives/Schnorr.js.map +1 -1
  232. package/dist/esm/src/primitives/Signature.js +8 -7
  233. package/dist/esm/src/primitives/Signature.js.map +1 -1
  234. package/dist/esm/src/primitives/SymmetricKey.js +13 -13
  235. package/dist/esm/src/primitives/SymmetricKey.js.map +1 -1
  236. package/dist/esm/src/primitives/TransactionSignature.js +22 -12
  237. package/dist/esm/src/primitives/TransactionSignature.js.map +1 -1
  238. package/dist/esm/src/primitives/utils.js +76 -66
  239. package/dist/esm/src/primitives/utils.js.map +1 -1
  240. package/dist/esm/src/script/OP.js +3 -3
  241. package/dist/esm/src/script/OP.js.map +1 -1
  242. package/dist/esm/src/script/Script.js +12 -10
  243. package/dist/esm/src/script/Script.js.map +1 -1
  244. package/dist/esm/src/script/Spend.js +39 -32
  245. package/dist/esm/src/script/Spend.js.map +1 -1
  246. package/dist/esm/src/script/templates/P2PKH.js +26 -11
  247. package/dist/esm/src/script/templates/P2PKH.js.map +1 -1
  248. package/dist/esm/src/script/templates/PushDrop.js +29 -22
  249. package/dist/esm/src/script/templates/PushDrop.js.map +1 -1
  250. package/dist/esm/src/script/templates/RPuzzle.js +11 -6
  251. package/dist/esm/src/script/templates/RPuzzle.js.map +1 -1
  252. package/dist/esm/src/totp/totp.js +2 -1
  253. package/dist/esm/src/totp/totp.js.map +1 -1
  254. package/dist/esm/src/transaction/Beef.js +176 -154
  255. package/dist/esm/src/transaction/Beef.js.map +1 -1
  256. package/dist/esm/src/transaction/BeefParty.js +24 -24
  257. package/dist/esm/src/transaction/BeefParty.js.map +1 -1
  258. package/dist/esm/src/transaction/BeefTx.js +26 -18
  259. package/dist/esm/src/transaction/BeefTx.js.map +1 -1
  260. package/dist/esm/src/transaction/Broadcaster.js.map +1 -1
  261. package/dist/esm/src/transaction/MerklePath.js +61 -36
  262. package/dist/esm/src/transaction/MerklePath.js.map +1 -1
  263. package/dist/esm/src/transaction/Transaction.js +105 -138
  264. package/dist/esm/src/transaction/Transaction.js.map +1 -1
  265. package/dist/esm/src/transaction/broadcasters/ARC.js +25 -16
  266. package/dist/esm/src/transaction/broadcasters/ARC.js.map +1 -1
  267. package/dist/esm/src/transaction/broadcasters/DefaultBroadcaster.js.map +1 -1
  268. package/dist/esm/src/transaction/broadcasters/WhatsOnChainBroadcaster.js.map +1 -1
  269. package/dist/esm/src/transaction/chaintrackers/WhatsOnChain.js +3 -3
  270. package/dist/esm/src/transaction/chaintrackers/WhatsOnChain.js.map +1 -1
  271. package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
  272. package/dist/esm/src/transaction/http/DefaultHttpClient.js +3 -2
  273. package/dist/esm/src/transaction/http/DefaultHttpClient.js.map +1 -1
  274. package/dist/esm/src/transaction/http/FetchHttpClient.js +4 -2
  275. package/dist/esm/src/transaction/http/FetchHttpClient.js.map +1 -1
  276. package/dist/esm/src/transaction/http/NodejsHttpClient.js +5 -3
  277. package/dist/esm/src/transaction/http/NodejsHttpClient.js.map +1 -1
  278. package/dist/esm/src/transaction/http/index.js.map +1 -1
  279. package/dist/esm/src/transaction/index.js.map +1 -1
  280. package/dist/esm/src/wallet/CachedKeyDeriver.js +91 -66
  281. package/dist/esm/src/wallet/CachedKeyDeriver.js.map +1 -1
  282. package/dist/esm/src/wallet/KeyDeriver.js +60 -52
  283. package/dist/esm/src/wallet/KeyDeriver.js.map +1 -1
  284. package/dist/esm/src/wallet/ProtoWallet.js +75 -29
  285. package/dist/esm/src/wallet/ProtoWallet.js.map +1 -1
  286. package/dist/esm/src/wallet/WalletClient.js +7 -2
  287. package/dist/esm/src/wallet/WalletClient.js.map +1 -1
  288. package/dist/esm/src/wallet/WalletError.js +2 -2
  289. package/dist/esm/src/wallet/WalletError.js.map +1 -1
  290. package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js +4 -4
  291. package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
  292. package/dist/esm/src/wallet/substrates/HTTPWalletWire.js +2 -2
  293. package/dist/esm/src/wallet/substrates/HTTPWalletWire.js.map +1 -1
  294. package/dist/esm/src/wallet/substrates/WalletWireProcessor.js +1239 -1261
  295. package/dist/esm/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
  296. package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js +95 -43
  297. package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
  298. package/dist/esm/src/wallet/substrates/XDM.js +8 -3
  299. package/dist/esm/src/wallet/substrates/XDM.js.map +1 -1
  300. package/dist/esm/src/wallet/substrates/window.CWI.js +28 -28
  301. package/dist/esm/src/wallet/substrates/window.CWI.js.map +1 -1
  302. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  303. package/dist/types/mod.d.ts +15 -15
  304. package/dist/types/src/auth/Peer.d.ts +10 -10
  305. package/dist/types/src/auth/Peer.d.ts.map +1 -1
  306. package/dist/types/src/auth/SessionManager.d.ts +4 -4
  307. package/dist/types/src/auth/SessionManager.d.ts.map +1 -1
  308. package/dist/types/src/auth/certificates/Certificate.d.ts +6 -6
  309. package/dist/types/src/auth/certificates/Certificate.d.ts.map +1 -1
  310. package/dist/types/src/auth/certificates/MasterCertificate.d.ts +5 -5
  311. package/dist/types/src/auth/certificates/MasterCertificate.d.ts.map +1 -1
  312. package/dist/types/src/auth/certificates/VerifiableCertificate.d.ts.map +1 -1
  313. package/dist/types/src/auth/certificates/__tests/CompletedProtoWallet.d.ts +23 -22
  314. package/dist/types/src/auth/certificates/__tests/CompletedProtoWallet.d.ts.map +1 -1
  315. package/dist/types/src/auth/clients/AuthFetch.d.ts.map +1 -1
  316. package/dist/types/src/auth/transports/SimplifiedFetchTransport.d.ts +1 -1
  317. package/dist/types/src/auth/transports/SimplifiedFetchTransport.d.ts.map +1 -1
  318. package/dist/types/src/auth/utils/createNonce.d.ts.map +1 -1
  319. package/dist/types/src/auth/utils/getVerifiableCertificates.d.ts +3 -3
  320. package/dist/types/src/auth/utils/getVerifiableCertificates.d.ts.map +1 -1
  321. package/dist/types/src/auth/utils/validateCertificates.d.ts +2 -2
  322. package/dist/types/src/auth/utils/validateCertificates.d.ts.map +1 -1
  323. package/dist/types/src/auth/utils/verifyNonce.d.ts +1 -1
  324. package/dist/types/src/auth/utils/verifyNonce.d.ts.map +1 -1
  325. package/dist/types/src/compat/BSM.d.ts +1 -1
  326. package/dist/types/src/compat/BSM.d.ts.map +1 -1
  327. package/dist/types/src/compat/ECIES.d.ts +36 -36
  328. package/dist/types/src/compat/ECIES.d.ts.map +1 -1
  329. package/dist/types/src/compat/HD.d.ts +51 -51
  330. package/dist/types/src/compat/HD.d.ts.map +1 -1
  331. package/dist/types/src/compat/Mnemonic.d.ts +79 -79
  332. package/dist/types/src/compat/Mnemonic.d.ts.map +1 -1
  333. package/dist/types/src/compat/Utxo.d.ts.map +1 -1
  334. package/dist/types/src/messages/EncryptedMessage.d.ts.map +1 -1
  335. package/dist/types/src/messages/SignedMessage.d.ts.map +1 -1
  336. package/dist/types/src/overlay-tools/LookupResolver.d.ts +9 -9
  337. package/dist/types/src/overlay-tools/LookupResolver.d.ts.map +1 -1
  338. package/dist/types/src/overlay-tools/OverlayAdminTokenTemplate.d.ts +17 -17
  339. package/dist/types/src/overlay-tools/OverlayAdminTokenTemplate.d.ts.map +1 -1
  340. package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts +14 -14
  341. package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts.map +1 -1
  342. package/dist/types/src/primitives/AESGCM.d.ts.map +1 -1
  343. package/dist/types/src/primitives/BasePoint.d.ts +8 -8
  344. package/dist/types/src/primitives/BasePoint.d.ts.map +1 -1
  345. package/dist/types/src/primitives/BigNumber.d.ts.map +1 -1
  346. package/dist/types/src/primitives/Curve.d.ts +14 -7
  347. package/dist/types/src/primitives/Curve.d.ts.map +1 -1
  348. package/dist/types/src/primitives/DRBG.d.ts.map +1 -1
  349. package/dist/types/src/primitives/ECDSA.d.ts +1 -1
  350. package/dist/types/src/primitives/ECDSA.d.ts.map +1 -1
  351. package/dist/types/src/primitives/Hash.d.ts +11 -11
  352. package/dist/types/src/primitives/Hash.d.ts.map +1 -1
  353. package/dist/types/src/primitives/JacobianPoint.d.ts.map +1 -1
  354. package/dist/types/src/primitives/Point.d.ts +14 -10
  355. package/dist/types/src/primitives/Point.d.ts.map +1 -1
  356. package/dist/types/src/primitives/Polynomial.d.ts.map +1 -1
  357. package/dist/types/src/primitives/PrivateKey.d.ts +2 -2
  358. package/dist/types/src/primitives/PrivateKey.d.ts.map +1 -1
  359. package/dist/types/src/primitives/PublicKey.d.ts.map +1 -1
  360. package/dist/types/src/primitives/Random.d.ts.map +1 -1
  361. package/dist/types/src/primitives/Schnorr.d.ts +14 -14
  362. package/dist/types/src/primitives/Schnorr.d.ts.map +1 -1
  363. package/dist/types/src/primitives/Signature.d.ts +1 -1
  364. package/dist/types/src/primitives/Signature.d.ts.map +1 -1
  365. package/dist/types/src/primitives/SymmetricKey.d.ts +13 -13
  366. package/dist/types/src/primitives/SymmetricKey.d.ts.map +1 -1
  367. package/dist/types/src/primitives/TransactionSignature.d.ts +4 -4
  368. package/dist/types/src/primitives/TransactionSignature.d.ts.map +1 -1
  369. package/dist/types/src/primitives/utils.d.ts +3 -6
  370. package/dist/types/src/primitives/utils.d.ts.map +1 -1
  371. package/dist/types/src/script/Script.d.ts +3 -3
  372. package/dist/types/src/script/Script.d.ts.map +1 -1
  373. package/dist/types/src/script/ScriptTemplate.d.ts +2 -2
  374. package/dist/types/src/script/ScriptTemplate.d.ts.map +1 -1
  375. package/dist/types/src/script/Spend.d.ts.map +1 -1
  376. package/dist/types/src/script/templates/P2PKH.d.ts.map +1 -1
  377. package/dist/types/src/script/templates/PushDrop.d.ts +1 -2
  378. package/dist/types/src/script/templates/PushDrop.d.ts.map +1 -1
  379. package/dist/types/src/script/templates/RPuzzle.d.ts.map +1 -1
  380. package/dist/types/src/totp/totp.d.ts.map +1 -1
  381. package/dist/types/src/transaction/Beef.d.ts +96 -96
  382. package/dist/types/src/transaction/Beef.d.ts.map +1 -1
  383. package/dist/types/src/transaction/BeefParty.d.ts +22 -22
  384. package/dist/types/src/transaction/BeefParty.d.ts.map +1 -1
  385. package/dist/types/src/transaction/BeefTx.d.ts +5 -5
  386. package/dist/types/src/transaction/BeefTx.d.ts.map +1 -1
  387. package/dist/types/src/transaction/Broadcaster.d.ts.map +1 -1
  388. package/dist/types/src/transaction/ChainTracker.d.ts +2 -2
  389. package/dist/types/src/transaction/FeeModel.d.ts.map +1 -1
  390. package/dist/types/src/transaction/MerklePath.d.ts.map +1 -1
  391. package/dist/types/src/transaction/Transaction.d.ts +4 -12
  392. package/dist/types/src/transaction/Transaction.d.ts.map +1 -1
  393. package/dist/types/src/transaction/TransactionOutput.d.ts.map +1 -1
  394. package/dist/types/src/transaction/broadcasters/ARC.d.ts +1 -1
  395. package/dist/types/src/transaction/broadcasters/ARC.d.ts.map +1 -1
  396. package/dist/types/src/transaction/broadcasters/DefaultBroadcaster.d.ts.map +1 -1
  397. package/dist/types/src/transaction/broadcasters/WhatsOnChainBroadcaster.d.ts.map +1 -1
  398. package/dist/types/src/transaction/chaintrackers/DefaultChainTracker.d.ts.map +1 -1
  399. package/dist/types/src/transaction/chaintrackers/WhatsOnChain.d.ts.map +1 -1
  400. package/dist/types/src/transaction/fee-models/SatoshisPerKilobyte.d.ts.map +1 -1
  401. package/dist/types/src/transaction/http/DefaultHttpClient.d.ts +1 -1
  402. package/dist/types/src/transaction/http/DefaultHttpClient.d.ts.map +1 -1
  403. package/dist/types/src/transaction/http/FetchHttpClient.d.ts +5 -5
  404. package/dist/types/src/transaction/http/FetchHttpClient.d.ts.map +1 -1
  405. package/dist/types/src/transaction/http/HttpClient.d.ts +4 -4
  406. package/dist/types/src/transaction/http/HttpClient.d.ts.map +1 -1
  407. package/dist/types/src/transaction/http/NodejsHttpClient.d.ts +3 -3
  408. package/dist/types/src/transaction/http/NodejsHttpClient.d.ts.map +1 -1
  409. package/dist/types/src/transaction/http/index.d.ts.map +1 -1
  410. package/dist/types/src/transaction/index.d.ts.map +1 -1
  411. package/dist/types/src/wallet/CachedKeyDeriver.d.ts +58 -58
  412. package/dist/types/src/wallet/CachedKeyDeriver.d.ts.map +1 -1
  413. package/dist/types/src/wallet/KeyDeriver.d.ts +78 -78
  414. package/dist/types/src/wallet/KeyDeriver.d.ts.map +1 -1
  415. package/dist/types/src/wallet/ProtoWallet.d.ts +10 -10
  416. package/dist/types/src/wallet/ProtoWallet.d.ts.map +1 -1
  417. package/dist/types/src/wallet/Wallet.interfaces.d.ts +151 -152
  418. package/dist/types/src/wallet/Wallet.interfaces.d.ts.map +1 -1
  419. package/dist/types/src/wallet/WalletClient.d.ts +5 -5
  420. package/dist/types/src/wallet/WalletClient.d.ts.map +1 -1
  421. package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts +6 -6
  422. package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts.map +1 -1
  423. package/dist/types/src/wallet/substrates/HTTPWalletWire.d.ts.map +1 -1
  424. package/dist/types/src/wallet/substrates/WalletWireProcessor.d.ts.map +1 -1
  425. package/dist/types/src/wallet/substrates/WalletWireTransceiver.d.ts.map +1 -1
  426. package/dist/types/src/wallet/substrates/XDM.d.ts +1 -1
  427. package/dist/types/src/wallet/substrates/XDM.d.ts.map +1 -1
  428. package/dist/types/src/wallet/substrates/window.CWI.d.ts +6 -6
  429. package/dist/types/src/wallet/substrates/window.CWI.d.ts.map +1 -1
  430. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  431. package/dist/umd/bundle.js +1 -1
  432. package/docs/auth.md +92 -82
  433. package/docs/compat.md +24 -24
  434. package/docs/messages.md +7 -5
  435. package/docs/overlay-tools.md +21 -21
  436. package/docs/primitives.md +336 -315
  437. package/docs/script.md +35 -35
  438. package/docs/swagger/dist/swagger-initializer.js +7 -7
  439. package/docs/swagger/dist/swagger-ui-bundle.js +1 -1
  440. package/docs/swagger/dist/swagger-ui-es-bundle-core.js +2 -2
  441. package/docs/swagger/dist/swagger-ui-es-bundle.js +1 -1
  442. package/docs/swagger/dist/swagger-ui-standalone-preset.js +1 -1
  443. package/docs/swagger/dist/swagger-ui.js +2 -2
  444. package/docs/totp.md +5 -5
  445. package/docs/transaction.md +103 -105
  446. package/docs/wallet-substrates.md +17 -17
  447. package/docs/wallet.md +202 -204
  448. package/mod.ts +15 -15
  449. package/package.json +15 -3
  450. package/src/auth/Peer.ts +271 -121
  451. package/src/auth/SessionManager.ts +17 -10
  452. package/src/auth/__tests/Peer.test.ts +361 -179
  453. package/src/auth/__tests/SessionManager.test.ts +67 -19
  454. package/src/auth/__tests/build.test.ts +11 -0
  455. package/src/auth/certificates/Certificate.ts +27 -14
  456. package/src/auth/certificates/MasterCertificate.ts +106 -62
  457. package/src/auth/certificates/VerifiableCertificate.ts +30 -8
  458. package/src/auth/certificates/__tests/Certificate.test.ts +32 -17
  459. package/src/auth/certificates/__tests/CompletedProtoWallet.ts +171 -68
  460. package/src/auth/certificates/__tests/MasterCertificate.test.ts +63 -47
  461. package/src/auth/certificates/__tests/VerifiableCertificate.test.ts +42 -31
  462. package/src/auth/certificates/index.ts +1 -1
  463. package/src/auth/clients/AuthFetch.ts +1 -0
  464. package/src/auth/clients/index.ts +1 -1
  465. package/src/auth/transports/SimplifiedFetchTransport.ts +145 -72
  466. package/src/auth/transports/index.ts +1 -1
  467. package/src/auth/utils/__tests/cryptononce.test.ts +52 -23
  468. package/src/auth/utils/__tests/getVerifiableCertificates.test.ts +56 -30
  469. package/src/auth/utils/__tests/validateCertificates.test.ts +53 -31
  470. package/src/auth/utils/createNonce.ts +11 -3
  471. package/src/auth/utils/getVerifiableCertificates.ts +12 -7
  472. package/src/auth/utils/validateCertificates.ts +57 -39
  473. package/src/auth/utils/verifyNonce.ts +6 -2
  474. package/src/compat/BSM.ts +10 -2
  475. package/src/compat/ECIES.ts +265 -141
  476. package/src/compat/HD.ts +81 -63
  477. package/src/compat/Mnemonic.ts +104 -91
  478. package/src/compat/Utxo.ts +8 -5
  479. package/src/compat/__tests/BSM.test.ts +42 -16
  480. package/src/compat/__tests/ECIES.test.ts +117 -52
  481. package/src/compat/__tests/HD.test.ts +55 -42
  482. package/src/compat/__tests/Mnemonic.test.ts +11 -12
  483. package/src/compat/__tests/Mnemonic.vectors.ts +110 -55
  484. package/src/messages/EncryptedMessage.ts +6 -2
  485. package/src/messages/SignedMessage.ts +14 -8
  486. package/src/messages/__tests/EncryptedMessage.test.ts +23 -24
  487. package/src/messages/__tests/SignedMessage.test.ts +17 -11
  488. package/src/overlay-tools/LookupResolver.ts +108 -56
  489. package/src/overlay-tools/OverlayAdminTokenTemplate.ts +52 -23
  490. package/src/overlay-tools/SHIPBroadcaster.ts +135 -59
  491. package/src/overlay-tools/__tests/LookupResolver.test.ts +723 -323
  492. package/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.ts +50 -22
  493. package/src/overlay-tools/__tests/SHIPBroadcaster.test.ts +607 -290
  494. package/src/primitives/AESGCM.ts +2 -0
  495. package/src/primitives/BasePoint.ts +4 -4
  496. package/src/primitives/BigNumber.ts +99 -90
  497. package/src/primitives/Curve.ts +117 -46
  498. package/src/primitives/DRBG.ts +9 -11
  499. package/src/primitives/ECDSA.ts +109 -63
  500. package/src/primitives/Hash.ts +492 -321
  501. package/src/primitives/JacobianPoint.ts +67 -19
  502. package/src/primitives/Point.ts +254 -152
  503. package/src/primitives/Polynomial.ts +8 -3
  504. package/src/primitives/PrivateKey.ts +41 -17
  505. package/src/primitives/PublicKey.ts +13 -3
  506. package/src/primitives/Random.ts +14 -8
  507. package/src/primitives/ReductionContext.ts +1 -1
  508. package/src/primitives/Schnorr.ts +40 -18
  509. package/src/primitives/Signature.ts +26 -16
  510. package/src/primitives/SymmetricKey.ts +14 -14
  511. package/src/primitives/TransactionSignature.ts +41 -17
  512. package/src/primitives/__tests/AESGCM.test.ts +457 -151
  513. package/src/primitives/__tests/BRC42.private.vectors.ts +30 -15
  514. package/src/primitives/__tests/BRC42.public.vectors.ts +30 -15
  515. package/src/primitives/__tests/BigNumber.arithmatic.test.ts +344 -125
  516. package/src/primitives/__tests/BigNumber.binary.test.ts +148 -67
  517. package/src/primitives/__tests/BigNumber.constructor.test.ts +65 -25
  518. package/src/primitives/__tests/BigNumber.dhGroup.test.ts +15 -11
  519. package/src/primitives/__tests/BigNumber.fixtures.ts +16 -8
  520. package/src/primitives/__tests/BigNumber.serializers.test.ts +41 -15
  521. package/src/primitives/__tests/BigNumber.utils.test.ts +132 -42
  522. package/src/primitives/__tests/Curve.unit.test.ts +75 -53
  523. package/src/primitives/__tests/DRBG.test.ts +1 -1
  524. package/src/primitives/__tests/DRBG.vectors.ts +45 -75
  525. package/src/primitives/__tests/ECDH.test.ts +15 -8
  526. package/src/primitives/__tests/ECDSA.test.ts +12 -6
  527. package/src/primitives/__tests/HMAC.test.ts +24 -18
  528. package/src/primitives/__tests/Hash.test.ts +57 -46
  529. package/src/primitives/__tests/PBKDF2.vectors.ts +130 -117
  530. package/src/primitives/__tests/PrivateKey.split.test.ts +33 -11
  531. package/src/primitives/__tests/PrivateKey.test.ts +11 -10
  532. package/src/primitives/__tests/PublicKey.test.ts +64 -53
  533. package/src/primitives/__tests/Random.test.ts +1 -1
  534. package/src/primitives/__tests/Reader.test.ts +240 -219
  535. package/src/primitives/__tests/ReductionContext.test.ts +98 -61
  536. package/src/primitives/__tests/Schnorr.test.ts +249 -237
  537. package/src/primitives/__tests/SymmetricKey.test.ts +18 -15
  538. package/src/primitives/__tests/SymmetricKey.vectors.ts +16 -8
  539. package/src/primitives/__tests/Writer.test.ts +23 -13
  540. package/src/primitives/__tests/bug-31.test.ts +6 -10
  541. package/src/primitives/__tests/utils.test.ts +70 -19
  542. package/src/primitives/utils.ts +103 -79
  543. package/src/script/Script.ts +18 -12
  544. package/src/script/ScriptTemplate.ts +3 -5
  545. package/src/script/Spend.ts +306 -108
  546. package/src/script/__tests/Script.test.ts +73 -55
  547. package/src/script/__tests/Spend.test.ts +208 -83
  548. package/src/script/__tests/SpendComplex.test.ts +19 -13
  549. package/src/script/__tests/script.invalid.vectors.ts +428 -1796
  550. package/src/script/__tests/script.valid.vectors.ts +728 -2764
  551. package/src/script/templates/P2PKH.ts +34 -12
  552. package/src/script/templates/PushDrop.ts +65 -31
  553. package/src/script/templates/RPuzzle.ts +29 -8
  554. package/src/script/templates/__tests/PushDrop.test.ts +146 -41
  555. package/src/totp/__tests/totp.test.ts +45 -44
  556. package/src/totp/totp.ts +3 -2
  557. package/src/transaction/Beef.ts +269 -174
  558. package/src/transaction/BeefParty.ts +41 -31
  559. package/src/transaction/BeefTx.ts +36 -26
  560. package/src/transaction/Broadcaster.ts +10 -6
  561. package/src/transaction/ChainTracker.ts +2 -2
  562. package/src/transaction/FeeModel.ts +0 -1
  563. package/src/transaction/MerklePath.ts +124 -59
  564. package/src/transaction/Transaction.ts +188 -187
  565. package/src/transaction/TransactionOutput.ts +0 -1
  566. package/src/transaction/__tests/Beef.test.ts +390 -287
  567. package/src/transaction/__tests/MerklePath.test.ts +59 -26
  568. package/src/transaction/__tests/Transaction.benchmarks.test.ts +231 -201
  569. package/src/transaction/__tests/Transaction.test.ts +758 -482
  570. package/src/transaction/__tests/bigtx.vectors.ts +2 -1
  571. package/src/transaction/__tests/bump.invalid.vectors.ts +24 -6
  572. package/src/transaction/__tests/bump.valid.vectors.ts +6 -2
  573. package/src/transaction/__tests/tx.invalid.vectors.ts +881 -185
  574. package/src/transaction/__tests/tx.valid.vectors.ts +1210 -257
  575. package/src/transaction/broadcasters/ARC.ts +69 -38
  576. package/src/transaction/broadcasters/DefaultBroadcaster.ts +9 -3
  577. package/src/transaction/broadcasters/WhatsOnChainBroadcaster.ts +20 -7
  578. package/src/transaction/broadcasters/__tests/ARC.test.ts +127 -59
  579. package/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.ts +27 -18
  580. package/src/transaction/chaintrackers/DefaultChainTracker.ts +1 -1
  581. package/src/transaction/chaintrackers/WhatsOnChain.ts +27 -11
  582. package/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.ts +59 -23
  583. package/src/transaction/fee-models/SatoshisPerKilobyte.ts +9 -5
  584. package/src/transaction/http/DefaultHttpClient.ts +5 -4
  585. package/src/transaction/http/FetchHttpClient.ts +18 -9
  586. package/src/transaction/http/HttpClient.ts +27 -22
  587. package/src/transaction/http/NodejsHttpClient.ts +23 -9
  588. package/src/transaction/http/index.ts +5 -1
  589. package/src/transaction/index.ts +5 -1
  590. package/src/wallet/CachedKeyDeriver.ts +151 -82
  591. package/src/wallet/KeyDeriver.ts +186 -105
  592. package/src/wallet/ProtoWallet.ts +121 -52
  593. package/src/wallet/Wallet.interfaces.ts +167 -156
  594. package/src/wallet/WalletClient.ts +314 -59
  595. package/src/wallet/WalletError.ts +2 -2
  596. package/src/wallet/__tests/CachedKeyDeriver.test.ts +86 -27
  597. package/src/wallet/__tests/KeyDeriver.test.ts +136 -33
  598. package/src/wallet/__tests/ProtoWallet.test.ts +190 -102
  599. package/src/wallet/substrates/HTTPWalletJSON.ts +250 -67
  600. package/src/wallet/substrates/HTTPWalletWire.ts +7 -3
  601. package/src/wallet/substrates/WalletWireCalls.ts +2 -2
  602. package/src/wallet/substrates/WalletWireProcessor.ts +1412 -1277
  603. package/src/wallet/substrates/WalletWireTransceiver.ts +713 -138
  604. package/src/wallet/substrates/XDM.ts +425 -36
  605. package/src/wallet/substrates/__tests/WalletWire.integration.test.ts +488 -225
  606. package/src/wallet/substrates/__tests/XDM.test.ts +232 -234
  607. package/src/wallet/substrates/window.CWI.ts +520 -61
@@ -6,8 +6,8 @@ import Point from '../primitives/Point.js'
6
6
  import * as Hash from '../primitives/Hash.js'
7
7
  import { toArray, toHex, encode } from '../primitives/utils.js'
8
8
 
9
- function AES (key) {
10
- if (!this._tables[0][0][0]) this._precompute()
9
+ function AES (key): void {
10
+ if (this._tables[0][0][0] === 0) this._precompute()
11
11
 
12
12
  let tmp, encKey, decKey
13
13
  const sbox = this._tables[0][4]
@@ -19,20 +19,25 @@ function AES (key) {
19
19
  throw new Error('invalid aes key size')
20
20
  }
21
21
 
22
- this._key = [encKey = key.slice(0), decKey = []]
22
+ this._key = [(encKey = key.slice(0)), (decKey = [])]
23
23
 
24
24
  // schedule encryption keys
25
- for (var i = keyLen; i < 4 * keyLen + 28; i++) {
25
+ let i: number
26
+ for (i = keyLen; i < 4 * keyLen + 28; i++) {
26
27
  tmp = encKey[i - 1]
27
28
 
28
29
  // apply sbox
29
30
  if (i % keyLen === 0 || (keyLen === 8 && i % keyLen === 4)) {
30
- tmp = sbox[tmp >>> 24] << 24 ^ sbox[tmp >> 16 & 255] << 16 ^ sbox[tmp >> 8 & 255] << 8 ^ sbox[tmp & 255]
31
+ tmp =
32
+ (sbox[tmp >>> 24] << 24) ^
33
+ (sbox[(tmp >> 16) & 255] << 16) ^
34
+ (sbox[(tmp >> 8) & 255] << 8) ^
35
+ sbox[tmp & 255]
31
36
 
32
37
  // shift rows and add rcon
33
38
  if (i % keyLen === 0) {
34
- tmp = tmp << 8 ^ tmp >>> 24 ^ rcon << 24
35
- rcon = rcon << 1 ^ (rcon >> 7) * 283
39
+ tmp = (tmp << 8) ^ (tmp >>> 24) ^ (rcon << 24)
40
+ rcon = (rcon << 1) ^ ((rcon >> 7) * 283)
36
41
  }
37
42
  }
38
43
 
@@ -40,89 +45,117 @@ function AES (key) {
40
45
  }
41
46
 
42
47
  // schedule decryption keys
43
- for (let j = 0; i; j++, i--) {
44
- tmp = encKey[j & 3 ? i : i - 4]
48
+ for (let j = 0; i > 0; j++, i--) {
49
+ tmp = encKey[(j & 3) !== 0 ? i : i - 4]
45
50
  if (i <= 4 || j < 4) {
46
51
  decKey[j] = tmp
47
52
  } else {
48
- decKey[j] = decTable[0][sbox[tmp >>> 24]] ^
49
- decTable[1][sbox[tmp >> 16 & 255]] ^
50
- decTable[2][sbox[tmp >> 8 & 255]] ^
53
+ decKey[j] =
54
+ decTable[0][sbox[tmp >>> 24]] ^
55
+ decTable[1][sbox[(tmp >> 16) & 255]] ^
56
+ decTable[2][sbox[(tmp >> 8) & 255]] ^
51
57
  decTable[3][sbox[tmp & 255]]
52
58
  }
53
59
  }
54
60
  }
55
61
 
56
62
  AES.prototype = {
57
-
58
63
  /**
59
- * Encrypt an array of 4 big-endian words.
60
- * @param {Array} data The plaintext.
61
- * @return {Array} The ciphertext.
62
- */
63
- encrypt: function (data) { return this._crypt(data, 0) },
64
+ * Encrypt an array of 4 big-endian words.
65
+ * @param {Array} data The plaintext.
66
+ * @return {Array} The ciphertext.
67
+ */
68
+ encrypt: function (data) {
69
+ return this._crypt(data, 0)
70
+ },
64
71
 
65
72
  /**
66
- * Decrypt an array of 4 big-endian words.
67
- * @param {Array} data The ciphertext.
68
- * @return {Array} The plaintext.
69
- */
70
- decrypt: function (data) { return this._crypt(data, 1) },
73
+ * Decrypt an array of 4 big-endian words.
74
+ * @param {Array} data The ciphertext.
75
+ * @return {Array} The plaintext.
76
+ */
77
+ decrypt: function (data) {
78
+ return this._crypt(data, 1)
79
+ },
71
80
 
72
81
  /**
73
- * The expanded S-box and inverse S-box tables. These will be computed
74
- * on the client so that we don't have to send them down the wire.
75
- *
76
- * There are two tables, _tables[0] is for encryption and
77
- * _tables[1] is for decryption.
78
- *
79
- * The first 4 sub-tables are the expanded S-box with MixColumns. The
80
- * last (_tables[01][4]) is the S-box itself.
81
- *
82
- * @private
83
- */
82
+ * The expanded S-box and inverse S-box tables. These will be computed
83
+ * on the client so that we don't have to send them down the wire.
84
+ *
85
+ * There are two tables, _tables[0] is for encryption and
86
+ * _tables[1] is for decryption.
87
+ *
88
+ * The first 4 sub-tables are the expanded S-box with MixColumns. The
89
+ * last (_tables[01][4]) is the S-box itself.
90
+ *
91
+ * @private
92
+ */
84
93
  _tables: [
85
- [new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256)],
86
- [new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256)]
94
+ [
95
+ new Uint32Array(256),
96
+ new Uint32Array(256),
97
+ new Uint32Array(256),
98
+ new Uint32Array(256),
99
+ new Uint32Array(256)
100
+ ],
101
+ [
102
+ new Uint32Array(256),
103
+ new Uint32Array(256),
104
+ new Uint32Array(256),
105
+ new Uint32Array(256),
106
+ new Uint32Array(256)
107
+ ]
87
108
  ],
88
109
 
89
110
  // Expand the S-box tables.
90
111
  _precompute: function () {
91
- const encTable = this._tables[0]; const decTable = this._tables[1]
92
- const sbox = encTable[4]; const sboxInv = decTable[4]
93
- let i; let x; let xInv; const d = new Uint8Array(256); const th = new Uint8Array(256); let x2; let x4; let x8; let s; let tEnc; let tDec
112
+ const encTable = this._tables[0]
113
+ const decTable = this._tables[1]
114
+ const sbox = encTable[4]
115
+ const sboxInv = decTable[4]
116
+ let i
117
+ let x
118
+ let xInv
119
+ const d = new Uint8Array(256)
120
+ const th = new Uint8Array(256)
121
+ let x2
122
+ let x4
123
+ let x8
124
+ let s
125
+ let tEnc
126
+ let tDec
94
127
 
95
128
  // Compute double and third tables
96
129
  for (i = 0; i < 256; i++) {
97
- th[(d[i] = i << 1 ^ (i >> 7) * 283) ^ i] = i
130
+ th[(d[i] = (i << 1) ^ ((i >> 7) * 283)) ^ i] = i
98
131
  }
99
132
 
100
- for (x = xInv = 0; !sbox[x]; x ^= x2 || 1, xInv = th[xInv] || 1) {
133
+ for (x = xInv = 0; sbox[x] === 0; x ^= (x2 !== 0 ? x2 : 1), xInv = th[xInv] !== 0 ? th[xInv] : 1) {
101
134
  // Compute sbox
102
- s = xInv ^ xInv << 1 ^ xInv << 2 ^ xInv << 3 ^ xInv << 4
103
- s = s >> 8 ^ s & 255 ^ 99
135
+ s = xInv ^ (xInv << 1) ^ (xInv << 2) ^ (xInv << 3) ^ (xInv << 4)
136
+ s = (s >> 8) ^ (s & 255) ^ 99
104
137
  sbox[x] = s
105
138
  sboxInv[s] = x
106
139
 
107
140
  // Compute MixColumns
108
- x8 = d[x4 = d[x2 = d[x]]]
109
- tDec = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100
110
- tEnc = d[s] * 0x101 ^ s * 0x1010100
141
+ x8 = d[(x4 = d[(x2 = d[x])])]
142
+ tDec = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)
143
+ tEnc = (d[s] * 0x101) ^ (s * 0x1010100)
111
144
 
112
145
  for (i = 0; i < 4; i++) {
113
- encTable[i][x] = tEnc = tEnc << 24 ^ tEnc >>> 8
114
- decTable[i][s] = tDec = tDec << 24 ^ tDec >>> 8
146
+ encTable[i][x] = tEnc = (tEnc << 24) ^ (tEnc >>> 8)
147
+ decTable[i][s] = tDec = (tDec << 24) ^ (tDec >>> 8)
115
148
  }
116
149
  }
117
150
  },
118
151
 
119
152
  /**
120
- * Encryption and decryption core.
121
- * @param {Array} input Four words to be encrypted or decrypted.
122
- * @param dir The direction, 0 for encrypt and 1 for decrypt.
123
- * @return {Array} The four encrypted or decrypted words.
124
- * @private
125
- */
153
+ * Encryption and decryption core.
154
+ * @param {Array} input Four words to be encrypted or decrypted.
155
+ * @param dir The direction, 0 for encrypt and 1 for decrypt.
156
+ * @return {Array} The four encrypted or decrypted words.
157
+ * @private
158
+ */
126
159
  _crypt: function (input, dir) {
127
160
  if (input.length !== 4) {
128
161
  throw new Error('invalid aes block size')
@@ -131,15 +164,18 @@ AES.prototype = {
131
164
  const key = this._key[dir]
132
165
  // state variables a,b,c,d are loaded with pre-whitened data
133
166
  let a = input[0] ^ key[0]
134
- let b = input[dir ? 3 : 1] ^ key[1]
167
+ let b = input[dir === 1 ? 3 : 1] ^ key[1]
135
168
  let c = input[2] ^ key[2]
136
- let d = input[dir ? 1 : 3] ^ key[3]
137
- let a2; let b2; let c2
169
+ let d = input[dir === 1 ? 1 : 3] ^ key[3]
170
+ let a2
171
+ let b2
172
+ let c2
138
173
 
139
174
  const nInnerRounds = key.length / 4 - 2
140
175
  let i
141
176
  let kIndex = 4
142
- const out = new Uint32Array(4); const // <--- this is slower in Node.js, about the same in Chrome */
177
+ const out = new Uint32Array(4)
178
+ const // <--- this is slower in Node, about the same in Chrome */
143
179
  table = this._tables[dir]
144
180
 
145
181
  // load up the tables
@@ -151,33 +187,60 @@ AES.prototype = {
151
187
 
152
188
  // Inner rounds. Cribbed from OpenSSL.
153
189
  for (i = 0; i < nInnerRounds; i++) {
154
- a2 = t0[a >>> 24] ^ t1[b >> 16 & 255] ^ t2[c >> 8 & 255] ^ t3[d & 255] ^ key[kIndex]
155
- b2 = t0[b >>> 24] ^ t1[c >> 16 & 255] ^ t2[d >> 8 & 255] ^ t3[a & 255] ^ key[kIndex + 1]
156
- c2 = t0[c >>> 24] ^ t1[d >> 16 & 255] ^ t2[a >> 8 & 255] ^ t3[b & 255] ^ key[kIndex + 2]
157
- d = t0[d >>> 24] ^ t1[a >> 16 & 255] ^ t2[b >> 8 & 255] ^ t3[c & 255] ^ key[kIndex + 3]
190
+ a2 =
191
+ t0[a >>> 24] ^
192
+ t1[(b >> 16) & 255] ^
193
+ t2[(c >> 8) & 255] ^
194
+ t3[d & 255] ^
195
+ key[kIndex]
196
+ b2 =
197
+ t0[b >>> 24] ^
198
+ t1[(c >> 16) & 255] ^
199
+ t2[(d >> 8) & 255] ^
200
+ t3[a & 255] ^
201
+ key[kIndex + 1]
202
+ c2 =
203
+ t0[c >>> 24] ^
204
+ t1[(d >> 16) & 255] ^
205
+ t2[(a >> 8) & 255] ^
206
+ t3[b & 255] ^
207
+ key[kIndex + 2]
208
+ d =
209
+ t0[d >>> 24] ^
210
+ t1[(a >> 16) & 255] ^
211
+ t2[(b >> 8) & 255] ^
212
+ t3[c & 255] ^
213
+ key[kIndex + 3]
158
214
  kIndex += 4
159
- a = a2; b = b2; c = c2
215
+ a = a2
216
+ b = b2
217
+ c = c2
160
218
  }
161
219
 
162
220
  // Last round.
163
221
  for (i = 0; i < 4; i++) {
164
- out[dir ? 3 & -i : i] =
165
- sbox[a >>> 24] << 24 ^
166
- sbox[b >> 16 & 255] << 16 ^
167
- sbox[c >> 8 & 255] << 8 ^
222
+ out[dir === 1 ? 3 & -i : i] =
223
+ (sbox[a >>> 24] << 24) ^
224
+ (sbox[(b >> 16) & 255] << 16) ^
225
+ (sbox[(c >> 8) & 255] << 8) ^
168
226
  sbox[d & 255] ^
169
227
  key[kIndex++]
170
- a2 = a; a = b; b = c; c = d; d = a2
228
+ a2 = a
229
+ a = b
230
+ b = c
231
+ c = d
232
+ d = a2
171
233
  }
172
234
 
173
235
  return out
174
236
  }
175
237
  }
176
238
 
239
+ // eslint-disable-next-line @typescript-eslint/no-extraneous-class
177
240
  class AESWrapper {
178
241
  public static encrypt (messageBuf: number[], keyBuf: number[]): number[] {
179
- const key = AESWrapper.buf2Words((keyBuf))
180
- const message = AESWrapper.buf2Words((messageBuf))
242
+ const key = AESWrapper.buf2Words(keyBuf)
243
+ const message = AESWrapper.buf2Words(messageBuf)
181
244
  const a = new AES(key)
182
245
  const enc = a.encrypt(message)
183
246
  const encBuf = AESWrapper.words2Buf(enc)
@@ -185,8 +248,8 @@ class AESWrapper {
185
248
  }
186
249
 
187
250
  public static decrypt (encBuf: number[], keyBuf: number[]): number[] {
188
- const enc = AESWrapper.buf2Words((encBuf))
189
- const key = AESWrapper.buf2Words((keyBuf))
251
+ const enc = AESWrapper.buf2Words(encBuf)
252
+ const key = AESWrapper.buf2Words(keyBuf)
190
253
  const a = new AES(key)
191
254
  const message = a.decrypt(enc)
192
255
  const messageBuf = AESWrapper.words2Buf(message)
@@ -194,13 +257,13 @@ class AESWrapper {
194
257
  }
195
258
 
196
259
  public static buf2Words (buf: number[]): number[] {
197
- if (buf.length % 4) {
260
+ if (buf.length % 4 !== 0) {
198
261
  throw new Error('buf length must be a multiple of 4')
199
262
  }
200
- const words = []
263
+ const words: number[] = []
201
264
  for (let i = 0; i < buf.length / 4; i++) {
202
265
  const val =
203
- (buf[i * 4] * 0x1000000) + // Shift the first byte by 24 bits
266
+ buf[i * 4] * 0x1000000 + // Shift the first byte by 24 bits
204
267
  ((buf[i * 4 + 1] << 16) | // Shift the second byte by 16 bits
205
268
  (buf[i * 4 + 2] << 8) | // Shift the third byte by 8 bits
206
269
  buf[i * 4 + 3]) // The fourth byte
@@ -214,20 +277,21 @@ class AESWrapper {
214
277
 
215
278
  for (let i = 0; i < words.length; i++) {
216
279
  const word = words[i]
217
- buf[i * 4] = (word >>> 24) & 0xFF
218
- buf[i * 4 + 1] = (word >>> 16) & 0xFF
219
- buf[i * 4 + 2] = (word >>> 8) & 0xFF
220
- buf[i * 4 + 3] = word & 0xFF
280
+ buf[i * 4] = (word >>> 24) & 0xff
281
+ buf[i * 4 + 1] = (word >>> 16) & 0xff
282
+ buf[i * 4 + 2] = (word >>> 8) & 0xff
283
+ buf[i * 4 + 3] = word & 0xff
221
284
  }
222
285
 
223
286
  return buf
224
287
  }
225
288
  }
226
289
 
290
+ // eslint-disable-next-line @typescript-eslint/no-extraneous-class
227
291
  class CBC {
228
292
  public static buf2BlocksBuf (buf: number[], blockSize: number): number[][] {
229
293
  const bytesize = blockSize / 8
230
- const blockBufs = []
294
+ const blockBufs: number[][] = []
231
295
 
232
296
  for (let i = 0; i <= buf.length / bytesize; i++) {
233
297
  let blockBuf = buf.slice(i * bytesize, i * bytesize + bytesize)
@@ -260,7 +324,12 @@ class CBC {
260
324
  ): number[] {
261
325
  const blockSize = ivBuf.length * 8
262
326
  const blockBufs = CBC.buf2BlocksBuf(messageBuf, blockSize)
263
- const encBufs = CBC.encryptBlocks(blockBufs, ivBuf, blockCipher, cipherKeyBuf)
327
+ const encBufs = CBC.encryptBlocks(
328
+ blockBufs,
329
+ ivBuf,
330
+ blockCipher,
331
+ cipherKeyBuf
332
+ )
264
333
  const encBuf = encBufs.flat()
265
334
  return encBuf
266
335
  }
@@ -272,11 +341,16 @@ class CBC {
272
341
  cipherKeyBuf: number[]
273
342
  ): number[] {
274
343
  const bytesize = ivBuf.length
275
- const encBufs = []
344
+ const encBufs: number[][] = []
276
345
  for (let i = 0; i < encBuf.length / bytesize; i++) {
277
346
  encBufs.push(encBuf.slice(i * bytesize, i * bytesize + bytesize))
278
347
  }
279
- const blockBufs = CBC.decryptBlocks(encBufs, ivBuf, blockCipher, cipherKeyBuf)
348
+ const blockBufs = CBC.decryptBlocks(
349
+ encBufs,
350
+ ivBuf,
351
+ blockCipher,
352
+ cipherKeyBuf
353
+ )
280
354
  const buf = CBC.blockBufs2Buf(blockBufs)
281
355
  return buf
282
356
  }
@@ -309,11 +383,16 @@ class CBC {
309
383
  blockCipher: any /* TODO: type */,
310
384
  cipherKeyBuf: number[]
311
385
  ): number[][] {
312
- const encBufs = []
386
+ const encBufs: number[][] = []
313
387
 
314
388
  for (let i = 0; i < blockBufs.length; i++) {
315
389
  const blockBuf = blockBufs[i]
316
- const encBuf = CBC.encryptBlock(blockBuf, ivBuf, blockCipher, cipherKeyBuf)
390
+ const encBuf = CBC.encryptBlock(
391
+ blockBuf,
392
+ ivBuf,
393
+ blockCipher,
394
+ cipherKeyBuf
395
+ )
317
396
 
318
397
  encBufs.push(encBuf)
319
398
 
@@ -329,11 +408,16 @@ class CBC {
329
408
  blockCipher: any /* TODO: type */,
330
409
  cipherKeyBuf: number[]
331
410
  ): number[][] {
332
- const blockBufs = []
411
+ const blockBufs: number[][] = []
333
412
 
334
413
  for (let i = 0; i < encBufs.length; i++) {
335
414
  const encBuf = encBufs[i]
336
- const blockBuf = CBC.decryptBlock(encBuf, ivBuf, blockCipher, cipherKeyBuf)
415
+ const blockBuf = CBC.decryptBlock(
416
+ encBuf,
417
+ ivBuf,
418
+ blockCipher,
419
+ cipherKeyBuf
420
+ )
337
421
 
338
422
  blockBufs.push(blockBuf)
339
423
 
@@ -354,7 +438,10 @@ class CBC {
354
438
 
355
439
  public static pkcs7Unpad (paddedbuf: number[]): number[] {
356
440
  const padlength = paddedbuf[paddedbuf.length - 1]
357
- const padbuf = paddedbuf.slice(paddedbuf.length - padlength, paddedbuf.length)
441
+ const padbuf = paddedbuf.slice(
442
+ paddedbuf.length - padlength,
443
+ paddedbuf.length
444
+ )
358
445
  const padbuf2 = new Array(padlength)
359
446
  padbuf2.fill(padlength)
360
447
  if (toHex(padbuf) !== toHex(padbuf2)) {
@@ -378,9 +465,15 @@ class CBC {
378
465
  }
379
466
  }
380
467
 
468
+ // eslint-disable-next-line @typescript-eslint/no-extraneous-class
381
469
  class AESCBC {
382
- public static encrypt (messageBuf: number[], cipherKeyBuf: number[], ivBuf: number[], concatIvBuf = true): number[] {
383
- ivBuf = ivBuf || new Array(128 / 8).fill(0) || Random(128 / 8)
470
+ public static encrypt (
471
+ messageBuf: number[],
472
+ cipherKeyBuf: number[],
473
+ ivBuf: number[],
474
+ concatIvBuf = true
475
+ ): number[] {
476
+ ivBuf = ivBuf ?? Random(128 / 8)
384
477
  const ctBuf = CBC.encrypt(messageBuf, ivBuf, AESWrapper, cipherKeyBuf)
385
478
  if (concatIvBuf) {
386
479
  return [...ivBuf, ...ctBuf]
@@ -389,8 +482,12 @@ class AESCBC {
389
482
  }
390
483
  }
391
484
 
392
- public static decrypt (encBuf: number[], cipherKeyBuf: number[], ivBuf?: number[]): number[] {
393
- if (!ivBuf) {
485
+ public static decrypt (
486
+ encBuf: number[],
487
+ cipherKeyBuf: number[],
488
+ ivBuf?: number[]
489
+ ): number[] {
490
+ if (ivBuf == null) {
394
491
  ivBuf = encBuf.slice(0, 128 / 8)
395
492
  const ctBuf = encBuf.slice(128 / 8)
396
493
  return CBC.decrypt(ctBuf, ivBuf, AESWrapper, cipherKeyBuf)
@@ -408,16 +505,20 @@ class AESCBC {
408
505
  * @prprecated This class is deprecated in favor of the BRC-78 standard for portable encrypted messages,
409
506
  * which provides a more comprehensive and secure solution by integrating with BRC-42 and BRC-43 standards.
410
507
  */
508
+ // eslint-disable-next-line @typescript-eslint/no-extraneous-class
411
509
  export default class ECIES {
412
510
  /**
413
- * Generates the initialization vector (iv), encryption key (kE), and MAC key (kM)
414
- * using the sender's private key and receiver's public key.
415
- *
416
- * @param {PrivateKey} privKey - The sender's private key.
417
- * @param {PublicKey} pubKey - The receiver's public key.
418
- * @returns {Object} An object containing the iv, kE, and kM as number arrays.
419
- */
420
- public static ivkEkM (privKey: PrivateKey, pubKey: PublicKey): { iv: number[], kE: number[], kM: number[] } {
511
+ * Generates the initialization vector (iv), encryption key (kE), and MAC key (kM)
512
+ * using the sender's private key and receiver's public key.
513
+ *
514
+ * @param {PrivateKey} privKey - The sender's private key.
515
+ * @param {PublicKey} pubKey - The receiver's public key.
516
+ * @returns {Object} An object containing the iv, kE, and kM as number arrays.
517
+ */
518
+ public static ivkEkM (
519
+ privKey: PrivateKey,
520
+ pubKey: PublicKey
521
+ ): { iv: number[], kE: number[], kM: number[] } {
421
522
  const r = privKey
422
523
  const KB = pubKey
423
524
  const P = KB.mul(r)
@@ -432,17 +533,22 @@ export default class ECIES {
432
533
  }
433
534
 
434
535
  /**
435
- * Encrypts a given message using the Electrum ECIES method.
436
- *
437
- * @param {number[]} messageBuf - The message to be encrypted, in number array format.
438
- * @param {PublicKey} toPublicKey - The public key of the recipient.
439
- * @param {PrivateKey} [fromPrivateKey] - The private key of the sender. If not provided, a random private key is used.
440
- * @param {boolean} [noKey=false] - If true, does not include the sender's public key in the encrypted message.
441
- * @returns {number[]} The encrypted message as a number array.
442
- */
443
- public static electrumEncrypt (messageBuf: number[], toPublicKey: PublicKey, fromPrivateKey?: PrivateKey, noKey = false): number[] {
444
- let Rbuf
445
- if (!fromPrivateKey) {
536
+ * Encrypts a given message using the Electrum ECIES method.
537
+ *
538
+ * @param {number[]} messageBuf - The message to be encrypted, in number array format.
539
+ * @param {PublicKey} toPublicKey - The public key of the recipient.
540
+ * @param {PrivateKey} [fromPrivateKey] - The private key of the sender. If not provided, a random private key is used.
541
+ * @param {boolean} [noKey=false] - If true, does not include the sender's public key in the encrypted message.
542
+ * @returns {number[]} The encrypted message as a number array.
543
+ */
544
+ public static electrumEncrypt (
545
+ messageBuf: number[],
546
+ toPublicKey: PublicKey,
547
+ fromPrivateKey?: PrivateKey,
548
+ noKey = false
549
+ ): number[] {
550
+ let Rbuf: string | number[] | null = null
551
+ if (fromPrivateKey == null) {
446
552
  fromPrivateKey = PrivateKey.fromRandom()
447
553
  }
448
554
  if (!noKey) {
@@ -452,7 +558,7 @@ export default class ECIES {
452
558
  const ciphertext = AESCBC.encrypt(messageBuf, kE, iv, false)
453
559
  const BIE1 = toArray('BIE1', 'utf8')
454
560
  let encBuf: number[]
455
- if (Rbuf) {
561
+ if (Rbuf !== undefined && Rbuf !== null && Rbuf.length > 0) {
456
562
  encBuf = [...BIE1, ...Rbuf, ...ciphertext]
457
563
  } else {
458
564
  encBuf = [...BIE1, ...ciphertext]
@@ -462,14 +568,18 @@ export default class ECIES {
462
568
  }
463
569
 
464
570
  /**
465
- * Decrypts a message encrypted using the Electrum ECIES method.
466
- *
467
- * @param {number[]} encBuf - The encrypted message buffer.
468
- * @param {PrivateKey} toPrivateKey - The private key of the recipient.
469
- * @param {PublicKey} [fromPublicKey=null] - The public key of the sender. If not provided, it is extracted from the message.
470
- * @returns {number[]} The decrypted message as a number array.
471
- */
472
- public static electrumDecrypt (encBuf: number[], toPrivateKey: PrivateKey, fromPublicKey?: PublicKey): number[] {
571
+ * Decrypts a message encrypted using the Electrum ECIES method.
572
+ *
573
+ * @param {number[]} encBuf - The encrypted message buffer.
574
+ * @param {PrivateKey} toPrivateKey - The private key of the recipient.
575
+ * @param {PublicKey} [fromPublicKey=null] - The public key of the sender. If not provided, it is extracted from the message.
576
+ * @returns {number[]} The decrypted message as a number array.
577
+ */
578
+ public static electrumDecrypt (
579
+ encBuf: number[],
580
+ toPrivateKey: PrivateKey,
581
+ fromPublicKey?: PublicKey
582
+ ): number[] {
473
583
  const tagLength = 32
474
584
 
475
585
  const magic = encBuf.slice(0, 4)
@@ -493,12 +603,12 @@ export default class ECIES {
493
603
  }
494
604
  }
495
605
 
496
- if (Rbuf) {
497
- if (!fromPublicKey) {
606
+ if (Rbuf !== null) {
607
+ if (fromPublicKey == null) {
498
608
  fromPublicKey = PublicKey.fromString(toHex(Rbuf))
499
609
  }
500
610
  } else {
501
- if (!fromPublicKey) {
611
+ if (fromPublicKey == null) {
502
612
  throw new Error('Sender public key is required')
503
613
  }
504
614
  }
@@ -507,7 +617,10 @@ export default class ECIES {
507
617
  const ciphertext = encBuf.slice(offset, encBuf.length - tagLength)
508
618
  const hmac = encBuf.slice(encBuf.length - tagLength, encBuf.length)
509
619
 
510
- const hmac2 = Hash.sha256hmac(kM, encBuf.slice(0, encBuf.length - tagLength))
620
+ const hmac2 = Hash.sha256hmac(
621
+ kM,
622
+ encBuf.slice(0, encBuf.length - tagLength)
623
+ )
511
624
 
512
625
  if (toHex(hmac) !== toHex(hmac2)) {
513
626
  throw new Error('Invalid checksum')
@@ -517,18 +630,26 @@ export default class ECIES {
517
630
  }
518
631
 
519
632
  /**
520
- * Encrypts a given message using the Bitcore variant of ECIES.
521
- *
522
- * @param {number[]} messageBuf - The message to be encrypted, in number array format.
523
- * @param {PublicKey} toPublicKey - The public key of the recipient.
524
- * @param {PrivateKey} [fromPrivateKey] - The private key of the sender. If not provided, a random private key is used.
525
- * @param {number[]} [ivBuf] - The initialization vector for encryption. If not provided, a random IV is used.
526
- * @returns {number[]} The encrypted message as a number array.
527
- */
528
- public static bitcoreEncrypt (messageBuf: number[], toPublicKey: PublicKey, fromPrivateKey?: PrivateKey, ivBuf?: number[]): number[] {
529
- if (!fromPrivateKey) {
633
+ * Encrypts a given message using the Bitcore variant of ECIES.
634
+ *
635
+ * @param {number[]} messageBuf - The message to be encrypted, in number array format.
636
+ * @param {PublicKey} toPublicKey - The public key of the recipient.
637
+ * @param {PrivateKey} [fromPrivateKey] - The private key of the sender. If not provided, a random private key is used.
638
+ * @param {number[]} [ivBuf] - The initialization vector for encryption. If not provided, a random IV is used.
639
+ * @returns {number[]} The encrypted message as a number array.
640
+ */
641
+ public static bitcoreEncrypt (
642
+ messageBuf: number[],
643
+ toPublicKey: PublicKey,
644
+ fromPrivateKey?: PrivateKey,
645
+ ivBuf?: number[]
646
+ ): number[] {
647
+ if (fromPrivateKey == null) {
530
648
  fromPrivateKey = PrivateKey.fromRandom()
531
649
  }
650
+ if (ivBuf == null) {
651
+ ivBuf = Random(16)
652
+ }
532
653
  const r = fromPrivateKey
533
654
  const RPublicKey = fromPrivateKey.toPublicKey()
534
655
  const RBuf = RPublicKey.encode(true) as number[]
@@ -546,13 +667,16 @@ export default class ECIES {
546
667
  }
547
668
 
548
669
  /**
549
- * Decrypts a message encrypted using the Bitcore variant of ECIES.
550
- *
551
- * @param {number[]} encBuf - The encrypted message buffer.
552
- * @param {PrivateKey} toPrivateKey - The private key of the recipient.
553
- * @returns {number[]} The decrypted message as a number array.
554
- */
555
- public static bitcoreDecrypt (encBuf: number[], toPrivateKey: PrivateKey): number[] {
670
+ * Decrypts a message encrypted using the Bitcore variant of ECIES.
671
+ *
672
+ * @param {number[]} encBuf - The encrypted message buffer.
673
+ * @param {PrivateKey} toPrivateKey - The private key of the recipient.
674
+ * @returns {number[]} The decrypted message as a number array.
675
+ */
676
+ public static bitcoreDecrypt (
677
+ encBuf: number[],
678
+ toPrivateKey: PrivateKey
679
+ ): number[] {
556
680
  const kB = toPrivateKey
557
681
  const fromPublicKey = PublicKey.fromString(toHex(encBuf.slice(0, 33)))
558
682
  const R = fromPublicKey