@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
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { VerifiableCertificate } from '
|
|
2
|
-
import { PrivateKey,
|
|
3
|
-
import { CompletedProtoWallet } from '
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { ProtoWallet } from '../../../../dist/cjs/src/wallet/index.js'
|
|
1
|
+
import { VerifiableCertificate } from '../../../auth/certificates/VerifiableCertificate'
|
|
2
|
+
import { PrivateKey, Utils } from '../../../../mod'
|
|
3
|
+
import { CompletedProtoWallet } from '../../../auth/certificates/__tests/CompletedProtoWallet'
|
|
4
|
+
import { MasterCertificate } from '../../../auth/certificates/MasterCertificate'
|
|
5
|
+
import { ProtoWallet } from '../../../wallet/index'
|
|
7
6
|
|
|
8
7
|
describe('VerifiableCertificate', () => {
|
|
9
8
|
const subjectPrivateKey = PrivateKey.fromRandom()
|
|
@@ -18,7 +17,8 @@ describe('VerifiableCertificate', () => {
|
|
|
18
17
|
|
|
19
18
|
const sampleType = Utils.toBase64(new Array(32).fill(1))
|
|
20
19
|
const sampleSerialNumber = Utils.toBase64(new Array(32).fill(2))
|
|
21
|
-
const sampleRevocationOutpoint =
|
|
20
|
+
const sampleRevocationOutpoint =
|
|
21
|
+
'deadbeefdeadbeefdeadbeefdeadbeef00000000000000000000000000000000.1'
|
|
22
22
|
|
|
23
23
|
const plaintextFields = {
|
|
24
24
|
name: 'Alice',
|
|
@@ -30,11 +30,12 @@ describe('VerifiableCertificate', () => {
|
|
|
30
30
|
|
|
31
31
|
beforeEach(async () => {
|
|
32
32
|
// For each test, we'll build a fresh VerifiableCertificate with valid encryption
|
|
33
|
-
const { certificateFields, masterKeyring } =
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
const { certificateFields, masterKeyring } =
|
|
34
|
+
await MasterCertificate.createCertificateFields(
|
|
35
|
+
subjectWallet,
|
|
36
|
+
certifierIdentityKey,
|
|
37
|
+
plaintextFields
|
|
38
|
+
)
|
|
38
39
|
const keyringForVerifier = await MasterCertificate.createKeyringForVerifier(
|
|
39
40
|
subjectWallet,
|
|
40
41
|
certifierIdentityKey,
|
|
@@ -62,7 +63,9 @@ describe('VerifiableCertificate', () => {
|
|
|
62
63
|
expect(verifiableCert.serialNumber).toEqual(sampleSerialNumber)
|
|
63
64
|
expect(verifiableCert.subject).toEqual(subjectIdentityKey)
|
|
64
65
|
expect(verifiableCert.certifier).toEqual(certifierIdentityKey)
|
|
65
|
-
expect(verifiableCert.revocationOutpoint).toEqual(
|
|
66
|
+
expect(verifiableCert.revocationOutpoint).toEqual(
|
|
67
|
+
sampleRevocationOutpoint
|
|
68
|
+
)
|
|
66
69
|
expect(verifiableCert.fields).toBeDefined()
|
|
67
70
|
expect(verifiableCert.keyring).toBeDefined()
|
|
68
71
|
})
|
|
@@ -97,7 +100,9 @@ describe('VerifiableCertificate', () => {
|
|
|
97
100
|
verifiableCert.signature
|
|
98
101
|
)
|
|
99
102
|
|
|
100
|
-
await expect(
|
|
103
|
+
await expect(
|
|
104
|
+
emptyKeyringCert.decryptFields(verifierWallet)
|
|
105
|
+
).rejects.toThrow(
|
|
101
106
|
'A keyring is required to decrypt certificate fields for the verifier.'
|
|
102
107
|
)
|
|
103
108
|
})
|
|
@@ -105,26 +110,30 @@ describe('VerifiableCertificate', () => {
|
|
|
105
110
|
it('should fail if the encrypted field or its key is tampered', async () => {
|
|
106
111
|
// Tamper the keyring so it doesn't match the field encryption
|
|
107
112
|
verifiableCert.keyring.name = Utils.toBase64([9, 9, 9, 9])
|
|
108
|
-
await expect(
|
|
113
|
+
await expect(
|
|
114
|
+
verifiableCert.decryptFields(verifierWallet)
|
|
115
|
+
).rejects.toThrow(
|
|
109
116
|
/Failed to decrypt selectively revealed certificate fields using keyring/
|
|
110
117
|
)
|
|
111
118
|
})
|
|
112
119
|
|
|
113
120
|
it('should be able to decrypt fields using the anyone wallet', async () => {
|
|
114
|
-
const { certificateFields, masterKeyring } =
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
121
|
+
const { certificateFields, masterKeyring } =
|
|
122
|
+
await MasterCertificate.createCertificateFields(
|
|
123
|
+
subjectWallet,
|
|
124
|
+
certifierIdentityKey,
|
|
125
|
+
plaintextFields
|
|
126
|
+
)
|
|
127
|
+
const keyringForVerifier =
|
|
128
|
+
await MasterCertificate.createKeyringForVerifier(
|
|
129
|
+
subjectWallet,
|
|
130
|
+
certifierIdentityKey,
|
|
131
|
+
'anyone',
|
|
132
|
+
certificateFields,
|
|
133
|
+
Object.keys(certificateFields),
|
|
134
|
+
masterKeyring,
|
|
135
|
+
sampleSerialNumber
|
|
136
|
+
)
|
|
128
137
|
verifiableCert = new VerifiableCertificate(
|
|
129
138
|
sampleType,
|
|
130
139
|
sampleSerialNumber,
|
|
@@ -134,8 +143,10 @@ describe('VerifiableCertificate', () => {
|
|
|
134
143
|
certificateFields,
|
|
135
144
|
keyringForVerifier
|
|
136
145
|
)
|
|
137
|
-
const decrypted = await verifiableCert.decryptFields(
|
|
146
|
+
const decrypted = await verifiableCert.decryptFields(
|
|
147
|
+
new ProtoWallet('anyone')
|
|
148
|
+
)
|
|
138
149
|
expect(decrypted).toEqual(plaintextFields)
|
|
139
150
|
})
|
|
140
151
|
})
|
|
141
|
-
})
|
|
152
|
+
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './AuthFetch.js'
|
|
1
|
+
export * from './AuthFetch.js'
|
|
@@ -1,10 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
import { AuthMessage, RequestedCertificateSet, Transport } from '../types.js'
|
|
2
3
|
import { Utils } from '../../../mod.js'
|
|
3
4
|
|
|
5
|
+
// Define the expected shape of error responses
|
|
6
|
+
interface ErrorInfo {
|
|
7
|
+
status: string
|
|
8
|
+
description: string
|
|
9
|
+
code?: string
|
|
10
|
+
}
|
|
11
|
+
|
|
4
12
|
const SUCCESS_STATUS_CODES = [200, 402]
|
|
5
13
|
|
|
6
14
|
// Only bind window.fetch in the browser
|
|
7
|
-
const defaultFetch = typeof window !== 'undefined' ? fetch.bind(window) : fetch
|
|
15
|
+
const defaultFetch = typeof window !== 'undefined' ? fetch.bind(window) : fetch
|
|
8
16
|
|
|
9
17
|
/**
|
|
10
18
|
* Implements an HTTP-specific transport for handling Peer mutual authentication messages.
|
|
@@ -30,27 +38,32 @@ export class SimplifiedFetchTransport implements Transport {
|
|
|
30
38
|
* Handles both general and authenticated message types. For general messages,
|
|
31
39
|
* the payload is deserialized and sent as an HTTP request. For other message types,
|
|
32
40
|
* the message is sent as a POST request to the `/auth` endpoint.
|
|
33
|
-
*
|
|
41
|
+
*
|
|
34
42
|
* @param message - The AuthMessage to send.
|
|
35
43
|
* @returns A promise that resolves when the message is successfully sent.
|
|
36
|
-
*
|
|
44
|
+
*
|
|
37
45
|
* @throws Will throw an error if no listener has been registered via `onData`.
|
|
38
46
|
*/
|
|
39
47
|
async send(message: AuthMessage): Promise<void> {
|
|
40
|
-
if (
|
|
41
|
-
throw new Error(
|
|
48
|
+
if (this.onDataCallback == null) {
|
|
49
|
+
throw new Error(
|
|
50
|
+
'Listen before you start speaking. God gave you two ears and one mouth for a reason.'
|
|
51
|
+
)
|
|
42
52
|
}
|
|
43
53
|
|
|
44
54
|
if (message.messageType !== 'general') {
|
|
45
|
-
const response = await this.fetchClient(
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
55
|
+
const response = await this.fetchClient(
|
|
56
|
+
`${this.baseUrl}/.well-known/auth`,
|
|
57
|
+
{
|
|
58
|
+
method: 'POST',
|
|
59
|
+
headers: {
|
|
60
|
+
'Content-Type': 'application/json'
|
|
61
|
+
},
|
|
62
|
+
body: JSON.stringify(message)
|
|
63
|
+
}
|
|
64
|
+
)
|
|
52
65
|
// Handle the response if data is received and callback is set
|
|
53
|
-
if (response.ok && this.onDataCallback) {
|
|
66
|
+
if (response.ok && typeof this.onDataCallback === 'function') { // ✅ Explicitly check if it's a function
|
|
54
67
|
const responseMessage = await response.json()
|
|
55
68
|
if (responseMessage?.status !== 'certificate received') {
|
|
56
69
|
this.onDataCallback(responseMessage as AuthMessage)
|
|
@@ -61,49 +74,77 @@ export class SimplifiedFetchTransport implements Transport {
|
|
|
61
74
|
}
|
|
62
75
|
} else {
|
|
63
76
|
// Parse message payload
|
|
64
|
-
const httpRequest = this.deserializeRequestPayload(message.payload)
|
|
77
|
+
const httpRequest = this.deserializeRequestPayload(message.payload ?? [])
|
|
65
78
|
|
|
66
79
|
// Send the byte array as the HTTP payload
|
|
67
80
|
const url = `${this.baseUrl}${httpRequest.urlPostfix}`
|
|
68
|
-
|
|
81
|
+
const httpRequestWithAuthHeaders: {
|
|
82
|
+
method: string // ✅ Add method property
|
|
83
|
+
headers: Record<string, string>
|
|
84
|
+
body?: string | Record<string, unknown> | Uint8Array
|
|
85
|
+
} = {
|
|
86
|
+
method: httpRequest.method, // ✅ Copy method from httpRequest
|
|
87
|
+
headers: httpRequest.headers,
|
|
88
|
+
body: Array.isArray(httpRequest.body)
|
|
89
|
+
? JSON.stringify(httpRequest.body)
|
|
90
|
+
: httpRequest.body
|
|
91
|
+
}
|
|
92
|
+
|
|
69
93
|
if (typeof httpRequest.headers !== 'object') {
|
|
70
94
|
httpRequestWithAuthHeaders.headers = {}
|
|
71
95
|
}
|
|
72
96
|
|
|
73
97
|
// Append auth headers in request to server
|
|
74
|
-
httpRequestWithAuthHeaders.headers['x-bsv-auth-version'] =
|
|
75
|
-
|
|
76
|
-
httpRequestWithAuthHeaders.headers['x-bsv-auth-
|
|
77
|
-
|
|
78
|
-
httpRequestWithAuthHeaders.headers['x-bsv-auth-
|
|
79
|
-
httpRequestWithAuthHeaders.headers['x-bsv-auth-
|
|
98
|
+
httpRequestWithAuthHeaders.headers['x-bsv-auth-version'] =
|
|
99
|
+
message.version
|
|
100
|
+
httpRequestWithAuthHeaders.headers['x-bsv-auth-identity-key'] =
|
|
101
|
+
message.identityKey
|
|
102
|
+
httpRequestWithAuthHeaders.headers['x-bsv-auth-nonce'] = message.nonce ?? ''
|
|
103
|
+
httpRequestWithAuthHeaders.headers['x-bsv-auth-your-nonce'] = message.yourNonce ?? ''
|
|
104
|
+
|
|
105
|
+
httpRequestWithAuthHeaders.headers['x-bsv-auth-signature'] = Utils.toHex(
|
|
106
|
+
message.signature ?? []
|
|
107
|
+
)
|
|
108
|
+
httpRequestWithAuthHeaders.headers['x-bsv-auth-request-id'] =
|
|
109
|
+
httpRequest.requestId
|
|
80
110
|
|
|
81
111
|
// Ensure Content-Type is set for requests with a body
|
|
82
|
-
if (httpRequestWithAuthHeaders.body) {
|
|
83
|
-
const headers = httpRequestWithAuthHeaders.headers
|
|
84
|
-
if (
|
|
85
|
-
throw new Error(
|
|
112
|
+
if (httpRequestWithAuthHeaders.body !== null && httpRequestWithAuthHeaders.body !== undefined) {
|
|
113
|
+
const headers = httpRequestWithAuthHeaders.headers
|
|
114
|
+
if (headers['content-type'] === undefined || headers['content-type'] === null || headers['content-type'].trim() === '') {
|
|
115
|
+
throw new Error(
|
|
116
|
+
'Content-Type header is required for requests with a body.'
|
|
117
|
+
)
|
|
86
118
|
}
|
|
87
119
|
|
|
88
|
-
const contentType = headers['content-type']
|
|
120
|
+
const contentType = headers['content-type']
|
|
89
121
|
|
|
90
122
|
// Transform body based on Content-Type
|
|
91
|
-
if (
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
123
|
+
if (typeof httpRequestWithAuthHeaders.body !== 'undefined') {
|
|
124
|
+
if (contentType.includes('application/json') ||
|
|
125
|
+
contentType.includes('application/x-www-form-urlencoded') ||
|
|
126
|
+
contentType.includes('text/plain')) {
|
|
127
|
+
// Convert byte array or object to UTF-8 string
|
|
128
|
+
if (httpRequestWithAuthHeaders.body instanceof Uint8Array) {
|
|
129
|
+
httpRequestWithAuthHeaders.body = Utils.toUTF8(
|
|
130
|
+
Array.from(httpRequestWithAuthHeaders.body) // Convert Uint8Array to number[]
|
|
131
|
+
)
|
|
132
|
+
} else if (typeof httpRequestWithAuthHeaders.body === 'object') {
|
|
133
|
+
httpRequestWithAuthHeaders.body = JSON.stringify(httpRequestWithAuthHeaders.body)
|
|
134
|
+
}
|
|
135
|
+
} else {
|
|
136
|
+
// For all other content types, ensure it's Uint8Array
|
|
137
|
+
if (!(httpRequestWithAuthHeaders.body instanceof Uint8Array)) {
|
|
138
|
+
httpRequestWithAuthHeaders.body = new Uint8Array(
|
|
139
|
+
typeof httpRequestWithAuthHeaders.body === 'string'
|
|
140
|
+
? Utils.toArray(httpRequestWithAuthHeaders.body, 'utf8') // Convert string to byte array
|
|
141
|
+
: []
|
|
142
|
+
)
|
|
143
|
+
}
|
|
144
|
+
}
|
|
103
145
|
}
|
|
104
146
|
}
|
|
105
147
|
|
|
106
|
-
|
|
107
148
|
// Send the actual fetch request to the server
|
|
108
149
|
const response = await this.fetchClient(url, {
|
|
109
150
|
method: httpRequestWithAuthHeaders.method,
|
|
@@ -113,38 +154,50 @@ export class SimplifiedFetchTransport implements Transport {
|
|
|
113
154
|
|
|
114
155
|
// Check for an acceptable status
|
|
115
156
|
if (!SUCCESS_STATUS_CODES.includes(response.status)) {
|
|
116
|
-
|
|
117
|
-
|
|
157
|
+
let errorInfo: ErrorInfo | null = null // Explicitly initialize
|
|
158
|
+
|
|
118
159
|
try {
|
|
119
|
-
errorInfo = await response.json()
|
|
160
|
+
errorInfo = await response.json() as ErrorInfo // Cast response to expected type
|
|
120
161
|
} catch {
|
|
121
162
|
// Fallback to text if JSON parse fails
|
|
122
|
-
const text = await response.text().catch(() => '')
|
|
123
|
-
throw new Error(
|
|
163
|
+
const text = await response.text().catch(() => '')
|
|
164
|
+
throw new Error(
|
|
165
|
+
`HTTP ${response.status} - ${text.trim() !== '' ? text : 'Unknown error'}`
|
|
166
|
+
)
|
|
124
167
|
}
|
|
125
168
|
|
|
126
169
|
// If we find a known { status: 'error', code, description } structure
|
|
127
|
-
if (
|
|
128
|
-
|
|
129
|
-
|
|
170
|
+
if (
|
|
171
|
+
errorInfo !== null && // ✅ Explicitly check for null
|
|
172
|
+
errorInfo.status === 'error' &&
|
|
173
|
+
typeof errorInfo.description === 'string'
|
|
174
|
+
) {
|
|
175
|
+
const msg = `HTTP ${response.status} - ${errorInfo.description}`
|
|
176
|
+
throw new Error(
|
|
177
|
+
typeof errorInfo.code === 'string' ? `${msg} (code: ${errorInfo.code})` : msg
|
|
178
|
+
)
|
|
130
179
|
}
|
|
131
180
|
|
|
132
181
|
// Otherwise just throw whatever we got
|
|
133
|
-
throw new Error(
|
|
182
|
+
throw new Error(
|
|
183
|
+
`HTTP ${response.status} - ${JSON.stringify(errorInfo)}`
|
|
184
|
+
)
|
|
134
185
|
}
|
|
135
186
|
|
|
136
187
|
const parsedBody = await response.arrayBuffer()
|
|
137
188
|
const payloadWriter = new Utils.Writer()
|
|
138
|
-
payloadWriter.write(
|
|
189
|
+
payloadWriter.write(
|
|
190
|
+
Utils.toArray(response.headers.get('x-bsv-auth-request-id'), 'base64')
|
|
191
|
+
)
|
|
139
192
|
payloadWriter.writeVarIntNum(response.status)
|
|
140
193
|
|
|
141
194
|
// Filter out headers the server signed:
|
|
142
195
|
// - Custom headers prefixed with x-bsv are included, except auth
|
|
143
196
|
// - x-bsv-auth headers are not allowed
|
|
144
197
|
// - authorization header is signed by the server
|
|
145
|
-
const includedHeaders: [string, string]
|
|
198
|
+
const includedHeaders: Array<[string, string]> = []
|
|
146
199
|
// Collect headers into a raw array for sorting
|
|
147
|
-
const headersArray: [string, string]
|
|
200
|
+
const headersArray: Array<[string, string]> = []
|
|
148
201
|
response.headers.forEach((value, key) => {
|
|
149
202
|
const lowerKey = key.toLowerCase()
|
|
150
203
|
if (lowerKey.startsWith('x-bsv-') || lowerKey === 'authorization') {
|
|
@@ -174,7 +227,7 @@ export class SimplifiedFetchTransport implements Transport {
|
|
|
174
227
|
}
|
|
175
228
|
|
|
176
229
|
// Handle body
|
|
177
|
-
if (parsedBody) {
|
|
230
|
+
if (parsedBody !== null && parsedBody !== undefined) { // ✅ Explicitly check for null/undefined
|
|
178
231
|
const bodyAsArray = Array.from(new Uint8Array(parsedBody))
|
|
179
232
|
payloadWriter.writeVarIntNum(bodyAsArray.length)
|
|
180
233
|
payloadWriter.write(bodyAsArray)
|
|
@@ -184,18 +237,27 @@ export class SimplifiedFetchTransport implements Transport {
|
|
|
184
237
|
|
|
185
238
|
// Build the correct AuthMessage for the response
|
|
186
239
|
const responseMessage: AuthMessage = {
|
|
187
|
-
version: response.headers.get('x-bsv-auth-version'),
|
|
188
|
-
messageType:
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
240
|
+
version: response.headers.get('x-bsv-auth-version') ?? '', // Ensure string
|
|
241
|
+
messageType:
|
|
242
|
+
response.headers.get('x-bsv-auth-message-type') ===
|
|
243
|
+
'certificateRequest'
|
|
244
|
+
? 'certificateRequest'
|
|
245
|
+
: 'general',
|
|
246
|
+
identityKey: response.headers.get('x-bsv-auth-identity-key') ?? '',
|
|
247
|
+
nonce: response.headers.get('x-bsv-auth-nonce') ?? undefined,
|
|
248
|
+
yourNonce: response.headers.get('x-bsv-auth-your-nonce') ?? undefined,
|
|
249
|
+
requestedCertificates: JSON.parse(
|
|
250
|
+
response.headers.get('x-bsv-auth-requested-certificates') ?? '[]'
|
|
251
|
+
) as RequestedCertificateSet,
|
|
193
252
|
payload: payloadWriter.toArray(),
|
|
194
|
-
signature: Utils.toArray(
|
|
253
|
+
signature: Utils.toArray(
|
|
254
|
+
response.headers.get('x-bsv-auth-signature') ?? '',
|
|
255
|
+
'hex'
|
|
256
|
+
)
|
|
195
257
|
}
|
|
196
258
|
|
|
197
259
|
// If the server didn't provide the correct authentication headers, throw an error
|
|
198
|
-
if (
|
|
260
|
+
if (responseMessage.version === undefined || responseMessage.version === null || responseMessage.version.trim() === '') {
|
|
199
261
|
throw new Error('HTTP server failed to authenticate')
|
|
200
262
|
}
|
|
201
263
|
|
|
@@ -205,30 +267,41 @@ export class SimplifiedFetchTransport implements Transport {
|
|
|
205
267
|
}
|
|
206
268
|
|
|
207
269
|
/**
|
|
208
|
-
* Registers a callback to handle incoming messages.
|
|
270
|
+
* Registers a callback to handle incoming messages.
|
|
209
271
|
* This must be called before sending any messages to ensure responses can be processed.
|
|
210
|
-
*
|
|
272
|
+
*
|
|
211
273
|
* @param callback - A function to invoke when an incoming AuthMessage is received.
|
|
212
274
|
* @returns A promise that resolves once the callback is set.
|
|
213
275
|
*/
|
|
214
|
-
async onData(
|
|
215
|
-
|
|
216
|
-
|
|
276
|
+
async onData(
|
|
277
|
+
callback: (message: AuthMessage) => Promise<void>
|
|
278
|
+
): Promise<void> {
|
|
279
|
+
this.onDataCallback = (m) => { // ✅ Removed `async` here
|
|
280
|
+
void (async () => { // ✅ Wraps the async function inside a void IIFE
|
|
281
|
+
try {
|
|
282
|
+
await callback(m) // ✅ Ensures proper `await`
|
|
283
|
+
} catch (error) {
|
|
284
|
+
console.error(
|
|
285
|
+
'Error handling AuthMessage:',
|
|
286
|
+
error instanceof Error ? error.message : String(error)
|
|
287
|
+
)
|
|
288
|
+
}
|
|
289
|
+
})()
|
|
217
290
|
}
|
|
218
291
|
}
|
|
219
292
|
|
|
220
293
|
/**
|
|
221
294
|
* Deserializes a request payload from a byte array into an HTTP request-like structure.
|
|
222
|
-
*
|
|
295
|
+
*
|
|
223
296
|
* @param payload - The serialized payload to deserialize.
|
|
224
297
|
* @returns An object representing the deserialized request, including the method,
|
|
225
298
|
* URL postfix (path and query string), headers, body, and request ID.
|
|
226
299
|
*/
|
|
227
300
|
deserializeRequestPayload(payload: number[]): {
|
|
228
|
-
method: string
|
|
229
|
-
urlPostfix: string
|
|
230
|
-
headers: Record<string, string
|
|
231
|
-
body: number[]
|
|
301
|
+
method: string
|
|
302
|
+
urlPostfix: string
|
|
303
|
+
headers: Record<string, string>
|
|
304
|
+
body: number[]
|
|
232
305
|
requestId: string
|
|
233
306
|
} {
|
|
234
307
|
// Create a reader
|
|
@@ -288,4 +361,4 @@ export class SimplifiedFetchTransport implements Transport {
|
|
|
288
361
|
requestId
|
|
289
362
|
}
|
|
290
363
|
}
|
|
291
|
-
}
|
|
364
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './SimplifiedFetchTransport.js'
|
|
1
|
+
export * from './SimplifiedFetchTransport.js'
|
|
@@ -1,16 +1,15 @@
|
|
|
1
|
-
import { PrivateKey,
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { hash256 } from '../../../../dist/cjs/src/primitives/Hash.js'
|
|
1
|
+
import { PrivateKey, Utils } from '../../../primitives/index'
|
|
2
|
+
import { WalletInterface } from '../../../wallet/Wallet.interfaces'
|
|
3
|
+
import { createNonce } from '../../../auth/utils/createNonce'
|
|
4
|
+
import { verifyNonce } from '../../../auth/utils/verifyNonce'
|
|
5
|
+
import { CompletedProtoWallet } from '../../../auth/certificates/__tests/CompletedProtoWallet'
|
|
7
6
|
|
|
8
7
|
describe('createNonce', () => {
|
|
9
8
|
let mockWallet: WalletInterface
|
|
10
9
|
|
|
11
10
|
beforeEach(() => {
|
|
12
11
|
mockWallet = {
|
|
13
|
-
createHmac: jest.fn().mockResolvedValue({ hmac: new Uint8Array(16) })
|
|
12
|
+
createHmac: jest.fn().mockResolvedValue({ hmac: new Uint8Array(16) })
|
|
14
13
|
} as unknown as WalletInterface
|
|
15
14
|
})
|
|
16
15
|
|
|
@@ -20,9 +19,13 @@ describe('createNonce', () => {
|
|
|
20
19
|
|
|
21
20
|
it('throws an error if wallet fails to create HMAC', async () => {
|
|
22
21
|
// Mock failure of HMAC creation
|
|
23
|
-
(mockWallet.createHmac as jest.Mock).mockRejectedValue(
|
|
22
|
+
(mockWallet.createHmac as jest.Mock).mockRejectedValue(
|
|
23
|
+
new Error('Failed to create HMAC')
|
|
24
|
+
)
|
|
24
25
|
|
|
25
|
-
await expect(createNonce(mockWallet)).rejects.toThrow(
|
|
26
|
+
await expect(createNonce(mockWallet)).rejects.toThrow(
|
|
27
|
+
'Failed to create HMAC'
|
|
28
|
+
)
|
|
26
29
|
})
|
|
27
30
|
|
|
28
31
|
it('creates a 256-bit nonce', async () => {
|
|
@@ -37,7 +40,7 @@ describe('verifyNonce', () => {
|
|
|
37
40
|
beforeEach(() => {
|
|
38
41
|
mockWallet = {
|
|
39
42
|
createHmac: jest.fn().mockResolvedValue({ hmac: new Uint8Array(16) }),
|
|
40
|
-
verifyHmac: jest.fn().mockResolvedValue({ valid: true })
|
|
43
|
+
verifyHmac: jest.fn().mockResolvedValue({ valid: true })
|
|
41
44
|
} as unknown as WalletInterface
|
|
42
45
|
})
|
|
43
46
|
|
|
@@ -49,9 +52,19 @@ describe('verifyNonce', () => {
|
|
|
49
52
|
(mockWallet.verifyHmac as jest.Mock).mockResolvedValue({ valid: false })
|
|
50
53
|
|
|
51
54
|
const nonce = await createNonce(mockWallet)
|
|
52
|
-
await expect(verifyNonce(nonce + 'ABC', mockWallet)).resolves.toEqual(
|
|
55
|
+
await expect(verifyNonce(nonce + 'ABC', mockWallet)).resolves.toEqual(
|
|
56
|
+
false
|
|
57
|
+
)
|
|
53
58
|
await expect(verifyNonce(nonce + '=', mockWallet)).resolves.toEqual(false)
|
|
54
|
-
await expect(
|
|
59
|
+
await expect(
|
|
60
|
+
verifyNonce(
|
|
61
|
+
Buffer.from(
|
|
62
|
+
nonce + Buffer.from('extra').toString('base64'),
|
|
63
|
+
'base64'
|
|
64
|
+
).toString('base64'),
|
|
65
|
+
mockWallet
|
|
66
|
+
)
|
|
67
|
+
).resolves.toEqual(false)
|
|
55
68
|
})
|
|
56
69
|
|
|
57
70
|
it('returns false for an invalid HMAC verification', async () => {
|
|
@@ -75,7 +88,7 @@ describe('verifyNonce', () => {
|
|
|
75
88
|
})
|
|
76
89
|
|
|
77
90
|
it('verifies nonce using real createHmac and verifyHmac', async () => {
|
|
78
|
-
const realWallet = new
|
|
91
|
+
const realWallet = new CompletedProtoWallet(PrivateKey.fromRandom())
|
|
79
92
|
|
|
80
93
|
const nonce = await createNonce(realWallet)
|
|
81
94
|
const isValid = await verifyNonce(nonce, realWallet)
|
|
@@ -84,33 +97,49 @@ describe('verifyNonce', () => {
|
|
|
84
97
|
})
|
|
85
98
|
|
|
86
99
|
it('SerialNumber use-case', async () => {
|
|
87
|
-
const clientWallet = new
|
|
88
|
-
const serverWallet = new
|
|
100
|
+
const clientWallet = new CompletedProtoWallet(PrivateKey.fromRandom())
|
|
101
|
+
const serverWallet = new CompletedProtoWallet(PrivateKey.fromRandom())
|
|
89
102
|
|
|
90
103
|
// Client creates a random nonce that the server can verify
|
|
91
|
-
const clientNonce = await createNonce(
|
|
104
|
+
const clientNonce = await createNonce(
|
|
105
|
+
clientWallet,
|
|
106
|
+
(await serverWallet.getPublicKey({ identityKey: true })).publicKey
|
|
107
|
+
)
|
|
92
108
|
// The server verifies the client created the nonce provided
|
|
93
|
-
await verifyNonce(
|
|
109
|
+
await verifyNonce(
|
|
110
|
+
clientNonce,
|
|
111
|
+
serverWallet,
|
|
112
|
+
(await clientWallet.getPublicKey({ identityKey: true })).publicKey
|
|
113
|
+
)
|
|
94
114
|
// Server creates a random nonce that the client can verify
|
|
95
|
-
const serverNonce = await createNonce(
|
|
115
|
+
const serverNonce = await createNonce(
|
|
116
|
+
serverWallet,
|
|
117
|
+
(await clientWallet.getPublicKey({ identityKey: true })).publicKey
|
|
118
|
+
)
|
|
96
119
|
// The server compute a serial number from the client and server nonce
|
|
97
120
|
const { hmac: serialNumber } = await serverWallet.createHmac({
|
|
98
|
-
data: clientNonce + serverNonce,
|
|
121
|
+
data: Utils.toArray(clientNonce + serverNonce, 'utf8'),
|
|
99
122
|
protocolID: [2, 'certificate creation'],
|
|
100
123
|
keyID: serverNonce + clientNonce,
|
|
101
|
-
counterparty: (await clientWallet.getPublicKey({ identityKey: true }))
|
|
124
|
+
counterparty: (await clientWallet.getPublicKey({ identityKey: true }))
|
|
125
|
+
.publicKey
|
|
102
126
|
})
|
|
103
127
|
|
|
104
128
|
// Client verifies server's nonce
|
|
105
|
-
await verifyNonce(
|
|
129
|
+
await verifyNonce(
|
|
130
|
+
serverNonce,
|
|
131
|
+
clientWallet,
|
|
132
|
+
(await serverWallet.getPublicKey({ identityKey: true })).publicKey
|
|
133
|
+
)
|
|
106
134
|
|
|
107
135
|
// Client verifies the server included their nonce
|
|
108
136
|
const { valid } = await clientWallet.verifyHmac({
|
|
109
137
|
hmac: serialNumber,
|
|
110
|
-
data: clientNonce + serverNonce,
|
|
138
|
+
data: Utils.toArray(clientNonce + serverNonce, 'utf8'),
|
|
111
139
|
protocolID: [2, 'certificate creation'],
|
|
112
140
|
keyID: serverNonce + clientNonce,
|
|
113
|
-
counterparty: (await serverWallet.getPublicKey({ identityKey: true }))
|
|
141
|
+
counterparty: (await serverWallet.getPublicKey({ identityKey: true }))
|
|
142
|
+
.publicKey
|
|
114
143
|
})
|
|
115
144
|
|
|
116
145
|
console.log(Utils.toBase64(serialNumber))
|