@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
@@ -10,7 +10,7 @@ describe('SessionManager', () => {
10
10
  validSession = {
11
11
  isAuthenticated: false,
12
12
  sessionNonce: 'testSessionNonce',
13
- peerIdentityKey: 'testPeerIdentityKey',
13
+ peerIdentityKey: 'testPeerIdentityKey'
14
14
  }
15
15
  })
16
16
 
@@ -18,20 +18,37 @@ describe('SessionManager', () => {
18
18
  it('should add a session when sessionNonce and peerIdentityKey are present', () => {
19
19
  sessionManager.addSession(validSession)
20
20
 
21
- expect(sessionManager.getSession(validSession.sessionNonce!)).toBe(validSession)
22
- expect(sessionManager.getSession(validSession.peerIdentityKey!)).toBe(validSession)
21
+ if (typeof validSession.sessionNonce === 'string') {
22
+ expect(sessionManager.getSession(validSession.sessionNonce)).toBe(
23
+ validSession
24
+ )
25
+ }
26
+
27
+ if (typeof validSession.peerIdentityKey === 'string') {
28
+ expect(sessionManager.getSession(validSession.peerIdentityKey)).toBe(
29
+ validSession
30
+ )
31
+ }
23
32
  })
24
33
 
25
34
  it('should throw an error if sessionNonce and peerIdentityKey are missing', () => {
26
- const invalidSession = { ...validSession, sessionNonce: undefined, peerIdentityKey: undefined }
27
-
28
- expect(() => sessionManager.addSession(invalidSession)).toThrow('Invalid session: at least one of sessionNonce or peerIdentityKey is required.')
35
+ const invalidSession = {
36
+ ...validSession,
37
+ sessionNonce: undefined,
38
+ peerIdentityKey: undefined
39
+ }
40
+
41
+ expect(() => sessionManager.addSession(invalidSession)).toThrow(
42
+ 'Invalid session: at least one of sessionNonce or peerIdentityKey is required.'
43
+ )
29
44
  })
30
45
 
31
46
  it('should not throw an error if just peerIdentityKey is missing', () => {
32
47
  const invalidSession = { ...validSession, peerIdentityKey: undefined }
33
48
 
34
- expect(() => sessionManager.addSession(invalidSession)).not.toThrow('Invalid session: peerIdentityKey is required.')
49
+ expect(() => sessionManager.addSession(invalidSession)).not.toThrow(
50
+ 'Invalid session: peerIdentityKey is required.'
51
+ )
35
52
  })
36
53
  })
37
54
 
@@ -39,19 +56,29 @@ describe('SessionManager', () => {
39
56
  it('should retrieve a session by sessionNonce', () => {
40
57
  sessionManager.addSession(validSession)
41
58
 
42
- const retrievedSession = sessionManager.getSession(validSession.sessionNonce!)
43
- expect(retrievedSession).toBe(validSession)
59
+ if (typeof validSession.sessionNonce === 'string') {
60
+ const retrievedSession = sessionManager.getSession(
61
+ validSession.sessionNonce
62
+ )
63
+ expect(retrievedSession).toBe(validSession)
64
+ }
44
65
  })
45
66
 
46
67
  it('should retrieve a session by peerIdentityKey', () => {
47
68
  sessionManager.addSession(validSession)
48
69
 
49
- const retrievedSession = sessionManager.getSession(validSession.peerIdentityKey!)
50
- expect(retrievedSession).toBe(validSession)
70
+ if (typeof validSession.peerIdentityKey === 'string') {
71
+ const retrievedSession = sessionManager.getSession(
72
+ validSession.peerIdentityKey
73
+ )
74
+ expect(retrievedSession).toBe(validSession)
75
+ }
51
76
  })
52
77
 
53
78
  it('should return undefined for a non-existent identifier', () => {
54
- const retrievedSession = sessionManager.getSession('nonExistentIdentifier')
79
+ const retrievedSession = sessionManager.getSession(
80
+ 'nonExistentIdentifier'
81
+ )
55
82
  expect(retrievedSession).toBeUndefined()
56
83
  })
57
84
  })
@@ -61,14 +88,29 @@ describe('SessionManager', () => {
61
88
  sessionManager.addSession(validSession)
62
89
 
63
90
  sessionManager.removeSession(validSession)
64
- expect(sessionManager.getSession(validSession.sessionNonce!)).toBeUndefined()
65
- expect(sessionManager.getSession(validSession.peerIdentityKey!)).toBeUndefined()
91
+
92
+ if (typeof validSession.sessionNonce === 'string') {
93
+ expect(
94
+ sessionManager.getSession(validSession.sessionNonce)
95
+ ).toBeUndefined()
96
+ }
97
+ if (typeof validSession.peerIdentityKey === 'string') {
98
+ expect(
99
+ sessionManager.getSession(validSession.peerIdentityKey)
100
+ ).toBeUndefined()
101
+ }
66
102
  })
67
103
 
68
104
  it('should not throw an error when removing a session with undefined identifiers', () => {
69
- const sessionWithUndefinedIdentifiers = { ...validSession, sessionNonce: undefined, peerIdentityKey: undefined }
70
-
71
- expect(() => sessionManager.removeSession(sessionWithUndefinedIdentifiers)).not.toThrow()
105
+ const sessionWithUndefinedIdentifiers = {
106
+ ...validSession,
107
+ sessionNonce: undefined,
108
+ peerIdentityKey: undefined
109
+ }
110
+
111
+ expect(() =>
112
+ sessionManager.removeSession(sessionWithUndefinedIdentifiers)
113
+ ).not.toThrow()
72
114
  })
73
115
  })
74
116
 
@@ -76,8 +118,14 @@ describe('SessionManager', () => {
76
118
  it('should return true if a session exists for the identifier', () => {
77
119
  sessionManager.addSession(validSession)
78
120
 
79
- expect(sessionManager.hasSession(validSession.sessionNonce!)).toBe(true)
80
- expect(sessionManager.hasSession(validSession.peerIdentityKey!)).toBe(true)
121
+ if (typeof validSession.sessionNonce === 'string') {
122
+ expect(sessionManager.hasSession(validSession.sessionNonce)).toBe(true)
123
+ }
124
+ if (typeof validSession.peerIdentityKey === 'string') {
125
+ expect(sessionManager.hasSession(validSession.peerIdentityKey)).toBe(
126
+ true
127
+ )
128
+ }
81
129
  })
82
130
 
83
131
  it('should return false if no session exists for the identifier', () => {
@@ -0,0 +1,11 @@
1
+ import { PrivateKey, PublicKey } from '../../../mod'
2
+
3
+ describe('Peer class mutual authentication and certificate exchange', () => {
4
+ for (let i = 0; i < 20; i++) {
5
+ it(`tests point ${i + 1}`, () => {
6
+ const pubKeyString = PrivateKey.fromRandom().toPublicKey().toString()
7
+ const test = PublicKey.fromString(pubKeyString)
8
+ expect(test).toBeTruthy()
9
+ })
10
+ }
11
+ })
@@ -48,7 +48,7 @@ export default class Certificate {
48
48
 
49
49
  /**
50
50
  * Certificate signature by the certifier's private key, DER encoded hex string.
51
- */
51
+ */
52
52
  signature?: HexString
53
53
 
54
54
  /**
@@ -130,8 +130,8 @@ export default class Certificate {
130
130
  }
131
131
 
132
132
  // Write signature if included
133
- if (includeSignature && this.signature && this.signature.length > 0) {
134
- const signatureBytes = Utils.toArray(this.signature, 'hex')
133
+ if (includeSignature && (this.signature ?? '').length > 0) { // ✅ Explicitly handle nullish signature
134
+ const signatureBytes = Utils.toArray(this.signature as string, 'hex') // ✅ Type assertion ensures it's a string
135
135
  writer.write(signatureBytes)
136
136
  }
137
137
 
@@ -215,29 +215,36 @@ export default class Certificate {
215
215
  const verifier = new ProtoWallet('anyone')
216
216
  const verificationData = this.toBinary(false) // Exclude the signature from the verification data
217
217
 
218
+ const signatureHex = this.signature ?? '' // Provide a fallback value (empty string)
219
+
218
220
  const { valid } = await verifier.verifySignature({
219
- signature: Utils.toArray(this.signature, 'hex'),
221
+ signature: Utils.toArray(signatureHex, 'hex'), // Now it is always a string
220
222
  data: verificationData,
221
223
  protocolID: [2, 'certificate signature'],
222
224
  keyID: `${this.type} ${this.serialNumber}`,
223
225
  counterparty: this.certifier // The certifier is the one who signed the certificate
224
226
  })
227
+
225
228
  return valid
226
229
  }
227
230
 
228
231
  /**
229
- * Signs the certificate using the provided certifier wallet.
230
- *
231
- * @param {Wallet} certifierWallet - The wallet representing the certifier.
232
- * @returns {Promise<void>}
233
- */
232
+ * Signs the certificate using the provided certifier wallet.
233
+ *
234
+ * @param {Wallet} certifierWallet - The wallet representing the certifier.
235
+ * @returns {Promise<void>}
236
+ */
234
237
  async sign(certifierWallet: ProtoWallet): Promise<void> {
235
- if (this.signature) {
236
- throw new Error(`Certificate has already been signed! Signature present: ${this.signature}`)
238
+ if (this.signature != null && this.signature.length > 0) { // ✅ Explicitly checking for null/undefined
239
+ throw new Error(
240
+ `Certificate has already been signed! Signature present: ${this.signature}`
241
+ )
237
242
  }
238
243
 
239
244
  // Ensure the certifier declared is the one actually signing
240
- this.certifier = (await certifierWallet.getPublicKey({ identityKey: true })).publicKey
245
+ this.certifier = (
246
+ await certifierWallet.getPublicKey({ identityKey: true })
247
+ ).publicKey
241
248
 
242
249
  const preimage = this.toBinary(false) // Exclude the signature when signing
243
250
  const { signature } = await certifierWallet.createSignature({
@@ -257,7 +264,13 @@ export default class Certificate {
257
264
  * - `protocolID` (WalletProtocol): The protocol ID for certificate field encryption.
258
265
  * - `keyID` (string): A unique key identifier derived from the serial number and field name.
259
266
  */
260
- static getCertificateFieldEncryptionDetails(fieldName: string, serialNumber?: string): { protocolID: WalletProtocol, keyID: string } {
261
- return { protocolID: [2, 'certificate field encryption'], keyID: `${serialNumber} ${fieldName}` }
267
+ static getCertificateFieldEncryptionDetails(
268
+ fieldName: string,
269
+ serialNumber?: string
270
+ ): { protocolID: WalletProtocol, keyID: string } {
271
+ return {
272
+ protocolID: [2, 'certificate field encryption'],
273
+ keyID: `${serialNumber ?? 'unknown'} ${fieldName}`
274
+ }
262
275
  }
263
276
  }
@@ -8,8 +8,7 @@ import {
8
8
  PubKeyHex,
9
9
  Random,
10
10
  WalletCounterparty,
11
- ProtoWallet,
12
- OriginatorDomainNameStringUnder250Bytes
11
+ ProtoWallet
13
12
  } from '../../../mod.js'
14
13
  import Certificate from './Certificate.js'
15
14
 
@@ -47,13 +46,21 @@ export class MasterCertificate extends Certificate {
47
46
  masterKeyring: Record<CertificateFieldNameUnder50Bytes, Base64String>,
48
47
  signature?: HexString
49
48
  ) {
50
- super(type, serialNumber, subject, certifier, revocationOutpoint, fields, signature)
49
+ super(
50
+ type,
51
+ serialNumber,
52
+ subject,
53
+ certifier,
54
+ revocationOutpoint,
55
+ fields,
56
+ signature
57
+ )
51
58
 
52
59
  // Ensure every field in `fields` is a string and has a corresponding key in `masterKeyring`
53
60
  for (const fieldName of Object.keys(fields)) {
54
- if (!masterKeyring[fieldName]) {
61
+ if (masterKeyring[fieldName] === undefined || masterKeyring[fieldName] === '') {
55
62
  throw new Error(
56
- `Master keyring must contain a value for every field. Missing key for field: "${fieldName}".`
63
+ `Master keyring must contain a value for every field. Missing or empty key for field: "${fieldName}".`
57
64
  )
58
65
  }
59
66
  }
@@ -78,21 +85,33 @@ export class MasterCertificate extends Certificate {
78
85
  static async createCertificateFields(
79
86
  creatorWallet: ProtoWallet,
80
87
  certifierOrSubject: WalletCounterparty,
81
- fields: Record<CertificateFieldNameUnder50Bytes, string>,
82
- originator?: OriginatorDomainNameStringUnder250Bytes
88
+ fields: Record<CertificateFieldNameUnder50Bytes, string>
83
89
  ): Promise<CreateCertificateFieldsResult> {
84
- const certificateFields: Record<CertificateFieldNameUnder50Bytes, Base64String> = {}
85
- const masterKeyring: Record<CertificateFieldNameUnder50Bytes, Base64String> = {}
90
+ const certificateFields: Record<
91
+ CertificateFieldNameUnder50Bytes,
92
+ Base64String
93
+ > = {}
94
+ const masterKeyring: Record<
95
+ CertificateFieldNameUnder50Bytes,
96
+ Base64String
97
+ > = {}
86
98
  for (const [fieldName, fieldValue] of Object.entries(fields)) {
87
99
  const fieldSymmetricKey = SymmetricKey.fromRandom()
88
- const encryptedFieldValue = fieldSymmetricKey.encrypt(Utils.toArray(fieldValue, 'utf8'))
89
- certificateFields[fieldName] = Utils.toBase64(encryptedFieldValue as number[])
100
+ const encryptedFieldValue = fieldSymmetricKey.encrypt(
101
+ Utils.toArray(fieldValue, 'utf8')
102
+ )
103
+ certificateFields[fieldName] = Utils.toBase64(
104
+ encryptedFieldValue as number[]
105
+ )
90
106
 
91
- const { ciphertext: encryptedFieldRevelationKey } = await creatorWallet.encrypt({
92
- plaintext: fieldSymmetricKey.toArray(),
93
- ...Certificate.getCertificateFieldEncryptionDetails(fieldName), // Only fieldName used on MasterCertificate
94
- counterparty: certifierOrSubject
95
- }, originator)
107
+ const { ciphertext: encryptedFieldRevelationKey } =
108
+ await creatorWallet.encrypt(
109
+ {
110
+ plaintext: fieldSymmetricKey.toArray(),
111
+ ...Certificate.getCertificateFieldEncryptionDetails(fieldName), // Only fieldName used on MasterCertificate
112
+ counterparty: certifierOrSubject
113
+ }
114
+ )
96
115
  masterKeyring[fieldName] = Utils.toBase64(encryptedFieldRevelationKey)
97
116
  }
98
117
 
@@ -125,30 +144,48 @@ export class MasterCertificate extends Certificate {
125
144
  fields: Record<CertificateFieldNameUnder50Bytes, Base64String>,
126
145
  fieldsToReveal: string[],
127
146
  masterKeyring: Record<CertificateFieldNameUnder50Bytes, Base64String>,
128
- serialNumber: Base64String,
129
- originator?: OriginatorDomainNameStringUnder250Bytes): Promise<Record<CertificateFieldNameUnder50Bytes, string>> {
147
+ serialNumber: Base64String
148
+ ): Promise<Record<CertificateFieldNameUnder50Bytes, string>> {
130
149
  if (!Array.isArray(fieldsToReveal)) {
131
150
  throw new Error('fieldsToReveal must be an array of strings')
132
151
  }
133
152
  const fieldRevelationKeyring = {}
134
153
  for (const fieldName of fieldsToReveal) {
135
154
  // Make sure that fields to reveal is a subset of the certificate fields
136
- if (!fields[fieldName]) {
137
- throw new Error(`Fields to reveal must be a subset of the certificate fields. Missing the "${fieldName}" field.`)
155
+ if (fields[fieldName] === undefined || fields[fieldName] === null || fields[fieldName] === '') {
156
+ throw new Error(
157
+ `Fields to reveal must be a subset of the certificate fields. Missing the "${fieldName}" field.`
158
+ )
138
159
  }
139
160
 
140
161
  // Decrypt the master field key and verify that derived key actually decrypts requested field
141
- const masterFieldKey = (await this.decryptField(subjectWallet, masterKeyring, fieldName, fields[fieldName], certifier)).fieldRevelationKey
162
+ const masterFieldKey = (
163
+ await this.decryptField(
164
+ subjectWallet,
165
+ masterKeyring,
166
+ fieldName,
167
+ fields[fieldName],
168
+ certifier
169
+ )
170
+ ).fieldRevelationKey
142
171
 
143
172
  // Encrypt derived fieldRevelationKey for verifier
144
- const { ciphertext: encryptedFieldRevelationKey } = await subjectWallet.encrypt({
145
- plaintext: masterFieldKey,
146
- ...Certificate.getCertificateFieldEncryptionDetails(fieldName, serialNumber),
147
- counterparty: verifier
148
- }, originator)
173
+ const { ciphertext: encryptedFieldRevelationKey } =
174
+ await subjectWallet.encrypt(
175
+ {
176
+ plaintext: masterFieldKey,
177
+ ...Certificate.getCertificateFieldEncryptionDetails(
178
+ fieldName,
179
+ serialNumber
180
+ ),
181
+ counterparty: verifier
182
+ }
183
+ )
149
184
 
150
185
  // Add encryptedFieldRevelationKey to fieldRevelationKeyring
151
- fieldRevelationKeyring[fieldName] = Utils.toBase64(encryptedFieldRevelationKey)
186
+ fieldRevelationKeyring[fieldName] = Utils.toBase64(
187
+ encryptedFieldRevelationKey
188
+ )
152
189
  }
153
190
 
154
191
  // Return the field revelation keyring which can be used to create a verifiable certificate for a verifier.
@@ -157,21 +194,21 @@ export class MasterCertificate extends Certificate {
157
194
 
158
195
  /**
159
196
  * Issues a new MasterCertificate for a specified subject.
160
- *
197
+ *
161
198
  * This method generates a certificate containing encrypted fields and a keyring
162
199
  * for the subject to decrypt all fields. Each field is encrypted with a randomly
163
200
  * generated symmetric key, which is then encrypted for the subject. The certificate
164
201
  * can also includes a revocation outpoint to manage potential revocation.
165
- *
202
+ *
166
203
  * @param {ProtoWallet} certifierWallet - The wallet of the certifier, used to sign the certificate and encrypt field keys.
167
204
  * @param {WalletCounterparty} subject - The subject for whom the certificate is issued.
168
205
  * @param {Record<CertificateFieldNameUnder50Bytes, string>} fields - Unencrypted certificate fields to include, with their names and values.
169
206
  * @param {string} certificateType - The type of certificate being issued.
170
- * @param {function(string, Record<CertificateFieldNameUnder50Bytes, string>?): Promise<string>} getRevocationOutpoint -
207
+ * @param {function(string, Record<CertificateFieldNameUnder50Bytes, string>?): Promise<string>} getRevocationOutpoint -
171
208
  * Optional function to obtain a revocation outpoint for the certificate. Defaults to a placeholder.
172
209
  * @param {function(string): Promise<void>} updateProgress - Optional callback for reporting progress updates during the operation. Defaults to a no-op.
173
210
  * @returns {Promise<MasterCertificate>} - A signed MasterCertificate instance containing the encrypted fields and subject specific keyring.
174
- *
211
+ *
175
212
  * @throws {Error} Throws an error if any operation (e.g., encryption, signing) fails during certificate issuance.
176
213
  */
177
214
  static async issueCertificateForSubject(
@@ -179,31 +216,26 @@ export class MasterCertificate extends Certificate {
179
216
  subject: WalletCounterparty,
180
217
  fields: Record<CertificateFieldNameUnder50Bytes, string>,
181
218
  certificateType: string,
182
- getRevocationOutpoint = async (
183
- serialNumber: string
184
- ): Promise<string> => { return 'Certificate revocation not tracked.' },
185
- serialNumber?: string
219
+ getRevocationOutpoint = async (_serial: string): Promise<string> => {
220
+ void _serial // Explicitly acknowledge unused parameter
221
+ return 'Certificate revocation not tracked.'
222
+ },
223
+ serialNumber?: string // ✅ Optional parameter
186
224
  ): Promise<MasterCertificate> {
187
225
  // 1. Generate a random serialNumber if not provided
188
- if (!serialNumber) {
189
- serialNumber = Utils.toBase64(Random(32))
190
- }
226
+ const finalSerialNumber = serialNumber ?? Utils.toBase64(Random(32)) // ✅ Explicit nullish check
191
227
 
192
228
  // 2. Create encrypted certificate fields and associated master keyring
193
- const { certificateFields, masterKeyring } = await this.createCertificateFields(
194
- certifierWallet,
195
- subject,
196
- fields,
197
- )
229
+ const { certificateFields, masterKeyring } =
230
+ await this.createCertificateFields(certifierWallet, subject, fields)
198
231
 
199
- // 3. Obtain a revocation outpoint (ex. certifier can call wallet.createAction())
200
- const revocationOutpoint = await getRevocationOutpoint(serialNumber)
201
- // TODO: Validate revocation outpoint format
232
+ // 3. Obtain a revocation outpoint
233
+ const revocationOutpoint = await getRevocationOutpoint(finalSerialNumber) // ✅ Use `finalSerialNumber`
202
234
 
203
235
  // 4. Create new MasterCertificate instance
204
236
  const certificate = new MasterCertificate(
205
237
  certificateType,
206
- serialNumber,
238
+ finalSerialNumber, // ✅ Use `finalSerialNumber`
207
239
  subject,
208
240
  (await certifierWallet.getPublicKey({ identityKey: true })).publicKey,
209
241
  revocationOutpoint,
@@ -216,7 +248,6 @@ export class MasterCertificate extends Certificate {
216
248
  return certificate
217
249
  }
218
250
 
219
-
220
251
  /**
221
252
  * Decrypts all fields in the MasterCertificate using the subject's or certifier's wallet.
222
253
  *
@@ -240,17 +271,26 @@ export class MasterCertificate extends Certificate {
240
271
  fields: Record<CertificateFieldNameUnder50Bytes, Base64String>,
241
272
  counterparty: WalletCounterparty
242
273
  ): Promise<Record<CertificateFieldNameUnder50Bytes, string>> {
243
- if (!masterKeyring || Object.keys(masterKeyring).length === 0) {
274
+ if (masterKeyring == null || Object.keys(masterKeyring).length === 0) {
244
275
  throw new Error('A MasterCertificate must have a valid masterKeyring!')
245
276
  }
246
277
  try {
247
- const decryptedFields: Record<CertificateFieldNameUnder50Bytes, string> = {}
278
+ const decryptedFields: Record<CertificateFieldNameUnder50Bytes, string> =
279
+ {}
248
280
  // Note: we want to iterate through all fields, not just masterKeyring keys/value pairs.
249
281
  for (const fieldName of Object.keys(fields)) {
250
- decryptedFields[fieldName] = (await this.decryptField(subjectOrCertifierWallet, masterKeyring, fieldName, fields[fieldName], counterparty)).decryptedFieldValue
282
+ decryptedFields[fieldName] = (
283
+ await this.decryptField(
284
+ subjectOrCertifierWallet,
285
+ masterKeyring,
286
+ fieldName,
287
+ fields[fieldName],
288
+ counterparty
289
+ )
290
+ ).decryptedFieldValue
251
291
  }
252
292
  return decryptedFields
253
- } catch (e) {
293
+ } catch {
254
294
  throw new Error('Failed to decrypt all master certificate fields.')
255
295
  }
256
296
  }
@@ -260,25 +300,29 @@ export class MasterCertificate extends Certificate {
260
300
  masterKeyring: Record<CertificateFieldNameUnder50Bytes, Base64String>,
261
301
  fieldName: Base64String,
262
302
  fieldValue: Base64String,
263
- counterparty: WalletCounterparty,
264
- originator?: OriginatorDomainNameStringUnder250Bytes
303
+ counterparty: WalletCounterparty
265
304
  ): Promise<{ fieldRevelationKey: number[], decryptedFieldValue: string }> {
266
- if (!masterKeyring || Object.keys(masterKeyring).length === 0) {
305
+ if (masterKeyring == null || Object.keys(masterKeyring).length === 0) {
267
306
  throw new Error('A MasterCertificate must have a valid masterKeyring!')
268
307
  }
269
308
  try {
270
- const { plaintext: fieldRevelationKey } = await subjectOrCertifierWallet.decrypt({
271
- ciphertext: Utils.toArray(masterKeyring[fieldName], 'base64'),
272
- ...Certificate.getCertificateFieldEncryptionDetails(fieldName), // Only fieldName used on MasterCertificate
273
- counterparty
274
- }, originator)
309
+ const { plaintext: fieldRevelationKey } =
310
+ await subjectOrCertifierWallet.decrypt(
311
+ {
312
+ ciphertext: Utils.toArray(masterKeyring[fieldName], 'base64'),
313
+ ...Certificate.getCertificateFieldEncryptionDetails(fieldName), // Only fieldName used on MasterCertificate
314
+ counterparty
315
+ }
316
+ )
275
317
 
276
- const decryptedFieldValue = new SymmetricKey(fieldRevelationKey).decrypt(Utils.toArray(fieldValue, 'base64'))
318
+ const decryptedFieldValue = new SymmetricKey(fieldRevelationKey).decrypt(
319
+ Utils.toArray(fieldValue, 'base64')
320
+ )
277
321
  return {
278
322
  fieldRevelationKey,
279
323
  decryptedFieldValue: Utils.toUTF8(decryptedFieldValue as number[])
280
324
  }
281
- } catch (e) {
325
+ } catch {
282
326
  throw new Error('Failed to decrypt certificate field!')
283
327
  }
284
328
  }
@@ -37,7 +37,15 @@ export class VerifiableCertificate extends Certificate {
37
37
  signature?: HexString,
38
38
  decryptedFields?: Record<CertificateFieldNameUnder50Bytes, Base64String>
39
39
  ) {
40
- super(type, serialNumber, subject, certifier, revocationOutpoint, fields, signature)
40
+ super(
41
+ type,
42
+ serialNumber,
43
+ subject,
44
+ certifier,
45
+ revocationOutpoint,
46
+ fields,
47
+ signature
48
+ )
41
49
  this.keyring = keyring
42
50
  this.decryptedFields = decryptedFields
43
51
  }
@@ -48,25 +56,39 @@ export class VerifiableCertificate extends Certificate {
48
56
  * @returns {Promise<Record<CertificateFieldNameUnder50Bytes, string>>} - A promise that resolves to an object where each key is a field name and each value is the decrypted field value as a string.
49
57
  * @throws {Error} Throws an error if any of the decryption operations fail, with a message indicating the failure context.
50
58
  */
51
- async decryptFields(verifierWallet: ProtoWallet): Promise<Record<CertificateFieldNameUnder50Bytes, string>> {
52
- if (!this.keyring || Object.keys(this.keyring).length === 0) {
53
- throw new Error('A keyring is required to decrypt certificate fields for the verifier.')
59
+ async decryptFields(
60
+ verifierWallet: ProtoWallet
61
+ ): Promise<Record<CertificateFieldNameUnder50Bytes, string>> {
62
+ if (this.keyring == null || Object.keys(this.keyring).length === 0) { // ✅ Explicitly check null and empty object
63
+ throw new Error(
64
+ 'A keyring is required to decrypt certificate fields for the verifier.'
65
+ )
54
66
  }
67
+
55
68
  try {
56
- const decryptedFields: Record<CertificateFieldNameUnder50Bytes, string> = {}
69
+ const decryptedFields: Record<CertificateFieldNameUnder50Bytes, string> =
70
+ {}
57
71
  for (const fieldName in this.keyring) {
58
72
  const { plaintext: fieldRevelationKey } = await verifierWallet.decrypt({
59
73
  ciphertext: Utils.toArray(this.keyring[fieldName], 'base64'),
60
- ...Certificate.getCertificateFieldEncryptionDetails(fieldName, this.serialNumber),
74
+ ...Certificate.getCertificateFieldEncryptionDetails(
75
+ fieldName,
76
+ this.serialNumber
77
+ ),
61
78
  counterparty: this.subject
62
79
  })
63
80
 
64
- const fieldValue = new SymmetricKey(fieldRevelationKey).decrypt(Utils.toArray(this.fields[fieldName], 'base64'))
81
+ const fieldValue = new SymmetricKey(fieldRevelationKey).decrypt(
82
+ Utils.toArray(this.fields[fieldName], 'base64')
83
+ )
65
84
  decryptedFields[fieldName] = Utils.toUTF8(fieldValue as number[])
66
85
  }
67
86
  return decryptedFields
68
87
  } catch (error) {
69
- throw new Error(`Failed to decrypt selectively revealed certificate fields using keyring: ${error instanceof Error ? error.message : error}`)
88
+ throw new Error(
89
+ `Failed to decrypt selectively revealed certificate fields using keyring: ${String(error instanceof Error ? error.message : error)}`
90
+
91
+ )
70
92
  }
71
93
  }
72
94
  }