@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,13 +1,14 @@
|
|
|
1
|
-
import { Peer } from
|
|
2
|
-
import { AuthMessage, Transport } from
|
|
1
|
+
import { Peer } from '../../auth/Peer.js'
|
|
2
|
+
import { AuthMessage, Transport } from '../../auth/types.js'
|
|
3
3
|
import { jest } from '@jest/globals'
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
|
|
4
|
+
import { WalletInterface } from '../../wallet/Wallet.interfaces.js'
|
|
5
|
+
import { Utils, PrivateKey } from '../../primitives/index.js'
|
|
6
|
+
import { VerifiableCertificate } from '../../auth/certificates/VerifiableCertificate.js'
|
|
7
|
+
import { MasterCertificate } from '../../auth/certificates/MasterCertificate.js'
|
|
8
|
+
import { getVerifiableCertificates } from '../../auth/utils/getVerifiableCertificates.js'
|
|
9
|
+
import { CompletedProtoWallet } from '../../../mod.js'
|
|
10
|
+
|
|
11
|
+
jest.mock('../../auth/utils/getVerifiableCertificates')
|
|
11
12
|
|
|
12
13
|
class LocalTransport implements Transport {
|
|
13
14
|
private peerTransport?: LocalTransport
|
|
@@ -19,28 +20,35 @@ class LocalTransport implements Transport {
|
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
async send(message: AuthMessage): Promise<void> {
|
|
22
|
-
if (
|
|
23
|
+
if (
|
|
24
|
+
this.peerTransport?.onDataCallback !== undefined &&
|
|
25
|
+
this.peerTransport?.onDataCallback !== null
|
|
26
|
+
) {
|
|
23
27
|
// Simulate message delivery by calling the onData callback of the peer
|
|
24
28
|
this.peerTransport.onDataCallback(message)
|
|
25
29
|
} else {
|
|
26
|
-
throw new Error(
|
|
30
|
+
throw new Error(
|
|
31
|
+
'Peer transport is not connected or not listening for data.'
|
|
32
|
+
)
|
|
27
33
|
}
|
|
28
34
|
}
|
|
29
35
|
|
|
30
|
-
async onData(
|
|
36
|
+
async onData(
|
|
37
|
+
callback: (message: AuthMessage) => void
|
|
38
|
+
): Promise<void> {
|
|
31
39
|
this.onDataCallback = callback
|
|
32
40
|
}
|
|
33
41
|
}
|
|
34
42
|
|
|
35
43
|
describe('Peer class mutual authentication and certificate exchange', () => {
|
|
36
|
-
let walletA:
|
|
44
|
+
let walletA: WalletInterface, walletB: WalletInterface
|
|
37
45
|
let transportA: LocalTransport, transportB: LocalTransport
|
|
38
46
|
let alice: Peer, bob: Peer
|
|
39
47
|
let certificatesReceivedByAlice: VerifiableCertificate[] | undefined
|
|
40
48
|
let certificatesReceivedByBob: VerifiableCertificate[] | undefined
|
|
41
49
|
|
|
42
50
|
const certificateType = Utils.toBase64(new Array(32).fill(1))
|
|
43
|
-
const certificateSerialNumber = Utils.toBase64(new Array(32).fill(2))
|
|
51
|
+
// const certificateSerialNumber = Utils.toBase64(new Array(32).fill(2))
|
|
44
52
|
const certifierPrivateKey = PrivateKey.fromRandom()
|
|
45
53
|
const certifierPublicKey = certifierPrivateKey.toPublicKey().toString()
|
|
46
54
|
const certificatesToRequest = {
|
|
@@ -48,24 +56,37 @@ describe('Peer class mutual authentication and certificate exchange', () => {
|
|
|
48
56
|
types: { [certificateType]: ['name', 'email'] }
|
|
49
57
|
}
|
|
50
58
|
|
|
51
|
-
const aliceFields = {
|
|
52
|
-
|
|
59
|
+
const aliceFields = {
|
|
60
|
+
name: 'Alice',
|
|
61
|
+
email: 'alice@example.com',
|
|
62
|
+
libraryCardNumber: 'A123456'
|
|
63
|
+
}
|
|
64
|
+
const bobFields = {
|
|
65
|
+
name: 'Bob',
|
|
66
|
+
email: 'bob@example.com',
|
|
67
|
+
libraryCardNumber: 'B654321'
|
|
68
|
+
}
|
|
53
69
|
|
|
54
|
-
async function createMasterCertificate(
|
|
55
|
-
|
|
56
|
-
|
|
70
|
+
async function createMasterCertificate(
|
|
71
|
+
subjectWallet: WalletInterface,
|
|
72
|
+
fields: Record<string, string>
|
|
73
|
+
): Promise<MasterCertificate> {
|
|
74
|
+
const subjectPubKey = (
|
|
75
|
+
await subjectWallet.getPublicKey({ identityKey: true })
|
|
76
|
+
).publicKey
|
|
77
|
+
const certifierWallet = new CompletedProtoWallet(certifierPrivateKey)
|
|
57
78
|
|
|
58
79
|
// Issue a new MasterCertificate for the subject (e.g. Alice/Bob)
|
|
59
|
-
const masterCertificate =
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
//
|
|
80
|
+
const masterCertificate =
|
|
81
|
+
await MasterCertificate.issueCertificateForSubject(
|
|
82
|
+
certifierWallet,
|
|
83
|
+
subjectPubKey,
|
|
84
|
+
fields,
|
|
85
|
+
certificateType,
|
|
86
|
+
async () => 'revocationOutpoint' // or any revocation outpoint logic you want
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
// For test consistency, you could override the auto-generated serialNumber:
|
|
69
90
|
// masterCertificate.signature = undefined
|
|
70
91
|
// masterCertificate.serialNumber = certificateSerialNumber
|
|
71
92
|
// await masterCertificate.sign(certifierWallet)
|
|
@@ -75,11 +96,15 @@ describe('Peer class mutual authentication and certificate exchange', () => {
|
|
|
75
96
|
|
|
76
97
|
async function createVerifiableCertificate(
|
|
77
98
|
masterCertificate: MasterCertificate,
|
|
78
|
-
wallet:
|
|
99
|
+
wallet: WalletInterface,
|
|
79
100
|
verifierIdentityKey: string,
|
|
80
101
|
fieldsToReveal: string[]
|
|
81
102
|
): Promise<VerifiableCertificate> {
|
|
82
|
-
const certifierWallet = new
|
|
103
|
+
const certifierWallet = new CompletedProtoWallet(certifierPrivateKey)
|
|
104
|
+
|
|
105
|
+
if (certifierWallet.keyDeriver === undefined) {
|
|
106
|
+
throw new Error('KeyDeriver must be defined for test!')
|
|
107
|
+
}
|
|
83
108
|
|
|
84
109
|
const keyringForVerifier = await MasterCertificate.createKeyringForVerifier(
|
|
85
110
|
wallet,
|
|
@@ -106,14 +131,25 @@ describe('Peer class mutual authentication and certificate exchange', () => {
|
|
|
106
131
|
aliceRequests: boolean,
|
|
107
132
|
bobRequests: boolean,
|
|
108
133
|
options: {
|
|
109
|
-
aliceCertsToRequest?: typeof certificatesToRequest
|
|
134
|
+
aliceCertsToRequest?: typeof certificatesToRequest
|
|
110
135
|
bobCertsToRequest?: typeof certificatesToRequest
|
|
111
136
|
} = {}
|
|
112
|
-
) {
|
|
113
|
-
const {
|
|
137
|
+
): any {
|
|
138
|
+
const {
|
|
139
|
+
aliceCertsToRequest = certificatesToRequest,
|
|
140
|
+
bobCertsToRequest = certificatesToRequest
|
|
141
|
+
} = options
|
|
114
142
|
|
|
115
|
-
alice = new Peer(
|
|
116
|
-
|
|
143
|
+
alice = new Peer(
|
|
144
|
+
walletA,
|
|
145
|
+
transportA,
|
|
146
|
+
aliceRequests ? aliceCertsToRequest : undefined
|
|
147
|
+
)
|
|
148
|
+
bob = new Peer(
|
|
149
|
+
walletB,
|
|
150
|
+
transportB,
|
|
151
|
+
bobRequests ? bobCertsToRequest : undefined
|
|
152
|
+
)
|
|
117
153
|
|
|
118
154
|
const aliceReceivedCertificates = new Promise<void>((resolve) => {
|
|
119
155
|
alice.listenForCertificatesReceived((senderPublicKey, certificates) => {
|
|
@@ -132,20 +168,26 @@ describe('Peer class mutual authentication and certificate exchange', () => {
|
|
|
132
168
|
return { aliceReceivedCertificates, bobReceivedCertificates }
|
|
133
169
|
}
|
|
134
170
|
|
|
135
|
-
function mockGetVerifiableCertificates(
|
|
171
|
+
async function mockGetVerifiableCertificates(
|
|
136
172
|
aliceCertificate: VerifiableCertificate | undefined,
|
|
137
173
|
bobCertificate: VerifiableCertificate | undefined,
|
|
138
174
|
alicePubKey: string,
|
|
139
175
|
bobPubKey: string
|
|
140
|
-
) {
|
|
141
|
-
(getVerifiableCertificates as jest.Mock).mockImplementation(
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
176
|
+
): Promise<any> {
|
|
177
|
+
; (getVerifiableCertificates as jest.Mock).mockImplementation(
|
|
178
|
+
async (wallet, _, verifierIdentityKey) => {
|
|
179
|
+
if (wallet === walletA && verifierIdentityKey === bobPubKey) {
|
|
180
|
+
return aliceCertificate !== null && aliceCertificate !== undefined
|
|
181
|
+
? await Promise.resolve([aliceCertificate])
|
|
182
|
+
: await Promise.resolve([])
|
|
183
|
+
} else if (wallet === walletB && verifierIdentityKey === alicePubKey) {
|
|
184
|
+
return bobCertificate !== null && bobCertificate !== undefined
|
|
185
|
+
? await Promise.resolve([bobCertificate])
|
|
186
|
+
: await Promise.resolve([])
|
|
187
|
+
}
|
|
188
|
+
return await Promise.resolve([])
|
|
146
189
|
}
|
|
147
|
-
|
|
148
|
-
});
|
|
190
|
+
)
|
|
149
191
|
}
|
|
150
192
|
|
|
151
193
|
beforeEach(async () => {
|
|
@@ -156,22 +198,27 @@ describe('Peer class mutual authentication and certificate exchange', () => {
|
|
|
156
198
|
certificatesReceivedByAlice = []
|
|
157
199
|
certificatesReceivedByBob = []
|
|
158
200
|
|
|
159
|
-
walletA = new
|
|
160
|
-
walletB = new
|
|
201
|
+
walletA = new CompletedProtoWallet(PrivateKey.fromRandom())
|
|
202
|
+
walletB = new CompletedProtoWallet(PrivateKey.fromRandom())
|
|
161
203
|
})
|
|
162
204
|
|
|
163
205
|
it('Neither Alice nor Bob request certificates, mutual authentication completes successfully', async () => {
|
|
164
|
-
|
|
206
|
+
setupPeers(
|
|
207
|
+
false,
|
|
208
|
+
false
|
|
209
|
+
)
|
|
165
210
|
|
|
166
211
|
const bobReceivedGeneralMessage = new Promise<void>((resolve) => {
|
|
167
|
-
bob.listenForGeneralMessages(
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
212
|
+
bob.listenForGeneralMessages((senderPublicKey, payload) => {
|
|
213
|
+
(async () => {
|
|
214
|
+
console.log('Bob received message:', Utils.toUTF8(payload))
|
|
215
|
+
await bob.toPeer(Utils.toArray('Hello Alice!'), senderPublicKey)
|
|
216
|
+
resolve()
|
|
217
|
+
})().catch(e => console.log(e))
|
|
171
218
|
})
|
|
172
219
|
})
|
|
173
220
|
const aliceReceivedGeneralMessage = new Promise<void>((resolve) => {
|
|
174
|
-
alice.listenForGeneralMessages(
|
|
221
|
+
alice.listenForGeneralMessages((senderPublicKey, payload) => {
|
|
175
222
|
console.log('Alice received message:', Utils.toUTF8(payload))
|
|
176
223
|
resolve()
|
|
177
224
|
})
|
|
@@ -186,10 +233,15 @@ describe('Peer class mutual authentication and certificate exchange', () => {
|
|
|
186
233
|
}, 15000)
|
|
187
234
|
|
|
188
235
|
it('Bob requests certificates from Alice, Alice does not request any from Bob', async () => {
|
|
189
|
-
const alicePubKey = (await walletA.getPublicKey({ identityKey: true }))
|
|
190
|
-
|
|
236
|
+
const alicePubKey = (await walletA.getPublicKey({ identityKey: true }))
|
|
237
|
+
.publicKey
|
|
238
|
+
const bobPubKey = (await walletB.getPublicKey({ identityKey: true }))
|
|
239
|
+
.publicKey
|
|
191
240
|
|
|
192
|
-
const aliceMasterCertificate = await createMasterCertificate(
|
|
241
|
+
const aliceMasterCertificate = await createMasterCertificate(
|
|
242
|
+
walletA,
|
|
243
|
+
aliceFields
|
|
244
|
+
)
|
|
193
245
|
const aliceVerifiableCertificate = await createVerifiableCertificate(
|
|
194
246
|
aliceMasterCertificate,
|
|
195
247
|
walletA,
|
|
@@ -198,22 +250,34 @@ describe('Peer class mutual authentication and certificate exchange', () => {
|
|
|
198
250
|
)
|
|
199
251
|
|
|
200
252
|
const { bobReceivedCertificates } = setupPeers(false, true)
|
|
201
|
-
mockGetVerifiableCertificates(
|
|
253
|
+
await mockGetVerifiableCertificates(
|
|
254
|
+
aliceVerifiableCertificate,
|
|
255
|
+
undefined,
|
|
256
|
+
alicePubKey,
|
|
257
|
+
bobPubKey
|
|
258
|
+
)
|
|
202
259
|
|
|
203
260
|
const bobReceivedGeneralMessage = new Promise<void>((resolve) => {
|
|
204
|
-
bob.listenForGeneralMessages(
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
261
|
+
bob.listenForGeneralMessages((senderPublicKey, payload) => {
|
|
262
|
+
// Wrap async logic in an IIFE so the callback remains synchronous.
|
|
263
|
+
(async () => {
|
|
264
|
+
await bobReceivedCertificates
|
|
265
|
+
|
|
266
|
+
if (certificatesReceivedByBob !== undefined && certificatesReceivedByBob.length > 0) {
|
|
267
|
+
// Use a for...of loop instead of forEach with an async callback.
|
|
268
|
+
for (const cert of certificatesReceivedByBob) {
|
|
269
|
+
// Decrypt to ensure it has the correct fields.
|
|
270
|
+
const decryptedFields = await cert.decryptFields(walletB)
|
|
271
|
+
if (cert.certifier !== 'bob') {
|
|
272
|
+
console.log('Bob accepted the message:', Utils.toUTF8(payload))
|
|
273
|
+
console.log('Decrypted fields:', decryptedFields)
|
|
274
|
+
}
|
|
213
275
|
}
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
|
|
276
|
+
}
|
|
277
|
+
resolve()
|
|
278
|
+
})().catch((e) => {
|
|
279
|
+
console.error(e)
|
|
280
|
+
})
|
|
217
281
|
})
|
|
218
282
|
})
|
|
219
283
|
|
|
@@ -225,11 +289,16 @@ describe('Peer class mutual authentication and certificate exchange', () => {
|
|
|
225
289
|
}, 15000)
|
|
226
290
|
|
|
227
291
|
it('Alice requests Bob to present his library card before lending him a book', async () => {
|
|
228
|
-
const alicePubKey = (await walletA.getPublicKey({ identityKey: true }))
|
|
229
|
-
|
|
292
|
+
const alicePubKey = (await walletA.getPublicKey({ identityKey: true }))
|
|
293
|
+
.publicKey
|
|
294
|
+
const bobPubKey = (await walletB.getPublicKey({ identityKey: true }))
|
|
295
|
+
.publicKey
|
|
230
296
|
|
|
231
297
|
// Bob's certificate includes his library card number
|
|
232
|
-
const bobMasterCertificate = await createMasterCertificate(
|
|
298
|
+
const bobMasterCertificate = await createMasterCertificate(
|
|
299
|
+
walletB,
|
|
300
|
+
bobFields
|
|
301
|
+
)
|
|
233
302
|
const bobVerifiableCertificate = await createVerifiableCertificate(
|
|
234
303
|
bobMasterCertificate,
|
|
235
304
|
walletB,
|
|
@@ -243,22 +312,36 @@ describe('Peer class mutual authentication and certificate exchange', () => {
|
|
|
243
312
|
types: { [certificateType]: ['libraryCardNumber'] }
|
|
244
313
|
}
|
|
245
314
|
|
|
246
|
-
const { aliceReceivedCertificates } = setupPeers(true, false, {
|
|
247
|
-
|
|
315
|
+
const { aliceReceivedCertificates } = setupPeers(true, false, {
|
|
316
|
+
aliceCertsToRequest: aliceCertificatesToRequest
|
|
317
|
+
})
|
|
318
|
+
await mockGetVerifiableCertificates(
|
|
319
|
+
undefined,
|
|
320
|
+
bobVerifiableCertificate,
|
|
321
|
+
alicePubKey,
|
|
322
|
+
bobPubKey
|
|
323
|
+
)
|
|
248
324
|
|
|
249
325
|
const aliceAcceptedLibraryCard = jest.fn()
|
|
250
326
|
|
|
251
|
-
alice.listenForCertificatesReceived(
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
327
|
+
alice.listenForCertificatesReceived((senderPublicKey, certificates) => {
|
|
328
|
+
(async () => {
|
|
329
|
+
for (const cert of certificates) {
|
|
330
|
+
// Decrypt Bob's certificate fields
|
|
331
|
+
const decryptedFields = await cert.decryptFields(walletA)
|
|
255
332
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
333
|
+
// Check and use the decrypted fields
|
|
334
|
+
if (
|
|
335
|
+
Object.keys(decryptedFields).length !== 0 &&
|
|
336
|
+
typeof decryptedFields.libraryCardNumber !== 'undefined'
|
|
337
|
+
) {
|
|
338
|
+
console.log(
|
|
339
|
+
`Alice received Bob's library card number: ${decryptedFields.libraryCardNumber}`
|
|
340
|
+
)
|
|
341
|
+
aliceAcceptedLibraryCard()
|
|
342
|
+
}
|
|
260
343
|
}
|
|
261
|
-
}
|
|
344
|
+
})().catch(e => { console.error(e) })
|
|
262
345
|
})
|
|
263
346
|
|
|
264
347
|
const bobReceivedGeneralMessage = new Promise<void>((resolve) => {
|
|
@@ -269,20 +352,26 @@ describe('Peer class mutual authentication and certificate exchange', () => {
|
|
|
269
352
|
})
|
|
270
353
|
|
|
271
354
|
// Alice sends a message to Bob requesting his library card before lending him a book
|
|
272
|
-
await alice.toPeer(
|
|
355
|
+
await alice.toPeer(
|
|
356
|
+
Utils.toArray('Please present your library card to borrow a book.')
|
|
357
|
+
)
|
|
273
358
|
await aliceReceivedCertificates
|
|
274
359
|
await bobReceivedGeneralMessage
|
|
275
360
|
|
|
276
361
|
expect(aliceAcceptedLibraryCard).toHaveBeenCalled()
|
|
277
362
|
expect(certificatesReceivedByAlice).toEqual([bobVerifiableCertificate])
|
|
278
|
-
expect(certificatesReceivedByBob).toEqual([])
|
|
363
|
+
expect(certificatesReceivedByBob).toEqual([])
|
|
279
364
|
}, 15000)
|
|
280
365
|
|
|
281
366
|
it('Bob requests additional certificates from Alice after initial communication', async () => {
|
|
282
|
-
const alicePubKey = (await walletA.getPublicKey({ identityKey: true }))
|
|
283
|
-
|
|
367
|
+
const alicePubKey = (await walletA.getPublicKey({ identityKey: true }))
|
|
368
|
+
.publicKey
|
|
369
|
+
const bobPubKey = (await walletB.getPublicKey({ identityKey: true }))
|
|
370
|
+
.publicKey
|
|
284
371
|
|
|
285
|
-
const aliceMasterCertificate = await createMasterCertificate(walletA, {
|
|
372
|
+
const aliceMasterCertificate = await createMasterCertificate(walletA, {
|
|
373
|
+
name: 'Alice'
|
|
374
|
+
})
|
|
286
375
|
const aliceVerifiableCertificate = await createVerifiableCertificate(
|
|
287
376
|
aliceMasterCertificate,
|
|
288
377
|
walletA,
|
|
@@ -291,16 +380,23 @@ describe('Peer class mutual authentication and certificate exchange', () => {
|
|
|
291
380
|
)
|
|
292
381
|
|
|
293
382
|
const { bobReceivedCertificates } = setupPeers(false, true)
|
|
294
|
-
mockGetVerifiableCertificates(
|
|
383
|
+
await mockGetVerifiableCertificates(
|
|
384
|
+
aliceVerifiableCertificate,
|
|
385
|
+
undefined,
|
|
386
|
+
alicePubKey,
|
|
387
|
+
bobPubKey
|
|
388
|
+
)
|
|
295
389
|
|
|
296
390
|
const bobReceivedGeneralMessage = new Promise<void>((resolve) => {
|
|
297
|
-
bob.listenForGeneralMessages(
|
|
298
|
-
|
|
299
|
-
|
|
391
|
+
bob.listenForGeneralMessages((senderPublicKey, payload) => {
|
|
392
|
+
(async () => {
|
|
393
|
+
await bobReceivedCertificates
|
|
394
|
+
console.log('Bob received message:', Utils.toUTF8(payload))
|
|
300
395
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
396
|
+
// Bob requests additional certificates after initial communication
|
|
397
|
+
await bob.requestCertificates(certificatesToRequest, senderPublicKey)
|
|
398
|
+
resolve()
|
|
399
|
+
})().catch(e => { console.error(e) })
|
|
304
400
|
})
|
|
305
401
|
})
|
|
306
402
|
|
|
@@ -310,16 +406,23 @@ describe('Peer class mutual authentication and certificate exchange', () => {
|
|
|
310
406
|
|
|
311
407
|
// Listen for certificates received from the additional request
|
|
312
408
|
const bobReceivedAdditionalCertificates = new Promise<void>((resolve) => {
|
|
313
|
-
bob.listenForCertificatesReceived(
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
const
|
|
318
|
-
|
|
319
|
-
|
|
409
|
+
bob.listenForCertificatesReceived((senderPublicKey, certificates) => {
|
|
410
|
+
(async () => {
|
|
411
|
+
if (certificates.length > 0) {
|
|
412
|
+
// Decrypt to confirm
|
|
413
|
+
for (const cert of certificates) {
|
|
414
|
+
const decrypted = await cert.decryptFields(walletB)
|
|
415
|
+
console.log(
|
|
416
|
+
'Bob received additional certificates from Alice:',
|
|
417
|
+
cert
|
|
418
|
+
)
|
|
419
|
+
console.log('Decrypted fields:', decrypted)
|
|
420
|
+
}
|
|
421
|
+
resolve()
|
|
320
422
|
}
|
|
321
|
-
|
|
322
|
-
|
|
423
|
+
})().catch((error) => {
|
|
424
|
+
console.error(error)
|
|
425
|
+
})
|
|
323
426
|
})
|
|
324
427
|
})
|
|
325
428
|
|
|
@@ -329,11 +432,16 @@ describe('Peer class mutual authentication and certificate exchange', () => {
|
|
|
329
432
|
}, 15000)
|
|
330
433
|
|
|
331
434
|
it('Bob requests Alice to provide her membership status before granting access to premium content', async () => {
|
|
332
|
-
const alicePubKey = (await walletA.getPublicKey({ identityKey: true }))
|
|
333
|
-
|
|
435
|
+
const alicePubKey = (await walletA.getPublicKey({ identityKey: true }))
|
|
436
|
+
.publicKey
|
|
437
|
+
const bobPubKey = (await walletB.getPublicKey({ identityKey: true }))
|
|
438
|
+
.publicKey
|
|
334
439
|
|
|
335
440
|
// Alice's certificate includes her membership status
|
|
336
|
-
const aliceMasterCertificate = await createMasterCertificate(walletA, {
|
|
441
|
+
const aliceMasterCertificate = await createMasterCertificate(walletA, {
|
|
442
|
+
...aliceFields,
|
|
443
|
+
membershipStatus: 'Gold'
|
|
444
|
+
})
|
|
337
445
|
const aliceVerifiableCertificate = await createVerifiableCertificate(
|
|
338
446
|
aliceMasterCertificate,
|
|
339
447
|
walletA,
|
|
@@ -347,23 +455,37 @@ describe('Peer class mutual authentication and certificate exchange', () => {
|
|
|
347
455
|
types: { [certificateType]: ['membershipStatus'] }
|
|
348
456
|
}
|
|
349
457
|
|
|
350
|
-
const { bobReceivedCertificates } = setupPeers(false, true, {
|
|
351
|
-
|
|
458
|
+
const { bobReceivedCertificates } = setupPeers(false, true, {
|
|
459
|
+
bobCertsToRequest: bobCertificatesToRequest
|
|
460
|
+
})
|
|
461
|
+
await mockGetVerifiableCertificates(
|
|
462
|
+
aliceVerifiableCertificate,
|
|
463
|
+
undefined,
|
|
464
|
+
alicePubKey,
|
|
465
|
+
bobPubKey
|
|
466
|
+
)
|
|
352
467
|
|
|
353
468
|
const bobAcceptedMembershipStatus = jest.fn()
|
|
354
469
|
|
|
355
470
|
const waitForCerts = new Promise<void>((resolve) => {
|
|
356
|
-
bob.listenForCertificatesReceived(
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
471
|
+
bob.listenForCertificatesReceived((senderPublicKey, certificates) => {
|
|
472
|
+
(async () => {
|
|
473
|
+
for (const cert of certificates) {
|
|
474
|
+
// Decrypt Alice's certificate fields
|
|
475
|
+
const decryptedFields = await cert.decryptFields(walletB)
|
|
476
|
+
if (typeof decryptedFields.membershipStatus !== 'undefined') {
|
|
477
|
+
console.log(
|
|
478
|
+
`Bob received Alice's membership status: ${decryptedFields.membershipStatus}`
|
|
479
|
+
)
|
|
480
|
+
bobAcceptedMembershipStatus()
|
|
481
|
+
resolve()
|
|
482
|
+
}
|
|
364
483
|
}
|
|
365
|
-
}
|
|
366
|
-
|
|
484
|
+
})().catch((error) => {
|
|
485
|
+
console.error('Error processing certificates:', error)
|
|
486
|
+
})
|
|
487
|
+
}
|
|
488
|
+
)
|
|
367
489
|
})
|
|
368
490
|
|
|
369
491
|
const bobReceivedGeneralMessage = new Promise<void>((resolve) => {
|
|
@@ -374,22 +496,29 @@ describe('Peer class mutual authentication and certificate exchange', () => {
|
|
|
374
496
|
})
|
|
375
497
|
|
|
376
498
|
// Alice sends a message to Bob requesting access to premium content
|
|
377
|
-
await alice.toPeer(
|
|
499
|
+
await alice.toPeer(
|
|
500
|
+
Utils.toArray('I would like to access the premium content.')
|
|
501
|
+
)
|
|
378
502
|
await bobReceivedCertificates
|
|
379
503
|
await bobReceivedGeneralMessage
|
|
380
504
|
await waitForCerts
|
|
381
505
|
|
|
382
506
|
expect(bobAcceptedMembershipStatus).toHaveBeenCalled()
|
|
383
507
|
expect(certificatesReceivedByBob).toEqual([aliceVerifiableCertificate])
|
|
384
|
-
expect(certificatesReceivedByAlice).toEqual([])
|
|
508
|
+
expect(certificatesReceivedByAlice).toEqual([])
|
|
385
509
|
}, 15000)
|
|
386
510
|
|
|
387
|
-
it(
|
|
388
|
-
const alicePubKey = (await walletA.getPublicKey({ identityKey: true }))
|
|
389
|
-
|
|
511
|
+
it("Both peers require each other's driver's license before carpooling", async () => {
|
|
512
|
+
const alicePubKey = (await walletA.getPublicKey({ identityKey: true }))
|
|
513
|
+
.publicKey
|
|
514
|
+
const bobPubKey = (await walletB.getPublicKey({ identityKey: true }))
|
|
515
|
+
.publicKey
|
|
390
516
|
|
|
391
517
|
// Both Alice and Bob have driver's license certificates
|
|
392
|
-
const aliceMasterCertificate = await createMasterCertificate(walletA, {
|
|
518
|
+
const aliceMasterCertificate = await createMasterCertificate(walletA, {
|
|
519
|
+
...aliceFields,
|
|
520
|
+
driversLicenseNumber: 'DLA123456'
|
|
521
|
+
})
|
|
393
522
|
const aliceVerifiableCertificate = await createVerifiableCertificate(
|
|
394
523
|
aliceMasterCertificate,
|
|
395
524
|
walletA,
|
|
@@ -397,7 +526,10 @@ describe('Peer class mutual authentication and certificate exchange', () => {
|
|
|
397
526
|
['driversLicenseNumber']
|
|
398
527
|
)
|
|
399
528
|
|
|
400
|
-
const bobMasterCertificate = await createMasterCertificate(walletB, {
|
|
529
|
+
const bobMasterCertificate = await createMasterCertificate(walletB, {
|
|
530
|
+
...bobFields,
|
|
531
|
+
driversLicenseNumber: 'DLB654321'
|
|
532
|
+
})
|
|
401
533
|
const bobVerifiableCertificate = await createVerifiableCertificate(
|
|
402
534
|
bobMasterCertificate,
|
|
403
535
|
walletB,
|
|
@@ -411,46 +543,70 @@ describe('Peer class mutual authentication and certificate exchange', () => {
|
|
|
411
543
|
types: { [certificateType]: ['driversLicenseNumber'] }
|
|
412
544
|
}
|
|
413
545
|
|
|
414
|
-
const { aliceReceivedCertificates, bobReceivedCertificates } = setupPeers(
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
546
|
+
const { aliceReceivedCertificates, bobReceivedCertificates } = setupPeers(
|
|
547
|
+
true,
|
|
548
|
+
true,
|
|
549
|
+
{
|
|
550
|
+
aliceCertsToRequest: certificatesToRequestDriversLicense,
|
|
551
|
+
bobCertsToRequest: certificatesToRequestDriversLicense
|
|
552
|
+
}
|
|
553
|
+
)
|
|
554
|
+
await mockGetVerifiableCertificates(
|
|
555
|
+
aliceVerifiableCertificate,
|
|
556
|
+
bobVerifiableCertificate,
|
|
557
|
+
alicePubKey,
|
|
558
|
+
bobPubKey
|
|
559
|
+
)
|
|
419
560
|
|
|
420
561
|
const aliceAcceptedBobDL = jest.fn()
|
|
421
562
|
const bobAcceptedAliceDL = jest.fn()
|
|
422
563
|
|
|
423
564
|
const waitForAliceToAcceptBobDL = new Promise<void>((resolve) => {
|
|
424
|
-
alice.listenForCertificatesReceived(
|
|
425
|
-
|
|
426
|
-
const
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
565
|
+
alice.listenForCertificatesReceived((senderPublicKey, certificates) => {
|
|
566
|
+
(async () => {
|
|
567
|
+
for (const cert of certificates) {
|
|
568
|
+
const decryptedFields = await cert.decryptFields(walletA)
|
|
569
|
+
if (decryptedFields.driversLicenseNumber !== undefined) {
|
|
570
|
+
console.log(
|
|
571
|
+
`Alice received Bob's driver's license number: ${decryptedFields.driversLicenseNumber}`
|
|
572
|
+
)
|
|
573
|
+
aliceAcceptedBobDL()
|
|
574
|
+
resolve()
|
|
575
|
+
}
|
|
431
576
|
}
|
|
432
|
-
}
|
|
433
|
-
}
|
|
577
|
+
})().catch(e => console.log(e))
|
|
578
|
+
}
|
|
579
|
+
)
|
|
434
580
|
})
|
|
435
581
|
|
|
436
582
|
const waitForBobToAcceptAliceDL = new Promise<void>((resolve) => {
|
|
437
|
-
bob.listenForCertificatesReceived(
|
|
438
|
-
|
|
439
|
-
const
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
583
|
+
bob.listenForCertificatesReceived((senderPublicKey, certificates) => {
|
|
584
|
+
(async () => {
|
|
585
|
+
for (const cert of certificates) {
|
|
586
|
+
const decryptedFields = await cert.decryptFields(walletB)
|
|
587
|
+
if (decryptedFields.driversLicenseNumber !== undefined) {
|
|
588
|
+
console.log(
|
|
589
|
+
`Bob received Alice's driver's license number: ${decryptedFields.driversLicenseNumber}`
|
|
590
|
+
)
|
|
591
|
+
bobAcceptedAliceDL()
|
|
592
|
+
resolve()
|
|
593
|
+
}
|
|
444
594
|
}
|
|
445
|
-
}
|
|
446
|
-
}
|
|
595
|
+
})().catch(e => console.log(e))
|
|
596
|
+
}
|
|
597
|
+
)
|
|
447
598
|
})
|
|
448
599
|
|
|
449
600
|
const bobReceivedGeneralMessage = new Promise<void>((resolve) => {
|
|
450
|
-
bob.listenForGeneralMessages(
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
601
|
+
bob.listenForGeneralMessages((senderPublicKey, payload) => {
|
|
602
|
+
(async () => {
|
|
603
|
+
console.log('Bob received message from Alice:', Utils.toUTF8(payload))
|
|
604
|
+
await bob.toPeer(
|
|
605
|
+
Utils.toArray('Looking forward to carpooling!'),
|
|
606
|
+
senderPublicKey
|
|
607
|
+
)
|
|
608
|
+
resolve()
|
|
609
|
+
})().catch(e => console.log(e))
|
|
454
610
|
})
|
|
455
611
|
})
|
|
456
612
|
|
|
@@ -462,7 +618,9 @@ describe('Peer class mutual authentication and certificate exchange', () => {
|
|
|
462
618
|
})
|
|
463
619
|
|
|
464
620
|
// Alice initiates the conversation
|
|
465
|
-
await alice.toPeer(
|
|
621
|
+
await alice.toPeer(
|
|
622
|
+
Utils.toArray("Please share your driver's license number for carpooling.")
|
|
623
|
+
)
|
|
466
624
|
await aliceReceivedCertificates
|
|
467
625
|
await bobReceivedCertificates
|
|
468
626
|
await bobReceivedGeneralMessage
|
|
@@ -479,11 +637,16 @@ describe('Peer class mutual authentication and certificate exchange', () => {
|
|
|
479
637
|
}, 20000)
|
|
480
638
|
|
|
481
639
|
it('Peers accept partial certificates if at least one required field is present', async () => {
|
|
482
|
-
const alicePubKey = (await walletA.getPublicKey({ identityKey: true }))
|
|
483
|
-
|
|
640
|
+
const alicePubKey = (await walletA.getPublicKey({ identityKey: true }))
|
|
641
|
+
.publicKey
|
|
642
|
+
const bobPubKey = (await walletB.getPublicKey({ identityKey: true }))
|
|
643
|
+
.publicKey
|
|
484
644
|
|
|
485
645
|
// Alice's certificate contains 'name' and 'email'; Bob's contains only 'email'
|
|
486
|
-
const aliceMasterCertificate = await createMasterCertificate(walletA, {
|
|
646
|
+
const aliceMasterCertificate = await createMasterCertificate(walletA, {
|
|
647
|
+
name: 'Alice',
|
|
648
|
+
email: 'alice@example.com'
|
|
649
|
+
})
|
|
487
650
|
const aliceVerifiableCertificate = await createVerifiableCertificate(
|
|
488
651
|
aliceMasterCertificate,
|
|
489
652
|
walletA,
|
|
@@ -491,7 +654,9 @@ describe('Peer class mutual authentication and certificate exchange', () => {
|
|
|
491
654
|
['name', 'email']
|
|
492
655
|
)
|
|
493
656
|
|
|
494
|
-
const bobMasterCertificate = await createMasterCertificate(walletB, {
|
|
657
|
+
const bobMasterCertificate = await createMasterCertificate(walletB, {
|
|
658
|
+
email: 'bob@example.com'
|
|
659
|
+
})
|
|
495
660
|
const bobVerifiableCertificate = await createVerifiableCertificate(
|
|
496
661
|
bobMasterCertificate,
|
|
497
662
|
walletB,
|
|
@@ -504,38 +669,55 @@ describe('Peer class mutual authentication and certificate exchange', () => {
|
|
|
504
669
|
types: { [certificateType]: ['name', 'email'] }
|
|
505
670
|
}
|
|
506
671
|
|
|
507
|
-
const { aliceReceivedCertificates, bobReceivedCertificates } = setupPeers(
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
672
|
+
const { aliceReceivedCertificates, bobReceivedCertificates } = setupPeers(
|
|
673
|
+
true,
|
|
674
|
+
true,
|
|
675
|
+
{
|
|
676
|
+
aliceCertsToRequest: partialCertificatesToRequest,
|
|
677
|
+
bobCertsToRequest: partialCertificatesToRequest
|
|
678
|
+
}
|
|
679
|
+
)
|
|
680
|
+
await mockGetVerifiableCertificates(
|
|
681
|
+
aliceVerifiableCertificate,
|
|
682
|
+
bobVerifiableCertificate,
|
|
683
|
+
alicePubKey,
|
|
684
|
+
bobPubKey
|
|
685
|
+
)
|
|
512
686
|
|
|
513
687
|
const aliceAcceptedPartialCert = jest.fn()
|
|
514
688
|
const bobAcceptedPartialCert = jest.fn()
|
|
515
689
|
|
|
516
690
|
const waitForAlicePartialCert = new Promise<void>((resolve) => {
|
|
517
|
-
alice.listenForCertificatesReceived(
|
|
518
|
-
|
|
519
|
-
const
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
691
|
+
alice.listenForCertificatesReceived((senderPublicKey, certificates) => {
|
|
692
|
+
(async () => {
|
|
693
|
+
for (const cert of certificates) {
|
|
694
|
+
const decryptedFields = await cert.decryptFields(walletA)
|
|
695
|
+
if (decryptedFields.email !== undefined || decryptedFields.name !== undefined) {
|
|
696
|
+
console.log(
|
|
697
|
+
`Alice received Bob's certificate with fields: ${Object.keys(decryptedFields).join(', ')}`
|
|
698
|
+
)
|
|
699
|
+
aliceAcceptedPartialCert()
|
|
700
|
+
resolve()
|
|
701
|
+
}
|
|
524
702
|
}
|
|
525
|
-
}
|
|
703
|
+
})().catch(e => console.log(e))
|
|
526
704
|
})
|
|
527
705
|
})
|
|
528
706
|
|
|
529
707
|
const waitForBobPartialCert = new Promise<void>((resolve) => {
|
|
530
|
-
bob.listenForCertificatesReceived(
|
|
531
|
-
|
|
532
|
-
const
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
708
|
+
bob.listenForCertificatesReceived((senderPublicKey, certificates) => {
|
|
709
|
+
(async () => {
|
|
710
|
+
for (const cert of certificates) {
|
|
711
|
+
const decryptedFields = await cert.decryptFields(walletB)
|
|
712
|
+
if (decryptedFields.email !== undefined || decryptedFields.name !== undefined) {
|
|
713
|
+
console.log(
|
|
714
|
+
`Bob received Alice's certificate with fields: ${Object.keys(decryptedFields).join(', ')}`
|
|
715
|
+
)
|
|
716
|
+
bobAcceptedPartialCert()
|
|
717
|
+
resolve()
|
|
718
|
+
}
|
|
537
719
|
}
|
|
538
|
-
}
|
|
720
|
+
})().catch(e => console.log(e))
|
|
539
721
|
})
|
|
540
722
|
})
|
|
541
723
|
|