@bsv/sdk 1.6.7 → 1.6.9
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 +4 -4
- package/dist/cjs/src/auth/__tests/Peer.test.js +446 -0
- package/dist/cjs/src/auth/__tests/Peer.test.js.map +1 -0
- package/dist/cjs/src/auth/__tests/SessionManager.test.js +69 -0
- package/dist/cjs/src/auth/__tests/SessionManager.test.js.map +1 -0
- package/dist/cjs/src/auth/certificates/__tests/Certificate.test.js +182 -0
- package/dist/cjs/src/auth/certificates/__tests/Certificate.test.js.map +1 -0
- package/dist/cjs/src/auth/certificates/__tests/MasterCertificate.test.js +184 -0
- package/dist/cjs/src/auth/certificates/__tests/MasterCertificate.test.js.map +1 -0
- package/dist/cjs/src/auth/certificates/__tests/VerifiableCertificate.test.js +75 -0
- package/dist/cjs/src/auth/certificates/__tests/VerifiableCertificate.test.js.map +1 -0
- package/dist/cjs/src/auth/utils/__tests/cryptononce.test.js +101 -0
- package/dist/cjs/src/auth/utils/__tests/cryptononce.test.js.map +1 -0
- package/dist/cjs/src/auth/utils/__tests/getVerifiableCertificates.test.js +106 -0
- package/dist/cjs/src/auth/utils/__tests/getVerifiableCertificates.test.js.map +1 -0
- package/dist/cjs/src/auth/utils/__tests/validateCertificates.test.js +111 -0
- package/dist/cjs/src/auth/utils/__tests/validateCertificates.test.js.map +1 -0
- package/dist/cjs/src/auth/utils/certificateHelpers.js +51 -0
- package/dist/cjs/src/auth/utils/certificateHelpers.js.map +1 -0
- package/dist/cjs/src/compat/__tests/BSM.test.js +69 -0
- package/dist/cjs/src/compat/__tests/BSM.test.js.map +1 -0
- package/dist/cjs/src/compat/__tests/ECIES.test.js +115 -0
- package/dist/cjs/src/compat/__tests/ECIES.test.js.map +1 -0
- package/dist/cjs/src/compat/__tests/HD.test.js +336 -0
- package/dist/cjs/src/compat/__tests/HD.test.js.map +1 -0
- package/dist/cjs/src/compat/__tests/Mnemonic.test.js +150 -0
- package/dist/cjs/src/compat/__tests/Mnemonic.test.js.map +1 -0
- package/dist/cjs/src/compat/__tests/Mnemonic.vectors.js +175 -0
- package/dist/cjs/src/compat/__tests/Mnemonic.vectors.js.map +1 -0
- package/dist/cjs/src/messages/__tests/EncryptedMessage.test.js +57 -0
- package/dist/cjs/src/messages/__tests/EncryptedMessage.test.js.map +1 -0
- package/dist/cjs/src/messages/__tests/SignedMessage.test.js +52 -0
- package/dist/cjs/src/messages/__tests/SignedMessage.test.js.map +1 -0
- package/dist/cjs/src/overlay-tools/__tests/LookupResolver.test.js +1471 -0
- package/dist/cjs/src/overlay-tools/__tests/LookupResolver.test.js.map +1 -0
- package/dist/cjs/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.js +78 -0
- package/dist/cjs/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.js.map +1 -0
- package/dist/cjs/src/overlay-tools/__tests/SHIPBroadcaster.test.js +933 -0
- package/dist/cjs/src/overlay-tools/__tests/SHIPBroadcaster.test.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/AESGCM.test.js +248 -0
- package/dist/cjs/src/primitives/__tests/AESGCM.test.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/BRC42.private.vectors.js +36 -0
- package/dist/cjs/src/primitives/__tests/BRC42.private.vectors.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/BRC42.public.vectors.js +36 -0
- package/dist/cjs/src/primitives/__tests/BRC42.public.vectors.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/BigNumber.arithmatic.test.js +501 -0
- package/dist/cjs/src/primitives/__tests/BigNumber.arithmatic.test.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/BigNumber.binary.test.js +185 -0
- package/dist/cjs/src/primitives/__tests/BigNumber.binary.test.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/BigNumber.constructor.test.js +149 -0
- package/dist/cjs/src/primitives/__tests/BigNumber.constructor.test.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/BigNumber.dhGroup.test.js +23 -0
- package/dist/cjs/src/primitives/__tests/BigNumber.dhGroup.test.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/BigNumber.fixtures.js +268 -0
- package/dist/cjs/src/primitives/__tests/BigNumber.fixtures.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/BigNumber.serializers.test.js +147 -0
- package/dist/cjs/src/primitives/__tests/BigNumber.serializers.test.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/BigNumber.utils.test.js +322 -0
- package/dist/cjs/src/primitives/__tests/BigNumber.utils.test.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/Curve.unit.test.js +145 -0
- package/dist/cjs/src/primitives/__tests/Curve.unit.test.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/DRBG.test.js +22 -0
- package/dist/cjs/src/primitives/__tests/DRBG.test.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/DRBG.vectors.js +170 -0
- package/dist/cjs/src/primitives/__tests/DRBG.vectors.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/ECDH.test.js +34 -0
- package/dist/cjs/src/primitives/__tests/ECDH.test.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/ECDSA.test.js +89 -0
- package/dist/cjs/src/primitives/__tests/ECDSA.test.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/HMAC.test.js +60 -0
- package/dist/cjs/src/primitives/__tests/HMAC.test.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/Hash.test.js +159 -0
- package/dist/cjs/src/primitives/__tests/Hash.test.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/PBKDF2.vectors.js +122 -0
- package/dist/cjs/src/primitives/__tests/PBKDF2.vectors.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/PrivateKey.split.test.js +105 -0
- package/dist/cjs/src/primitives/__tests/PrivateKey.split.test.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/PrivateKey.test.js +90 -0
- package/dist/cjs/src/primitives/__tests/PrivateKey.test.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/PublicKey.test.js +83 -0
- package/dist/cjs/src/primitives/__tests/PublicKey.test.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/Random.test.js +19 -0
- package/dist/cjs/src/primitives/__tests/Random.test.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/Reader.test.js +282 -0
- package/dist/cjs/src/primitives/__tests/Reader.test.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/ReductionContext.test.js +224 -0
- package/dist/cjs/src/primitives/__tests/ReductionContext.test.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/Schnorr.test.js +213 -0
- package/dist/cjs/src/primitives/__tests/Schnorr.test.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/SymmetricKey.test.js +51 -0
- package/dist/cjs/src/primitives/__tests/SymmetricKey.test.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/SymmetricKey.vectors.js +43 -0
- package/dist/cjs/src/primitives/__tests/SymmetricKey.vectors.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/Writer.test.js +176 -0
- package/dist/cjs/src/primitives/__tests/Writer.test.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/bug-31.test.js +32 -0
- package/dist/cjs/src/primitives/__tests/bug-31.test.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/sighash.vectors.js +3506 -0
- package/dist/cjs/src/primitives/__tests/sighash.vectors.js.map +1 -0
- package/dist/cjs/src/primitives/__tests/utils.test.js +110 -0
- package/dist/cjs/src/primitives/__tests/utils.test.js.map +1 -0
- package/dist/cjs/src/primitives/utils.js +18 -2
- package/dist/cjs/src/primitives/utils.js.map +1 -1
- package/dist/cjs/src/script/__tests/Script.test.js +347 -0
- package/dist/cjs/src/script/__tests/Script.test.js.map +1 -0
- package/dist/cjs/src/script/__tests/Spend.test.js +282 -0
- package/dist/cjs/src/script/__tests/Spend.test.js.map +1 -0
- package/dist/cjs/src/script/__tests/SpendComplex.test.js +52 -0
- package/dist/cjs/src/script/__tests/SpendComplex.test.js.map +1 -0
- package/dist/cjs/src/script/__tests/script.invalid.vectors.js +2370 -0
- package/dist/cjs/src/script/__tests/script.invalid.vectors.js.map +1 -0
- package/dist/cjs/src/script/__tests/script.valid.vectors.js +1181 -0
- package/dist/cjs/src/script/__tests/script.valid.vectors.js.map +1 -0
- package/dist/cjs/src/script/__tests/spend.valid.vectors.js +2298 -0
- package/dist/cjs/src/script/__tests/spend.valid.vectors.js.map +1 -0
- package/dist/cjs/src/script/templates/__tests/PushDrop.test.js +161 -0
- package/dist/cjs/src/script/templates/__tests/PushDrop.test.js.map +1 -0
- package/dist/cjs/src/totp/__tests/totp.test.js +67 -0
- package/dist/cjs/src/totp/__tests/totp.test.js.map +1 -0
- package/dist/cjs/src/transaction/__tests/Beef.test.js +393 -0
- package/dist/cjs/src/transaction/__tests/Beef.test.js.map +1 -0
- package/dist/cjs/src/transaction/__tests/MerklePath.test.js +209 -0
- package/dist/cjs/src/transaction/__tests/MerklePath.test.js.map +1 -0
- package/dist/cjs/src/transaction/__tests/Transaction.benchmarks.test.js +219 -0
- package/dist/cjs/src/transaction/__tests/Transaction.benchmarks.test.js.map +1 -0
- package/dist/cjs/src/transaction/__tests/Transaction.test.js +1073 -0
- package/dist/cjs/src/transaction/__tests/Transaction.test.js.map +1 -0
- package/dist/cjs/src/transaction/__tests/bigtx.vectors.js +7 -0
- package/dist/cjs/src/transaction/__tests/bigtx.vectors.js.map +1 -0
- package/dist/cjs/src/transaction/__tests/bump.invalid.vectors.js +11 -0
- package/dist/cjs/src/transaction/__tests/bump.invalid.vectors.js.map +1 -0
- package/dist/cjs/src/transaction/__tests/bump.valid.vectors.js +7 -0
- package/dist/cjs/src/transaction/__tests/bump.valid.vectors.js.map +1 -0
- package/dist/cjs/src/transaction/__tests/tx.invalid.vectors.js +230 -0
- package/dist/cjs/src/transaction/__tests/tx.invalid.vectors.js.map +1 -0
- package/dist/cjs/src/transaction/__tests/tx.valid.vectors.js +296 -0
- package/dist/cjs/src/transaction/__tests/tx.valid.vectors.js.map +1 -0
- package/dist/cjs/src/transaction/broadcasters/__tests/ARC.test.js +246 -0
- package/dist/cjs/src/transaction/broadcasters/__tests/ARC.test.js.map +1 -0
- package/dist/cjs/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.js +148 -0
- package/dist/cjs/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.js.map +1 -0
- package/dist/cjs/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.js +155 -0
- package/dist/cjs/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.js.map +1 -0
- package/dist/cjs/src/wallet/ScriptTemplateSABPPP.js +39 -0
- package/dist/cjs/src/wallet/ScriptTemplateSABPPP.js.map +1 -0
- package/dist/cjs/src/wallet/WalletSigner.js +260 -0
- package/dist/cjs/src/wallet/WalletSigner.js.map +1 -0
- package/dist/cjs/src/wallet/__tests/CachedKeyDeriver.test.js +269 -0
- package/dist/cjs/src/wallet/__tests/CachedKeyDeriver.test.js.map +1 -0
- package/dist/cjs/src/wallet/__tests/KeyDeriver.test.js +114 -0
- package/dist/cjs/src/wallet/__tests/KeyDeriver.test.js.map +1 -0
- package/dist/cjs/src/wallet/__tests/ProtoWallet.test.js +475 -0
- package/dist/cjs/src/wallet/__tests/ProtoWallet.test.js.map +1 -0
- package/dist/cjs/src/wallet/createActionSdk.js +230 -0
- package/dist/cjs/src/wallet/createActionSdk.js.map +1 -0
- package/dist/cjs/src/wallet/sdk/CachedKeyDeriver.js +174 -0
- package/dist/cjs/src/wallet/sdk/CachedKeyDeriver.js.map +1 -0
- package/dist/cjs/src/wallet/sdk/CertOps.js +181 -0
- package/dist/cjs/src/wallet/sdk/CertOps.js.map +1 -0
- package/dist/cjs/src/wallet/sdk/Certificate.js +162 -0
- package/dist/cjs/src/wallet/sdk/Certificate.js.map +1 -0
- package/dist/cjs/src/wallet/sdk/KeyDeriver.js +176 -0
- package/dist/cjs/src/wallet/sdk/KeyDeriver.js.map +1 -0
- package/dist/cjs/src/wallet/sdk/ProtoWallet.js +75 -0
- package/dist/cjs/src/wallet/sdk/ProtoWallet.js.map +1 -0
- package/dist/cjs/src/wallet/sdk/StorageSyncReader.js +3 -0
- package/dist/cjs/src/wallet/sdk/StorageSyncReader.js.map +1 -0
- package/dist/cjs/src/wallet/sdk/WERR_errors.js +107 -0
- package/dist/cjs/src/wallet/sdk/WERR_errors.js.map +1 -0
- package/dist/cjs/src/wallet/sdk/Wallet.interfaces.js +3 -0
- package/dist/cjs/src/wallet/sdk/Wallet.interfaces.js.map +1 -0
- package/dist/cjs/src/wallet/sdk/WalletCrypto.js +171 -0
- package/dist/cjs/src/wallet/sdk/WalletCrypto.js.map +1 -0
- package/dist/cjs/src/wallet/sdk/WalletError.js +103 -0
- package/dist/cjs/src/wallet/sdk/WalletError.js.map +1 -0
- package/dist/cjs/src/wallet/sdk/WalletServices.interfaces.js +3 -0
- package/dist/cjs/src/wallet/sdk/WalletServices.interfaces.js.map +1 -0
- package/dist/cjs/src/wallet/sdk/WalletSigner.interfaces.js +3 -0
- package/dist/cjs/src/wallet/sdk/WalletSigner.interfaces.js.map +1 -0
- package/dist/cjs/src/wallet/sdk/WalletStorage.interfaces.js +3 -0
- package/dist/cjs/src/wallet/sdk/WalletStorage.interfaces.js.map +1 -0
- package/dist/cjs/src/wallet/sdk/index.js +31 -0
- package/dist/cjs/src/wallet/sdk/index.js.map +1 -0
- package/dist/cjs/src/wallet/sdk/types.js +11 -0
- package/dist/cjs/src/wallet/sdk/types.js.map +1 -0
- package/dist/cjs/src/wallet/sdk/validationHelpers.js +601 -0
- package/dist/cjs/src/wallet/sdk/validationHelpers.js.map +1 -0
- package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js +11 -3
- package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js +1 -1
- package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/__tests/WalletWire.integration.test.js +1962 -0
- package/dist/cjs/src/wallet/substrates/__tests/WalletWire.integration.test.js.map +1 -0
- package/dist/cjs/src/wallet/substrates/__tests/XDM.test.js +579 -0
- package/dist/cjs/src/wallet/substrates/__tests/XDM.test.js.map +1 -0
- package/dist/cjs/src/wallet/substrates/utils/toOriginHeader.js +21 -0
- package/dist/cjs/src/wallet/substrates/utils/toOriginHeader.js.map +1 -0
- package/dist/cjs/src/wallet/utilityHelpers.js +305 -0
- package/dist/cjs/src/wallet/utilityHelpers.js.map +1 -0
- package/dist/cjs/src/wallet/validationHelpers.js +601 -0
- package/dist/cjs/src/wallet/validationHelpers.js.map +1 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/src/auth/__tests/Peer.test.js +448 -0
- package/dist/esm/src/auth/__tests/Peer.test.js.map +1 -0
- package/dist/esm/src/auth/__tests/SessionManager.test.js +69 -0
- package/dist/esm/src/auth/__tests/SessionManager.test.js.map +1 -0
- package/dist/esm/src/auth/certificates/__tests/Certificate.test.js +182 -0
- package/dist/esm/src/auth/certificates/__tests/Certificate.test.js.map +1 -0
- package/dist/esm/src/auth/certificates/__tests/MasterCertificate.test.js +184 -0
- package/dist/esm/src/auth/certificates/__tests/MasterCertificate.test.js.map +1 -0
- package/dist/esm/src/auth/certificates/__tests/VerifiableCertificate.test.js +75 -0
- package/dist/esm/src/auth/certificates/__tests/VerifiableCertificate.test.js.map +1 -0
- package/dist/esm/src/auth/utils/__tests/cryptononce.test.js +101 -0
- package/dist/esm/src/auth/utils/__tests/cryptononce.test.js.map +1 -0
- package/dist/esm/src/auth/utils/__tests/getVerifiableCertificates.test.js +106 -0
- package/dist/esm/src/auth/utils/__tests/getVerifiableCertificates.test.js.map +1 -0
- package/dist/esm/src/auth/utils/__tests/validateCertificates.test.js +111 -0
- package/dist/esm/src/auth/utils/__tests/validateCertificates.test.js.map +1 -0
- package/dist/esm/src/auth/utils/certificateHelpers.js +47 -0
- package/dist/esm/src/auth/utils/certificateHelpers.js.map +1 -0
- package/dist/esm/src/compat/__tests/BSM.test.js +69 -0
- package/dist/esm/src/compat/__tests/BSM.test.js.map +1 -0
- package/dist/esm/src/compat/__tests/ECIES.test.js +115 -0
- package/dist/esm/src/compat/__tests/ECIES.test.js.map +1 -0
- package/dist/esm/src/compat/__tests/HD.test.js +336 -0
- package/dist/esm/src/compat/__tests/HD.test.js.map +1 -0
- package/dist/esm/src/compat/__tests/Mnemonic.test.js +150 -0
- package/dist/esm/src/compat/__tests/Mnemonic.test.js.map +1 -0
- package/dist/esm/src/compat/__tests/Mnemonic.vectors.js +175 -0
- package/dist/esm/src/compat/__tests/Mnemonic.vectors.js.map +1 -0
- package/dist/esm/src/messages/__tests/EncryptedMessage.test.js +57 -0
- package/dist/esm/src/messages/__tests/EncryptedMessage.test.js.map +1 -0
- package/dist/esm/src/messages/__tests/SignedMessage.test.js +52 -0
- package/dist/esm/src/messages/__tests/SignedMessage.test.js.map +1 -0
- package/dist/esm/src/overlay-tools/__tests/LookupResolver.test.js +1471 -0
- package/dist/esm/src/overlay-tools/__tests/LookupResolver.test.js.map +1 -0
- package/dist/esm/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.js +78 -0
- package/dist/esm/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.js.map +1 -0
- package/dist/esm/src/overlay-tools/__tests/SHIPBroadcaster.test.js +933 -0
- package/dist/esm/src/overlay-tools/__tests/SHIPBroadcaster.test.js.map +1 -0
- package/dist/esm/src/primitives/__tests/AESGCM.test.js +248 -0
- package/dist/esm/src/primitives/__tests/AESGCM.test.js.map +1 -0
- package/dist/esm/src/primitives/__tests/BRC42.private.vectors.js +36 -0
- package/dist/esm/src/primitives/__tests/BRC42.private.vectors.js.map +1 -0
- package/dist/esm/src/primitives/__tests/BRC42.public.vectors.js +36 -0
- package/dist/esm/src/primitives/__tests/BRC42.public.vectors.js.map +1 -0
- package/dist/esm/src/primitives/__tests/BigNumber.arithmatic.test.js +501 -0
- package/dist/esm/src/primitives/__tests/BigNumber.arithmatic.test.js.map +1 -0
- package/dist/esm/src/primitives/__tests/BigNumber.binary.test.js +185 -0
- package/dist/esm/src/primitives/__tests/BigNumber.binary.test.js.map +1 -0
- package/dist/esm/src/primitives/__tests/BigNumber.constructor.test.js +149 -0
- package/dist/esm/src/primitives/__tests/BigNumber.constructor.test.js.map +1 -0
- package/dist/esm/src/primitives/__tests/BigNumber.dhGroup.test.js +23 -0
- package/dist/esm/src/primitives/__tests/BigNumber.dhGroup.test.js.map +1 -0
- package/dist/esm/src/primitives/__tests/BigNumber.fixtures.js +268 -0
- package/dist/esm/src/primitives/__tests/BigNumber.fixtures.js.map +1 -0
- package/dist/esm/src/primitives/__tests/BigNumber.serializers.test.js +147 -0
- package/dist/esm/src/primitives/__tests/BigNumber.serializers.test.js.map +1 -0
- package/dist/esm/src/primitives/__tests/BigNumber.utils.test.js +322 -0
- package/dist/esm/src/primitives/__tests/BigNumber.utils.test.js.map +1 -0
- package/dist/esm/src/primitives/__tests/Curve.unit.test.js +145 -0
- package/dist/esm/src/primitives/__tests/Curve.unit.test.js.map +1 -0
- package/dist/esm/src/primitives/__tests/DRBG.test.js +22 -0
- package/dist/esm/src/primitives/__tests/DRBG.test.js.map +1 -0
- package/dist/esm/src/primitives/__tests/DRBG.vectors.js +170 -0
- package/dist/esm/src/primitives/__tests/DRBG.vectors.js.map +1 -0
- package/dist/esm/src/primitives/__tests/ECDH.test.js +34 -0
- package/dist/esm/src/primitives/__tests/ECDH.test.js.map +1 -0
- package/dist/esm/src/primitives/__tests/ECDSA.test.js +89 -0
- package/dist/esm/src/primitives/__tests/ECDSA.test.js.map +1 -0
- package/dist/esm/src/primitives/__tests/HMAC.test.js +60 -0
- package/dist/esm/src/primitives/__tests/HMAC.test.js.map +1 -0
- package/dist/esm/src/primitives/__tests/Hash.test.js +159 -0
- package/dist/esm/src/primitives/__tests/Hash.test.js.map +1 -0
- package/dist/esm/src/primitives/__tests/PBKDF2.vectors.js +122 -0
- package/dist/esm/src/primitives/__tests/PBKDF2.vectors.js.map +1 -0
- package/dist/esm/src/primitives/__tests/PrivateKey.split.test.js +105 -0
- package/dist/esm/src/primitives/__tests/PrivateKey.split.test.js.map +1 -0
- package/dist/esm/src/primitives/__tests/PrivateKey.test.js +90 -0
- package/dist/esm/src/primitives/__tests/PrivateKey.test.js.map +1 -0
- package/dist/esm/src/primitives/__tests/PublicKey.test.js +83 -0
- package/dist/esm/src/primitives/__tests/PublicKey.test.js.map +1 -0
- package/dist/esm/src/primitives/__tests/Random.test.js +19 -0
- package/dist/esm/src/primitives/__tests/Random.test.js.map +1 -0
- package/dist/esm/src/primitives/__tests/Reader.test.js +282 -0
- package/dist/esm/src/primitives/__tests/Reader.test.js.map +1 -0
- package/dist/esm/src/primitives/__tests/ReductionContext.test.js +223 -0
- package/dist/esm/src/primitives/__tests/ReductionContext.test.js.map +1 -0
- package/dist/esm/src/primitives/__tests/Schnorr.test.js +213 -0
- package/dist/esm/src/primitives/__tests/Schnorr.test.js.map +1 -0
- package/dist/esm/src/primitives/__tests/SymmetricKey.test.js +51 -0
- package/dist/esm/src/primitives/__tests/SymmetricKey.test.js.map +1 -0
- package/dist/esm/src/primitives/__tests/SymmetricKey.vectors.js +43 -0
- package/dist/esm/src/primitives/__tests/SymmetricKey.vectors.js.map +1 -0
- package/dist/esm/src/primitives/__tests/Writer.test.js +176 -0
- package/dist/esm/src/primitives/__tests/Writer.test.js.map +1 -0
- package/dist/esm/src/primitives/__tests/bug-31.test.js +32 -0
- package/dist/esm/src/primitives/__tests/bug-31.test.js.map +1 -0
- package/dist/esm/src/primitives/__tests/sighash.vectors.js +3506 -0
- package/dist/esm/src/primitives/__tests/sighash.vectors.js.map +1 -0
- package/dist/esm/src/primitives/__tests/utils.test.js +110 -0
- package/dist/esm/src/primitives/__tests/utils.test.js.map +1 -0
- package/dist/esm/src/primitives/utils.js +18 -2
- package/dist/esm/src/primitives/utils.js.map +1 -1
- package/dist/esm/src/script/__tests/Script.test.js +347 -0
- package/dist/esm/src/script/__tests/Script.test.js.map +1 -0
- package/dist/esm/src/script/__tests/Spend.test.js +282 -0
- package/dist/esm/src/script/__tests/Spend.test.js.map +1 -0
- package/dist/esm/src/script/__tests/SpendComplex.test.js +51 -0
- package/dist/esm/src/script/__tests/SpendComplex.test.js.map +1 -0
- package/dist/esm/src/script/__tests/script.invalid.vectors.js +2370 -0
- package/dist/esm/src/script/__tests/script.invalid.vectors.js.map +1 -0
- package/dist/esm/src/script/__tests/script.valid.vectors.js +1181 -0
- package/dist/esm/src/script/__tests/script.valid.vectors.js.map +1 -0
- package/dist/esm/src/script/__tests/spend.valid.vectors.js +2298 -0
- package/dist/esm/src/script/__tests/spend.valid.vectors.js.map +1 -0
- package/dist/esm/src/script/templates/__tests/PushDrop.test.js +161 -0
- package/dist/esm/src/script/templates/__tests/PushDrop.test.js.map +1 -0
- package/dist/esm/src/totp/__tests/totp.test.js +67 -0
- package/dist/esm/src/totp/__tests/totp.test.js.map +1 -0
- package/dist/esm/src/transaction/__tests/Beef.test.js +393 -0
- package/dist/esm/src/transaction/__tests/Beef.test.js.map +1 -0
- package/dist/esm/src/transaction/__tests/MerklePath.test.js +209 -0
- package/dist/esm/src/transaction/__tests/MerklePath.test.js.map +1 -0
- package/dist/esm/src/transaction/__tests/Transaction.benchmarks.test.js +219 -0
- package/dist/esm/src/transaction/__tests/Transaction.benchmarks.test.js.map +1 -0
- package/dist/esm/src/transaction/__tests/Transaction.test.js +1072 -0
- package/dist/esm/src/transaction/__tests/Transaction.test.js.map +1 -0
- package/dist/esm/src/transaction/__tests/bigtx.vectors.js +7 -0
- package/dist/esm/src/transaction/__tests/bigtx.vectors.js.map +1 -0
- package/dist/esm/src/transaction/__tests/bump.invalid.vectors.js +11 -0
- package/dist/esm/src/transaction/__tests/bump.invalid.vectors.js.map +1 -0
- package/dist/esm/src/transaction/__tests/bump.valid.vectors.js +7 -0
- package/dist/esm/src/transaction/__tests/bump.valid.vectors.js.map +1 -0
- package/dist/esm/src/transaction/__tests/tx.invalid.vectors.js +230 -0
- package/dist/esm/src/transaction/__tests/tx.invalid.vectors.js.map +1 -0
- package/dist/esm/src/transaction/__tests/tx.valid.vectors.js +296 -0
- package/dist/esm/src/transaction/__tests/tx.valid.vectors.js.map +1 -0
- package/dist/esm/src/transaction/broadcasters/__tests/ARC.test.js +246 -0
- package/dist/esm/src/transaction/broadcasters/__tests/ARC.test.js.map +1 -0
- package/dist/esm/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.js +148 -0
- package/dist/esm/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.js.map +1 -0
- package/dist/esm/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.js +155 -0
- package/dist/esm/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.js.map +1 -0
- package/dist/esm/src/wallet/ScriptTemplateSABPPP.js +37 -0
- package/dist/esm/src/wallet/ScriptTemplateSABPPP.js.map +1 -0
- package/dist/esm/src/wallet/WalletSigner.js +263 -0
- package/dist/esm/src/wallet/WalletSigner.js.map +1 -0
- package/dist/esm/src/wallet/__tests/CachedKeyDeriver.test.js +269 -0
- package/dist/esm/src/wallet/__tests/CachedKeyDeriver.test.js.map +1 -0
- package/dist/esm/src/wallet/__tests/KeyDeriver.test.js +113 -0
- package/dist/esm/src/wallet/__tests/KeyDeriver.test.js.map +1 -0
- package/dist/esm/src/wallet/__tests/ProtoWallet.test.js +475 -0
- package/dist/esm/src/wallet/__tests/ProtoWallet.test.js.map +1 -0
- package/dist/esm/src/wallet/createActionSdk.js +223 -0
- package/dist/esm/src/wallet/createActionSdk.js.map +1 -0
- package/dist/esm/src/wallet/sdk/CachedKeyDeriver.js +174 -0
- package/dist/esm/src/wallet/sdk/CachedKeyDeriver.js.map +1 -0
- package/dist/esm/src/wallet/sdk/CertOps.js +181 -0
- package/dist/esm/src/wallet/sdk/CertOps.js.map +1 -0
- package/dist/esm/src/wallet/sdk/Certificate.js +186 -0
- package/dist/esm/src/wallet/sdk/Certificate.js.map +1 -0
- package/dist/esm/src/wallet/sdk/KeyDeriver.js +174 -0
- package/dist/esm/src/wallet/sdk/KeyDeriver.js.map +1 -0
- package/dist/esm/src/wallet/sdk/ProtoWallet.js +71 -0
- package/dist/esm/src/wallet/sdk/ProtoWallet.js.map +1 -0
- package/dist/esm/src/wallet/sdk/StorageSyncReader.js +2 -0
- package/dist/esm/src/wallet/sdk/StorageSyncReader.js.map +1 -0
- package/dist/esm/src/wallet/sdk/WERR_errors.js +99 -0
- package/dist/esm/src/wallet/sdk/WERR_errors.js.map +1 -0
- package/dist/esm/src/wallet/sdk/Wallet.interfaces.js +2 -0
- package/dist/esm/src/wallet/sdk/Wallet.interfaces.js.map +1 -0
- package/dist/esm/src/wallet/sdk/WalletCrypto.js +168 -0
- package/dist/esm/src/wallet/sdk/WalletCrypto.js.map +1 -0
- package/dist/esm/src/wallet/sdk/WalletError.js +100 -0
- package/dist/esm/src/wallet/sdk/WalletError.js.map +1 -0
- package/dist/esm/src/wallet/sdk/WalletServices.interfaces.js +2 -0
- package/dist/esm/src/wallet/sdk/WalletServices.interfaces.js.map +1 -0
- package/dist/esm/src/wallet/sdk/WalletSigner.interfaces.js +2 -0
- package/dist/esm/src/wallet/sdk/WalletSigner.interfaces.js.map +1 -0
- package/dist/esm/src/wallet/sdk/WalletStorage.interfaces.js +2 -0
- package/dist/esm/src/wallet/sdk/WalletStorage.interfaces.js.map +1 -0
- package/dist/esm/src/wallet/sdk/index.js +15 -0
- package/dist/esm/src/wallet/sdk/index.js.map +1 -0
- package/dist/esm/src/wallet/sdk/types.js +8 -0
- package/dist/esm/src/wallet/sdk/types.js.map +1 -0
- package/dist/esm/src/wallet/sdk/validationHelpers.js +566 -0
- package/dist/esm/src/wallet/sdk/validationHelpers.js.map +1 -0
- package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js +9 -1
- package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
- package/dist/esm/src/wallet/substrates/WalletWireProcessor.js +1 -1
- package/dist/esm/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
- package/dist/esm/src/wallet/substrates/__tests/WalletWire.integration.test.js +1962 -0
- package/dist/esm/src/wallet/substrates/__tests/WalletWire.integration.test.js.map +1 -0
- package/dist/esm/src/wallet/substrates/__tests/XDM.test.js +579 -0
- package/dist/esm/src/wallet/substrates/__tests/XDM.test.js.map +1 -0
- package/dist/esm/src/wallet/substrates/utils/toOriginHeader.js +17 -0
- package/dist/esm/src/wallet/substrates/utils/toOriginHeader.js.map +1 -0
- package/dist/esm/src/wallet/utilityHelpers.js +275 -0
- package/dist/esm/src/wallet/utilityHelpers.js.map +1 -0
- package/dist/esm/src/wallet/validationHelpers.js +566 -0
- package/dist/esm/src/wallet/validationHelpers.js.map +1 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/types/src/auth/__tests/Peer.test.d.ts +2 -0
- package/dist/types/src/auth/__tests/Peer.test.d.ts.map +1 -0
- package/dist/types/src/auth/__tests/SessionManager.test.d.ts +2 -0
- package/dist/types/src/auth/__tests/SessionManager.test.d.ts.map +1 -0
- package/dist/types/src/auth/certificates/__tests/Certificate.test.d.ts +2 -0
- package/dist/types/src/auth/certificates/__tests/Certificate.test.d.ts.map +1 -0
- package/dist/types/src/auth/certificates/__tests/MasterCertificate.test.d.ts +2 -0
- package/dist/types/src/auth/certificates/__tests/MasterCertificate.test.d.ts.map +1 -0
- package/dist/types/src/auth/certificates/__tests/VerifiableCertificate.test.d.ts +2 -0
- package/dist/types/src/auth/certificates/__tests/VerifiableCertificate.test.d.ts.map +1 -0
- package/dist/types/src/auth/utils/__tests/cryptononce.test.d.ts +2 -0
- package/dist/types/src/auth/utils/__tests/cryptononce.test.d.ts.map +1 -0
- package/dist/types/src/auth/utils/__tests/getVerifiableCertificates.test.d.ts +2 -0
- package/dist/types/src/auth/utils/__tests/getVerifiableCertificates.test.d.ts.map +1 -0
- package/dist/types/src/auth/utils/__tests/validateCertificates.test.d.ts +2 -0
- package/dist/types/src/auth/utils/__tests/validateCertificates.test.d.ts.map +1 -0
- package/dist/types/src/auth/utils/certificateHelpers.d.ts +26 -0
- package/dist/types/src/auth/utils/certificateHelpers.d.ts.map +1 -0
- package/dist/types/src/compat/__tests/BSM.test.d.ts +2 -0
- package/dist/types/src/compat/__tests/BSM.test.d.ts.map +1 -0
- package/dist/types/src/compat/__tests/ECIES.test.d.ts +2 -0
- package/dist/types/src/compat/__tests/ECIES.test.d.ts.map +1 -0
- package/dist/types/src/compat/__tests/HD.test.d.ts +2 -0
- package/dist/types/src/compat/__tests/HD.test.d.ts.map +1 -0
- package/dist/types/src/compat/__tests/Mnemonic.test.d.ts +2 -0
- package/dist/types/src/compat/__tests/Mnemonic.test.d.ts.map +1 -0
- package/dist/types/src/compat/__tests/Mnemonic.vectors.d.ts +11 -0
- package/dist/types/src/compat/__tests/Mnemonic.vectors.d.ts.map +1 -0
- package/dist/types/src/messages/__tests/EncryptedMessage.test.d.ts +2 -0
- package/dist/types/src/messages/__tests/EncryptedMessage.test.d.ts.map +1 -0
- package/dist/types/src/messages/__tests/SignedMessage.test.d.ts +2 -0
- package/dist/types/src/messages/__tests/SignedMessage.test.d.ts.map +1 -0
- package/dist/types/src/overlay-tools/__tests/LookupResolver.test.d.ts +2 -0
- package/dist/types/src/overlay-tools/__tests/LookupResolver.test.d.ts.map +1 -0
- package/dist/types/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.d.ts +2 -0
- package/dist/types/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.d.ts.map +1 -0
- package/dist/types/src/overlay-tools/__tests/SHIPBroadcaster.test.d.ts +2 -0
- package/dist/types/src/overlay-tools/__tests/SHIPBroadcaster.test.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/AESGCM.test.d.ts +2 -0
- package/dist/types/src/primitives/__tests/AESGCM.test.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/BRC42.private.vectors.d.ts +8 -0
- package/dist/types/src/primitives/__tests/BRC42.private.vectors.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/BRC42.public.vectors.d.ts +8 -0
- package/dist/types/src/primitives/__tests/BRC42.public.vectors.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/BigNumber.arithmatic.test.d.ts +2 -0
- package/dist/types/src/primitives/__tests/BigNumber.arithmatic.test.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/BigNumber.binary.test.d.ts +2 -0
- package/dist/types/src/primitives/__tests/BigNumber.binary.test.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/BigNumber.constructor.test.d.ts +2 -0
- package/dist/types/src/primitives/__tests/BigNumber.constructor.test.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/BigNumber.dhGroup.test.d.ts +2 -0
- package/dist/types/src/primitives/__tests/BigNumber.dhGroup.test.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/BigNumber.fixtures.d.ts +15 -0
- package/dist/types/src/primitives/__tests/BigNumber.fixtures.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/BigNumber.serializers.test.d.ts +2 -0
- package/dist/types/src/primitives/__tests/BigNumber.serializers.test.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/BigNumber.utils.test.d.ts +2 -0
- package/dist/types/src/primitives/__tests/BigNumber.utils.test.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/Curve.unit.test.d.ts +2 -0
- package/dist/types/src/primitives/__tests/Curve.unit.test.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/DRBG.test.d.ts +2 -0
- package/dist/types/src/primitives/__tests/DRBG.test.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/DRBG.vectors.d.ts +10 -0
- package/dist/types/src/primitives/__tests/DRBG.vectors.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/ECDH.test.d.ts +2 -0
- package/dist/types/src/primitives/__tests/ECDH.test.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/ECDSA.test.d.ts +2 -0
- package/dist/types/src/primitives/__tests/ECDSA.test.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/HMAC.test.d.ts +2 -0
- package/dist/types/src/primitives/__tests/HMAC.test.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/Hash.test.d.ts +2 -0
- package/dist/types/src/primitives/__tests/Hash.test.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/PBKDF2.vectors.d.ts +68 -0
- package/dist/types/src/primitives/__tests/PBKDF2.vectors.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/PrivateKey.split.test.d.ts +2 -0
- package/dist/types/src/primitives/__tests/PrivateKey.split.test.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/PrivateKey.test.d.ts +2 -0
- package/dist/types/src/primitives/__tests/PrivateKey.test.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/PublicKey.test.d.ts +2 -0
- package/dist/types/src/primitives/__tests/PublicKey.test.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/Random.test.d.ts +2 -0
- package/dist/types/src/primitives/__tests/Random.test.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/Reader.test.d.ts +2 -0
- package/dist/types/src/primitives/__tests/Reader.test.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/ReductionContext.test.d.ts +2 -0
- package/dist/types/src/primitives/__tests/ReductionContext.test.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/Schnorr.test.d.ts +2 -0
- package/dist/types/src/primitives/__tests/Schnorr.test.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/SymmetricKey.test.d.ts +2 -0
- package/dist/types/src/primitives/__tests/SymmetricKey.test.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/SymmetricKey.vectors.d.ts +20 -0
- package/dist/types/src/primitives/__tests/SymmetricKey.vectors.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/Writer.test.d.ts +2 -0
- package/dist/types/src/primitives/__tests/Writer.test.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/bug-31.test.d.ts +2 -0
- package/dist/types/src/primitives/__tests/bug-31.test.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/sighash.vectors.d.ts +3 -0
- package/dist/types/src/primitives/__tests/sighash.vectors.d.ts.map +1 -0
- package/dist/types/src/primitives/__tests/utils.test.d.ts +2 -0
- package/dist/types/src/primitives/__tests/utils.test.d.ts.map +1 -0
- package/dist/types/src/primitives/utils.d.ts +2 -1
- package/dist/types/src/primitives/utils.d.ts.map +1 -1
- package/dist/types/src/script/__tests/Script.test.d.ts +2 -0
- package/dist/types/src/script/__tests/Script.test.d.ts.map +1 -0
- package/dist/types/src/script/__tests/Spend.test.d.ts +2 -0
- package/dist/types/src/script/__tests/Spend.test.d.ts.map +1 -0
- package/dist/types/src/script/__tests/SpendComplex.test.d.ts +2 -0
- package/dist/types/src/script/__tests/SpendComplex.test.d.ts.map +1 -0
- package/dist/types/src/script/__tests/script.invalid.vectors.d.ts +3 -0
- package/dist/types/src/script/__tests/script.invalid.vectors.d.ts.map +1 -0
- package/dist/types/src/script/__tests/script.valid.vectors.d.ts +3 -0
- package/dist/types/src/script/__tests/script.valid.vectors.d.ts.map +1 -0
- package/dist/types/src/script/__tests/spend.valid.vectors.d.ts +3 -0
- package/dist/types/src/script/__tests/spend.valid.vectors.d.ts.map +1 -0
- package/dist/types/src/script/templates/__tests/PushDrop.test.d.ts +2 -0
- package/dist/types/src/script/templates/__tests/PushDrop.test.d.ts.map +1 -0
- package/dist/types/src/totp/__tests/totp.test.d.ts +2 -0
- package/dist/types/src/totp/__tests/totp.test.d.ts.map +1 -0
- package/dist/types/src/transaction/__tests/Beef.test.d.ts +2 -0
- package/dist/types/src/transaction/__tests/Beef.test.d.ts.map +1 -0
- package/dist/types/src/transaction/__tests/MerklePath.test.d.ts +2 -0
- package/dist/types/src/transaction/__tests/MerklePath.test.d.ts.map +1 -0
- package/dist/types/src/transaction/__tests/Transaction.benchmarks.test.d.ts +2 -0
- package/dist/types/src/transaction/__tests/Transaction.benchmarks.test.d.ts.map +1 -0
- package/dist/types/src/transaction/__tests/Transaction.test.d.ts +2 -0
- package/dist/types/src/transaction/__tests/Transaction.test.d.ts.map +1 -0
- package/dist/types/src/transaction/__tests/bigtx.vectors.d.ts +6 -0
- package/dist/types/src/transaction/__tests/bigtx.vectors.d.ts.map +1 -0
- package/dist/types/src/transaction/__tests/bump.invalid.vectors.d.ts +6 -0
- package/dist/types/src/transaction/__tests/bump.invalid.vectors.d.ts.map +1 -0
- package/dist/types/src/transaction/__tests/bump.valid.vectors.d.ts +5 -0
- package/dist/types/src/transaction/__tests/bump.valid.vectors.d.ts.map +1 -0
- package/dist/types/src/transaction/__tests/tx.invalid.vectors.d.ts +3 -0
- package/dist/types/src/transaction/__tests/tx.invalid.vectors.d.ts.map +1 -0
- package/dist/types/src/transaction/__tests/tx.valid.vectors.d.ts +3 -0
- package/dist/types/src/transaction/__tests/tx.valid.vectors.d.ts.map +1 -0
- package/dist/types/src/transaction/broadcasters/__tests/ARC.test.d.ts +2 -0
- package/dist/types/src/transaction/broadcasters/__tests/ARC.test.d.ts.map +1 -0
- package/dist/types/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.d.ts +2 -0
- package/dist/types/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.d.ts.map +1 -0
- package/dist/types/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.d.ts +2 -0
- package/dist/types/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.d.ts.map +1 -0
- package/dist/types/src/wallet/ScriptTemplateSABPPP.d.ts +25 -0
- package/dist/types/src/wallet/ScriptTemplateSABPPP.d.ts.map +1 -0
- package/dist/types/src/wallet/WalletSigner.d.ts +110 -0
- package/dist/types/src/wallet/WalletSigner.d.ts.map +1 -0
- package/dist/types/src/wallet/__tests/CachedKeyDeriver.test.d.ts +2 -0
- package/dist/types/src/wallet/__tests/CachedKeyDeriver.test.d.ts.map +1 -0
- package/dist/types/src/wallet/__tests/KeyDeriver.test.d.ts +2 -0
- package/dist/types/src/wallet/__tests/KeyDeriver.test.d.ts.map +1 -0
- package/dist/types/src/wallet/__tests/ProtoWallet.test.d.ts +2 -0
- package/dist/types/src/wallet/__tests/ProtoWallet.test.d.ts.map +1 -0
- package/dist/types/src/wallet/createActionSdk.d.ts +8 -0
- package/dist/types/src/wallet/createActionSdk.d.ts.map +1 -0
- package/dist/types/src/wallet/sdk/CachedKeyDeriver.d.ts +94 -0
- package/dist/types/src/wallet/sdk/CachedKeyDeriver.d.ts.map +1 -0
- package/dist/types/src/wallet/sdk/CertOps.d.ts +63 -0
- package/dist/types/src/wallet/sdk/CertOps.d.ts.map +1 -0
- package/dist/types/src/wallet/sdk/Certificate.d.ts +77 -0
- package/dist/types/src/wallet/sdk/Certificate.d.ts.map +1 -0
- package/dist/types/src/wallet/sdk/KeyDeriver.d.ts +128 -0
- package/dist/types/src/wallet/sdk/KeyDeriver.d.ts.map +1 -0
- package/dist/types/src/wallet/sdk/ProtoWallet.d.ts +30 -0
- package/dist/types/src/wallet/sdk/ProtoWallet.d.ts.map +1 -0
- package/dist/types/src/wallet/sdk/StorageSyncReader.d.ts +102 -0
- package/dist/types/src/wallet/sdk/StorageSyncReader.d.ts.map +1 -0
- package/dist/types/src/wallet/sdk/WERR_errors.d.ts +84 -0
- package/dist/types/src/wallet/sdk/WERR_errors.d.ts.map +1 -0
- package/dist/types/src/wallet/sdk/Wallet.interfaces.d.ts +1036 -0
- package/dist/types/src/wallet/sdk/Wallet.interfaces.d.ts.map +1 -0
- package/dist/types/src/wallet/sdk/WalletCrypto.d.ts +31 -0
- package/dist/types/src/wallet/sdk/WalletCrypto.d.ts.map +1 -0
- package/dist/types/src/wallet/sdk/WalletError.d.ts +46 -0
- package/dist/types/src/wallet/sdk/WalletError.d.ts.map +1 -0
- package/dist/types/src/wallet/sdk/WalletServices.interfaces.d.ts +293 -0
- package/dist/types/src/wallet/sdk/WalletServices.interfaces.d.ts.map +1 -0
- package/dist/types/src/wallet/sdk/WalletSigner.interfaces.d.ts +48 -0
- package/dist/types/src/wallet/sdk/WalletSigner.interfaces.d.ts.map +1 -0
- package/dist/types/src/wallet/sdk/WalletStorage.interfaces.d.ts +296 -0
- package/dist/types/src/wallet/sdk/WalletStorage.interfaces.d.ts.map +1 -0
- package/dist/types/src/wallet/sdk/index.d.ts +15 -0
- package/dist/types/src/wallet/sdk/index.d.ts.map +1 -0
- package/dist/types/src/wallet/sdk/types.d.ts +56 -0
- package/dist/types/src/wallet/sdk/types.d.ts.map +1 -0
- package/dist/types/src/wallet/sdk/validationHelpers.d.ts +301 -0
- package/dist/types/src/wallet/sdk/validationHelpers.d.ts.map +1 -0
- package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/__tests/WalletWire.integration.test.d.ts +2 -0
- package/dist/types/src/wallet/substrates/__tests/WalletWire.integration.test.d.ts.map +1 -0
- package/dist/types/src/wallet/substrates/__tests/XDM.test.d.ts +5 -0
- package/dist/types/src/wallet/substrates/__tests/XDM.test.d.ts.map +1 -0
- package/dist/types/src/wallet/substrates/utils/toOriginHeader.d.ts +2 -0
- package/dist/types/src/wallet/substrates/utils/toOriginHeader.d.ts.map +1 -0
- package/dist/types/src/wallet/utilityHelpers.d.ts +142 -0
- package/dist/types/src/wallet/utilityHelpers.d.ts.map +1 -0
- package/dist/types/src/wallet/validationHelpers.d.ts +301 -0
- package/dist/types/src/wallet/validationHelpers.d.ts.map +1 -0
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/dist/umd/bundle.js +1 -1
- package/docs/primitives.md +2 -1
- package/docs/wallet.md +9 -0
- package/package.json +4 -4
- package/src/primitives/utils.ts +20 -2
- package/src/transaction/__tests/Transaction.test.ts +1 -1
- package/src/wallet/substrates/HTTPWalletJSON.ts +11 -1
- package/src/wallet/substrates/WalletWireProcessor.ts +1 -1
- package/src/wallet/substrates/__tests/toOriginHeader.test.ts +34 -0
- package/src/wallet/substrates/utils/toOriginHeader.ts +15 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const index_1 = require("../../../auth/index");
|
|
4
|
+
const CompletedProtoWallet_1 = require("../../../auth/certificates/__tests/CompletedProtoWallet");
|
|
5
|
+
const index_2 = require("../../../primitives/index");
|
|
6
|
+
describe("Certificate", () => {
|
|
7
|
+
// Sample data for testing
|
|
8
|
+
const sampleType = index_2.Utils.toBase64(new Array(32).fill(1));
|
|
9
|
+
const sampleSerialNumber = index_2.Utils.toBase64(new Array(32).fill(2));
|
|
10
|
+
const sampleSubjectPrivateKey = index_2.PrivateKey.fromRandom();
|
|
11
|
+
const sampleSubjectPubKey = sampleSubjectPrivateKey.toPublicKey().toString();
|
|
12
|
+
const sampleCertifierPrivateKey = index_2.PrivateKey.fromRandom();
|
|
13
|
+
const sampleCertifierPubKey = sampleCertifierPrivateKey
|
|
14
|
+
.toPublicKey()
|
|
15
|
+
.toString();
|
|
16
|
+
const sampleRevocationOutpoint = "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef.1";
|
|
17
|
+
const sampleFields = {
|
|
18
|
+
name: "Alice",
|
|
19
|
+
email: "alice@example.com",
|
|
20
|
+
organization: "Example Corp",
|
|
21
|
+
};
|
|
22
|
+
const sampleFieldsEmpty = {};
|
|
23
|
+
it("should construct a Certificate with valid data", () => {
|
|
24
|
+
const certificate = new index_1.Certificate(sampleType, sampleSerialNumber, sampleSubjectPubKey, sampleCertifierPubKey, sampleRevocationOutpoint, sampleFields, undefined // No signature
|
|
25
|
+
);
|
|
26
|
+
expect(certificate.type).toEqual(sampleType);
|
|
27
|
+
expect(certificate.serialNumber).toEqual(sampleSerialNumber);
|
|
28
|
+
expect(certificate.subject).toEqual(sampleSubjectPubKey);
|
|
29
|
+
expect(certificate.certifier).toEqual(sampleCertifierPubKey);
|
|
30
|
+
expect(certificate.revocationOutpoint).toEqual(sampleRevocationOutpoint);
|
|
31
|
+
expect(certificate.signature).toBeUndefined();
|
|
32
|
+
expect(certificate.fields).toEqual(sampleFields);
|
|
33
|
+
});
|
|
34
|
+
it("should serialize and deserialize the Certificate without signature", () => {
|
|
35
|
+
const certificate = new index_1.Certificate(sampleType, sampleSerialNumber, sampleSubjectPubKey, sampleCertifierPubKey, sampleRevocationOutpoint, sampleFields, undefined // No signature
|
|
36
|
+
);
|
|
37
|
+
const serialized = certificate.toBinary(false); // Exclude signature
|
|
38
|
+
const deserializedCertificate = index_1.Certificate.fromBinary(serialized);
|
|
39
|
+
expect(deserializedCertificate.type).toEqual(sampleType);
|
|
40
|
+
expect(deserializedCertificate.serialNumber).toEqual(sampleSerialNumber);
|
|
41
|
+
expect(deserializedCertificate.subject).toEqual(sampleSubjectPubKey);
|
|
42
|
+
expect(deserializedCertificate.certifier).toEqual(sampleCertifierPubKey);
|
|
43
|
+
expect(deserializedCertificate.revocationOutpoint).toEqual(sampleRevocationOutpoint);
|
|
44
|
+
expect(deserializedCertificate.signature).toBeUndefined();
|
|
45
|
+
expect(deserializedCertificate.fields).toEqual(sampleFields);
|
|
46
|
+
});
|
|
47
|
+
it("should serialize and deserialize the Certificate with signature", async () => {
|
|
48
|
+
const certificate = new index_1.Certificate(sampleType, sampleSerialNumber, sampleSubjectPubKey, sampleCertifierPubKey, sampleRevocationOutpoint, sampleFields, undefined // No signature
|
|
49
|
+
);
|
|
50
|
+
// Sign the certificate
|
|
51
|
+
const certifierWallet = new CompletedProtoWallet_1.CompletedProtoWallet(sampleCertifierPrivateKey);
|
|
52
|
+
await certificate.sign(certifierWallet);
|
|
53
|
+
const serialized = certificate.toBinary(true); // Include signature
|
|
54
|
+
const deserializedCertificate = index_1.Certificate.fromBinary(serialized);
|
|
55
|
+
expect(deserializedCertificate.type).toEqual(sampleType);
|
|
56
|
+
expect(deserializedCertificate.serialNumber).toEqual(sampleSerialNumber);
|
|
57
|
+
expect(deserializedCertificate.subject).toEqual(sampleSubjectPubKey);
|
|
58
|
+
expect(deserializedCertificate.certifier).toEqual(sampleCertifierPubKey);
|
|
59
|
+
expect(deserializedCertificate.revocationOutpoint).toEqual(sampleRevocationOutpoint);
|
|
60
|
+
expect(deserializedCertificate.signature).toEqual(certificate.signature);
|
|
61
|
+
expect(deserializedCertificate.fields).toEqual(sampleFields);
|
|
62
|
+
});
|
|
63
|
+
it("should sign the Certificate and verify the signature successfully", async () => {
|
|
64
|
+
const certificate = new index_1.Certificate(sampleType, sampleSerialNumber, sampleSubjectPubKey, sampleCertifierPubKey, sampleRevocationOutpoint, sampleFields, undefined // No signature
|
|
65
|
+
);
|
|
66
|
+
// Sign the certificate
|
|
67
|
+
const certifierWallet = new CompletedProtoWallet_1.CompletedProtoWallet(sampleCertifierPrivateKey);
|
|
68
|
+
await certificate.sign(certifierWallet);
|
|
69
|
+
// Verify the signature
|
|
70
|
+
const isValid = await certificate.verify();
|
|
71
|
+
expect(isValid).toBe(true);
|
|
72
|
+
});
|
|
73
|
+
it("should fail verification if the Certificate is tampered with", async () => {
|
|
74
|
+
const certificate = new index_1.Certificate(sampleType, sampleSerialNumber, sampleSubjectPubKey, sampleCertifierPubKey, sampleRevocationOutpoint, sampleFields, undefined // No signature
|
|
75
|
+
);
|
|
76
|
+
// Sign the certificate
|
|
77
|
+
const certifierWallet = new CompletedProtoWallet_1.CompletedProtoWallet(sampleCertifierPrivateKey);
|
|
78
|
+
await certificate.sign(certifierWallet);
|
|
79
|
+
// Tamper with the certificate (modify a field)
|
|
80
|
+
certificate.fields.email = "attacker@example.com";
|
|
81
|
+
// Verify the signature
|
|
82
|
+
await expect(certificate.verify()).rejects.toThrow();
|
|
83
|
+
});
|
|
84
|
+
it("should fail verification if the signature is missing", async () => {
|
|
85
|
+
const certificate = new index_1.Certificate(sampleType, sampleSerialNumber, sampleSubjectPubKey, sampleCertifierPubKey, sampleRevocationOutpoint, sampleFields, undefined // No signature
|
|
86
|
+
);
|
|
87
|
+
// Verify the signature
|
|
88
|
+
await expect(certificate.verify()).rejects.toThrow();
|
|
89
|
+
});
|
|
90
|
+
it("should fail verification if the signature is incorrect", async () => {
|
|
91
|
+
const certificate = new index_1.Certificate(sampleType, sampleSerialNumber, sampleSubjectPubKey, sampleCertifierPubKey, sampleRevocationOutpoint, sampleFields, "3045022100cde229279465bb91992ccbc30bf6ed4eb8cdd9d517f31b30ff778d500d5400010220134f0e4065984f8668a642a5ad7a80886265f6aaa56d215d6400c216a4802177" // Incorrect signature
|
|
92
|
+
);
|
|
93
|
+
// Verify the signature
|
|
94
|
+
await expect(certificate.verify()).rejects.toThrowErrorMatchingInlineSnapshot(`"Signature is not valid"`);
|
|
95
|
+
});
|
|
96
|
+
it("should handle certificates with empty fields", async () => {
|
|
97
|
+
const certificate = new index_1.Certificate(sampleType, sampleSerialNumber, sampleSubjectPubKey, sampleCertifierPubKey, sampleRevocationOutpoint, sampleFieldsEmpty, undefined // No signature
|
|
98
|
+
);
|
|
99
|
+
// Sign the certificate
|
|
100
|
+
const certifierWallet = new CompletedProtoWallet_1.CompletedProtoWallet(sampleCertifierPrivateKey);
|
|
101
|
+
await certificate.sign(certifierWallet);
|
|
102
|
+
// Serialize and deserialize
|
|
103
|
+
const serialized = certificate.toBinary(true);
|
|
104
|
+
const deserializedCertificate = index_1.Certificate.fromBinary(serialized);
|
|
105
|
+
expect(deserializedCertificate.fields).toEqual(sampleFieldsEmpty);
|
|
106
|
+
// Verify the signature
|
|
107
|
+
const isValid = await deserializedCertificate.verify();
|
|
108
|
+
expect(isValid).toBe(true);
|
|
109
|
+
});
|
|
110
|
+
it("should correctly handle serialization/deserialization when signature is excluded", () => {
|
|
111
|
+
const certificate = new index_1.Certificate(sampleType, sampleSerialNumber, sampleSubjectPubKey, sampleCertifierPubKey, sampleRevocationOutpoint, sampleFields, "deadbeef1234" // Placeholder signature
|
|
112
|
+
);
|
|
113
|
+
// Serialize without signature
|
|
114
|
+
const serialized = certificate.toBinary(false);
|
|
115
|
+
const deserializedCertificate = index_1.Certificate.fromBinary(serialized);
|
|
116
|
+
expect(deserializedCertificate.signature).toBeUndefined(); // Signature should be empty
|
|
117
|
+
expect(deserializedCertificate.fields).toEqual(sampleFields);
|
|
118
|
+
});
|
|
119
|
+
it("should correctly handle certificates with long field names and values", async () => {
|
|
120
|
+
const longFieldName = "longFieldName_".repeat(10); // Exceeding typical lengths
|
|
121
|
+
const longFieldValue = "longFieldValue_".repeat(20);
|
|
122
|
+
const fields = {
|
|
123
|
+
[longFieldName]: longFieldValue,
|
|
124
|
+
};
|
|
125
|
+
const certificate = new index_1.Certificate(sampleType, sampleSerialNumber, sampleSubjectPubKey, sampleCertifierPubKey, sampleRevocationOutpoint, fields, undefined // No signature
|
|
126
|
+
);
|
|
127
|
+
// Sign the certificate
|
|
128
|
+
const certifierWallet = new CompletedProtoWallet_1.CompletedProtoWallet(sampleCertifierPrivateKey);
|
|
129
|
+
await certificate.sign(certifierWallet);
|
|
130
|
+
// Serialize and deserialize
|
|
131
|
+
const serialized = certificate.toBinary(true);
|
|
132
|
+
const deserializedCertificate = index_1.Certificate.fromBinary(serialized);
|
|
133
|
+
expect(deserializedCertificate.fields).toEqual(fields);
|
|
134
|
+
// Verify the signature
|
|
135
|
+
const isValid = await deserializedCertificate.verify();
|
|
136
|
+
expect(isValid).toBe(true);
|
|
137
|
+
});
|
|
138
|
+
it("should correctly serialize and deserialize the revocationOutpoint", () => {
|
|
139
|
+
const certificate = new index_1.Certificate(sampleType, sampleSerialNumber, sampleSubjectPubKey, sampleCertifierPubKey, sampleRevocationOutpoint, sampleFields, undefined // No signature
|
|
140
|
+
);
|
|
141
|
+
const serialized = certificate.toBinary(false);
|
|
142
|
+
const deserializedCertificate = index_1.Certificate.fromBinary(serialized);
|
|
143
|
+
expect(deserializedCertificate.revocationOutpoint).toEqual(sampleRevocationOutpoint);
|
|
144
|
+
});
|
|
145
|
+
it("should correctly handle certificates with no fields", async () => {
|
|
146
|
+
const certificate = new index_1.Certificate(sampleType, sampleSerialNumber, sampleSubjectPubKey, sampleCertifierPubKey, sampleRevocationOutpoint, {}, // No fields
|
|
147
|
+
undefined // No signature
|
|
148
|
+
);
|
|
149
|
+
// Sign the certificate
|
|
150
|
+
const certifierWallet = new CompletedProtoWallet_1.CompletedProtoWallet(sampleCertifierPrivateKey);
|
|
151
|
+
await certificate.sign(certifierWallet);
|
|
152
|
+
// Serialize and deserialize
|
|
153
|
+
const serialized = certificate.toBinary(true);
|
|
154
|
+
const deserializedCertificate = index_1.Certificate.fromBinary(serialized);
|
|
155
|
+
expect(deserializedCertificate.fields).toEqual({});
|
|
156
|
+
// Verify the signature
|
|
157
|
+
const isValid = await deserializedCertificate.verify();
|
|
158
|
+
expect(isValid).toBe(true);
|
|
159
|
+
});
|
|
160
|
+
it("should throw if already signed, and should update the certifier field if it differs from the wallet's public key", async () => {
|
|
161
|
+
// Scenario 1: Certificate already has a signature
|
|
162
|
+
const preSignedCertificate = new index_1.Certificate(sampleType, sampleSerialNumber, sampleSubjectPubKey, sampleCertifierPubKey, // We'll pretend this was signed by them
|
|
163
|
+
sampleRevocationOutpoint, sampleFields, "deadbeef" // Already has a placeholder signature
|
|
164
|
+
);
|
|
165
|
+
const certifierWallet = new CompletedProtoWallet_1.CompletedProtoWallet(sampleCertifierPrivateKey);
|
|
166
|
+
// Trying to sign again should throw
|
|
167
|
+
await expect(preSignedCertificate.sign(certifierWallet)).rejects.toThrow("Certificate has already been signed!");
|
|
168
|
+
// Scenario 2: The certifier property is set to something different from the wallet's public key
|
|
169
|
+
const mismatchedCertifierPubKey = index_2.PrivateKey.fromRandom()
|
|
170
|
+
.toPublicKey()
|
|
171
|
+
.toString();
|
|
172
|
+
const certificateWithMismatch = new index_1.Certificate(sampleType, sampleSerialNumber, sampleSubjectPubKey, mismatchedCertifierPubKey, // Different from actual wallet key
|
|
173
|
+
sampleRevocationOutpoint, sampleFields);
|
|
174
|
+
// Sign the certificate; it should automatically update
|
|
175
|
+
// the certifier field to match the wallet's actual public key
|
|
176
|
+
const certifierPubKey = (await certifierWallet.getPublicKey({ identityKey: true })).publicKey;
|
|
177
|
+
await certificateWithMismatch.sign(certifierWallet);
|
|
178
|
+
expect(certificateWithMismatch.certifier).toBe(certifierPubKey);
|
|
179
|
+
expect(await certificateWithMismatch.verify()).toBe(true);
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
//# sourceMappingURL=Certificate.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Certificate.test.js","sourceRoot":"","sources":["../../../../../../src/auth/certificates/__tests/Certificate.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const MasterCertificate_1 = require("../../../auth/certificates/MasterCertificate");
|
|
4
|
+
const VerifiableCertificate_1 = require("../../../auth/certificates/VerifiableCertificate");
|
|
5
|
+
const mod_1 = require("../../../../mod");
|
|
6
|
+
const CompletedProtoWallet_1 = require("../../../auth/certificates/__tests/CompletedProtoWallet");
|
|
7
|
+
describe('MasterCertificate', () => {
|
|
8
|
+
const subjectPrivateKey = mod_1.PrivateKey.fromRandom();
|
|
9
|
+
const certifierPrivateKey = mod_1.PrivateKey.fromRandom();
|
|
10
|
+
// A mock revocation outpoint for testing
|
|
11
|
+
const mockRevocationOutpoint = 'deadbeefdeadbeefdeadbeefdeadbeef00000000000000000000000000000000.1';
|
|
12
|
+
// Arbitrary certificate data (in plaintext)
|
|
13
|
+
const plaintextFields = {
|
|
14
|
+
name: 'Alice',
|
|
15
|
+
email: 'alice@example.com',
|
|
16
|
+
department: 'Engineering'
|
|
17
|
+
};
|
|
18
|
+
const subjectWallet = new CompletedProtoWallet_1.CompletedProtoWallet(subjectPrivateKey);
|
|
19
|
+
const certifierWallet = new CompletedProtoWallet_1.CompletedProtoWallet(certifierPrivateKey);
|
|
20
|
+
let subjectIdentityKey;
|
|
21
|
+
let certifierIdentityKey;
|
|
22
|
+
beforeAll(async () => {
|
|
23
|
+
subjectIdentityKey = (await subjectWallet.getPublicKey({ identityKey: true })).publicKey;
|
|
24
|
+
certifierIdentityKey = (await certifierWallet.getPublicKey({ identityKey: true })).publicKey;
|
|
25
|
+
});
|
|
26
|
+
describe('constructor', () => {
|
|
27
|
+
it('should construct a MasterCertificate successfully when masterKeyring is valid', () => {
|
|
28
|
+
// Prepare a minimal valid MasterCertificate
|
|
29
|
+
const fieldSymKey = mod_1.SymmetricKey.fromRandom();
|
|
30
|
+
const encryptedFieldValue = mod_1.Utils.toBase64(fieldSymKey.encrypt(mod_1.Utils.toArray('Alice', 'utf8')));
|
|
31
|
+
const encryptedKeyForSubject = mod_1.Utils.toBase64([0, 1, 2, 3]);
|
|
32
|
+
// We assume we have the same fieldName in both `fields` and `masterKeyring`.
|
|
33
|
+
const fields = { name: encryptedFieldValue };
|
|
34
|
+
const masterKeyring = { name: encryptedKeyForSubject };
|
|
35
|
+
const certificate = new MasterCertificate_1.MasterCertificate(mod_1.Utils.toBase64((0, mod_1.Random)(16)), // type
|
|
36
|
+
mod_1.Utils.toBase64((0, mod_1.Random)(16)), // serialNumber
|
|
37
|
+
subjectIdentityKey, certifierIdentityKey, mockRevocationOutpoint, fields, masterKeyring);
|
|
38
|
+
expect(certificate).toBeInstanceOf(MasterCertificate_1.MasterCertificate);
|
|
39
|
+
expect(certificate.fields).toEqual(fields);
|
|
40
|
+
expect(certificate.masterKeyring).toEqual(masterKeyring);
|
|
41
|
+
expect(certificate.subject).toEqual(subjectIdentityKey);
|
|
42
|
+
expect(certificate.certifier).toEqual(certifierIdentityKey);
|
|
43
|
+
});
|
|
44
|
+
it('should throw if masterKeyring is missing a key for any field', () => {
|
|
45
|
+
const fields = { name: 'encrypted_value' };
|
|
46
|
+
const masterKeyring = {}; // intentionally empty
|
|
47
|
+
expect(() => {
|
|
48
|
+
new MasterCertificate_1.MasterCertificate(mod_1.Utils.toBase64((0, mod_1.Random)(16)), // type
|
|
49
|
+
mod_1.Utils.toBase64((0, mod_1.Random)(16)), // serialNumber
|
|
50
|
+
subjectIdentityKey, certifierIdentityKey, mockRevocationOutpoint, fields, masterKeyring);
|
|
51
|
+
}).toThrowError(/Master keyring must contain a value for every field/);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
describe('decryptFields (static)', () => {
|
|
55
|
+
it('should decrypt all fields correctly using subject wallet', async () => {
|
|
56
|
+
// Issue a certificate for the subject, which includes a valid masterKeyring
|
|
57
|
+
const certificate = await MasterCertificate_1.MasterCertificate.issueCertificateForSubject(certifierWallet, subjectIdentityKey, plaintextFields, 'TEST_CERT');
|
|
58
|
+
// Now subject should be able to decrypt all fields via static method
|
|
59
|
+
const decrypted = await MasterCertificate_1.MasterCertificate.decryptFields(subjectWallet, certificate.masterKeyring, certificate.fields, certificate.certifier // because certifier was the encryption counterparty
|
|
60
|
+
);
|
|
61
|
+
expect(decrypted).toEqual(plaintextFields);
|
|
62
|
+
});
|
|
63
|
+
it('should throw if masterKeyring is empty or invalid', async () => {
|
|
64
|
+
// Manually create a MasterCertificate with an empty masterKeyring
|
|
65
|
+
expect(() => new MasterCertificate_1.MasterCertificate(mod_1.Utils.toBase64((0, mod_1.Random)(16)), mod_1.Utils.toBase64((0, mod_1.Random)(16)), subjectIdentityKey, certifierIdentityKey, mockRevocationOutpoint, { name: mod_1.Utils.toBase64([1, 2, 3]) }, {})).toThrow('Master keyring must contain a value for every field. Missing key for field: "name"');
|
|
66
|
+
});
|
|
67
|
+
it('should throw if decryption fails for any field', async () => {
|
|
68
|
+
// Manually craft a scenario where the key is incorrect
|
|
69
|
+
const badKeyMasterKeyring = mod_1.Utils.toBase64([9, 9, 9, 9]); // Not the correct key
|
|
70
|
+
const badKeyCertificate = new MasterCertificate_1.MasterCertificate(mod_1.Utils.toBase64((0, mod_1.Random)(16)), mod_1.Utils.toBase64((0, mod_1.Random)(16)), subjectIdentityKey, certifierIdentityKey, mockRevocationOutpoint, {
|
|
71
|
+
name: mod_1.Utils.toBase64(mod_1.SymmetricKey.fromRandom().encrypt(mod_1.Utils.toArray('Alice', 'utf8')))
|
|
72
|
+
}, { name: badKeyMasterKeyring });
|
|
73
|
+
await expect(MasterCertificate_1.MasterCertificate.decryptFields(subjectWallet, badKeyCertificate.masterKeyring, badKeyCertificate.fields, badKeyCertificate.certifier)).rejects.toThrow('Failed to decrypt all master certificate fields.');
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
describe('createKeyringForVerifier (static)', () => {
|
|
77
|
+
const verifierPrivateKey = mod_1.PrivateKey.fromRandom();
|
|
78
|
+
const verifierWallet = new CompletedProtoWallet_1.CompletedProtoWallet(verifierPrivateKey);
|
|
79
|
+
let verifierIdentityKey;
|
|
80
|
+
let issuedCert;
|
|
81
|
+
beforeAll(async () => {
|
|
82
|
+
verifierIdentityKey = (await verifierWallet.getPublicKey({ identityKey: true })).publicKey;
|
|
83
|
+
// Issue a certificate to reuse in tests
|
|
84
|
+
issuedCert = await MasterCertificate_1.MasterCertificate.issueCertificateForSubject(certifierWallet, subjectIdentityKey, plaintextFields, 'TEST_CERT');
|
|
85
|
+
});
|
|
86
|
+
it('should create a verifier keyring for specified fields', async () => {
|
|
87
|
+
// We only want to share "name" with the verifier
|
|
88
|
+
const fieldsToReveal = ['name'];
|
|
89
|
+
const keyringForVerifier = await MasterCertificate_1.MasterCertificate.createKeyringForVerifier(subjectWallet, issuedCert.certifier, // the original certifier
|
|
90
|
+
verifierIdentityKey, // the new verifier
|
|
91
|
+
issuedCert.fields, // encrypted fields
|
|
92
|
+
fieldsToReveal, issuedCert.masterKeyring, issuedCert.serialNumber);
|
|
93
|
+
// The new keyring should only contain "name"
|
|
94
|
+
expect(Object.keys(keyringForVerifier)).toHaveLength(1);
|
|
95
|
+
expect(keyringForVerifier).toHaveProperty('name');
|
|
96
|
+
// Now let's create a VerifiableCertificate for the verifier
|
|
97
|
+
const verifiableCert = new VerifiableCertificate_1.VerifiableCertificate(issuedCert.type, issuedCert.serialNumber, issuedCert.subject, issuedCert.certifier, issuedCert.revocationOutpoint, issuedCert.fields, keyringForVerifier, issuedCert.signature);
|
|
98
|
+
// The verifier should successfully decrypt the "name" field
|
|
99
|
+
const decrypted = await verifiableCert.decryptFields(verifierWallet);
|
|
100
|
+
expect(decrypted).toEqual({ name: plaintextFields.name });
|
|
101
|
+
});
|
|
102
|
+
it('should throw if fields to reveal are not a subset of the certificate fields', async () => {
|
|
103
|
+
await expect(MasterCertificate_1.MasterCertificate.createKeyringForVerifier(subjectWallet, issuedCert.certifier, verifierIdentityKey, issuedCert.fields, ['nonexistent_field'], issuedCert.masterKeyring, issuedCert.serialNumber)).rejects.toThrow(/Fields to reveal must be a subset of the certificate fields\. Missing the "nonexistent_field" field\./);
|
|
104
|
+
});
|
|
105
|
+
it('should throw if the master key fails to decrypt the corresponding field', async () => {
|
|
106
|
+
// We'll tamper with the certificate's masterKeyring so that a field key is invalid
|
|
107
|
+
const tamperedCert = new MasterCertificate_1.MasterCertificate(issuedCert.type, issuedCert.serialNumber, issuedCert.subject, issuedCert.certifier, issuedCert.revocationOutpoint, issuedCert.fields, {
|
|
108
|
+
// Tamper: replace 'name' field with nonsense
|
|
109
|
+
name: mod_1.Utils.toBase64([66, 66, 66]),
|
|
110
|
+
email: issuedCert.masterKeyring.email,
|
|
111
|
+
department: issuedCert.masterKeyring.department
|
|
112
|
+
}, issuedCert.signature);
|
|
113
|
+
await expect(MasterCertificate_1.MasterCertificate.createKeyringForVerifier(subjectWallet, tamperedCert.certifier, verifierIdentityKey, tamperedCert.fields, ['name'], tamperedCert.masterKeyring, tamperedCert.serialNumber)).rejects.toThrow('Failed to decrypt certificate field!');
|
|
114
|
+
});
|
|
115
|
+
it('should support optional originator parameter', async () => {
|
|
116
|
+
const fieldsToReveal = ['name'];
|
|
117
|
+
const keyringForVerifier = await MasterCertificate_1.MasterCertificate.createKeyringForVerifier(subjectWallet, issuedCert.certifier, verifierIdentityKey, issuedCert.fields, fieldsToReveal, issuedCert.masterKeyring, issuedCert.serialNumber, 'my-originator');
|
|
118
|
+
expect(keyringForVerifier).toHaveProperty('name');
|
|
119
|
+
});
|
|
120
|
+
it('should support counterparty of "anyone" or "self"', async () => {
|
|
121
|
+
const fieldsToReveal = ['name'];
|
|
122
|
+
// "anyone"
|
|
123
|
+
const anyoneKeyring = await MasterCertificate_1.MasterCertificate.createKeyringForVerifier(subjectWallet, issuedCert.certifier, 'anyone', issuedCert.fields, fieldsToReveal, issuedCert.masterKeyring, issuedCert.serialNumber, 'my-originator');
|
|
124
|
+
expect(anyoneKeyring).toHaveProperty('name');
|
|
125
|
+
// "self"
|
|
126
|
+
const selfKeyring = await MasterCertificate_1.MasterCertificate.createKeyringForVerifier(subjectWallet, issuedCert.certifier, 'self', issuedCert.fields, fieldsToReveal, issuedCert.masterKeyring, issuedCert.serialNumber, 'my-originator');
|
|
127
|
+
expect(selfKeyring).toHaveProperty('name');
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
describe('issueCertificateForSubject (static)', () => {
|
|
131
|
+
it('should issue a valid MasterCertificate for the given subject', async () => {
|
|
132
|
+
const newPlaintextFields = {
|
|
133
|
+
project: 'Top Secret',
|
|
134
|
+
clearanceLevel: 'High'
|
|
135
|
+
};
|
|
136
|
+
const revocationFn = jest.fn().mockResolvedValue(mockRevocationOutpoint);
|
|
137
|
+
const newCert = await MasterCertificate_1.MasterCertificate.issueCertificateForSubject(certifierWallet, subjectIdentityKey, newPlaintextFields, 'TEST_CERT', revocationFn);
|
|
138
|
+
expect(newCert).toBeInstanceOf(MasterCertificate_1.MasterCertificate);
|
|
139
|
+
// The certificate's fields should be encrypted base64
|
|
140
|
+
for (const fieldName in newPlaintextFields) {
|
|
141
|
+
expect(newCert.fields[fieldName]).toMatch(/^[A-Za-z0-9+/]+=*$/); // quick base64 check
|
|
142
|
+
}
|
|
143
|
+
// The masterKeyring should also contain base64 strings
|
|
144
|
+
for (const fieldName in newPlaintextFields) {
|
|
145
|
+
expect(newCert.masterKeyring[fieldName]).toMatch(/^[A-Za-z0-9+/]+=*$/);
|
|
146
|
+
}
|
|
147
|
+
// Check revocation outpoint is from mock
|
|
148
|
+
expect(newCert.revocationOutpoint).toEqual(mockRevocationOutpoint);
|
|
149
|
+
// Check we have a signature
|
|
150
|
+
expect(newCert.signature).toBeDefined();
|
|
151
|
+
// Check that the revocationFn was called
|
|
152
|
+
expect(revocationFn).toHaveBeenCalledWith(newCert.serialNumber);
|
|
153
|
+
});
|
|
154
|
+
it('should allow passing a custom serial number when issuing the certificate', async () => {
|
|
155
|
+
const customSerialNumber = mod_1.Utils.toBase64((0, mod_1.Random)(32));
|
|
156
|
+
const newPlaintextFields = { status: 'Approved' };
|
|
157
|
+
const newCert = await MasterCertificate_1.MasterCertificate.issueCertificateForSubject(certifierWallet, subjectIdentityKey, newPlaintextFields, 'TEST_CERT', undefined, // No custom revocation function
|
|
158
|
+
customSerialNumber // Pass our custom serial number
|
|
159
|
+
);
|
|
160
|
+
expect(newCert).toBeInstanceOf(MasterCertificate_1.MasterCertificate);
|
|
161
|
+
expect(newCert.serialNumber).toEqual(customSerialNumber); // Must match exactly
|
|
162
|
+
// Check encryption
|
|
163
|
+
for (const fieldName in newPlaintextFields) {
|
|
164
|
+
expect(newCert.fields[fieldName]).toMatch(/^[A-Za-z0-9+/]+=*$/);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
it('should allow issuing a self-signed certificate and decrypt it with the same wallet', async () => {
|
|
168
|
+
// In a self-signed scenario, the subject and certifier are the same
|
|
169
|
+
const subjectWallet = new CompletedProtoWallet_1.CompletedProtoWallet(mod_1.PrivateKey.fromRandom());
|
|
170
|
+
// Some sample fields
|
|
171
|
+
const selfSignedFields = {
|
|
172
|
+
owner: 'Bob',
|
|
173
|
+
organization: 'SelfCo'
|
|
174
|
+
};
|
|
175
|
+
// Issue the certificate for "self"
|
|
176
|
+
const selfSignedCert = await MasterCertificate_1.MasterCertificate.issueCertificateForSubject(subjectWallet, // act as certifier
|
|
177
|
+
'self', selfSignedFields, 'SELF_SIGNED_TEST');
|
|
178
|
+
// Now we attempt to decrypt the fields with the same wallet
|
|
179
|
+
const decrypted = await MasterCertificate_1.MasterCertificate.decryptFields(subjectWallet, selfSignedCert.masterKeyring, selfSignedCert.fields, 'self');
|
|
180
|
+
expect(decrypted).toEqual(selfSignedFields);
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
//# sourceMappingURL=MasterCertificate.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MasterCertificate.test.js","sourceRoot":"","sources":["../../../../../../src/auth/certificates/__tests/MasterCertificate.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const VerifiableCertificate_1 = require("../../../auth/certificates/VerifiableCertificate");
|
|
4
|
+
const mod_1 = require("../../../../mod");
|
|
5
|
+
const CompletedProtoWallet_1 = require("../../../auth/certificates/__tests/CompletedProtoWallet");
|
|
6
|
+
const MasterCertificate_1 = require("../../../auth/certificates/MasterCertificate");
|
|
7
|
+
const index_1 = require("../../../wallet/index");
|
|
8
|
+
describe('VerifiableCertificate', () => {
|
|
9
|
+
const subjectPrivateKey = mod_1.PrivateKey.fromRandom();
|
|
10
|
+
const subjectIdentityKey = subjectPrivateKey.toPublicKey().toString();
|
|
11
|
+
const certifierPrivateKey = mod_1.PrivateKey.fromRandom();
|
|
12
|
+
const certifierIdentityKey = certifierPrivateKey.toPublicKey().toString();
|
|
13
|
+
const verifierPrivateKey = mod_1.PrivateKey.fromRandom();
|
|
14
|
+
const verifierIdentityKey = verifierPrivateKey.toPublicKey().toString();
|
|
15
|
+
const subjectWallet = new CompletedProtoWallet_1.CompletedProtoWallet(subjectPrivateKey);
|
|
16
|
+
const verifierWallet = new CompletedProtoWallet_1.CompletedProtoWallet(verifierPrivateKey);
|
|
17
|
+
const sampleType = mod_1.Utils.toBase64(new Array(32).fill(1));
|
|
18
|
+
const sampleSerialNumber = mod_1.Utils.toBase64(new Array(32).fill(2));
|
|
19
|
+
const sampleRevocationOutpoint = 'deadbeefdeadbeefdeadbeefdeadbeef00000000000000000000000000000000.1';
|
|
20
|
+
const plaintextFields = {
|
|
21
|
+
name: 'Alice',
|
|
22
|
+
email: 'alice@example.com',
|
|
23
|
+
organization: 'Example Corp'
|
|
24
|
+
};
|
|
25
|
+
let verifiableCert;
|
|
26
|
+
beforeEach(async () => {
|
|
27
|
+
// For each test, we'll build a fresh VerifiableCertificate with valid encryption
|
|
28
|
+
const { certificateFields, masterKeyring } = await MasterCertificate_1.MasterCertificate.createCertificateFields(subjectWallet, certifierIdentityKey, plaintextFields);
|
|
29
|
+
const keyringForVerifier = await MasterCertificate_1.MasterCertificate.createKeyringForVerifier(subjectWallet, certifierIdentityKey, verifierIdentityKey, certificateFields, Object.keys(certificateFields), masterKeyring, sampleSerialNumber);
|
|
30
|
+
verifiableCert = new VerifiableCertificate_1.VerifiableCertificate(sampleType, sampleSerialNumber, subjectIdentityKey, certifierIdentityKey, sampleRevocationOutpoint, certificateFields, keyringForVerifier);
|
|
31
|
+
});
|
|
32
|
+
describe('constructor', () => {
|
|
33
|
+
it('should create a VerifiableCertificate with all required properties', () => {
|
|
34
|
+
expect(verifiableCert).toBeInstanceOf(VerifiableCertificate_1.VerifiableCertificate);
|
|
35
|
+
expect(verifiableCert.type).toEqual(sampleType);
|
|
36
|
+
expect(verifiableCert.serialNumber).toEqual(sampleSerialNumber);
|
|
37
|
+
expect(verifiableCert.subject).toEqual(subjectIdentityKey);
|
|
38
|
+
expect(verifiableCert.certifier).toEqual(certifierIdentityKey);
|
|
39
|
+
expect(verifiableCert.revocationOutpoint).toEqual(sampleRevocationOutpoint);
|
|
40
|
+
expect(verifiableCert.fields).toBeDefined();
|
|
41
|
+
expect(verifiableCert.keyring).toBeDefined();
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
describe('decryptFields', () => {
|
|
45
|
+
it('should decrypt fields successfully when provided the correct verifier wallet and keyring', async () => {
|
|
46
|
+
const decrypted = await verifiableCert.decryptFields(verifierWallet);
|
|
47
|
+
expect(decrypted).toEqual(plaintextFields);
|
|
48
|
+
});
|
|
49
|
+
it('should fail if the verifier wallet does not have the correct private key (wrong key)', async () => {
|
|
50
|
+
const wrongPrivateKey = mod_1.PrivateKey.fromRandom();
|
|
51
|
+
const wrongWallet = new CompletedProtoWallet_1.CompletedProtoWallet(wrongPrivateKey);
|
|
52
|
+
await expect(verifiableCert.decryptFields(wrongWallet)).rejects.toThrow(/Failed to decrypt selectively revealed certificate fields using keyring/);
|
|
53
|
+
});
|
|
54
|
+
it('should fail if the keyring is empty or missing keys', async () => {
|
|
55
|
+
// Create a new VerifiableCertificate but with an empty keyring
|
|
56
|
+
const fields = verifiableCert.fields;
|
|
57
|
+
const emptyKeyringCert = new VerifiableCertificate_1.VerifiableCertificate(verifiableCert.type, verifiableCert.serialNumber, verifiableCert.subject, verifiableCert.certifier, verifiableCert.revocationOutpoint, fields, {}, // empty
|
|
58
|
+
verifiableCert.signature);
|
|
59
|
+
await expect(emptyKeyringCert.decryptFields(verifierWallet)).rejects.toThrow('A keyring is required to decrypt certificate fields for the verifier.');
|
|
60
|
+
});
|
|
61
|
+
it('should fail if the encrypted field or its key is tampered', async () => {
|
|
62
|
+
// Tamper the keyring so it doesn't match the field encryption
|
|
63
|
+
verifiableCert.keyring.name = mod_1.Utils.toBase64([9, 9, 9, 9]);
|
|
64
|
+
await expect(verifiableCert.decryptFields(verifierWallet)).rejects.toThrow(/Failed to decrypt selectively revealed certificate fields using keyring/);
|
|
65
|
+
});
|
|
66
|
+
it('should be able to decrypt fields using the anyone wallet', async () => {
|
|
67
|
+
const { certificateFields, masterKeyring } = await MasterCertificate_1.MasterCertificate.createCertificateFields(subjectWallet, certifierIdentityKey, plaintextFields);
|
|
68
|
+
const keyringForVerifier = await MasterCertificate_1.MasterCertificate.createKeyringForVerifier(subjectWallet, certifierIdentityKey, 'anyone', certificateFields, Object.keys(certificateFields), masterKeyring, sampleSerialNumber);
|
|
69
|
+
verifiableCert = new VerifiableCertificate_1.VerifiableCertificate(sampleType, sampleSerialNumber, subjectIdentityKey, 'anyone', sampleRevocationOutpoint, certificateFields, keyringForVerifier);
|
|
70
|
+
const decrypted = await verifiableCert.decryptFields(new index_1.ProtoWallet('anyone'));
|
|
71
|
+
expect(decrypted).toEqual(plaintextFields);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
//# sourceMappingURL=VerifiableCertificate.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VerifiableCertificate.test.js","sourceRoot":"","sources":["../../../../../../src/auth/certificates/__tests/VerifiableCertificate.test.ts"],"names":[],"mappings":";;AAAA,4FAAwF;AACxF,yCAIwB;AACxB,kGAA8F;AAE9F,oFAAgF;AAChF,iDAAmD;AAEnD,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,MAAM,iBAAiB,GAAG,gBAAU,CAAC,UAAU,EAAE,CAAA;IACjD,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAA;IACrE,MAAM,mBAAmB,GAAG,gBAAU,CAAC,UAAU,EAAE,CAAA;IACnD,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAA;IACzE,MAAM,kBAAkB,GAAG,gBAAU,CAAC,UAAU,EAAE,CAAA;IAClD,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAA;IAEvE,MAAM,aAAa,GAAG,IAAI,2CAAoB,CAAC,iBAAiB,CAAC,CAAA;IACjE,MAAM,cAAc,GAAG,IAAI,2CAAoB,CAAC,kBAAkB,CAAC,CAAA;IAEnE,MAAM,UAAU,GAAG,WAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,MAAM,kBAAkB,GAAG,WAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IAChE,MAAM,wBAAwB,GAC5B,oEAAoE,CAAA;IAEtE,MAAM,eAAe,GAAG;QACtB,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,mBAAmB;QAC1B,YAAY,EAAE,cAAc;KAC7B,CAAA;IAED,IAAI,cAAqC,CAAA;IAEzC,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,iFAAiF;QACjF,MAAM,EAAE,iBAAiB,EAAE,aAAa,EAAE,GACxC,MAAM,qCAAiB,CAAC,uBAAuB,CAC7C,aAAa,EACb,oBAAoB,EACpB,eAAe,CAChB,CAAA;QACH,MAAM,kBAAkB,GAAG,MAAM,qCAAiB,CAAC,wBAAwB,CACzE,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAC9B,aAAa,EACb,kBAAkB,CACnB,CAAA;QACD,cAAc,GAAG,IAAI,6CAAqB,CACxC,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,CACnB,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;YAC5E,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,6CAAqB,CAAC,CAAA;YAC5D,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;YAC/C,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;YAC/D,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;YAC1D,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;YAC9D,MAAM,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAC/C,wBAAwB,CACzB,CAAA;YACD,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAA;YAC3C,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;QAC9C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,0FAA0F,EAAE,KAAK,IAAI,EAAE;YACxG,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,cAAc,CAAC,CAAA;YACpE,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;QAC5C,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,sFAAsF,EAAE,KAAK,IAAI,EAAE;YACpG,MAAM,eAAe,GAAG,gBAAU,CAAC,UAAU,EAAE,CAAA;YAC/C,MAAM,WAAW,GAAG,IAAI,2CAAoB,CAAC,eAAe,CAAC,CAAA;YAE7D,MAAM,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CACrE,yEAAyE,CAC1E,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,+DAA+D;YAC/D,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAA;YACpC,MAAM,gBAAgB,GAAG,IAAI,6CAAqB,CAChD,cAAc,CAAC,IAAI,EACnB,cAAc,CAAC,YAAY,EAC3B,cAAc,CAAC,OAAO,EACtB,cAAc,CAAC,SAAS,EACxB,cAAc,CAAC,kBAAkB,EACjC,MAAM,EACN,EAAE,EAAE,QAAQ;YACZ,cAAc,CAAC,SAAS,CACzB,CAAA;YAED,MAAM,MAAM,CACV,gBAAgB,CAAC,aAAa,CAAC,cAAc,CAAC,CAC/C,CAAC,OAAO,CAAC,OAAO,CACf,uEAAuE,CACxE,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;YACzE,8DAA8D;YAC9D,cAAc,CAAC,OAAO,CAAC,IAAI,GAAG,WAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YAC1D,MAAM,MAAM,CACV,cAAc,CAAC,aAAa,CAAC,cAAc,CAAC,CAC7C,CAAC,OAAO,CAAC,OAAO,CACf,yEAAyE,CAC1E,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,EAAE,iBAAiB,EAAE,aAAa,EAAE,GACxC,MAAM,qCAAiB,CAAC,uBAAuB,CAC7C,aAAa,EACb,oBAAoB,EACpB,eAAe,CAChB,CAAA;YACH,MAAM,kBAAkB,GACtB,MAAM,qCAAiB,CAAC,wBAAwB,CAC9C,aAAa,EACb,oBAAoB,EACpB,QAAQ,EACR,iBAAiB,EACjB,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAC9B,aAAa,EACb,kBAAkB,CACnB,CAAA;YACH,cAAc,GAAG,IAAI,6CAAqB,CACxC,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,QAAQ,EACR,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,CACnB,CAAA;YACD,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,aAAa,CAClD,IAAI,mBAAW,CAAC,QAAQ,CAAC,CAC1B,CAAA;YACD,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;QAC5C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const index_1 = require("../../../primitives/index");
|
|
4
|
+
const createNonce_1 = require("../../../auth/utils/createNonce");
|
|
5
|
+
const verifyNonce_1 = require("../../../auth/utils/verifyNonce");
|
|
6
|
+
const CompletedProtoWallet_1 = require("../../../auth/certificates/__tests/CompletedProtoWallet");
|
|
7
|
+
describe('createNonce', () => {
|
|
8
|
+
let mockWallet;
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
mockWallet = {
|
|
11
|
+
createHmac: jest.fn().mockResolvedValue({ hmac: new Uint8Array(16) })
|
|
12
|
+
};
|
|
13
|
+
});
|
|
14
|
+
afterEach(() => {
|
|
15
|
+
jest.clearAllMocks();
|
|
16
|
+
});
|
|
17
|
+
it('throws an error if wallet fails to create HMAC', async () => {
|
|
18
|
+
// Mock failure of HMAC creation
|
|
19
|
+
;
|
|
20
|
+
mockWallet.createHmac.mockRejectedValue(new Error('Failed to create HMAC'));
|
|
21
|
+
await expect((0, createNonce_1.createNonce)(mockWallet)).rejects.toThrow('Failed to create HMAC');
|
|
22
|
+
});
|
|
23
|
+
it('creates a 256-bit nonce', async () => {
|
|
24
|
+
const nonce = await (0, createNonce_1.createNonce)(mockWallet);
|
|
25
|
+
expect(Buffer.from(nonce, 'base64').byteLength).toEqual(32);
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
describe('verifyNonce', () => {
|
|
29
|
+
let mockWallet;
|
|
30
|
+
beforeEach(() => {
|
|
31
|
+
mockWallet = {
|
|
32
|
+
createHmac: jest.fn().mockResolvedValue({ hmac: new Uint8Array(16) }),
|
|
33
|
+
verifyHmac: jest.fn().mockResolvedValue({ valid: true })
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
afterEach(() => {
|
|
37
|
+
jest.clearAllMocks();
|
|
38
|
+
});
|
|
39
|
+
it('does not verify an invalid nonce', async () => {
|
|
40
|
+
;
|
|
41
|
+
mockWallet.verifyHmac.mockResolvedValue({ valid: false });
|
|
42
|
+
const nonce = await (0, createNonce_1.createNonce)(mockWallet);
|
|
43
|
+
await expect((0, verifyNonce_1.verifyNonce)(nonce + 'ABC', mockWallet)).resolves.toEqual(false);
|
|
44
|
+
await expect((0, verifyNonce_1.verifyNonce)(nonce + '=', mockWallet)).resolves.toEqual(false);
|
|
45
|
+
await expect((0, verifyNonce_1.verifyNonce)(Buffer.from(nonce + Buffer.from('extra').toString('base64'), 'base64').toString('base64'), mockWallet)).resolves.toEqual(false);
|
|
46
|
+
});
|
|
47
|
+
it('returns false for an invalid HMAC verification', async () => {
|
|
48
|
+
;
|
|
49
|
+
mockWallet.verifyHmac.mockResolvedValue({ valid: false });
|
|
50
|
+
const nonce = await (0, createNonce_1.createNonce)(mockWallet);
|
|
51
|
+
await expect((0, verifyNonce_1.verifyNonce)(nonce, mockWallet)).resolves.toEqual(false);
|
|
52
|
+
});
|
|
53
|
+
it('verifies a 256-bit nonce', async () => {
|
|
54
|
+
;
|
|
55
|
+
mockWallet.verifyHmac.mockResolvedValue({ valid: true });
|
|
56
|
+
const nonce1 = await (0, createNonce_1.createNonce)(mockWallet);
|
|
57
|
+
const nonce2 = await (0, createNonce_1.createNonce)(mockWallet);
|
|
58
|
+
expect(Buffer.from(nonce1, 'base64').byteLength).toEqual(32);
|
|
59
|
+
expect(Buffer.from(nonce2, 'base64').byteLength).toEqual(32);
|
|
60
|
+
await expect((0, verifyNonce_1.verifyNonce)(nonce1, mockWallet)).resolves.toEqual(true);
|
|
61
|
+
await expect((0, verifyNonce_1.verifyNonce)(nonce2, mockWallet)).resolves.toEqual(true);
|
|
62
|
+
});
|
|
63
|
+
it('verifies nonce using real createHmac and verifyHmac', async () => {
|
|
64
|
+
const realWallet = new CompletedProtoWallet_1.CompletedProtoWallet(index_1.PrivateKey.fromRandom());
|
|
65
|
+
const nonce = await (0, createNonce_1.createNonce)(realWallet);
|
|
66
|
+
const isValid = await (0, verifyNonce_1.verifyNonce)(nonce, realWallet);
|
|
67
|
+
expect(isValid).toEqual(true);
|
|
68
|
+
});
|
|
69
|
+
it('SerialNumber use-case', async () => {
|
|
70
|
+
const clientWallet = new CompletedProtoWallet_1.CompletedProtoWallet(index_1.PrivateKey.fromRandom());
|
|
71
|
+
const serverWallet = new CompletedProtoWallet_1.CompletedProtoWallet(index_1.PrivateKey.fromRandom());
|
|
72
|
+
// Client creates a random nonce that the server can verify
|
|
73
|
+
const clientNonce = await (0, createNonce_1.createNonce)(clientWallet, (await serverWallet.getPublicKey({ identityKey: true })).publicKey);
|
|
74
|
+
// The server verifies the client created the nonce provided
|
|
75
|
+
await (0, verifyNonce_1.verifyNonce)(clientNonce, serverWallet, (await clientWallet.getPublicKey({ identityKey: true })).publicKey);
|
|
76
|
+
// Server creates a random nonce that the client can verify
|
|
77
|
+
const serverNonce = await (0, createNonce_1.createNonce)(serverWallet, (await clientWallet.getPublicKey({ identityKey: true })).publicKey);
|
|
78
|
+
// The server compute a serial number from the client and server nonce
|
|
79
|
+
const { hmac: serialNumber } = await serverWallet.createHmac({
|
|
80
|
+
data: index_1.Utils.toArray(clientNonce + serverNonce, 'utf8'),
|
|
81
|
+
protocolID: [2, 'certificate creation'],
|
|
82
|
+
keyID: serverNonce + clientNonce,
|
|
83
|
+
counterparty: (await clientWallet.getPublicKey({ identityKey: true }))
|
|
84
|
+
.publicKey
|
|
85
|
+
});
|
|
86
|
+
// Client verifies server's nonce
|
|
87
|
+
await (0, verifyNonce_1.verifyNonce)(serverNonce, clientWallet, (await serverWallet.getPublicKey({ identityKey: true })).publicKey);
|
|
88
|
+
// Client verifies the server included their nonce
|
|
89
|
+
const { valid } = await clientWallet.verifyHmac({
|
|
90
|
+
hmac: serialNumber,
|
|
91
|
+
data: index_1.Utils.toArray(clientNonce + serverNonce, 'utf8'),
|
|
92
|
+
protocolID: [2, 'certificate creation'],
|
|
93
|
+
keyID: serverNonce + clientNonce,
|
|
94
|
+
counterparty: (await serverWallet.getPublicKey({ identityKey: true }))
|
|
95
|
+
.publicKey
|
|
96
|
+
});
|
|
97
|
+
console.log(index_1.Utils.toBase64(serialNumber));
|
|
98
|
+
expect(valid).toEqual(true);
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
//# sourceMappingURL=cryptononce.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cryptononce.test.js","sourceRoot":"","sources":["../../../../../../src/auth/utils/__tests/cryptononce.test.ts"],"names":[],"mappings":"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"}
|