@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
package/src/auth/Peer.ts
CHANGED
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
import { SessionManager } from './SessionManager.js'
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import {
|
|
3
|
+
createNonce,
|
|
4
|
+
verifyNonce,
|
|
5
|
+
getVerifiableCertificates,
|
|
6
|
+
validateCertificates
|
|
7
|
+
} from './utils/index.js'
|
|
8
|
+
import {
|
|
9
|
+
AuthMessage,
|
|
10
|
+
PeerSession,
|
|
11
|
+
RequestedCertificateSet,
|
|
12
|
+
Transport
|
|
13
|
+
} from './types.js'
|
|
4
14
|
import { VerifiableCertificate } from './certificates/VerifiableCertificate.js'
|
|
5
15
|
import { Random, Utils, WalletInterface } from '../../mod.js'
|
|
6
16
|
|
|
@@ -16,10 +26,28 @@ export class Peer {
|
|
|
16
26
|
private readonly transport: Transport
|
|
17
27
|
private readonly wallet: WalletInterface
|
|
18
28
|
certificatesToRequest: RequestedCertificateSet
|
|
19
|
-
private readonly onGeneralMessageReceivedCallbacks: Map<
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
29
|
+
private readonly onGeneralMessageReceivedCallbacks: Map<
|
|
30
|
+
number,
|
|
31
|
+
(senderPublicKey: string, payload: number[]) => void
|
|
32
|
+
> = new Map()
|
|
33
|
+
|
|
34
|
+
private readonly onCertificatesReceivedCallbacks: Map<
|
|
35
|
+
number,
|
|
36
|
+
(senderPublicKey: string, certs: VerifiableCertificate[]) => void
|
|
37
|
+
> = new Map()
|
|
38
|
+
|
|
39
|
+
private readonly onCertificateRequestReceivedCallbacks: Map<
|
|
40
|
+
number,
|
|
41
|
+
(
|
|
42
|
+
senderPublicKey: string,
|
|
43
|
+
requestedCertificates: RequestedCertificateSet
|
|
44
|
+
) => void
|
|
45
|
+
> = new Map()
|
|
46
|
+
|
|
47
|
+
private readonly onInitialResponseReceivedCallbacks: Map<
|
|
48
|
+
number,
|
|
49
|
+
{ callback: (sessionNonce: string) => void, sessionNonce: string }
|
|
50
|
+
> = new Map()
|
|
23
51
|
|
|
24
52
|
// Single shared counter for all callback types
|
|
25
53
|
private callbackIdCounter: number = 0
|
|
@@ -48,10 +76,13 @@ export class Peer {
|
|
|
48
76
|
) {
|
|
49
77
|
this.wallet = wallet
|
|
50
78
|
this.transport = transport
|
|
51
|
-
this.certificatesToRequest = certificatesToRequest ?? {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
79
|
+
this.certificatesToRequest = certificatesToRequest ?? {
|
|
80
|
+
certifiers: [],
|
|
81
|
+
types: {}
|
|
82
|
+
}
|
|
83
|
+
this.transport.onData(this.handleIncomingMessage.bind(this)).catch(console.error)
|
|
84
|
+
this.sessionManager = sessionManager != null ? sessionManager : new SessionManager()
|
|
85
|
+
if (autoPersistLastSession === false) {
|
|
55
86
|
this.autoPersistLastSession = false
|
|
56
87
|
} else {
|
|
57
88
|
this.autoPersistLastSession = true
|
|
@@ -66,25 +97,38 @@ export class Peer {
|
|
|
66
97
|
* @returns {Promise<void>}
|
|
67
98
|
* @throws Will throw an error if the message fails to send.
|
|
68
99
|
*/
|
|
69
|
-
async toPeer (
|
|
70
|
-
|
|
100
|
+
async toPeer (
|
|
101
|
+
message: number[],
|
|
102
|
+
identityKey?: string,
|
|
103
|
+
maxWaitTime?: number
|
|
104
|
+
): Promise<void> {
|
|
105
|
+
if (
|
|
106
|
+
this.autoPersistLastSession &&
|
|
107
|
+
this.lastInteractedWithPeer !== undefined &&
|
|
108
|
+
this.lastInteractedWithPeer !== null &&
|
|
109
|
+
typeof identityKey !== 'string'
|
|
110
|
+
) {
|
|
71
111
|
identityKey = this.lastInteractedWithPeer
|
|
72
112
|
}
|
|
73
|
-
const peerSession = await this.getAuthenticatedSession(
|
|
113
|
+
const peerSession = await this.getAuthenticatedSession(
|
|
114
|
+
identityKey,
|
|
115
|
+
maxWaitTime
|
|
116
|
+
)
|
|
74
117
|
|
|
75
118
|
// Prepare the general message
|
|
76
119
|
const requestNonce = Utils.toBase64(Random(32))
|
|
77
120
|
const { signature } = await this.wallet.createSignature({
|
|
78
121
|
data: message,
|
|
79
122
|
protocolID: [2, 'auth message signature'],
|
|
80
|
-
keyID: `${requestNonce} ${peerSession.peerNonce}`,
|
|
123
|
+
keyID: `${requestNonce} ${peerSession.peerNonce ?? ''}`,
|
|
81
124
|
counterparty: peerSession.peerIdentityKey
|
|
82
125
|
})
|
|
83
126
|
|
|
84
127
|
const generalMessage: AuthMessage = {
|
|
85
128
|
version: AUTH_VERSION,
|
|
86
129
|
messageType: 'general',
|
|
87
|
-
identityKey: (await this.wallet.getPublicKey({ identityKey: true }))
|
|
130
|
+
identityKey: (await this.wallet.getPublicKey({ identityKey: true }))
|
|
131
|
+
.publicKey,
|
|
88
132
|
nonce: requestNonce,
|
|
89
133
|
yourNonce: peerSession.peerNonce,
|
|
90
134
|
payload: message,
|
|
@@ -94,39 +138,49 @@ export class Peer {
|
|
|
94
138
|
try {
|
|
95
139
|
await this.transport.send(generalMessage)
|
|
96
140
|
} catch (error) {
|
|
97
|
-
const e = new Error(
|
|
141
|
+
const e = new Error(
|
|
142
|
+
`Failed to send message to peer ${peerSession.peerIdentityKey ?? 'unknown'}: ${String(error.message)}`
|
|
143
|
+
)
|
|
98
144
|
e.stack = error.stack
|
|
99
145
|
throw e
|
|
100
146
|
}
|
|
101
147
|
}
|
|
102
148
|
|
|
103
149
|
/**
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
async requestCertificates (
|
|
115
|
-
|
|
150
|
+
* Sends a request for certificates to a peer.
|
|
151
|
+
* This method allows a peer to dynamically request specific certificates after
|
|
152
|
+
* an initial handshake or message has been exchanged.
|
|
153
|
+
*
|
|
154
|
+
* @param {RequestedCertificateSet} certificatesToRequest - Specifies the certifiers and types of certificates required from the peer.
|
|
155
|
+
* @param {string} [identityKey] - The identity public key of the peer. If not provided, the current session identity is used.
|
|
156
|
+
* @param {number} [maxWaitTime=10000] - Maximum time in milliseconds to wait for the peer session to be authenticated.
|
|
157
|
+
* @returns {Promise<void>} Resolves if the certificate request message is successfully sent.
|
|
158
|
+
* @throws Will throw an error if the peer session is not authenticated or if sending the request fails.
|
|
159
|
+
*/
|
|
160
|
+
async requestCertificates (
|
|
161
|
+
certificatesToRequest: RequestedCertificateSet,
|
|
162
|
+
identityKey?: string,
|
|
163
|
+
maxWaitTime = 10000
|
|
164
|
+
): Promise<void> {
|
|
165
|
+
const peerSession = await this.getAuthenticatedSession(
|
|
166
|
+
identityKey,
|
|
167
|
+
maxWaitTime
|
|
168
|
+
)
|
|
116
169
|
|
|
117
170
|
// Prepare the general message
|
|
118
171
|
const requestNonce = Utils.toBase64(Random(32))
|
|
119
172
|
const { signature } = await this.wallet.createSignature({
|
|
120
173
|
data: Utils.toArray(JSON.stringify(certificatesToRequest), 'utf8'),
|
|
121
174
|
protocolID: [2, 'auth message signature'],
|
|
122
|
-
keyID: `${requestNonce} ${peerSession.peerNonce}`,
|
|
175
|
+
keyID: `${requestNonce} ${peerSession.peerNonce ?? ''}`,
|
|
123
176
|
counterparty: peerSession.peerIdentityKey
|
|
124
177
|
})
|
|
125
178
|
|
|
126
179
|
const certRequestMessage: AuthMessage = {
|
|
127
180
|
version: AUTH_VERSION,
|
|
128
181
|
messageType: 'certificateRequest',
|
|
129
|
-
identityKey: (await this.wallet.getPublicKey({ identityKey: true }))
|
|
182
|
+
identityKey: (await this.wallet.getPublicKey({ identityKey: true }))
|
|
183
|
+
.publicKey,
|
|
130
184
|
nonce: requestNonce,
|
|
131
185
|
initialNonce: peerSession.sessionNonce,
|
|
132
186
|
yourNonce: peerSession.peerNonce,
|
|
@@ -136,8 +190,10 @@ export class Peer {
|
|
|
136
190
|
|
|
137
191
|
try {
|
|
138
192
|
await this.transport.send(certRequestMessage)
|
|
139
|
-
} catch (error) {
|
|
140
|
-
throw new Error(
|
|
193
|
+
} catch (error: any) {
|
|
194
|
+
throw new Error(
|
|
195
|
+
`Failed to send certificate request message to peer ${peerSession.peerIdentityKey ?? 'unknown'}: ${String(error.message)}`
|
|
196
|
+
)
|
|
141
197
|
}
|
|
142
198
|
}
|
|
143
199
|
|
|
@@ -152,16 +208,24 @@ export class Peer {
|
|
|
152
208
|
* @returns {Promise<PeerSession>} - A promise that resolves with an authenticated `PeerSession`.
|
|
153
209
|
* @throws {Error} - Throws an error if the transport is not connected or if the handshake fails.
|
|
154
210
|
*/
|
|
155
|
-
async getAuthenticatedSession (
|
|
156
|
-
|
|
211
|
+
async getAuthenticatedSession (
|
|
212
|
+
identityKey?: string,
|
|
213
|
+
maxWaitTime?: number
|
|
214
|
+
): Promise<PeerSession> {
|
|
215
|
+
if (this.transport === undefined) {
|
|
157
216
|
throw new Error('Peer transport is not connected!')
|
|
158
217
|
}
|
|
159
218
|
|
|
160
|
-
let peerSession = identityKey
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
219
|
+
let peerSession = identityKey !== undefined && identityKey !== ''
|
|
220
|
+
? this.sessionManager.getSession(identityKey)
|
|
221
|
+
: undefined
|
|
222
|
+
if (peerSession === undefined || !peerSession?.isAuthenticated) {
|
|
223
|
+
const sessionNonce = await this.initiateHandshake(
|
|
224
|
+
identityKey,
|
|
225
|
+
maxWaitTime
|
|
226
|
+
)
|
|
227
|
+
peerSession = this.sessionManager.getSession(identityKey !== undefined && identityKey !== '' ? identityKey : sessionNonce)
|
|
228
|
+
if (peerSession === undefined || !peerSession.isAuthenticated) {
|
|
165
229
|
throw new Error('Unable to establish mutual authentication with peer!')
|
|
166
230
|
}
|
|
167
231
|
}
|
|
@@ -175,7 +239,9 @@ export class Peer {
|
|
|
175
239
|
* @param {(senderPublicKey: string, payload: number[]) => void} callback - The function to call when a general message is received.
|
|
176
240
|
* @returns {number} The ID of the callback listener.
|
|
177
241
|
*/
|
|
178
|
-
listenForGeneralMessages (
|
|
242
|
+
listenForGeneralMessages (
|
|
243
|
+
callback: (senderPublicKey: string, payload: number[]) => void
|
|
244
|
+
): number {
|
|
179
245
|
const callbackID = this.callbackIdCounter++
|
|
180
246
|
this.onGeneralMessageReceivedCallbacks.set(callbackID, callback)
|
|
181
247
|
return callbackID
|
|
@@ -196,7 +262,9 @@ export class Peer {
|
|
|
196
262
|
* @param {(certs: VerifiableCertificate[]) => void} callback - The function to call when certificates are received.
|
|
197
263
|
* @returns {number} The ID of the callback listener.
|
|
198
264
|
*/
|
|
199
|
-
listenForCertificatesReceived (
|
|
265
|
+
listenForCertificatesReceived (
|
|
266
|
+
callback: (senderPublicKey: string, certs: VerifiableCertificate[]) => void
|
|
267
|
+
): number {
|
|
200
268
|
const callbackID = this.callbackIdCounter++
|
|
201
269
|
this.onCertificatesReceivedCallbacks.set(callbackID, callback)
|
|
202
270
|
return callbackID
|
|
@@ -217,7 +285,12 @@ export class Peer {
|
|
|
217
285
|
* @param {(requestedCertificates: RequestedCertificateSet) => void} callback - The function to call when a certificate request is received
|
|
218
286
|
* @returns {number} The ID of the callback listener.
|
|
219
287
|
*/
|
|
220
|
-
listenForCertificatesRequested (
|
|
288
|
+
listenForCertificatesRequested (
|
|
289
|
+
callback: (
|
|
290
|
+
senderPublicKey: string,
|
|
291
|
+
requestedCertificates: RequestedCertificateSet
|
|
292
|
+
) => void
|
|
293
|
+
): number {
|
|
221
294
|
const callbackID = this.callbackIdCounter++
|
|
222
295
|
this.onCertificateRequestReceivedCallbacks.set(callbackID, callback)
|
|
223
296
|
return callbackID
|
|
@@ -239,7 +312,10 @@ export class Peer {
|
|
|
239
312
|
* @param {string} [identityKey] - The identity public key of the peer.
|
|
240
313
|
* @returns {Promise<string>} A promise that resolves to the session nonce.
|
|
241
314
|
*/
|
|
242
|
-
private async initiateHandshake (
|
|
315
|
+
private async initiateHandshake (
|
|
316
|
+
identityKey?: string,
|
|
317
|
+
maxWaitTime = 10000
|
|
318
|
+
): Promise<string> {
|
|
243
319
|
const sessionNonce = await createNonce(this.wallet) // Initial request nonce
|
|
244
320
|
this.sessionManager.addSession({
|
|
245
321
|
isAuthenticated: false,
|
|
@@ -250,7 +326,8 @@ export class Peer {
|
|
|
250
326
|
const initialRequest: AuthMessage = {
|
|
251
327
|
version: AUTH_VERSION,
|
|
252
328
|
messageType: 'initialRequest',
|
|
253
|
-
identityKey: (await this.wallet.getPublicKey({ identityKey: true }))
|
|
329
|
+
identityKey: (await this.wallet.getPublicKey({ identityKey: true }))
|
|
330
|
+
.publicKey,
|
|
254
331
|
initialNonce: sessionNonce,
|
|
255
332
|
requestedCertificates: this.certificatesToRequest
|
|
256
333
|
}
|
|
@@ -265,13 +342,19 @@ export class Peer {
|
|
|
265
342
|
* @param {string} sessionNonce - The session nonce created in the initial request.
|
|
266
343
|
* @returns {Promise<string>} A promise that resolves with the session nonce when the initial response is received.
|
|
267
344
|
*/
|
|
268
|
-
private async waitForInitialResponse (
|
|
345
|
+
private async waitForInitialResponse (
|
|
346
|
+
sessionNonce: string,
|
|
347
|
+
maxWaitTime = 10000
|
|
348
|
+
): Promise<string> {
|
|
269
349
|
return await new Promise((resolve, reject) => {
|
|
270
|
-
const callbackID = this.listenForInitialResponse(
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
350
|
+
const callbackID = this.listenForInitialResponse(
|
|
351
|
+
sessionNonce,
|
|
352
|
+
sessionNonce => {
|
|
353
|
+
clearTimeout(timeoutHandle)
|
|
354
|
+
this.stopListeningForInitialResponses(callbackID)
|
|
355
|
+
resolve(sessionNonce)
|
|
356
|
+
}
|
|
357
|
+
)
|
|
275
358
|
|
|
276
359
|
const timeoutHandle = setTimeout(() => {
|
|
277
360
|
this.stopListeningForInitialResponses(callbackID)
|
|
@@ -288,9 +371,15 @@ export class Peer {
|
|
|
288
371
|
* @param {(sessionNonce: string) => void} callback - The callback to invoke when the initial response is received.
|
|
289
372
|
* @returns {number} The ID of the callback listener.
|
|
290
373
|
*/
|
|
291
|
-
private listenForInitialResponse (
|
|
374
|
+
private listenForInitialResponse (
|
|
375
|
+
sessionNonce: string,
|
|
376
|
+
callback: (sessionNonce: string) => void
|
|
377
|
+
): number {
|
|
292
378
|
const callbackID = this.callbackIdCounter++
|
|
293
|
-
this.onInitialResponseReceivedCallbacks.set(callbackID, {
|
|
379
|
+
this.onInitialResponseReceivedCallbacks.set(callbackID, {
|
|
380
|
+
callback,
|
|
381
|
+
sessionNonce
|
|
382
|
+
})
|
|
294
383
|
return callbackID
|
|
295
384
|
}
|
|
296
385
|
|
|
@@ -300,7 +389,7 @@ export class Peer {
|
|
|
300
389
|
* @private
|
|
301
390
|
* @param {number} callbackID - The ID of the callback to remove.
|
|
302
391
|
*/
|
|
303
|
-
private stopListeningForInitialResponses (callbackID: number) {
|
|
392
|
+
private stopListeningForInitialResponses (callbackID: number): void {
|
|
304
393
|
this.onInitialResponseReceivedCallbacks.delete(callbackID)
|
|
305
394
|
}
|
|
306
395
|
|
|
@@ -311,8 +400,10 @@ export class Peer {
|
|
|
311
400
|
* @returns {Promise<void>}
|
|
312
401
|
*/
|
|
313
402
|
private async handleIncomingMessage (message: AuthMessage): Promise<void> {
|
|
314
|
-
if (
|
|
315
|
-
console.error(
|
|
403
|
+
if (message.version === undefined || message.version === '' || message.version !== AUTH_VERSION) {
|
|
404
|
+
console.error(
|
|
405
|
+
`Invalid message auth version! Received: ${message.version}, expected: ${AUTH_VERSION}`
|
|
406
|
+
)
|
|
316
407
|
return
|
|
317
408
|
}
|
|
318
409
|
|
|
@@ -333,7 +424,9 @@ export class Peer {
|
|
|
333
424
|
await this.processGeneralMessage(message)
|
|
334
425
|
break
|
|
335
426
|
default:
|
|
336
|
-
console.error(
|
|
427
|
+
console.error(
|
|
428
|
+
`Unknown message type of ${String(message.messageType)} from ${String(message.identityKey)}`
|
|
429
|
+
)
|
|
337
430
|
}
|
|
338
431
|
}
|
|
339
432
|
|
|
@@ -343,8 +436,8 @@ export class Peer {
|
|
|
343
436
|
* @param {AuthMessage} message - The incoming initial request message.
|
|
344
437
|
* @returns {Promise<void>}
|
|
345
438
|
*/
|
|
346
|
-
async processInitialRequest (message: AuthMessage) {
|
|
347
|
-
if (
|
|
439
|
+
async processInitialRequest (message: AuthMessage): Promise<void> {
|
|
440
|
+
if (message.identityKey === undefined || message.identityKey === '' || message.initialNonce === undefined || message.initialNonce === '') {
|
|
348
441
|
throw new Error('Missing required fields in initialResponse message.')
|
|
349
442
|
}
|
|
350
443
|
|
|
@@ -359,15 +452,19 @@ export class Peer {
|
|
|
359
452
|
|
|
360
453
|
// Handle initial certificate requests
|
|
361
454
|
let certificatesToInclude
|
|
362
|
-
if (message.requestedCertificates?.certifiers?.length > 0) {
|
|
455
|
+
if (message.requestedCertificates !== undefined && Array.isArray(message.requestedCertificates?.certifiers) && message.requestedCertificates?.certifiers?.length > 0) {
|
|
363
456
|
if (this.onCertificateRequestReceivedCallbacks.size > 0) {
|
|
364
457
|
// The application wants to handle certificate requests
|
|
365
458
|
this.onCertificateRequestReceivedCallbacks.forEach(callback => {
|
|
366
|
-
callback(message.identityKey, message.requestedCertificates)
|
|
459
|
+
callback(message.identityKey, message.requestedCertificates as RequestedCertificateSet)
|
|
367
460
|
})
|
|
368
461
|
} else {
|
|
369
462
|
// Attempt to find exact matching certificates to return automatically to save round trips
|
|
370
|
-
certificatesToInclude = await getVerifiableCertificates(
|
|
463
|
+
certificatesToInclude = await getVerifiableCertificates(
|
|
464
|
+
this.wallet,
|
|
465
|
+
message.requestedCertificates,
|
|
466
|
+
message.identityKey
|
|
467
|
+
)
|
|
371
468
|
}
|
|
372
469
|
}
|
|
373
470
|
|
|
@@ -382,7 +479,8 @@ export class Peer {
|
|
|
382
479
|
const initialResponseMessage: AuthMessage = {
|
|
383
480
|
version: AUTH_VERSION,
|
|
384
481
|
messageType: 'initialResponse',
|
|
385
|
-
identityKey: (await this.wallet.getPublicKey({ identityKey: true }))
|
|
482
|
+
identityKey: (await this.wallet.getPublicKey({ identityKey: true }))
|
|
483
|
+
.publicKey,
|
|
386
484
|
initialNonce: sessionNonce,
|
|
387
485
|
yourNonce: message.initialNonce,
|
|
388
486
|
certificates: certificatesToInclude,
|
|
@@ -391,7 +489,7 @@ export class Peer {
|
|
|
391
489
|
}
|
|
392
490
|
|
|
393
491
|
// For security, only set the last-interacted-with peer here if this is the first peer we've interacted with.
|
|
394
|
-
if (
|
|
492
|
+
if (this.lastInteractedWithPeer === undefined || this.lastInteractedWithPeer === null) {
|
|
395
493
|
this.lastInteractedWithPeer = message.identityKey
|
|
396
494
|
}
|
|
397
495
|
|
|
@@ -406,27 +504,34 @@ export class Peer {
|
|
|
406
504
|
* @returns {Promise<void>}
|
|
407
505
|
* @throws Will throw an error if nonce verification or signature verification fails.
|
|
408
506
|
*/
|
|
409
|
-
private async processInitialResponse (message: AuthMessage) {
|
|
410
|
-
const validNonce = await verifyNonce(message.yourNonce, this.wallet)
|
|
507
|
+
private async processInitialResponse (message: AuthMessage): Promise<void> {
|
|
508
|
+
const validNonce = await verifyNonce(message.yourNonce as string, this.wallet)
|
|
411
509
|
if (!validNonce) {
|
|
412
|
-
throw new Error(
|
|
510
|
+
throw new Error(
|
|
511
|
+
`Initial response nonce verification failed from peer: ${message.identityKey}`
|
|
512
|
+
)
|
|
413
513
|
}
|
|
414
514
|
|
|
415
|
-
const peerSession = this.sessionManager.getSession(message.yourNonce)
|
|
416
|
-
if (
|
|
515
|
+
const peerSession = this.sessionManager.getSession(message.yourNonce as string)
|
|
516
|
+
if (peerSession === null || peerSession === undefined) {
|
|
417
517
|
throw new Error(`Peer session not found for peer: ${message.identityKey}`)
|
|
418
518
|
}
|
|
419
519
|
|
|
420
520
|
// Validate message signature
|
|
421
521
|
const { valid } = await this.wallet.verifySignature({
|
|
422
|
-
data: Utils.toArray(
|
|
423
|
-
|
|
522
|
+
data: Utils.toArray(
|
|
523
|
+
(peerSession.sessionNonce ?? '') + (message.initialNonce ?? ''),
|
|
524
|
+
'base64'
|
|
525
|
+
),
|
|
526
|
+
signature: message.signature as number[],
|
|
424
527
|
protocolID: [2, 'auth message signature'],
|
|
425
|
-
keyID: `${peerSession.sessionNonce} ${message.initialNonce}`,
|
|
528
|
+
keyID: `${peerSession.sessionNonce ?? ''} ${message.initialNonce ?? ''}`,
|
|
426
529
|
counterparty: message.identityKey
|
|
427
530
|
})
|
|
428
531
|
if (!valid) {
|
|
429
|
-
throw new Error(
|
|
532
|
+
throw new Error(
|
|
533
|
+
`Unable to verify initial response signature for peer: ${message.identityKey}`
|
|
534
|
+
)
|
|
430
535
|
}
|
|
431
536
|
|
|
432
537
|
// After signature and nonce verification is complete, the peer is considered authenticated
|
|
@@ -439,33 +544,50 @@ export class Peer {
|
|
|
439
544
|
this.sessionManager.updateSession(peerSession)
|
|
440
545
|
|
|
441
546
|
// Process certificates received
|
|
442
|
-
if (
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
547
|
+
if (
|
|
548
|
+
(this.certificatesToRequest?.certifiers?.length ?? 0) > 0 &&
|
|
549
|
+
(message.certificates !== null && message.certificates !== undefined && message.certificates.length > 0)
|
|
550
|
+
) {
|
|
551
|
+
await validateCertificates(
|
|
552
|
+
this.wallet,
|
|
553
|
+
message,
|
|
554
|
+
this.certificatesToRequest
|
|
447
555
|
)
|
|
556
|
+
|
|
557
|
+
const messageCertificates = message.certificates
|
|
558
|
+
if (message.certificates !== undefined) {
|
|
559
|
+
this.onCertificatesReceivedCallbacks.forEach(callback =>
|
|
560
|
+
callback(message.identityKey, messageCertificates)
|
|
561
|
+
)
|
|
562
|
+
}
|
|
448
563
|
}
|
|
449
564
|
|
|
450
565
|
this.lastInteractedWithPeer = message.identityKey
|
|
451
566
|
|
|
452
|
-
this.onInitialResponseReceivedCallbacks.forEach(
|
|
453
|
-
if (entry
|
|
567
|
+
this.onInitialResponseReceivedCallbacks.forEach(entry => {
|
|
568
|
+
if (entry?.sessionNonce === peerSession.sessionNonce) {
|
|
454
569
|
entry.callback(peerSession.sessionNonce)
|
|
455
570
|
}
|
|
456
571
|
})
|
|
457
572
|
|
|
458
573
|
// Check if the peer requested certificates from us
|
|
459
|
-
if (message.requestedCertificates?.certifiers?.length > 0) {
|
|
574
|
+
if (message.requestedCertificates !== undefined && Array.isArray(message.requestedCertificates?.certifiers) && message.requestedCertificates?.certifiers?.length > 0) {
|
|
460
575
|
if (this.onCertificateRequestReceivedCallbacks.size > 0) {
|
|
461
576
|
// Application wants to handle certificate requests
|
|
462
577
|
this.onCertificateRequestReceivedCallbacks.forEach(callback => {
|
|
463
|
-
callback(message.identityKey, message.requestedCertificates)
|
|
578
|
+
callback(message.identityKey, message.requestedCertificates as RequestedCertificateSet)
|
|
464
579
|
})
|
|
465
580
|
} else {
|
|
466
581
|
// Attempt to find exact matching certificates to respond automatically and save round trips
|
|
467
|
-
const verifiableCertificates = await getVerifiableCertificates(
|
|
468
|
-
|
|
582
|
+
const verifiableCertificates = await getVerifiableCertificates(
|
|
583
|
+
this.wallet,
|
|
584
|
+
message.requestedCertificates,
|
|
585
|
+
message.identityKey
|
|
586
|
+
)
|
|
587
|
+
await this.sendCertificateResponse(
|
|
588
|
+
message.identityKey,
|
|
589
|
+
verifiableCertificates
|
|
590
|
+
)
|
|
469
591
|
}
|
|
470
592
|
}
|
|
471
593
|
}
|
|
@@ -478,35 +600,49 @@ export class Peer {
|
|
|
478
600
|
* @param {AuthMessage} message - The certificate request message received from the peer.
|
|
479
601
|
* @throws {Error} Throws an error if nonce verification fails, or the message signature is invalid.
|
|
480
602
|
*/
|
|
481
|
-
private async processCertificateRequest (message: AuthMessage) {
|
|
482
|
-
const validNonce = await verifyNonce(message.yourNonce, this.wallet)
|
|
603
|
+
private async processCertificateRequest (message: AuthMessage): Promise<void> {
|
|
604
|
+
const validNonce = await verifyNonce(message.yourNonce as string, this.wallet)
|
|
483
605
|
if (!validNonce) {
|
|
484
|
-
throw new Error(
|
|
606
|
+
throw new Error(
|
|
607
|
+
`Unable to verify nonce for certificate request message from: ${message.identityKey}`
|
|
608
|
+
)
|
|
485
609
|
}
|
|
486
|
-
const peerSession = this.sessionManager.getSession(message.yourNonce)
|
|
610
|
+
const peerSession = this.sessionManager.getSession(message.yourNonce as string)
|
|
487
611
|
|
|
488
612
|
const { valid } = await this.wallet.verifySignature({
|
|
489
|
-
data: Utils.toArray(
|
|
490
|
-
|
|
613
|
+
data: Utils.toArray(
|
|
614
|
+
JSON.stringify(message.requestedCertificates),
|
|
615
|
+
'utf8'
|
|
616
|
+
),
|
|
617
|
+
signature: message.signature as number[],
|
|
491
618
|
protocolID: [2, 'auth message signature'],
|
|
492
|
-
keyID: `${message.nonce} ${peerSession
|
|
493
|
-
counterparty: peerSession
|
|
619
|
+
keyID: `${message.nonce ?? ''} ${peerSession?.sessionNonce ?? ''}`,
|
|
620
|
+
counterparty: peerSession?.peerIdentityKey
|
|
494
621
|
})
|
|
495
622
|
|
|
496
623
|
if (!valid) {
|
|
497
|
-
throw new Error(
|
|
624
|
+
throw new Error(
|
|
625
|
+
`Invalid signature in certificate request message from ${peerSession?.peerIdentityKey ?? 'unknown'}`
|
|
626
|
+
)
|
|
498
627
|
}
|
|
499
628
|
|
|
500
|
-
if (message.requestedCertificates?.certifiers?.length > 0) {
|
|
629
|
+
if (message.requestedCertificates !== undefined && Array.isArray(message.requestedCertificates?.certifiers) && message.requestedCertificates?.certifiers?.length > 0) {
|
|
501
630
|
if (this.onCertificateRequestReceivedCallbacks.size > 0) {
|
|
502
631
|
// Application wants to handle certificate requests
|
|
503
632
|
this.onCertificateRequestReceivedCallbacks.forEach(callback => {
|
|
504
|
-
callback(message.identityKey, message.requestedCertificates)
|
|
633
|
+
callback(message.identityKey, message.requestedCertificates as RequestedCertificateSet)
|
|
505
634
|
})
|
|
506
635
|
} else {
|
|
507
636
|
// Attempt to find exact matching certificates to respond automatically and save round trips
|
|
508
|
-
const verifiableCertificates = await getVerifiableCertificates(
|
|
509
|
-
|
|
637
|
+
const verifiableCertificates = await getVerifiableCertificates(
|
|
638
|
+
this.wallet,
|
|
639
|
+
message.requestedCertificates,
|
|
640
|
+
message.identityKey
|
|
641
|
+
)
|
|
642
|
+
await this.sendCertificateResponse(
|
|
643
|
+
message.identityKey,
|
|
644
|
+
verifiableCertificates
|
|
645
|
+
)
|
|
510
646
|
}
|
|
511
647
|
}
|
|
512
648
|
}
|
|
@@ -523,20 +659,21 @@ export class Peer {
|
|
|
523
659
|
async sendCertificateResponse (
|
|
524
660
|
verifierIdentityKey: string,
|
|
525
661
|
certificates: VerifiableCertificate[]
|
|
526
|
-
) {
|
|
662
|
+
): Promise<void> {
|
|
527
663
|
const peerSession = await this.getAuthenticatedSession(verifierIdentityKey)
|
|
528
664
|
const requestNonce = Utils.toBase64(Random(32))
|
|
529
665
|
const { signature } = await this.wallet.createSignature({
|
|
530
666
|
data: Utils.toArray(JSON.stringify(certificates), 'utf8'),
|
|
531
667
|
protocolID: [2, 'auth message signature'],
|
|
532
|
-
keyID: `${requestNonce} ${peerSession.peerNonce}`,
|
|
668
|
+
keyID: `${requestNonce} ${peerSession.peerNonce ?? ''}`,
|
|
533
669
|
counterparty: peerSession.peerIdentityKey
|
|
534
670
|
})
|
|
535
671
|
|
|
536
672
|
const certificateResponse: AuthMessage = {
|
|
537
673
|
version: AUTH_VERSION,
|
|
538
674
|
messageType: 'certificateResponse',
|
|
539
|
-
identityKey: (await this.wallet.getPublicKey({ identityKey: true }))
|
|
675
|
+
identityKey: (await this.wallet.getPublicKey({ identityKey: true }))
|
|
676
|
+
.publicKey,
|
|
540
677
|
nonce: requestNonce,
|
|
541
678
|
initialNonce: peerSession.sessionNonce,
|
|
542
679
|
yourNonce: peerSession.peerNonce,
|
|
@@ -546,8 +683,11 @@ export class Peer {
|
|
|
546
683
|
|
|
547
684
|
try {
|
|
548
685
|
await this.transport.send(certificateResponse)
|
|
549
|
-
} catch (error) {
|
|
550
|
-
|
|
686
|
+
} catch (error: any) {
|
|
687
|
+
const errorMessage = error instanceof Error ? error.message : String(error)
|
|
688
|
+
throw new Error(
|
|
689
|
+
`Failed to send certificate response message to peer ${peerSession.peerIdentityKey ?? 'unknown'}: ${errorMessage}`
|
|
690
|
+
)
|
|
551
691
|
}
|
|
552
692
|
}
|
|
553
693
|
|
|
@@ -559,33 +699,39 @@ export class Peer {
|
|
|
559
699
|
* @returns {Promise<void>}
|
|
560
700
|
* @throws Will throw an error if nonce verification or signature verification fails.
|
|
561
701
|
*/
|
|
562
|
-
private async processCertificateResponse (
|
|
563
|
-
message
|
|
564
|
-
) {
|
|
565
|
-
const validNonce = await verifyNonce(message.yourNonce, this.wallet)
|
|
702
|
+
private async processCertificateResponse (message: AuthMessage): Promise<void> {
|
|
703
|
+
const validNonce = await verifyNonce(message.yourNonce as string, this.wallet)
|
|
566
704
|
if (!validNonce) {
|
|
567
|
-
throw new Error(
|
|
705
|
+
throw new Error(
|
|
706
|
+
`Unable to verify nonce for certificate response from: ${message.identityKey}!`
|
|
707
|
+
)
|
|
568
708
|
}
|
|
569
|
-
const peerSession = this.sessionManager.getSession(message.yourNonce)
|
|
709
|
+
const peerSession = this.sessionManager.getSession(message.yourNonce as string)
|
|
570
710
|
|
|
571
711
|
// Validate message signature
|
|
572
712
|
const { valid } = await this.wallet.verifySignature({
|
|
573
713
|
data: Utils.toArray(JSON.stringify(message.certificates), 'utf8'),
|
|
574
|
-
signature: message.signature,
|
|
714
|
+
signature: message.signature as number[],
|
|
575
715
|
protocolID: [2, 'auth message signature'],
|
|
576
|
-
keyID: `${message.nonce} ${peerSession
|
|
716
|
+
keyID: `${message.nonce ?? ''} ${peerSession?.sessionNonce ?? ''}`,
|
|
577
717
|
counterparty: message.identityKey
|
|
578
718
|
})
|
|
579
719
|
|
|
580
720
|
if (!valid) {
|
|
581
|
-
throw new Error(
|
|
721
|
+
throw new Error(
|
|
722
|
+
`Unable to verify certificate response signature for peer: ${message.identityKey}`
|
|
723
|
+
)
|
|
582
724
|
}
|
|
583
725
|
|
|
584
726
|
// Process and verify any certificates received
|
|
585
|
-
await validateCertificates(
|
|
727
|
+
await validateCertificates(
|
|
728
|
+
this.wallet,
|
|
729
|
+
message,
|
|
730
|
+
message.requestedCertificates
|
|
731
|
+
)
|
|
586
732
|
|
|
587
733
|
this.onCertificatesReceivedCallbacks.forEach(callback => {
|
|
588
|
-
callback(message.identityKey, message.certificates)
|
|
734
|
+
callback(message.identityKey, message.certificates as VerifiableCertificate[])
|
|
589
735
|
})
|
|
590
736
|
}
|
|
591
737
|
|
|
@@ -597,29 +743,33 @@ export class Peer {
|
|
|
597
743
|
* @returns {Promise<void>}
|
|
598
744
|
* @throws Will throw an error if nonce verification or signature verification fails.
|
|
599
745
|
*/
|
|
600
|
-
private async processGeneralMessage (message: AuthMessage) {
|
|
601
|
-
const validNonce = await verifyNonce(message.yourNonce, this.wallet)
|
|
746
|
+
private async processGeneralMessage (message: AuthMessage): Promise<void> {
|
|
747
|
+
const validNonce = await verifyNonce(message.yourNonce as string, this.wallet)
|
|
602
748
|
if (!validNonce) {
|
|
603
|
-
throw new Error(
|
|
749
|
+
throw new Error(
|
|
750
|
+
`Unable to verify nonce for general message from: ${message.identityKey}`
|
|
751
|
+
)
|
|
604
752
|
}
|
|
605
|
-
const peerSession = this.sessionManager.getSession(message.yourNonce)
|
|
753
|
+
const peerSession = this.sessionManager.getSession(message.yourNonce as string)
|
|
606
754
|
|
|
607
755
|
const { valid } = await this.wallet.verifySignature({
|
|
608
756
|
data: message.payload,
|
|
609
|
-
signature: message.signature,
|
|
757
|
+
signature: message.signature as number[],
|
|
610
758
|
protocolID: [2, 'auth message signature'],
|
|
611
|
-
keyID: `${message.nonce} ${peerSession
|
|
612
|
-
counterparty: peerSession
|
|
759
|
+
keyID: `${message.nonce ?? ''} ${peerSession?.sessionNonce ?? ''}`,
|
|
760
|
+
counterparty: peerSession?.peerIdentityKey
|
|
613
761
|
})
|
|
614
762
|
|
|
615
763
|
if (!valid) {
|
|
616
|
-
throw new Error(
|
|
764
|
+
throw new Error(
|
|
765
|
+
`Invalid signature in generalMessage from ${peerSession?.peerIdentityKey ?? 'unknown'}`
|
|
766
|
+
)
|
|
617
767
|
}
|
|
618
768
|
|
|
619
769
|
this.lastInteractedWithPeer = message.identityKey
|
|
620
770
|
|
|
621
771
|
this.onGeneralMessageReceivedCallbacks.forEach(callback => {
|
|
622
|
-
callback(message.identityKey, message.payload)
|
|
772
|
+
callback(message.identityKey, message.payload as number[])
|
|
623
773
|
})
|
|
624
774
|
}
|
|
625
775
|
}
|