@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.
- package/dist/cjs/package.json +15 -3
- package/dist/cjs/src/auth/Peer.js +83 -57
- package/dist/cjs/src/auth/Peer.js.map +1 -1
- package/dist/cjs/src/auth/SessionManager.js +14 -9
- package/dist/cjs/src/auth/SessionManager.js.map +1 -1
- package/dist/cjs/src/auth/certificates/Certificate.js +16 -10
- package/dist/cjs/src/auth/certificates/Certificate.js.map +1 -1
- package/dist/cjs/src/auth/certificates/MasterCertificate.js +25 -23
- package/dist/cjs/src/auth/certificates/MasterCertificate.js.map +1 -1
- package/dist/cjs/src/auth/certificates/VerifiableCertificate.js +2 -2
- package/dist/cjs/src/auth/certificates/VerifiableCertificate.js.map +1 -1
- package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js +62 -46
- package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
- package/dist/cjs/src/auth/clients/AuthFetch.js +1 -0
- package/dist/cjs/src/auth/clients/AuthFetch.js.map +1 -1
- package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js +70 -43
- package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
- package/dist/cjs/src/auth/utils/createNonce.js +2 -1
- package/dist/cjs/src/auth/utils/createNonce.js.map +1 -1
- package/dist/cjs/src/auth/utils/getVerifiableCertificates.js.map +1 -1
- package/dist/cjs/src/auth/utils/validateCertificates.js +5 -2
- package/dist/cjs/src/auth/utils/validateCertificates.js.map +1 -1
- package/dist/cjs/src/auth/utils/verifyNonce.js +2 -1
- package/dist/cjs/src/auth/utils/verifyNonce.js.map +1 -1
- package/dist/cjs/src/compat/BSM.js +7 -17
- package/dist/cjs/src/compat/BSM.js.map +1 -1
- package/dist/cjs/src/compat/ECIES.js +172 -133
- package/dist/cjs/src/compat/ECIES.js.map +1 -1
- package/dist/cjs/src/compat/HD.js +63 -73
- package/dist/cjs/src/compat/HD.js.map +1 -1
- package/dist/cjs/src/compat/Mnemonic.js +102 -106
- package/dist/cjs/src/compat/Mnemonic.js.map +1 -1
- package/dist/cjs/src/compat/Utxo.js +2 -2
- package/dist/cjs/src/compat/Utxo.js.map +1 -1
- package/dist/cjs/src/compat/index.js +7 -17
- package/dist/cjs/src/compat/index.js.map +1 -1
- package/dist/cjs/src/messages/EncryptedMessage.js +3 -1
- package/dist/cjs/src/messages/EncryptedMessage.js.map +1 -1
- package/dist/cjs/src/messages/SignedMessage.js +1 -0
- package/dist/cjs/src/messages/SignedMessage.js.map +1 -1
- package/dist/cjs/src/messages/index.js +7 -17
- package/dist/cjs/src/messages/index.js.map +1 -1
- package/dist/cjs/src/overlay-tools/LookupResolver.js +54 -35
- package/dist/cjs/src/overlay-tools/LookupResolver.js.map +1 -1
- package/dist/cjs/src/overlay-tools/OverlayAdminTokenTemplate.js +32 -20
- package/dist/cjs/src/overlay-tools/OverlayAdminTokenTemplate.js.map +1 -1
- package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js +40 -28
- package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
- package/dist/cjs/src/primitives/AESGCM.js +6 -5
- package/dist/cjs/src/primitives/AESGCM.js.map +1 -1
- package/dist/cjs/src/primitives/BasePoint.js +1 -1
- package/dist/cjs/src/primitives/BasePoint.js.map +1 -1
- package/dist/cjs/src/primitives/BigNumber.js +50 -62
- package/dist/cjs/src/primitives/BigNumber.js.map +1 -1
- package/dist/cjs/src/primitives/Curve.js +46 -22
- package/dist/cjs/src/primitives/Curve.js.map +1 -1
- package/dist/cjs/src/primitives/DRBG.js +2 -8
- package/dist/cjs/src/primitives/DRBG.js.map +1 -1
- package/dist/cjs/src/primitives/ECDSA.js +51 -35
- package/dist/cjs/src/primitives/ECDSA.js.map +1 -1
- package/dist/cjs/src/primitives/Hash.js +191 -216
- package/dist/cjs/src/primitives/Hash.js.map +1 -1
- package/dist/cjs/src/primitives/JacobianPoint.js +19 -5
- package/dist/cjs/src/primitives/JacobianPoint.js.map +1 -1
- package/dist/cjs/src/primitives/K256.js.map +1 -1
- package/dist/cjs/src/primitives/Mersenne.js.map +1 -1
- package/dist/cjs/src/primitives/MontgomoryMethod.js.map +1 -1
- package/dist/cjs/src/primitives/Point.js +117 -88
- package/dist/cjs/src/primitives/Point.js.map +1 -1
- package/dist/cjs/src/primitives/Polynomial.js +4 -2
- package/dist/cjs/src/primitives/Polynomial.js.map +1 -1
- package/dist/cjs/src/primitives/PrivateKey.js +32 -33
- package/dist/cjs/src/primitives/PrivateKey.js.map +1 -1
- package/dist/cjs/src/primitives/PublicKey.js.map +1 -1
- package/dist/cjs/src/primitives/Random.js +6 -5
- package/dist/cjs/src/primitives/Random.js.map +1 -1
- package/dist/cjs/src/primitives/ReductionContext.js +1 -1
- package/dist/cjs/src/primitives/ReductionContext.js.map +1 -1
- package/dist/cjs/src/primitives/Schnorr.js +21 -15
- package/dist/cjs/src/primitives/Schnorr.js.map +1 -1
- package/dist/cjs/src/primitives/Signature.js +8 -7
- package/dist/cjs/src/primitives/Signature.js.map +1 -1
- package/dist/cjs/src/primitives/SymmetricKey.js +13 -13
- package/dist/cjs/src/primitives/SymmetricKey.js.map +1 -1
- package/dist/cjs/src/primitives/TransactionSignature.js +31 -29
- package/dist/cjs/src/primitives/TransactionSignature.js.map +1 -1
- package/dist/cjs/src/primitives/index.js +7 -17
- package/dist/cjs/src/primitives/index.js.map +1 -1
- package/dist/cjs/src/primitives/utils.js +79 -68
- package/dist/cjs/src/primitives/utils.js.map +1 -1
- package/dist/cjs/src/script/OP.js +3 -3
- package/dist/cjs/src/script/OP.js.map +1 -1
- package/dist/cjs/src/script/Script.js +12 -10
- package/dist/cjs/src/script/Script.js.map +1 -1
- package/dist/cjs/src/script/Spend.js +47 -49
- package/dist/cjs/src/script/Spend.js.map +1 -1
- package/dist/cjs/src/script/templates/P2PKH.js +24 -12
- package/dist/cjs/src/script/templates/P2PKH.js.map +1 -1
- package/dist/cjs/src/script/templates/PushDrop.js +28 -23
- package/dist/cjs/src/script/templates/PushDrop.js.map +1 -1
- package/dist/cjs/src/script/templates/RPuzzle.js +10 -6
- package/dist/cjs/src/script/templates/RPuzzle.js.map +1 -1
- package/dist/cjs/src/totp/totp.js +2 -1
- package/dist/cjs/src/totp/totp.js.map +1 -1
- package/dist/cjs/src/transaction/Beef.js +177 -154
- package/dist/cjs/src/transaction/Beef.js.map +1 -1
- package/dist/cjs/src/transaction/BeefParty.js +24 -24
- package/dist/cjs/src/transaction/BeefParty.js.map +1 -1
- package/dist/cjs/src/transaction/BeefTx.js +26 -18
- package/dist/cjs/src/transaction/BeefTx.js.map +1 -1
- package/dist/cjs/src/transaction/Broadcaster.js +3 -2
- package/dist/cjs/src/transaction/Broadcaster.js.map +1 -1
- package/dist/cjs/src/transaction/MerklePath.js +64 -37
- package/dist/cjs/src/transaction/MerklePath.js.map +1 -1
- package/dist/cjs/src/transaction/Transaction.js +111 -137
- package/dist/cjs/src/transaction/Transaction.js.map +1 -1
- package/dist/cjs/src/transaction/broadcasters/ARC.js +25 -16
- package/dist/cjs/src/transaction/broadcasters/ARC.js.map +1 -1
- package/dist/cjs/src/transaction/broadcasters/DefaultBroadcaster.js +2 -1
- package/dist/cjs/src/transaction/broadcasters/DefaultBroadcaster.js.map +1 -1
- package/dist/cjs/src/transaction/broadcasters/WhatsOnChainBroadcaster.js.map +1 -1
- package/dist/cjs/src/transaction/chaintrackers/DefaultChainTracker.js +2 -1
- package/dist/cjs/src/transaction/chaintrackers/DefaultChainTracker.js.map +1 -1
- package/dist/cjs/src/transaction/chaintrackers/WhatsOnChain.js +3 -3
- package/dist/cjs/src/transaction/chaintrackers/WhatsOnChain.js.map +1 -1
- package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
- package/dist/cjs/src/transaction/http/DefaultHttpClient.js +5 -3
- package/dist/cjs/src/transaction/http/DefaultHttpClient.js.map +1 -1
- package/dist/cjs/src/transaction/http/FetchHttpClient.js +5 -2
- package/dist/cjs/src/transaction/http/FetchHttpClient.js.map +1 -1
- package/dist/cjs/src/transaction/http/NodejsHttpClient.js +5 -3
- package/dist/cjs/src/transaction/http/NodejsHttpClient.js.map +1 -1
- package/dist/cjs/src/transaction/http/index.js.map +1 -1
- package/dist/cjs/src/transaction/index.js.map +1 -1
- package/dist/cjs/src/wallet/CachedKeyDeriver.js +91 -66
- package/dist/cjs/src/wallet/CachedKeyDeriver.js.map +1 -1
- package/dist/cjs/src/wallet/KeyDeriver.js +61 -52
- package/dist/cjs/src/wallet/KeyDeriver.js.map +1 -1
- package/dist/cjs/src/wallet/ProtoWallet.js +79 -29
- package/dist/cjs/src/wallet/ProtoWallet.js.map +1 -1
- package/dist/cjs/src/wallet/WalletClient.js +7 -2
- package/dist/cjs/src/wallet/WalletClient.js.map +1 -1
- package/dist/cjs/src/wallet/WalletError.js +2 -2
- package/dist/cjs/src/wallet/WalletError.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js +4 -3
- package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/HTTPWalletWire.js +2 -2
- package/dist/cjs/src/wallet/substrates/HTTPWalletWire.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js +1239 -1261
- package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js +102 -43
- package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/XDM.js +8 -3
- package/dist/cjs/src/wallet/substrates/XDM.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/window.CWI.js +28 -28
- package/dist/cjs/src/wallet/substrates/window.CWI.js.map +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/mod.js +15 -15
- package/dist/esm/src/auth/Peer.js +75 -54
- package/dist/esm/src/auth/Peer.js.map +1 -1
- package/dist/esm/src/auth/SessionManager.js +14 -9
- package/dist/esm/src/auth/SessionManager.js.map +1 -1
- package/dist/esm/src/auth/certificates/Certificate.js +15 -11
- package/dist/esm/src/auth/certificates/Certificate.js.map +1 -1
- package/dist/esm/src/auth/certificates/MasterCertificate.js +25 -23
- package/dist/esm/src/auth/certificates/MasterCertificate.js.map +1 -1
- package/dist/esm/src/auth/certificates/VerifiableCertificate.js +2 -2
- package/dist/esm/src/auth/certificates/VerifiableCertificate.js.map +1 -1
- package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js +64 -47
- package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
- package/dist/esm/src/auth/clients/AuthFetch.js +1 -0
- package/dist/esm/src/auth/clients/AuthFetch.js.map +1 -1
- package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js +69 -43
- package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
- package/dist/esm/src/auth/utils/createNonce.js.map +1 -1
- package/dist/esm/src/auth/utils/getVerifiableCertificates.js +1 -1
- package/dist/esm/src/auth/utils/getVerifiableCertificates.js.map +1 -1
- package/dist/esm/src/auth/utils/validateCertificates.js +6 -3
- package/dist/esm/src/auth/utils/validateCertificates.js.map +1 -1
- package/dist/esm/src/auth/utils/verifyNonce.js.map +1 -1
- package/dist/esm/src/compat/BSM.js.map +1 -1
- package/dist/esm/src/compat/ECIES.js +165 -116
- package/dist/esm/src/compat/ECIES.js.map +1 -1
- package/dist/esm/src/compat/HD.js +56 -56
- package/dist/esm/src/compat/HD.js.map +1 -1
- package/dist/esm/src/compat/Mnemonic.js +95 -89
- package/dist/esm/src/compat/Mnemonic.js.map +1 -1
- package/dist/esm/src/compat/Utxo.js +1 -1
- package/dist/esm/src/compat/Utxo.js.map +1 -1
- package/dist/esm/src/messages/EncryptedMessage.js +3 -1
- package/dist/esm/src/messages/EncryptedMessage.js.map +1 -1
- package/dist/esm/src/messages/SignedMessage.js +1 -0
- package/dist/esm/src/messages/SignedMessage.js.map +1 -1
- package/dist/esm/src/overlay-tools/LookupResolver.js +53 -35
- package/dist/esm/src/overlay-tools/LookupResolver.js.map +1 -1
- package/dist/esm/src/overlay-tools/OverlayAdminTokenTemplate.js +32 -20
- package/dist/esm/src/overlay-tools/OverlayAdminTokenTemplate.js.map +1 -1
- package/dist/esm/src/overlay-tools/SHIPBroadcaster.js +40 -28
- package/dist/esm/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
- package/dist/esm/src/primitives/AESGCM.js +1 -0
- package/dist/esm/src/primitives/AESGCM.js.map +1 -1
- package/dist/esm/src/primitives/BasePoint.js +1 -1
- package/dist/esm/src/primitives/BasePoint.js.map +1 -1
- package/dist/esm/src/primitives/BigNumber.js +50 -62
- package/dist/esm/src/primitives/BigNumber.js.map +1 -1
- package/dist/esm/src/primitives/Curve.js +45 -22
- package/dist/esm/src/primitives/Curve.js.map +1 -1
- package/dist/esm/src/primitives/DRBG.js +2 -8
- package/dist/esm/src/primitives/DRBG.js.map +1 -1
- package/dist/esm/src/primitives/ECDSA.js +50 -35
- package/dist/esm/src/primitives/ECDSA.js.map +1 -1
- package/dist/esm/src/primitives/Hash.js +188 -213
- package/dist/esm/src/primitives/Hash.js.map +1 -1
- package/dist/esm/src/primitives/JacobianPoint.js +18 -5
- package/dist/esm/src/primitives/JacobianPoint.js.map +1 -1
- package/dist/esm/src/primitives/K256.js.map +1 -1
- package/dist/esm/src/primitives/Mersenne.js.map +1 -1
- package/dist/esm/src/primitives/MontgomoryMethod.js.map +1 -1
- package/dist/esm/src/primitives/Point.js +107 -88
- package/dist/esm/src/primitives/Point.js.map +1 -1
- package/dist/esm/src/primitives/Polynomial.js +4 -2
- package/dist/esm/src/primitives/Polynomial.js.map +1 -1
- package/dist/esm/src/primitives/PrivateKey.js +25 -16
- package/dist/esm/src/primitives/PrivateKey.js.map +1 -1
- package/dist/esm/src/primitives/PublicKey.js.map +1 -1
- package/dist/esm/src/primitives/Random.js +7 -6
- package/dist/esm/src/primitives/Random.js.map +1 -1
- package/dist/esm/src/primitives/ReductionContext.js +1 -1
- package/dist/esm/src/primitives/ReductionContext.js.map +1 -1
- package/dist/esm/src/primitives/Schnorr.js +21 -15
- package/dist/esm/src/primitives/Schnorr.js.map +1 -1
- package/dist/esm/src/primitives/Signature.js +8 -7
- package/dist/esm/src/primitives/Signature.js.map +1 -1
- package/dist/esm/src/primitives/SymmetricKey.js +13 -13
- package/dist/esm/src/primitives/SymmetricKey.js.map +1 -1
- package/dist/esm/src/primitives/TransactionSignature.js +22 -12
- package/dist/esm/src/primitives/TransactionSignature.js.map +1 -1
- package/dist/esm/src/primitives/utils.js +76 -66
- package/dist/esm/src/primitives/utils.js.map +1 -1
- package/dist/esm/src/script/OP.js +3 -3
- package/dist/esm/src/script/OP.js.map +1 -1
- package/dist/esm/src/script/Script.js +12 -10
- package/dist/esm/src/script/Script.js.map +1 -1
- package/dist/esm/src/script/Spend.js +39 -32
- package/dist/esm/src/script/Spend.js.map +1 -1
- package/dist/esm/src/script/templates/P2PKH.js +26 -11
- package/dist/esm/src/script/templates/P2PKH.js.map +1 -1
- package/dist/esm/src/script/templates/PushDrop.js +29 -22
- package/dist/esm/src/script/templates/PushDrop.js.map +1 -1
- package/dist/esm/src/script/templates/RPuzzle.js +11 -6
- package/dist/esm/src/script/templates/RPuzzle.js.map +1 -1
- package/dist/esm/src/totp/totp.js +2 -1
- package/dist/esm/src/totp/totp.js.map +1 -1
- package/dist/esm/src/transaction/Beef.js +176 -154
- package/dist/esm/src/transaction/Beef.js.map +1 -1
- package/dist/esm/src/transaction/BeefParty.js +24 -24
- package/dist/esm/src/transaction/BeefParty.js.map +1 -1
- package/dist/esm/src/transaction/BeefTx.js +26 -18
- package/dist/esm/src/transaction/BeefTx.js.map +1 -1
- package/dist/esm/src/transaction/Broadcaster.js.map +1 -1
- package/dist/esm/src/transaction/MerklePath.js +61 -36
- package/dist/esm/src/transaction/MerklePath.js.map +1 -1
- package/dist/esm/src/transaction/Transaction.js +105 -138
- package/dist/esm/src/transaction/Transaction.js.map +1 -1
- package/dist/esm/src/transaction/broadcasters/ARC.js +25 -16
- package/dist/esm/src/transaction/broadcasters/ARC.js.map +1 -1
- package/dist/esm/src/transaction/broadcasters/DefaultBroadcaster.js.map +1 -1
- package/dist/esm/src/transaction/broadcasters/WhatsOnChainBroadcaster.js.map +1 -1
- package/dist/esm/src/transaction/chaintrackers/WhatsOnChain.js +3 -3
- package/dist/esm/src/transaction/chaintrackers/WhatsOnChain.js.map +1 -1
- package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
- package/dist/esm/src/transaction/http/DefaultHttpClient.js +3 -2
- package/dist/esm/src/transaction/http/DefaultHttpClient.js.map +1 -1
- package/dist/esm/src/transaction/http/FetchHttpClient.js +4 -2
- package/dist/esm/src/transaction/http/FetchHttpClient.js.map +1 -1
- package/dist/esm/src/transaction/http/NodejsHttpClient.js +5 -3
- package/dist/esm/src/transaction/http/NodejsHttpClient.js.map +1 -1
- package/dist/esm/src/transaction/http/index.js.map +1 -1
- package/dist/esm/src/transaction/index.js.map +1 -1
- package/dist/esm/src/wallet/CachedKeyDeriver.js +91 -66
- package/dist/esm/src/wallet/CachedKeyDeriver.js.map +1 -1
- package/dist/esm/src/wallet/KeyDeriver.js +60 -52
- package/dist/esm/src/wallet/KeyDeriver.js.map +1 -1
- package/dist/esm/src/wallet/ProtoWallet.js +75 -29
- package/dist/esm/src/wallet/ProtoWallet.js.map +1 -1
- package/dist/esm/src/wallet/WalletClient.js +7 -2
- package/dist/esm/src/wallet/WalletClient.js.map +1 -1
- package/dist/esm/src/wallet/WalletError.js +2 -2
- package/dist/esm/src/wallet/WalletError.js.map +1 -1
- package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js +4 -4
- package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
- package/dist/esm/src/wallet/substrates/HTTPWalletWire.js +2 -2
- package/dist/esm/src/wallet/substrates/HTTPWalletWire.js.map +1 -1
- package/dist/esm/src/wallet/substrates/WalletWireProcessor.js +1239 -1261
- package/dist/esm/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
- package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js +95 -43
- package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
- package/dist/esm/src/wallet/substrates/XDM.js +8 -3
- package/dist/esm/src/wallet/substrates/XDM.js.map +1 -1
- package/dist/esm/src/wallet/substrates/window.CWI.js +28 -28
- package/dist/esm/src/wallet/substrates/window.CWI.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/types/mod.d.ts +15 -15
- package/dist/types/src/auth/Peer.d.ts +10 -10
- package/dist/types/src/auth/Peer.d.ts.map +1 -1
- package/dist/types/src/auth/SessionManager.d.ts +4 -4
- package/dist/types/src/auth/SessionManager.d.ts.map +1 -1
- package/dist/types/src/auth/certificates/Certificate.d.ts +6 -6
- package/dist/types/src/auth/certificates/Certificate.d.ts.map +1 -1
- package/dist/types/src/auth/certificates/MasterCertificate.d.ts +5 -5
- package/dist/types/src/auth/certificates/MasterCertificate.d.ts.map +1 -1
- package/dist/types/src/auth/certificates/VerifiableCertificate.d.ts.map +1 -1
- package/dist/types/src/auth/certificates/__tests/CompletedProtoWallet.d.ts +23 -22
- package/dist/types/src/auth/certificates/__tests/CompletedProtoWallet.d.ts.map +1 -1
- package/dist/types/src/auth/clients/AuthFetch.d.ts.map +1 -1
- package/dist/types/src/auth/transports/SimplifiedFetchTransport.d.ts +1 -1
- package/dist/types/src/auth/transports/SimplifiedFetchTransport.d.ts.map +1 -1
- package/dist/types/src/auth/utils/createNonce.d.ts.map +1 -1
- package/dist/types/src/auth/utils/getVerifiableCertificates.d.ts +3 -3
- package/dist/types/src/auth/utils/getVerifiableCertificates.d.ts.map +1 -1
- package/dist/types/src/auth/utils/validateCertificates.d.ts +2 -2
- package/dist/types/src/auth/utils/validateCertificates.d.ts.map +1 -1
- package/dist/types/src/auth/utils/verifyNonce.d.ts +1 -1
- package/dist/types/src/auth/utils/verifyNonce.d.ts.map +1 -1
- package/dist/types/src/compat/BSM.d.ts +1 -1
- package/dist/types/src/compat/BSM.d.ts.map +1 -1
- package/dist/types/src/compat/ECIES.d.ts +36 -36
- package/dist/types/src/compat/ECIES.d.ts.map +1 -1
- package/dist/types/src/compat/HD.d.ts +51 -51
- package/dist/types/src/compat/HD.d.ts.map +1 -1
- package/dist/types/src/compat/Mnemonic.d.ts +79 -79
- package/dist/types/src/compat/Mnemonic.d.ts.map +1 -1
- package/dist/types/src/compat/Utxo.d.ts.map +1 -1
- package/dist/types/src/messages/EncryptedMessage.d.ts.map +1 -1
- package/dist/types/src/messages/SignedMessage.d.ts.map +1 -1
- package/dist/types/src/overlay-tools/LookupResolver.d.ts +9 -9
- package/dist/types/src/overlay-tools/LookupResolver.d.ts.map +1 -1
- package/dist/types/src/overlay-tools/OverlayAdminTokenTemplate.d.ts +17 -17
- package/dist/types/src/overlay-tools/OverlayAdminTokenTemplate.d.ts.map +1 -1
- package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts +14 -14
- package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts.map +1 -1
- package/dist/types/src/primitives/AESGCM.d.ts.map +1 -1
- package/dist/types/src/primitives/BasePoint.d.ts +8 -8
- package/dist/types/src/primitives/BasePoint.d.ts.map +1 -1
- package/dist/types/src/primitives/BigNumber.d.ts.map +1 -1
- package/dist/types/src/primitives/Curve.d.ts +14 -7
- package/dist/types/src/primitives/Curve.d.ts.map +1 -1
- package/dist/types/src/primitives/DRBG.d.ts.map +1 -1
- package/dist/types/src/primitives/ECDSA.d.ts +1 -1
- package/dist/types/src/primitives/ECDSA.d.ts.map +1 -1
- package/dist/types/src/primitives/Hash.d.ts +11 -11
- package/dist/types/src/primitives/Hash.d.ts.map +1 -1
- package/dist/types/src/primitives/JacobianPoint.d.ts.map +1 -1
- package/dist/types/src/primitives/Point.d.ts +14 -10
- package/dist/types/src/primitives/Point.d.ts.map +1 -1
- package/dist/types/src/primitives/Polynomial.d.ts.map +1 -1
- package/dist/types/src/primitives/PrivateKey.d.ts +2 -2
- package/dist/types/src/primitives/PrivateKey.d.ts.map +1 -1
- package/dist/types/src/primitives/PublicKey.d.ts.map +1 -1
- package/dist/types/src/primitives/Random.d.ts.map +1 -1
- package/dist/types/src/primitives/Schnorr.d.ts +14 -14
- package/dist/types/src/primitives/Schnorr.d.ts.map +1 -1
- package/dist/types/src/primitives/Signature.d.ts +1 -1
- package/dist/types/src/primitives/Signature.d.ts.map +1 -1
- package/dist/types/src/primitives/SymmetricKey.d.ts +13 -13
- package/dist/types/src/primitives/SymmetricKey.d.ts.map +1 -1
- package/dist/types/src/primitives/TransactionSignature.d.ts +4 -4
- package/dist/types/src/primitives/TransactionSignature.d.ts.map +1 -1
- package/dist/types/src/primitives/utils.d.ts +3 -6
- package/dist/types/src/primitives/utils.d.ts.map +1 -1
- package/dist/types/src/script/Script.d.ts +3 -3
- package/dist/types/src/script/Script.d.ts.map +1 -1
- package/dist/types/src/script/ScriptTemplate.d.ts +2 -2
- package/dist/types/src/script/ScriptTemplate.d.ts.map +1 -1
- package/dist/types/src/script/Spend.d.ts.map +1 -1
- package/dist/types/src/script/templates/P2PKH.d.ts.map +1 -1
- package/dist/types/src/script/templates/PushDrop.d.ts +1 -2
- package/dist/types/src/script/templates/PushDrop.d.ts.map +1 -1
- package/dist/types/src/script/templates/RPuzzle.d.ts.map +1 -1
- package/dist/types/src/totp/totp.d.ts.map +1 -1
- package/dist/types/src/transaction/Beef.d.ts +96 -96
- package/dist/types/src/transaction/Beef.d.ts.map +1 -1
- package/dist/types/src/transaction/BeefParty.d.ts +22 -22
- package/dist/types/src/transaction/BeefParty.d.ts.map +1 -1
- package/dist/types/src/transaction/BeefTx.d.ts +5 -5
- package/dist/types/src/transaction/BeefTx.d.ts.map +1 -1
- package/dist/types/src/transaction/Broadcaster.d.ts.map +1 -1
- package/dist/types/src/transaction/ChainTracker.d.ts +2 -2
- package/dist/types/src/transaction/FeeModel.d.ts.map +1 -1
- package/dist/types/src/transaction/MerklePath.d.ts.map +1 -1
- package/dist/types/src/transaction/Transaction.d.ts +4 -12
- package/dist/types/src/transaction/Transaction.d.ts.map +1 -1
- package/dist/types/src/transaction/TransactionOutput.d.ts.map +1 -1
- package/dist/types/src/transaction/broadcasters/ARC.d.ts +1 -1
- package/dist/types/src/transaction/broadcasters/ARC.d.ts.map +1 -1
- package/dist/types/src/transaction/broadcasters/DefaultBroadcaster.d.ts.map +1 -1
- package/dist/types/src/transaction/broadcasters/WhatsOnChainBroadcaster.d.ts.map +1 -1
- package/dist/types/src/transaction/chaintrackers/DefaultChainTracker.d.ts.map +1 -1
- package/dist/types/src/transaction/chaintrackers/WhatsOnChain.d.ts.map +1 -1
- package/dist/types/src/transaction/fee-models/SatoshisPerKilobyte.d.ts.map +1 -1
- package/dist/types/src/transaction/http/DefaultHttpClient.d.ts +1 -1
- package/dist/types/src/transaction/http/DefaultHttpClient.d.ts.map +1 -1
- package/dist/types/src/transaction/http/FetchHttpClient.d.ts +5 -5
- package/dist/types/src/transaction/http/FetchHttpClient.d.ts.map +1 -1
- package/dist/types/src/transaction/http/HttpClient.d.ts +4 -4
- package/dist/types/src/transaction/http/HttpClient.d.ts.map +1 -1
- package/dist/types/src/transaction/http/NodejsHttpClient.d.ts +3 -3
- package/dist/types/src/transaction/http/NodejsHttpClient.d.ts.map +1 -1
- package/dist/types/src/transaction/http/index.d.ts.map +1 -1
- package/dist/types/src/transaction/index.d.ts.map +1 -1
- package/dist/types/src/wallet/CachedKeyDeriver.d.ts +58 -58
- package/dist/types/src/wallet/CachedKeyDeriver.d.ts.map +1 -1
- package/dist/types/src/wallet/KeyDeriver.d.ts +78 -78
- package/dist/types/src/wallet/KeyDeriver.d.ts.map +1 -1
- package/dist/types/src/wallet/ProtoWallet.d.ts +10 -10
- package/dist/types/src/wallet/ProtoWallet.d.ts.map +1 -1
- package/dist/types/src/wallet/Wallet.interfaces.d.ts +151 -152
- package/dist/types/src/wallet/Wallet.interfaces.d.ts.map +1 -1
- package/dist/types/src/wallet/WalletClient.d.ts +5 -5
- package/dist/types/src/wallet/WalletClient.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts +6 -6
- package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/HTTPWalletWire.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/WalletWireProcessor.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/WalletWireTransceiver.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/XDM.d.ts +1 -1
- package/dist/types/src/wallet/substrates/XDM.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/window.CWI.d.ts +6 -6
- package/dist/types/src/wallet/substrates/window.CWI.d.ts.map +1 -1
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/dist/umd/bundle.js +1 -1
- package/docs/auth.md +92 -82
- package/docs/compat.md +24 -24
- package/docs/messages.md +7 -5
- package/docs/overlay-tools.md +21 -21
- package/docs/primitives.md +336 -315
- package/docs/script.md +35 -35
- package/docs/swagger/dist/swagger-initializer.js +7 -7
- package/docs/swagger/dist/swagger-ui-bundle.js +1 -1
- package/docs/swagger/dist/swagger-ui-es-bundle-core.js +2 -2
- package/docs/swagger/dist/swagger-ui-es-bundle.js +1 -1
- package/docs/swagger/dist/swagger-ui-standalone-preset.js +1 -1
- package/docs/swagger/dist/swagger-ui.js +2 -2
- package/docs/totp.md +5 -5
- package/docs/transaction.md +103 -105
- package/docs/wallet-substrates.md +17 -17
- package/docs/wallet.md +202 -204
- package/mod.ts +15 -15
- package/package.json +15 -3
- package/src/auth/Peer.ts +271 -121
- package/src/auth/SessionManager.ts +17 -10
- package/src/auth/__tests/Peer.test.ts +361 -179
- package/src/auth/__tests/SessionManager.test.ts +67 -19
- package/src/auth/__tests/build.test.ts +11 -0
- package/src/auth/certificates/Certificate.ts +27 -14
- package/src/auth/certificates/MasterCertificate.ts +106 -62
- package/src/auth/certificates/VerifiableCertificate.ts +30 -8
- package/src/auth/certificates/__tests/Certificate.test.ts +32 -17
- package/src/auth/certificates/__tests/CompletedProtoWallet.ts +171 -68
- package/src/auth/certificates/__tests/MasterCertificate.test.ts +63 -47
- package/src/auth/certificates/__tests/VerifiableCertificate.test.ts +42 -31
- package/src/auth/certificates/index.ts +1 -1
- package/src/auth/clients/AuthFetch.ts +1 -0
- package/src/auth/clients/index.ts +1 -1
- package/src/auth/transports/SimplifiedFetchTransport.ts +145 -72
- package/src/auth/transports/index.ts +1 -1
- package/src/auth/utils/__tests/cryptononce.test.ts +52 -23
- package/src/auth/utils/__tests/getVerifiableCertificates.test.ts +56 -30
- package/src/auth/utils/__tests/validateCertificates.test.ts +53 -31
- package/src/auth/utils/createNonce.ts +11 -3
- package/src/auth/utils/getVerifiableCertificates.ts +12 -7
- package/src/auth/utils/validateCertificates.ts +57 -39
- package/src/auth/utils/verifyNonce.ts +6 -2
- package/src/compat/BSM.ts +10 -2
- package/src/compat/ECIES.ts +265 -141
- package/src/compat/HD.ts +81 -63
- package/src/compat/Mnemonic.ts +104 -91
- package/src/compat/Utxo.ts +8 -5
- package/src/compat/__tests/BSM.test.ts +42 -16
- package/src/compat/__tests/ECIES.test.ts +117 -52
- package/src/compat/__tests/HD.test.ts +55 -42
- package/src/compat/__tests/Mnemonic.test.ts +11 -12
- package/src/compat/__tests/Mnemonic.vectors.ts +110 -55
- package/src/messages/EncryptedMessage.ts +6 -2
- package/src/messages/SignedMessage.ts +14 -8
- package/src/messages/__tests/EncryptedMessage.test.ts +23 -24
- package/src/messages/__tests/SignedMessage.test.ts +17 -11
- package/src/overlay-tools/LookupResolver.ts +108 -56
- package/src/overlay-tools/OverlayAdminTokenTemplate.ts +52 -23
- package/src/overlay-tools/SHIPBroadcaster.ts +135 -59
- package/src/overlay-tools/__tests/LookupResolver.test.ts +723 -323
- package/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.ts +50 -22
- package/src/overlay-tools/__tests/SHIPBroadcaster.test.ts +607 -290
- package/src/primitives/AESGCM.ts +2 -0
- package/src/primitives/BasePoint.ts +4 -4
- package/src/primitives/BigNumber.ts +99 -90
- package/src/primitives/Curve.ts +117 -46
- package/src/primitives/DRBG.ts +9 -11
- package/src/primitives/ECDSA.ts +109 -63
- package/src/primitives/Hash.ts +492 -321
- package/src/primitives/JacobianPoint.ts +67 -19
- package/src/primitives/Point.ts +254 -152
- package/src/primitives/Polynomial.ts +8 -3
- package/src/primitives/PrivateKey.ts +41 -17
- package/src/primitives/PublicKey.ts +13 -3
- package/src/primitives/Random.ts +14 -8
- package/src/primitives/ReductionContext.ts +1 -1
- package/src/primitives/Schnorr.ts +40 -18
- package/src/primitives/Signature.ts +26 -16
- package/src/primitives/SymmetricKey.ts +14 -14
- package/src/primitives/TransactionSignature.ts +41 -17
- package/src/primitives/__tests/AESGCM.test.ts +457 -151
- package/src/primitives/__tests/BRC42.private.vectors.ts +30 -15
- package/src/primitives/__tests/BRC42.public.vectors.ts +30 -15
- package/src/primitives/__tests/BigNumber.arithmatic.test.ts +344 -125
- package/src/primitives/__tests/BigNumber.binary.test.ts +148 -67
- package/src/primitives/__tests/BigNumber.constructor.test.ts +65 -25
- package/src/primitives/__tests/BigNumber.dhGroup.test.ts +15 -11
- package/src/primitives/__tests/BigNumber.fixtures.ts +16 -8
- package/src/primitives/__tests/BigNumber.serializers.test.ts +41 -15
- package/src/primitives/__tests/BigNumber.utils.test.ts +132 -42
- package/src/primitives/__tests/Curve.unit.test.ts +75 -53
- package/src/primitives/__tests/DRBG.test.ts +1 -1
- package/src/primitives/__tests/DRBG.vectors.ts +45 -75
- package/src/primitives/__tests/ECDH.test.ts +15 -8
- package/src/primitives/__tests/ECDSA.test.ts +12 -6
- package/src/primitives/__tests/HMAC.test.ts +24 -18
- package/src/primitives/__tests/Hash.test.ts +57 -46
- package/src/primitives/__tests/PBKDF2.vectors.ts +130 -117
- package/src/primitives/__tests/PrivateKey.split.test.ts +33 -11
- package/src/primitives/__tests/PrivateKey.test.ts +11 -10
- package/src/primitives/__tests/PublicKey.test.ts +64 -53
- package/src/primitives/__tests/Random.test.ts +1 -1
- package/src/primitives/__tests/Reader.test.ts +240 -219
- package/src/primitives/__tests/ReductionContext.test.ts +98 -61
- package/src/primitives/__tests/Schnorr.test.ts +249 -237
- package/src/primitives/__tests/SymmetricKey.test.ts +18 -15
- package/src/primitives/__tests/SymmetricKey.vectors.ts +16 -8
- package/src/primitives/__tests/Writer.test.ts +23 -13
- package/src/primitives/__tests/bug-31.test.ts +6 -10
- package/src/primitives/__tests/utils.test.ts +70 -19
- package/src/primitives/utils.ts +103 -79
- package/src/script/Script.ts +18 -12
- package/src/script/ScriptTemplate.ts +3 -5
- package/src/script/Spend.ts +306 -108
- package/src/script/__tests/Script.test.ts +73 -55
- package/src/script/__tests/Spend.test.ts +208 -83
- package/src/script/__tests/SpendComplex.test.ts +19 -13
- package/src/script/__tests/script.invalid.vectors.ts +428 -1796
- package/src/script/__tests/script.valid.vectors.ts +728 -2764
- package/src/script/templates/P2PKH.ts +34 -12
- package/src/script/templates/PushDrop.ts +65 -31
- package/src/script/templates/RPuzzle.ts +29 -8
- package/src/script/templates/__tests/PushDrop.test.ts +146 -41
- package/src/totp/__tests/totp.test.ts +45 -44
- package/src/totp/totp.ts +3 -2
- package/src/transaction/Beef.ts +269 -174
- package/src/transaction/BeefParty.ts +41 -31
- package/src/transaction/BeefTx.ts +36 -26
- package/src/transaction/Broadcaster.ts +10 -6
- package/src/transaction/ChainTracker.ts +2 -2
- package/src/transaction/FeeModel.ts +0 -1
- package/src/transaction/MerklePath.ts +124 -59
- package/src/transaction/Transaction.ts +188 -187
- package/src/transaction/TransactionOutput.ts +0 -1
- package/src/transaction/__tests/Beef.test.ts +390 -287
- package/src/transaction/__tests/MerklePath.test.ts +59 -26
- package/src/transaction/__tests/Transaction.benchmarks.test.ts +231 -201
- package/src/transaction/__tests/Transaction.test.ts +758 -482
- package/src/transaction/__tests/bigtx.vectors.ts +2 -1
- package/src/transaction/__tests/bump.invalid.vectors.ts +24 -6
- package/src/transaction/__tests/bump.valid.vectors.ts +6 -2
- package/src/transaction/__tests/tx.invalid.vectors.ts +881 -185
- package/src/transaction/__tests/tx.valid.vectors.ts +1210 -257
- package/src/transaction/broadcasters/ARC.ts +69 -38
- package/src/transaction/broadcasters/DefaultBroadcaster.ts +9 -3
- package/src/transaction/broadcasters/WhatsOnChainBroadcaster.ts +20 -7
- package/src/transaction/broadcasters/__tests/ARC.test.ts +127 -59
- package/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.ts +27 -18
- package/src/transaction/chaintrackers/DefaultChainTracker.ts +1 -1
- package/src/transaction/chaintrackers/WhatsOnChain.ts +27 -11
- package/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.ts +59 -23
- package/src/transaction/fee-models/SatoshisPerKilobyte.ts +9 -5
- package/src/transaction/http/DefaultHttpClient.ts +5 -4
- package/src/transaction/http/FetchHttpClient.ts +18 -9
- package/src/transaction/http/HttpClient.ts +27 -22
- package/src/transaction/http/NodejsHttpClient.ts +23 -9
- package/src/transaction/http/index.ts +5 -1
- package/src/transaction/index.ts +5 -1
- package/src/wallet/CachedKeyDeriver.ts +151 -82
- package/src/wallet/KeyDeriver.ts +186 -105
- package/src/wallet/ProtoWallet.ts +121 -52
- package/src/wallet/Wallet.interfaces.ts +167 -156
- package/src/wallet/WalletClient.ts +314 -59
- package/src/wallet/WalletError.ts +2 -2
- package/src/wallet/__tests/CachedKeyDeriver.test.ts +86 -27
- package/src/wallet/__tests/KeyDeriver.test.ts +136 -33
- package/src/wallet/__tests/ProtoWallet.test.ts +190 -102
- package/src/wallet/substrates/HTTPWalletJSON.ts +250 -67
- package/src/wallet/substrates/HTTPWalletWire.ts +7 -3
- package/src/wallet/substrates/WalletWireCalls.ts +2 -2
- package/src/wallet/substrates/WalletWireProcessor.ts +1412 -1277
- package/src/wallet/substrates/WalletWireTransceiver.ts +713 -138
- package/src/wallet/substrates/XDM.ts +425 -36
- package/src/wallet/substrates/__tests/WalletWire.integration.test.ts +488 -225
- package/src/wallet/substrates/__tests/XDM.test.ts +232 -234
- 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
|
-
|
|
22
|
-
|
|
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 = {
|
|
27
|
-
|
|
28
|
-
|
|
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(
|
|
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
|
-
|
|
43
|
-
|
|
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
|
-
|
|
50
|
-
|
|
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(
|
|
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
|
-
|
|
65
|
-
|
|
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 = {
|
|
70
|
-
|
|
71
|
-
|
|
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
|
-
|
|
80
|
-
|
|
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
|
|
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(
|
|
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
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
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(
|
|
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 = (
|
|
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(
|
|
261
|
-
|
|
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(
|
|
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 (
|
|
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<
|
|
85
|
-
|
|
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(
|
|
89
|
-
|
|
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 } =
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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
|
-
|
|
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 (
|
|
137
|
-
throw new Error(
|
|
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 = (
|
|
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 } =
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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(
|
|
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
|
-
|
|
184
|
-
|
|
185
|
-
|
|
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
|
-
|
|
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 } =
|
|
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
|
|
200
|
-
const revocationOutpoint = await getRevocationOutpoint(
|
|
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
|
-
|
|
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 (
|
|
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] = (
|
|
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
|
|
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 (
|
|
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 } =
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
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(
|
|
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
|
|
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(
|
|
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(
|
|
52
|
-
|
|
53
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
}
|