@bsv/sdk 2.1.0 → 2.1.2
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/README.md +7 -7
- package/dist/cjs/package.json +1 -1
- package/dist/cjs/src/auth/Peer.js +8 -13
- package/dist/cjs/src/auth/Peer.js.map +1 -1
- package/dist/cjs/src/auth/SessionManager.js +4 -7
- package/dist/cjs/src/auth/SessionManager.js.map +1 -1
- package/dist/cjs/src/auth/certificates/MasterCertificate.js +1 -1
- package/dist/cjs/src/auth/certificates/MasterCertificate.js.map +1 -1
- package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js +1 -1
- package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
- package/dist/cjs/src/auth/clients/AuthFetch.js +32 -32
- package/dist/cjs/src/auth/clients/AuthFetch.js.map +1 -1
- package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js +4 -4
- package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
- package/dist/cjs/src/compat/ECIES.js +29 -34
- package/dist/cjs/src/compat/ECIES.js.map +1 -1
- package/dist/cjs/src/compat/HD.js +9 -4
- package/dist/cjs/src/compat/HD.js.map +1 -1
- package/dist/cjs/src/compat/Mnemonic.js +12 -12
- package/dist/cjs/src/compat/Mnemonic.js.map +1 -1
- package/dist/cjs/src/identity/ContactsManager.js +212 -234
- package/dist/cjs/src/identity/ContactsManager.js.map +1 -1
- package/dist/cjs/src/identity/IdentityClient.js +199 -63
- package/dist/cjs/src/identity/IdentityClient.js.map +1 -1
- package/dist/cjs/src/kvstore/GlobalKVStore.js +30 -31
- package/dist/cjs/src/kvstore/GlobalKVStore.js.map +1 -1
- package/dist/cjs/src/kvstore/LocalKVStore.js +9 -9
- package/dist/cjs/src/kvstore/LocalKVStore.js.map +1 -1
- package/dist/cjs/src/kvstore/kvStoreInterpreter.js +2 -2
- package/dist/cjs/src/kvstore/kvStoreInterpreter.js.map +1 -1
- package/dist/cjs/src/messages/SignedMessage.js +1 -1
- package/dist/cjs/src/messages/SignedMessage.js.map +1 -1
- package/dist/cjs/src/overlay-tools/Historian.js +1 -1
- package/dist/cjs/src/overlay-tools/Historian.js.map +1 -1
- package/dist/cjs/src/overlay-tools/LookupResolver.js +213 -93
- package/dist/cjs/src/overlay-tools/LookupResolver.js.map +1 -1
- package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js +75 -146
- package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
- package/dist/cjs/src/primitives/AESGCM.js +2 -2
- package/dist/cjs/src/primitives/AESGCM.js.map +1 -1
- package/dist/cjs/src/primitives/BigNumber.js +164 -148
- package/dist/cjs/src/primitives/BigNumber.js.map +1 -1
- package/dist/cjs/src/primitives/Curve.js +17 -15
- package/dist/cjs/src/primitives/Curve.js.map +1 -1
- package/dist/cjs/src/primitives/ECDSA.js +12 -7
- package/dist/cjs/src/primitives/ECDSA.js.map +1 -1
- package/dist/cjs/src/primitives/Hash.js +312 -105
- package/dist/cjs/src/primitives/Hash.js.map +1 -1
- package/dist/cjs/src/primitives/JacobianPoint.js +8 -8
- package/dist/cjs/src/primitives/JacobianPoint.js.map +1 -1
- package/dist/cjs/src/primitives/K256.js +3 -3
- package/dist/cjs/src/primitives/K256.js.map +1 -1
- package/dist/cjs/src/primitives/Point.js +36 -40
- package/dist/cjs/src/primitives/Point.js.map +1 -1
- package/dist/cjs/src/primitives/PrivateKey.js +4 -4
- package/dist/cjs/src/primitives/PrivateKey.js.map +1 -1
- package/dist/cjs/src/primitives/PublicKey.js +4 -4
- package/dist/cjs/src/primitives/PublicKey.js.map +1 -1
- package/dist/cjs/src/primitives/Random.js +10 -14
- package/dist/cjs/src/primitives/Random.js.map +1 -1
- package/dist/cjs/src/primitives/ReaderUint8Array.js +6 -6
- package/dist/cjs/src/primitives/ReaderUint8Array.js.map +1 -1
- package/dist/cjs/src/primitives/Schnorr.js +2 -2
- package/dist/cjs/src/primitives/Schnorr.js.map +1 -1
- package/dist/cjs/src/primitives/Secp256r1.js +2 -1
- package/dist/cjs/src/primitives/Secp256r1.js.map +1 -1
- package/dist/cjs/src/primitives/Signature.js +8 -8
- package/dist/cjs/src/primitives/Signature.js.map +1 -1
- package/dist/cjs/src/primitives/SymmetricKey.js +123 -1
- package/dist/cjs/src/primitives/SymmetricKey.js.map +1 -1
- package/dist/cjs/src/primitives/TransactionSignature.js +20 -21
- package/dist/cjs/src/primitives/TransactionSignature.js.map +1 -1
- package/dist/cjs/src/primitives/utils.js +39 -46
- package/dist/cjs/src/primitives/utils.js.map +1 -1
- package/dist/cjs/src/registry/RegistryClient.js +31 -23
- package/dist/cjs/src/registry/RegistryClient.js.map +1 -1
- package/dist/cjs/src/remittance/RemittanceManager.js +19 -18
- package/dist/cjs/src/remittance/RemittanceManager.js.map +1 -1
- package/dist/cjs/src/remittance/modules/BasicBRC29.js.map +1 -1
- package/dist/cjs/src/script/Script.js +93 -170
- package/dist/cjs/src/script/Script.js.map +1 -1
- package/dist/cjs/src/script/ScriptEvaluationError.js +2 -2
- package/dist/cjs/src/script/ScriptEvaluationError.js.map +1 -1
- package/dist/cjs/src/script/Spend.js +14 -12
- package/dist/cjs/src/script/Spend.js.map +1 -1
- package/dist/cjs/src/script/templates/PushDrop.js +22 -18
- package/dist/cjs/src/script/templates/PushDrop.js.map +1 -1
- package/dist/cjs/src/script/templates/RPuzzle.js +2 -4
- package/dist/cjs/src/script/templates/RPuzzle.js.map +1 -1
- package/dist/cjs/src/storage/StorageDownloader.js +42 -9
- package/dist/cjs/src/storage/StorageDownloader.js.map +1 -1
- package/dist/cjs/src/totp/totp.js +1 -1
- package/dist/cjs/src/totp/totp.js.map +1 -1
- package/dist/cjs/src/transaction/Beef.js +239 -192
- package/dist/cjs/src/transaction/Beef.js.map +1 -1
- package/dist/cjs/src/transaction/BeefConstants.js +19 -0
- package/dist/cjs/src/transaction/BeefConstants.js.map +1 -0
- package/dist/cjs/src/transaction/BeefTx.js +12 -12
- package/dist/cjs/src/transaction/BeefTx.js.map +1 -1
- package/dist/cjs/src/transaction/MerklePath.js +4 -4
- package/dist/cjs/src/transaction/MerklePath.js.map +1 -1
- package/dist/cjs/src/transaction/Transaction.js +49 -52
- package/dist/cjs/src/transaction/Transaction.js.map +1 -1
- package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js +1 -1
- package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
- package/dist/cjs/src/transaction/http/BinaryFetchClient.js +9 -9
- package/dist/cjs/src/transaction/http/BinaryFetchClient.js.map +1 -1
- package/dist/cjs/src/transaction/http/DefaultHttpClient.js +9 -9
- package/dist/cjs/src/transaction/http/DefaultHttpClient.js.map +1 -1
- package/dist/cjs/src/wallet/CachedKeyDeriver.js +1 -1
- package/dist/cjs/src/wallet/CachedKeyDeriver.js.map +1 -1
- package/dist/cjs/src/wallet/WalletClient.js.map +1 -1
- package/dist/cjs/src/wallet/WalletError.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js +5 -4
- package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/ReactNativeWebView.js +9 -9
- package/dist/cjs/src/wallet/substrates/ReactNativeWebView.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js +92 -92
- package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js +387 -711
- package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/XDM.js +4 -4
- package/dist/cjs/src/wallet/substrates/XDM.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/window.CWI.js +2 -2
- package/dist/cjs/src/wallet/substrates/window.CWI.js.map +1 -1
- package/dist/cjs/src/wallet/validationHelpers.js +9 -9
- package/dist/cjs/src/wallet/validationHelpers.js.map +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/src/auth/Peer.js +25 -13
- package/dist/esm/src/auth/Peer.js.map +1 -1
- package/dist/esm/src/auth/SessionManager.js +4 -7
- package/dist/esm/src/auth/SessionManager.js.map +1 -1
- package/dist/esm/src/auth/certificates/MasterCertificate.js +1 -1
- package/dist/esm/src/auth/certificates/MasterCertificate.js.map +1 -1
- package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js +1 -1
- package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
- package/dist/esm/src/auth/clients/AuthFetch.js +32 -32
- package/dist/esm/src/auth/clients/AuthFetch.js.map +1 -1
- package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js +4 -4
- package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
- package/dist/esm/src/compat/ECIES.js +29 -34
- package/dist/esm/src/compat/ECIES.js.map +1 -1
- package/dist/esm/src/compat/HD.js +9 -4
- package/dist/esm/src/compat/HD.js.map +1 -1
- package/dist/esm/src/compat/Mnemonic.js +12 -12
- package/dist/esm/src/compat/Mnemonic.js.map +1 -1
- package/dist/esm/src/identity/ContactsManager.js +212 -234
- package/dist/esm/src/identity/ContactsManager.js.map +1 -1
- package/dist/esm/src/identity/IdentityClient.js +199 -63
- package/dist/esm/src/identity/IdentityClient.js.map +1 -1
- package/dist/esm/src/kvstore/GlobalKVStore.js +30 -31
- package/dist/esm/src/kvstore/GlobalKVStore.js.map +1 -1
- package/dist/esm/src/kvstore/LocalKVStore.js +9 -9
- package/dist/esm/src/kvstore/LocalKVStore.js.map +1 -1
- package/dist/esm/src/kvstore/kvStoreInterpreter.js +2 -2
- package/dist/esm/src/kvstore/kvStoreInterpreter.js.map +1 -1
- package/dist/esm/src/messages/SignedMessage.js +1 -1
- package/dist/esm/src/messages/SignedMessage.js.map +1 -1
- package/dist/esm/src/overlay-tools/Historian.js +1 -1
- package/dist/esm/src/overlay-tools/Historian.js.map +1 -1
- package/dist/esm/src/overlay-tools/LookupResolver.js +213 -93
- package/dist/esm/src/overlay-tools/LookupResolver.js.map +1 -1
- package/dist/esm/src/overlay-tools/SHIPBroadcaster.js +74 -146
- package/dist/esm/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
- package/dist/esm/src/primitives/AESGCM.js +2 -2
- package/dist/esm/src/primitives/AESGCM.js.map +1 -1
- package/dist/esm/src/primitives/BigNumber.js +167 -154
- package/dist/esm/src/primitives/BigNumber.js.map +1 -1
- package/dist/esm/src/primitives/Curve.js +17 -15
- package/dist/esm/src/primitives/Curve.js.map +1 -1
- package/dist/esm/src/primitives/ECDSA.js +12 -7
- package/dist/esm/src/primitives/ECDSA.js.map +1 -1
- package/dist/esm/src/primitives/Hash.js +316 -105
- package/dist/esm/src/primitives/Hash.js.map +1 -1
- package/dist/esm/src/primitives/JacobianPoint.js +8 -8
- package/dist/esm/src/primitives/JacobianPoint.js.map +1 -1
- package/dist/esm/src/primitives/K256.js +3 -3
- package/dist/esm/src/primitives/K256.js.map +1 -1
- package/dist/esm/src/primitives/Point.js +36 -40
- package/dist/esm/src/primitives/Point.js.map +1 -1
- package/dist/esm/src/primitives/PrivateKey.js +4 -4
- package/dist/esm/src/primitives/PrivateKey.js.map +1 -1
- package/dist/esm/src/primitives/PublicKey.js +4 -4
- package/dist/esm/src/primitives/PublicKey.js.map +1 -1
- package/dist/esm/src/primitives/Random.js +10 -14
- package/dist/esm/src/primitives/Random.js.map +1 -1
- package/dist/esm/src/primitives/ReaderUint8Array.js +6 -6
- package/dist/esm/src/primitives/ReaderUint8Array.js.map +1 -1
- package/dist/esm/src/primitives/Schnorr.js +1 -1
- package/dist/esm/src/primitives/Schnorr.js.map +1 -1
- package/dist/esm/src/primitives/Secp256r1.js +2 -1
- package/dist/esm/src/primitives/Secp256r1.js.map +1 -1
- package/dist/esm/src/primitives/Signature.js +8 -8
- package/dist/esm/src/primitives/Signature.js.map +1 -1
- package/dist/esm/src/primitives/SymmetricKey.js +123 -1
- package/dist/esm/src/primitives/SymmetricKey.js.map +1 -1
- package/dist/esm/src/primitives/TransactionSignature.js +20 -21
- package/dist/esm/src/primitives/TransactionSignature.js.map +1 -1
- package/dist/esm/src/primitives/utils.js +39 -48
- package/dist/esm/src/primitives/utils.js.map +1 -1
- package/dist/esm/src/registry/RegistryClient.js +31 -23
- package/dist/esm/src/registry/RegistryClient.js.map +1 -1
- package/dist/esm/src/remittance/RemittanceManager.js +19 -18
- package/dist/esm/src/remittance/RemittanceManager.js.map +1 -1
- package/dist/esm/src/remittance/modules/BasicBRC29.js.map +1 -1
- package/dist/esm/src/script/Script.js +93 -170
- package/dist/esm/src/script/Script.js.map +1 -1
- package/dist/esm/src/script/ScriptEvaluationError.js +2 -2
- package/dist/esm/src/script/ScriptEvaluationError.js.map +1 -1
- package/dist/esm/src/script/Spend.js +14 -12
- package/dist/esm/src/script/Spend.js.map +1 -1
- package/dist/esm/src/script/templates/PushDrop.js +4 -3
- package/dist/esm/src/script/templates/PushDrop.js.map +1 -1
- package/dist/esm/src/script/templates/RPuzzle.js +2 -4
- package/dist/esm/src/script/templates/RPuzzle.js.map +1 -1
- package/dist/esm/src/storage/StorageDownloader.js +1 -1
- package/dist/esm/src/storage/StorageDownloader.js.map +1 -1
- package/dist/esm/src/totp/totp.js +1 -1
- package/dist/esm/src/totp/totp.js.map +1 -1
- package/dist/esm/src/transaction/Beef.js +229 -186
- package/dist/esm/src/transaction/Beef.js.map +1 -1
- package/dist/esm/src/transaction/BeefConstants.js +16 -0
- package/dist/esm/src/transaction/BeefConstants.js.map +1 -0
- package/dist/esm/src/transaction/BeefTx.js +3 -3
- package/dist/esm/src/transaction/BeefTx.js.map +1 -1
- package/dist/esm/src/transaction/MerklePath.js +4 -4
- package/dist/esm/src/transaction/MerklePath.js.map +1 -1
- package/dist/esm/src/transaction/Transaction.js +49 -52
- package/dist/esm/src/transaction/Transaction.js.map +1 -1
- package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js +1 -1
- package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
- package/dist/esm/src/transaction/http/BinaryFetchClient.js +9 -9
- package/dist/esm/src/transaction/http/BinaryFetchClient.js.map +1 -1
- package/dist/esm/src/transaction/http/DefaultHttpClient.js +9 -9
- package/dist/esm/src/transaction/http/DefaultHttpClient.js.map +1 -1
- package/dist/esm/src/wallet/CachedKeyDeriver.js +1 -1
- package/dist/esm/src/wallet/CachedKeyDeriver.js.map +1 -1
- package/dist/esm/src/wallet/WalletClient.js.map +1 -1
- package/dist/esm/src/wallet/WalletError.js.map +1 -1
- package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js +5 -4
- package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
- package/dist/esm/src/wallet/substrates/ReactNativeWebView.js +9 -9
- package/dist/esm/src/wallet/substrates/ReactNativeWebView.js.map +1 -1
- package/dist/esm/src/wallet/substrates/WalletWireProcessor.js +92 -92
- package/dist/esm/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
- package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js +387 -711
- package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
- package/dist/esm/src/wallet/substrates/XDM.js +4 -4
- package/dist/esm/src/wallet/substrates/XDM.js.map +1 -1
- package/dist/esm/src/wallet/substrates/window.CWI.js +2 -2
- package/dist/esm/src/wallet/substrates/window.CWI.js.map +1 -1
- package/dist/esm/src/wallet/validationHelpers.js +9 -9
- package/dist/esm/src/wallet/validationHelpers.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/types/src/auth/Peer.d.ts +13 -0
- package/dist/types/src/auth/Peer.d.ts.map +1 -1
- package/dist/types/src/auth/SessionManager.d.ts.map +1 -1
- package/dist/types/src/auth/clients/AuthFetch.d.ts.map +1 -1
- package/dist/types/src/compat/ECIES.d.ts.map +1 -1
- package/dist/types/src/compat/HD.d.ts.map +1 -1
- package/dist/types/src/identity/ContactsManager.d.ts +31 -2
- package/dist/types/src/identity/ContactsManager.d.ts.map +1 -1
- package/dist/types/src/identity/IdentityClient.d.ts +75 -10
- package/dist/types/src/identity/IdentityClient.d.ts.map +1 -1
- package/dist/types/src/kvstore/GlobalKVStore.d.ts.map +1 -1
- package/dist/types/src/overlay-tools/LookupResolver.d.ts +73 -2
- package/dist/types/src/overlay-tools/LookupResolver.d.ts.map +1 -1
- package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts +18 -3
- package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts.map +1 -1
- package/dist/types/src/primitives/BigNumber.d.ts +13 -3
- package/dist/types/src/primitives/BigNumber.d.ts.map +1 -1
- package/dist/types/src/primitives/Curve.d.ts.map +1 -1
- package/dist/types/src/primitives/ECDSA.d.ts.map +1 -1
- package/dist/types/src/primitives/Hash.d.ts +22 -17
- package/dist/types/src/primitives/Hash.d.ts.map +1 -1
- package/dist/types/src/primitives/JacobianPoint.d.ts +3 -1
- package/dist/types/src/primitives/JacobianPoint.d.ts.map +1 -1
- package/dist/types/src/primitives/Point.d.ts.map +1 -1
- package/dist/types/src/primitives/Random.d.ts +2 -2
- package/dist/types/src/primitives/Random.d.ts.map +1 -1
- package/dist/types/src/primitives/ReaderUint8Array.d.ts.map +1 -1
- package/dist/types/src/primitives/Schnorr.d.ts +2 -1
- package/dist/types/src/primitives/Schnorr.d.ts.map +1 -1
- package/dist/types/src/primitives/Secp256r1.d.ts.map +1 -1
- package/dist/types/src/primitives/SymmetricKey.d.ts.map +1 -1
- package/dist/types/src/primitives/utils.d.ts +2 -4
- package/dist/types/src/primitives/utils.d.ts.map +1 -1
- package/dist/types/src/registry/RegistryClient.d.ts.map +1 -1
- package/dist/types/src/remittance/RemittanceManager.d.ts.map +1 -1
- package/dist/types/src/remittance/modules/BasicBRC29.d.ts.map +1 -1
- package/dist/types/src/script/Script.d.ts +15 -8
- package/dist/types/src/script/Script.d.ts.map +1 -1
- package/dist/types/src/script/Spend.d.ts.map +1 -1
- package/dist/types/src/script/templates/PushDrop.d.ts +3 -1
- 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/transaction/Beef.d.ts +46 -8
- package/dist/types/src/transaction/Beef.d.ts.map +1 -1
- package/dist/types/src/transaction/BeefConstants.d.ts +15 -0
- package/dist/types/src/transaction/BeefConstants.d.ts.map +1 -0
- package/dist/types/src/transaction/Transaction.d.ts.map +1 -1
- package/dist/types/src/wallet/CachedKeyDeriver.d.ts.map +1 -1
- package/dist/types/src/wallet/KeyDeriver.d.ts +1 -1
- package/dist/types/src/wallet/KeyDeriver.d.ts.map +1 -1
- package/dist/types/src/wallet/Wallet.interfaces.d.ts +18 -3
- package/dist/types/src/wallet/Wallet.interfaces.d.ts.map +1 -1
- package/dist/types/src/wallet/WalletClient.d.ts +8 -8
- package/dist/types/src/wallet/WalletClient.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts +7 -7
- package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/WalletWireTransceiver.d.ts +36 -7
- package/dist/types/src/wallet/substrates/WalletWireTransceiver.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/window.CWI.d.ts +9 -9
- 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 +3 -3
- package/package.json +1 -1
- package/src/auth/Peer.ts +26 -13
- package/src/auth/SessionManager.ts +4 -7
- package/src/auth/certificates/MasterCertificate.ts +1 -1
- package/src/auth/certificates/__tests/CompletedProtoWallet.ts +1 -1
- package/src/auth/clients/AuthFetch.ts +41 -41
- package/src/auth/transports/SimplifiedFetchTransport.ts +4 -4
- package/src/compat/ECIES.ts +29 -34
- package/src/compat/HD.ts +10 -5
- package/src/compat/Mnemonic.ts +11 -11
- package/src/compat/__tests/HD.test.ts +19 -0
- package/src/identity/ContactsManager.ts +236 -258
- package/src/identity/IdentityClient.ts +244 -71
- package/src/identity/__tests/IdentityClient.additional.test.ts +150 -1
- package/src/identity/__tests/IdentityClient.test.ts +27 -3
- package/src/kvstore/GlobalKVStore.ts +31 -32
- package/src/kvstore/LocalKVStore.ts +8 -8
- package/src/kvstore/kvStoreInterpreter.ts +2 -2
- package/src/messages/SignedMessage.ts +1 -1
- package/src/overlay-tools/Historian.ts +1 -1
- package/src/overlay-tools/LookupResolver.ts +264 -90
- package/src/overlay-tools/SHIPBroadcaster.ts +92 -168
- package/src/primitives/AESGCM.ts +2 -2
- package/src/primitives/BigNumber.ts +122 -113
- package/src/primitives/Curve.ts +16 -15
- package/src/primitives/ECDSA.ts +10 -8
- package/src/primitives/Hash.ts +381 -146
- package/src/primitives/JacobianPoint.ts +13 -11
- package/src/primitives/K256.ts +3 -3
- package/src/primitives/Point.ts +35 -38
- package/src/primitives/PrivateKey.ts +3 -3
- package/src/primitives/PublicKey.ts +3 -3
- package/src/primitives/Random.ts +11 -14
- package/src/primitives/ReaderUint8Array.ts +7 -7
- package/src/primitives/Schnorr.ts +2 -1
- package/src/primitives/Secp256r1.ts +2 -1
- package/src/primitives/Signature.ts +8 -8
- package/src/primitives/SymmetricKey.ts +145 -1
- package/src/primitives/TransactionSignature.ts +16 -16
- package/src/primitives/__tests/Hash.additional.test.ts +65 -0
- package/src/primitives/__tests/Hash.test.ts +6 -1
- package/src/primitives/utils.ts +37 -47
- package/src/registry/RegistryClient.ts +25 -25
- package/src/remittance/RemittanceManager.ts +17 -18
- package/src/remittance/modules/BasicBRC29.ts +2 -5
- package/src/script/Script.ts +114 -170
- package/src/script/ScriptEvaluationError.ts +2 -2
- package/src/script/Spend.ts +14 -15
- package/src/script/templates/PushDrop.ts +5 -3
- package/src/script/templates/RPuzzle.ts +2 -4
- package/src/storage/StorageDownloader.ts +1 -1
- package/src/totp/totp.ts +1 -1
- package/src/transaction/Beef.ts +241 -203
- package/src/transaction/BeefConstants.ts +16 -0
- package/src/transaction/BeefTx.ts +3 -3
- package/src/transaction/MerklePath.ts +4 -4
- package/src/transaction/Transaction.ts +48 -51
- package/src/transaction/fee-models/SatoshisPerKilobyte.ts +1 -1
- package/src/transaction/http/BinaryFetchClient.ts +8 -8
- package/src/transaction/http/DefaultHttpClient.ts +8 -8
- package/src/wallet/CachedKeyDeriver.ts +8 -6
- package/src/wallet/KeyDeriver.ts +1 -1
- package/src/wallet/Wallet.interfaces.ts +18 -5
- package/src/wallet/WalletClient.ts +9 -9
- package/src/wallet/WalletError.ts +1 -1
- package/src/wallet/__tests/WalletClient.substrate.test.ts +10 -6
- package/src/wallet/substrates/HTTPWalletJSON.ts +22 -21
- package/src/wallet/substrates/ReactNativeWebView.ts +9 -9
- package/src/wallet/substrates/WalletWireProcessor.ts +83 -83
- package/src/wallet/substrates/WalletWireTransceiver.ts +528 -938
- package/src/wallet/substrates/XDM.ts +4 -4
- package/src/wallet/substrates/__tests/HTTPWalletJSON.test.ts +38 -25
- package/src/wallet/substrates/__tests/ReactNativeWebView.test.ts +174 -0
- package/src/wallet/substrates/__tests/window.CWI.test.ts +256 -0
- package/src/wallet/substrates/window.CWI.ts +11 -11
- package/src/wallet/validationHelpers.ts +9 -9
package/package.json
CHANGED
package/src/auth/Peer.ts
CHANGED
|
@@ -18,7 +18,7 @@ import { OriginatorDomainNameStringUnder250Bytes, WalletInterface } from '../wal
|
|
|
18
18
|
|
|
19
19
|
const AUTH_VERSION = '0.1'
|
|
20
20
|
const BufferCtor =
|
|
21
|
-
typeof globalThis
|
|
21
|
+
typeof globalThis === 'undefined' ? undefined : (globalThis as any).Buffer
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
24
|
* Represents a peer capable of performing mutual authentication.
|
|
@@ -73,6 +73,24 @@ export class Peer {
|
|
|
73
73
|
private readonly originator?: OriginatorDomainNameStringUnder250Bytes
|
|
74
74
|
private identityPublicKey?: string
|
|
75
75
|
|
|
76
|
+
/**
|
|
77
|
+
* Resolves when the transport's `onData` listener has been registered and
|
|
78
|
+
* the peer is ready to send and receive messages. Await this after
|
|
79
|
+
* construction before calling `toPeer` or any other method that requires
|
|
80
|
+
* the transport to be listening.
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* const peer = new Peer(wallet, transport)
|
|
84
|
+
* await peer.ready
|
|
85
|
+
* await peer.toPeer(payload)
|
|
86
|
+
*/
|
|
87
|
+
/*
|
|
88
|
+
* Listener must register synchronously so paired-peer mocks/transports see
|
|
89
|
+
* onDataCallback set immediately. The returned Promise resolves once registration
|
|
90
|
+
* is fully acknowledged. A lazy getter pattern would break paired-peer test mocks.
|
|
91
|
+
*/
|
|
92
|
+
readonly ready: Promise<void>
|
|
93
|
+
|
|
76
94
|
/**
|
|
77
95
|
* Creates a new Peer instance
|
|
78
96
|
*
|
|
@@ -81,6 +99,7 @@ export class Peer {
|
|
|
81
99
|
* @param {RequestedCertificateSet} [certificatesToRequest] - Optional set of certificates to request from a peer during the initial handshake.
|
|
82
100
|
* @param {SessionManager} [sessionManager] - Optional SessionManager to be used for managing peer sessions.
|
|
83
101
|
* @param {boolean} [autoPersistLastSession] - Whether to auto-persist the session with the last-interacted-with peer. Defaults to true.
|
|
102
|
+
* @param {OriginatorDomainNameStringUnder250Bytes} [originator] - Optional originator domain name.
|
|
84
103
|
*/
|
|
85
104
|
constructor (
|
|
86
105
|
wallet: WalletInterface,
|
|
@@ -97,11 +116,9 @@ export class Peer {
|
|
|
97
116
|
certifiers: [],
|
|
98
117
|
types: {}
|
|
99
118
|
}
|
|
100
|
-
this.transport.onData(this.handleIncomingMessage.bind(this))
|
|
101
|
-
throw e
|
|
102
|
-
})
|
|
119
|
+
this.ready = this.transport.onData(this.handleIncomingMessage.bind(this)) // NOSONAR(typescript:S7059): listener must register synchronously — see ready field comment
|
|
103
120
|
this.sessionManager =
|
|
104
|
-
sessionManager
|
|
121
|
+
sessionManager ?? new SessionManager()
|
|
105
122
|
if (autoPersistLastSession === false) {
|
|
106
123
|
this.autoPersistLastSession = false
|
|
107
124
|
} else {
|
|
@@ -249,12 +266,12 @@ export class Peer {
|
|
|
249
266
|
}
|
|
250
267
|
|
|
251
268
|
// If that session doesn't exist or isn't authenticated, initiate handshake
|
|
252
|
-
if (
|
|
269
|
+
if (peerSession?.isAuthenticated !== true) {
|
|
253
270
|
// This will create a brand-new session
|
|
254
271
|
const sessionNonce = await this.initiateHandshake(identityKey)
|
|
255
272
|
// Now retrieve it by the sessionNonce
|
|
256
273
|
peerSession = this.sessionManager.getSession(sessionNonce)
|
|
257
|
-
if (
|
|
274
|
+
if (peerSession?.isAuthenticated !== true) {
|
|
258
275
|
throw new Error('Unable to establish mutual authentication with peer!')
|
|
259
276
|
}
|
|
260
277
|
}
|
|
@@ -423,9 +440,7 @@ export class Peer {
|
|
|
423
440
|
if (peerIdentityKey != null) {
|
|
424
441
|
const existingDetails = (error as any).details
|
|
425
442
|
if (existingDetails != null && typeof existingDetails === 'object') {
|
|
426
|
-
|
|
427
|
-
existingDetails.peerIdentityKey = peerIdentityKey
|
|
428
|
-
}
|
|
443
|
+
existingDetails.peerIdentityKey ??= peerIdentityKey
|
|
429
444
|
} else {
|
|
430
445
|
(error as any).details = { peerIdentityKey }
|
|
431
446
|
}
|
|
@@ -548,9 +563,7 @@ export class Peer {
|
|
|
548
563
|
signature
|
|
549
564
|
}
|
|
550
565
|
|
|
551
|
-
|
|
552
|
-
this.lastInteractedWithPeer = message.identityKey
|
|
553
|
-
}
|
|
566
|
+
this.lastInteractedWithPeer ??= message.identityKey
|
|
554
567
|
|
|
555
568
|
await this.transport.send(initialResponseMessage)
|
|
556
569
|
}
|
|
@@ -31,7 +31,7 @@ export class SessionManager {
|
|
|
31
31
|
*/
|
|
32
32
|
addSession (session: PeerSession): void {
|
|
33
33
|
if (typeof session.sessionNonce !== 'string') {
|
|
34
|
-
throw new
|
|
34
|
+
throw new TypeError(
|
|
35
35
|
'Invalid session: sessionNonce is required to add a session.'
|
|
36
36
|
)
|
|
37
37
|
}
|
|
@@ -97,11 +97,8 @@ export class SessionManager {
|
|
|
97
97
|
// We can prefer authenticated sessions
|
|
98
98
|
if (best == null) {
|
|
99
99
|
best = s
|
|
100
|
-
} else {
|
|
101
|
-
|
|
102
|
-
if ((s.lastUpdate ?? 0) > (best.lastUpdate ?? 0)) {
|
|
103
|
-
best = s
|
|
104
|
-
}
|
|
100
|
+
} else if ((s.lastUpdate ?? 0) > (best.lastUpdate ?? 0)) {
|
|
101
|
+
best = s
|
|
105
102
|
}
|
|
106
103
|
}
|
|
107
104
|
// Optionally, you could also filter out isAuthenticated===false if you only want
|
|
@@ -140,6 +137,6 @@ export class SessionManager {
|
|
|
140
137
|
if (direct) return true
|
|
141
138
|
// if not directly a nonce, interpret as identityKey
|
|
142
139
|
const nonces = this.identityKeyToNonces.get(identifier)
|
|
143
|
-
return
|
|
140
|
+
return (nonces != null) && nonces.size > 0
|
|
144
141
|
}
|
|
145
142
|
}
|
|
@@ -157,7 +157,7 @@ export class MasterCertificate extends Certificate {
|
|
|
157
157
|
privilegedReason?: string
|
|
158
158
|
): Promise<Record<CertificateFieldNameUnder50Bytes, string>> {
|
|
159
159
|
if (!Array.isArray(fieldsToReveal)) {
|
|
160
|
-
throw new
|
|
160
|
+
throw new TypeError('fieldsToReveal must be an array of strings')
|
|
161
161
|
}
|
|
162
162
|
const fieldRevelationKeyring = {}
|
|
163
163
|
for (const fieldName of fieldsToReveal) {
|
|
@@ -117,11 +117,13 @@ export class AuthFetch {
|
|
|
117
117
|
|
|
118
118
|
// Create a new transport for this base url if needed
|
|
119
119
|
let peerToUse: AuthPeer
|
|
120
|
-
if (
|
|
120
|
+
if (this.peers[baseURL] === undefined) {
|
|
121
121
|
// Create a peer for the request
|
|
122
122
|
const newTransport = new SimplifiedFetchTransport(baseURL)
|
|
123
|
+
const newPeer = new Peer(this.wallet, newTransport, this.requestedCertificates, this.sessionManager, undefined, this.originator)
|
|
124
|
+
await newPeer.ready
|
|
123
125
|
peerToUse = {
|
|
124
|
-
peer:
|
|
126
|
+
peer: newPeer,
|
|
125
127
|
pendingCertificateRequests: []
|
|
126
128
|
}
|
|
127
129
|
this.peers[baseURL] = peerToUse
|
|
@@ -315,20 +317,20 @@ export class AuthFetch {
|
|
|
315
317
|
const baseURL = parsedUrl.origin
|
|
316
318
|
|
|
317
319
|
let peerToUse: { peer: Peer; identityKey?: string }
|
|
318
|
-
if (
|
|
319
|
-
peerToUse = { peer: this.peers[baseURL].peer }
|
|
320
|
-
} else {
|
|
320
|
+
if (this.peers[baseURL] === undefined) {
|
|
321
321
|
const newTransport = new SimplifiedFetchTransport(baseURL)
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
}
|
|
322
|
+
const newPeer = new Peer(
|
|
323
|
+
this.wallet,
|
|
324
|
+
newTransport,
|
|
325
|
+
this.requestedCertificates,
|
|
326
|
+
this.sessionManager,
|
|
327
|
+
this.originator
|
|
328
|
+
)
|
|
329
|
+
await newPeer.ready
|
|
330
|
+
peerToUse = { peer: newPeer }
|
|
331
331
|
this.peers[baseURL] = peerToUse
|
|
332
|
+
} else {
|
|
333
|
+
peerToUse = { peer: this.peers[baseURL].peer }
|
|
332
334
|
}
|
|
333
335
|
|
|
334
336
|
// Return a promise that resolves when certificates are received
|
|
@@ -451,14 +453,14 @@ export class AuthFetch {
|
|
|
451
453
|
|
|
452
454
|
// nHeaders
|
|
453
455
|
writer.writeVarIntNum(includedHeaders.length)
|
|
454
|
-
for (
|
|
456
|
+
for (const [headerKey, headerValue] of includedHeaders) {
|
|
455
457
|
// headerKeyLength
|
|
456
|
-
const headerKeyAsArray = Utils.toArray(
|
|
458
|
+
const headerKeyAsArray = Utils.toArray(headerKey, 'utf8')
|
|
457
459
|
writer.writeVarIntNum(headerKeyAsArray.length)
|
|
458
460
|
// headerKey
|
|
459
461
|
writer.write(headerKeyAsArray)
|
|
460
462
|
// headerValueLength
|
|
461
|
-
const headerValueAsArray = Utils.toArray(
|
|
463
|
+
const headerValueAsArray = Utils.toArray(headerValue, 'utf8')
|
|
462
464
|
writer.writeVarIntNum(headerValueAsArray.length)
|
|
463
465
|
// headerValue
|
|
464
466
|
writer.write(headerValueAsArray)
|
|
@@ -470,7 +472,7 @@ export class AuthFetch {
|
|
|
470
472
|
if (methodsThatTypicallyHaveBody.includes(method.toUpperCase()) && body === undefined) {
|
|
471
473
|
// Check if content-type is application/json
|
|
472
474
|
const contentTypeHeader = includedHeaders.find(([k]) => k === 'content-type')
|
|
473
|
-
if (contentTypeHeader
|
|
475
|
+
if (contentTypeHeader?.[1].includes('application/json') === true) {
|
|
474
476
|
body = '{}'
|
|
475
477
|
} else {
|
|
476
478
|
body = ''
|
|
@@ -525,14 +527,14 @@ export class AuthFetch {
|
|
|
525
527
|
if (!satoshisRequiredHeader) {
|
|
526
528
|
throw new Error('Missing x-bsv-payment-satoshis-required response header.')
|
|
527
529
|
}
|
|
528
|
-
const satoshisRequired = parseInt(satoshisRequiredHeader)
|
|
529
|
-
if (isNaN(satoshisRequired) || satoshisRequired <= 0) {
|
|
530
|
+
const satoshisRequired = Number.parseInt(satoshisRequiredHeader)
|
|
531
|
+
if (Number.isNaN(satoshisRequired) || satoshisRequired <= 0) {
|
|
530
532
|
throw new Error('Invalid x-bsv-payment-satoshis-required response header value.')
|
|
531
533
|
}
|
|
532
534
|
|
|
533
535
|
const serverIdentityKey = originalResponse.headers.get('x-bsv-auth-identity-key')
|
|
534
536
|
if (typeof serverIdentityKey !== 'string') {
|
|
535
|
-
throw new
|
|
537
|
+
throw new TypeError('Missing x-bsv-auth-identity-key response header.')
|
|
536
538
|
}
|
|
537
539
|
|
|
538
540
|
const derivationPrefix = originalResponse.headers.get('x-bsv-payment-derivation-prefix')
|
|
@@ -541,7 +543,15 @@ export class AuthFetch {
|
|
|
541
543
|
}
|
|
542
544
|
|
|
543
545
|
let paymentContext = config.paymentContext
|
|
544
|
-
if (paymentContext
|
|
546
|
+
if (paymentContext == null) {
|
|
547
|
+
paymentContext = await this.createPaymentContext(
|
|
548
|
+
url,
|
|
549
|
+
config,
|
|
550
|
+
satoshisRequired,
|
|
551
|
+
serverIdentityKey,
|
|
552
|
+
derivationPrefix
|
|
553
|
+
)
|
|
554
|
+
} else {
|
|
545
555
|
const requirementsChanged = !this.isPaymentContextCompatible(
|
|
546
556
|
paymentContext,
|
|
547
557
|
satoshisRequired,
|
|
@@ -558,14 +568,6 @@ export class AuthFetch {
|
|
|
558
568
|
derivationPrefix
|
|
559
569
|
)
|
|
560
570
|
}
|
|
561
|
-
} else {
|
|
562
|
-
paymentContext = await this.createPaymentContext(
|
|
563
|
-
url,
|
|
564
|
-
config,
|
|
565
|
-
satoshisRequired,
|
|
566
|
-
serverIdentityKey,
|
|
567
|
-
derivationPrefix
|
|
568
|
-
)
|
|
569
571
|
}
|
|
570
572
|
|
|
571
573
|
if (paymentContext.attempts >= paymentContext.maxAttempts) {
|
|
@@ -573,7 +575,7 @@ export class AuthFetch {
|
|
|
573
575
|
}
|
|
574
576
|
|
|
575
577
|
const headersWithPayment: Record<string, string> = {
|
|
576
|
-
...
|
|
578
|
+
...config.headers
|
|
577
579
|
}
|
|
578
580
|
headersWithPayment['x-bsv-payment'] = JSON.stringify({
|
|
579
581
|
derivationPrefix: paymentContext.derivationPrefix,
|
|
@@ -692,7 +694,7 @@ export class AuthFetch {
|
|
|
692
694
|
url: string,
|
|
693
695
|
config: SimplifiedFetchRequestOptions
|
|
694
696
|
): PaymentRetryContext['requestSummary'] {
|
|
695
|
-
const headers = { ...
|
|
697
|
+
const headers = { ...config.headers }
|
|
696
698
|
const method = typeof config.method === 'string' ? config.method.toUpperCase() : 'GET'
|
|
697
699
|
const bodySummary = this.describeRequestBodyForLogging(config.body)
|
|
698
700
|
|
|
@@ -727,7 +729,7 @@ export class AuthFetch {
|
|
|
727
729
|
|
|
728
730
|
if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView(body)) {
|
|
729
731
|
return {
|
|
730
|
-
type: body.constructor
|
|
732
|
+
type: body.constructor == null ? 'TypedArray' : body.constructor.name,
|
|
731
733
|
byteLength: body.byteLength
|
|
732
734
|
}
|
|
733
735
|
}
|
|
@@ -754,8 +756,8 @@ export class AuthFetch {
|
|
|
754
756
|
if (typeof serialized === 'string') {
|
|
755
757
|
return { type: 'object', byteLength: Utils.toArray(serialized, 'utf8').length }
|
|
756
758
|
}
|
|
757
|
-
} catch (
|
|
758
|
-
// Ignore JSON serialization issues for logging purposes
|
|
759
|
+
} catch (_jsonSerializationError) {
|
|
760
|
+
// Ignore JSON serialization issues for logging purposes only
|
|
759
761
|
}
|
|
760
762
|
|
|
761
763
|
return { type: typeof body, byteLength: 0 }
|
|
@@ -791,12 +793,10 @@ export class AuthFetch {
|
|
|
791
793
|
console.error(`${prefix} ${message}`, details)
|
|
792
794
|
} else if (level === 'warn') {
|
|
793
795
|
console.warn(`${prefix} ${message}`, details)
|
|
796
|
+
} else if (typeof console.info === 'function') {
|
|
797
|
+
console.info(`${prefix} ${message}`, details)
|
|
794
798
|
} else {
|
|
795
|
-
|
|
796
|
-
console.info(`${prefix} ${message}`, details)
|
|
797
|
-
} else {
|
|
798
|
-
console.log(`${prefix} ${message}`, details)
|
|
799
|
-
}
|
|
799
|
+
console.log(`${prefix} ${message}`, details)
|
|
800
800
|
}
|
|
801
801
|
}
|
|
802
802
|
|
|
@@ -915,7 +915,7 @@ export class AuthFetch {
|
|
|
915
915
|
|
|
916
916
|
// 8. ReadableStream
|
|
917
917
|
if (body instanceof ReadableStream) {
|
|
918
|
-
throw new
|
|
918
|
+
throw new TypeError('ReadableStream cannot be directly converted to number[].')
|
|
919
919
|
}
|
|
920
920
|
|
|
921
921
|
// 9. Fallback
|
|
@@ -24,7 +24,7 @@ export class SimplifiedFetchTransport implements Transport {
|
|
|
24
24
|
*/
|
|
25
25
|
constructor(baseUrl: string, fetchClient = defaultFetch) {
|
|
26
26
|
if (typeof fetchClient !== 'function') {
|
|
27
|
-
throw new
|
|
27
|
+
throw new TypeError(
|
|
28
28
|
'SimplifiedFetchTransport requires a fetch implementation. ' +
|
|
29
29
|
'In environments without fetch, provide a polyfill or custom implementation.'
|
|
30
30
|
)
|
|
@@ -192,14 +192,14 @@ export class SimplifiedFetchTransport implements Transport {
|
|
|
192
192
|
|
|
193
193
|
// nHeaders
|
|
194
194
|
payloadWriter.writeVarIntNum(includedHeaders.length)
|
|
195
|
-
for (
|
|
195
|
+
for (const [headerKey, headerValue] of includedHeaders) {
|
|
196
196
|
// headerKeyLength
|
|
197
|
-
const headerKeyAsArray = Utils.toArray(
|
|
197
|
+
const headerKeyAsArray = Utils.toArray(headerKey, 'utf8')
|
|
198
198
|
payloadWriter.writeVarIntNum(headerKeyAsArray.length)
|
|
199
199
|
// headerKey
|
|
200
200
|
payloadWriter.write(headerKeyAsArray)
|
|
201
201
|
// headerValueLength
|
|
202
|
-
const headerValueAsArray = Utils.toArray(
|
|
202
|
+
const headerValueAsArray = Utils.toArray(headerValue, 'utf8')
|
|
203
203
|
payloadWriter.writeVarIntNum(headerValueAsArray.length)
|
|
204
204
|
// headerValue
|
|
205
205
|
payloadWriter.write(headerValueAsArray)
|
package/src/compat/ECIES.ts
CHANGED
|
@@ -9,7 +9,7 @@ import { toArray, toHex, encode } from '../primitives/utils.js'
|
|
|
9
9
|
function AES (key): void {
|
|
10
10
|
if (this._tables[0][0][0] === 0) this._precompute()
|
|
11
11
|
|
|
12
|
-
let tmp
|
|
12
|
+
let tmp
|
|
13
13
|
const sbox = this._tables[0][4]
|
|
14
14
|
const decTable = this._tables[1]
|
|
15
15
|
const keyLen = key.length
|
|
@@ -19,7 +19,9 @@ function AES (key): void {
|
|
|
19
19
|
throw new Error('invalid aes key size')
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
const encKey = key.slice(0)
|
|
23
|
+
const decKey = []
|
|
24
|
+
this._key = [encKey, decKey]
|
|
23
25
|
|
|
24
26
|
// schedule encryption keys
|
|
25
27
|
let i: number
|
|
@@ -46,7 +48,7 @@ function AES (key): void {
|
|
|
46
48
|
|
|
47
49
|
// schedule decryption keys
|
|
48
50
|
for (let j = 0; i > 0; j++, i--) {
|
|
49
|
-
tmp = encKey[(j & 3)
|
|
51
|
+
tmp = encKey[(j & 3) === 0 ? i - 4 : i]
|
|
50
52
|
if (i <= 4 || j < 4) {
|
|
51
53
|
decKey[j] = tmp
|
|
52
54
|
} else {
|
|
@@ -127,10 +129,11 @@ AES.prototype = {
|
|
|
127
129
|
|
|
128
130
|
// Compute double and third tables
|
|
129
131
|
for (i = 0; i < 256; i++) {
|
|
130
|
-
|
|
132
|
+
d[i] = (i << 1) ^ ((i >> 7) * 283)
|
|
133
|
+
th[d[i] ^ i] = i
|
|
131
134
|
}
|
|
132
135
|
|
|
133
|
-
for (x = xInv = 0; sbox[x] === 0; x ^= (x2
|
|
136
|
+
for (x = xInv = 0; sbox[x] === 0; x ^= (x2 === 0 ? 1 : x2), xInv = th[xInv] === 0 ? 1 : th[xInv]) {
|
|
134
137
|
// Compute sbox
|
|
135
138
|
s = xInv ^ (xInv << 1) ^ (xInv << 2) ^ (xInv << 3) ^ (xInv << 4)
|
|
136
139
|
s = (s >> 8) ^ (s & 255) ^ 99
|
|
@@ -138,7 +141,9 @@ AES.prototype = {
|
|
|
138
141
|
sboxInv[s] = x
|
|
139
142
|
|
|
140
143
|
// Compute MixColumns
|
|
141
|
-
|
|
144
|
+
x2 = d[x]
|
|
145
|
+
x4 = d[x2]
|
|
146
|
+
x8 = d[x4]
|
|
142
147
|
tDec = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)
|
|
143
148
|
tEnc = (d[s] * 0x101) ^ (s * 0x1010100)
|
|
144
149
|
|
|
@@ -307,7 +312,7 @@ class CBC {
|
|
|
307
312
|
}
|
|
308
313
|
|
|
309
314
|
public static blockBufs2Buf (blockBufs: number[][]): number[] {
|
|
310
|
-
let last = blockBufs
|
|
315
|
+
let last = blockBufs.at(-1)
|
|
311
316
|
last = CBC.pkcs7Unpad(last)
|
|
312
317
|
blockBufs[blockBufs.length - 1] = last
|
|
313
318
|
|
|
@@ -319,7 +324,7 @@ class CBC {
|
|
|
319
324
|
public static encrypt (
|
|
320
325
|
messageBuf: number[],
|
|
321
326
|
ivBuf: number[],
|
|
322
|
-
blockCipher: any
|
|
327
|
+
blockCipher: any,
|
|
323
328
|
cipherKeyBuf: number[]
|
|
324
329
|
): number[] {
|
|
325
330
|
const blockSize = ivBuf.length * 8
|
|
@@ -337,7 +342,7 @@ class CBC {
|
|
|
337
342
|
public static decrypt (
|
|
338
343
|
encBuf: number[],
|
|
339
344
|
ivBuf: number[],
|
|
340
|
-
blockCipher: any
|
|
345
|
+
blockCipher: any,
|
|
341
346
|
cipherKeyBuf: number[]
|
|
342
347
|
): number[] {
|
|
343
348
|
const bytesize = ivBuf.length
|
|
@@ -358,7 +363,7 @@ class CBC {
|
|
|
358
363
|
public static encryptBlock (
|
|
359
364
|
blockBuf: number[],
|
|
360
365
|
ivBuf: number[],
|
|
361
|
-
blockCipher: any
|
|
366
|
+
blockCipher: any,
|
|
362
367
|
cipherKeyBuf: number[]
|
|
363
368
|
): number[] {
|
|
364
369
|
const xorbuf = CBC.xorBufs(blockBuf, ivBuf)
|
|
@@ -369,7 +374,7 @@ class CBC {
|
|
|
369
374
|
public static decryptBlock (
|
|
370
375
|
encBuf: number[],
|
|
371
376
|
ivBuf: number[],
|
|
372
|
-
blockCipher: any
|
|
377
|
+
blockCipher: any,
|
|
373
378
|
cipherKeyBuf: number[]
|
|
374
379
|
): number[] {
|
|
375
380
|
const xorbuf = blockCipher.decrypt(encBuf, cipherKeyBuf)
|
|
@@ -380,13 +385,12 @@ class CBC {
|
|
|
380
385
|
public static encryptBlocks (
|
|
381
386
|
blockBufs: number[][],
|
|
382
387
|
ivBuf: number[],
|
|
383
|
-
blockCipher: any
|
|
388
|
+
blockCipher: any,
|
|
384
389
|
cipherKeyBuf: number[]
|
|
385
390
|
): number[][] {
|
|
386
391
|
const encBufs: number[][] = []
|
|
387
392
|
|
|
388
|
-
for (
|
|
389
|
-
const blockBuf = blockBufs[i]
|
|
393
|
+
for (const blockBuf of blockBufs) {
|
|
390
394
|
const encBuf = CBC.encryptBlock(
|
|
391
395
|
blockBuf,
|
|
392
396
|
ivBuf,
|
|
@@ -405,13 +409,12 @@ class CBC {
|
|
|
405
409
|
public static decryptBlocks (
|
|
406
410
|
encBufs: number[][],
|
|
407
411
|
ivBuf: number[],
|
|
408
|
-
blockCipher: any
|
|
412
|
+
blockCipher: any,
|
|
409
413
|
cipherKeyBuf: number[]
|
|
410
414
|
): number[][] {
|
|
411
415
|
const blockBufs: number[][] = []
|
|
412
416
|
|
|
413
|
-
for (
|
|
414
|
-
const encBuf = encBufs[i]
|
|
417
|
+
for (const encBuf of encBufs) {
|
|
415
418
|
const blockBuf = CBC.decryptBlock(
|
|
416
419
|
encBuf,
|
|
417
420
|
ivBuf,
|
|
@@ -437,7 +440,7 @@ class CBC {
|
|
|
437
440
|
}
|
|
438
441
|
|
|
439
442
|
public static pkcs7Unpad (paddedbuf: number[]): number[] {
|
|
440
|
-
const padlength = paddedbuf
|
|
443
|
+
const padlength = paddedbuf.at(-1)
|
|
441
444
|
const padbuf = paddedbuf.slice(
|
|
442
445
|
paddedbuf.length - padlength,
|
|
443
446
|
paddedbuf.length
|
|
@@ -548,9 +551,7 @@ export default class ECIES {
|
|
|
548
551
|
noKey = false
|
|
549
552
|
): number[] {
|
|
550
553
|
let Rbuf: string | number[] | null = null
|
|
551
|
-
|
|
552
|
-
fromPrivateKey = PrivateKey.fromRandom()
|
|
553
|
-
}
|
|
554
|
+
fromPrivateKey ??= PrivateKey.fromRandom()
|
|
554
555
|
if (!noKey) {
|
|
555
556
|
Rbuf = fromPrivateKey.toPublicKey().encode(true)
|
|
556
557
|
}
|
|
@@ -603,14 +604,12 @@ export default class ECIES {
|
|
|
603
604
|
}
|
|
604
605
|
}
|
|
605
606
|
|
|
606
|
-
if (Rbuf
|
|
607
|
-
if (fromPublicKey == null) {
|
|
608
|
-
fromPublicKey = PublicKey.fromString(toHex(Rbuf))
|
|
609
|
-
}
|
|
610
|
-
} else {
|
|
607
|
+
if (Rbuf === null) {
|
|
611
608
|
if (fromPublicKey == null) {
|
|
612
609
|
throw new Error('Sender public key is required')
|
|
613
610
|
}
|
|
611
|
+
} else {
|
|
612
|
+
fromPublicKey ??= PublicKey.fromString(toHex(Rbuf))
|
|
614
613
|
}
|
|
615
614
|
|
|
616
615
|
const { iv, kE, kM } = ECIES.ivkEkM(toPrivateKey, fromPublicKey)
|
|
@@ -644,12 +643,8 @@ export default class ECIES {
|
|
|
644
643
|
fromPrivateKey?: PrivateKey,
|
|
645
644
|
ivBuf?: number[]
|
|
646
645
|
): number[] {
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
}
|
|
650
|
-
if (ivBuf == null) {
|
|
651
|
-
ivBuf = Random(16)
|
|
652
|
-
}
|
|
646
|
+
fromPrivateKey ??= PrivateKey.fromRandom()
|
|
647
|
+
ivBuf ??= Random(16)
|
|
653
648
|
const r = fromPrivateKey
|
|
654
649
|
const RPublicKey = fromPrivateKey.toPublicKey()
|
|
655
650
|
const RBuf = RPublicKey.encode(true) as number[]
|
|
@@ -689,8 +684,8 @@ export default class ECIES {
|
|
|
689
684
|
const kEkM = Hash.sha512(Sbuf)
|
|
690
685
|
const kE = kEkM.slice(0, 32)
|
|
691
686
|
const kM = kEkM.slice(32, 64)
|
|
692
|
-
const c = encBuf.slice(33,
|
|
693
|
-
const d = encBuf.slice(
|
|
687
|
+
const c = encBuf.slice(33, -32)
|
|
688
|
+
const d = encBuf.slice(-32)
|
|
694
689
|
const d2 = Hash.sha256hmac(kM, c)
|
|
695
690
|
if (toHex(d) !== toHex(d2)) {
|
|
696
691
|
throw new Error('Invalid checksum')
|
package/src/compat/HD.ts
CHANGED
|
@@ -230,13 +230,18 @@ export default class HD {
|
|
|
230
230
|
continue
|
|
231
231
|
}
|
|
232
232
|
|
|
233
|
-
|
|
233
|
+
const childMatch = /^(\d+)('?)$/.exec(c)
|
|
234
|
+
if (childMatch === null) {
|
|
234
235
|
throw new Error('invalid path')
|
|
235
236
|
}
|
|
236
237
|
|
|
237
|
-
const
|
|
238
|
-
|
|
239
|
-
|
|
238
|
+
const childIndexValue = Number.parseInt(childMatch[1], 10)
|
|
239
|
+
if (childIndexValue > 0x7fffffff) {
|
|
240
|
+
throw new Error('invalid path')
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
const usePrivate = childMatch[2] === "'"
|
|
244
|
+
let childIndex = childIndexValue
|
|
240
245
|
|
|
241
246
|
if (usePrivate) {
|
|
242
247
|
childIndex += 0x80000000
|
|
@@ -256,7 +261,7 @@ export default class HD {
|
|
|
256
261
|
*/
|
|
257
262
|
public deriveChild (i: number): HD {
|
|
258
263
|
if (typeof i !== 'number') {
|
|
259
|
-
throw new
|
|
264
|
+
throw new TypeError('i must be a number')
|
|
260
265
|
}
|
|
261
266
|
|
|
262
267
|
const ibc: number[] = []
|
package/src/compat/Mnemonic.ts
CHANGED
|
@@ -35,12 +35,12 @@ export default class Mnemonic {
|
|
|
35
35
|
*/
|
|
36
36
|
public toBinary (): number[] {
|
|
37
37
|
const bw = new Writer()
|
|
38
|
-
if (this.mnemonic
|
|
38
|
+
if (this.mnemonic === '') {
|
|
39
|
+
bw.writeVarIntNum(0)
|
|
40
|
+
} else {
|
|
39
41
|
const buf = toArray(this.mnemonic, 'utf8')
|
|
40
42
|
bw.writeVarIntNum(buf.length)
|
|
41
43
|
bw.write(buf)
|
|
42
|
-
} else {
|
|
43
|
-
bw.writeVarIntNum(0)
|
|
44
44
|
}
|
|
45
45
|
if (this.seed.length > 0) {
|
|
46
46
|
bw.writeVarIntNum(this.seed.length)
|
|
@@ -76,7 +76,7 @@ export default class Mnemonic {
|
|
|
76
76
|
* @throws {Error} If the bit length is not a multiple of 32 or is less than 128.
|
|
77
77
|
*/
|
|
78
78
|
public fromRandom (bits?: number): this {
|
|
79
|
-
if (bits === undefined || bits === null || isNaN(bits) || bits === 0) {
|
|
79
|
+
if (bits === undefined || bits === null || Number.isNaN(bits) || bits === 0) {
|
|
80
80
|
bits = 128
|
|
81
81
|
}
|
|
82
82
|
if (bits % 32 !== 0) {
|
|
@@ -179,8 +179,8 @@ export default class Mnemonic {
|
|
|
179
179
|
const hash = Hash.sha256(buf)
|
|
180
180
|
let bin = ''
|
|
181
181
|
const bits = buf.length * 8
|
|
182
|
-
for (
|
|
183
|
-
bin = bin + ('00000000' +
|
|
182
|
+
for (const byte of buf) {
|
|
183
|
+
bin = bin + ('00000000' + byte.toString(2)).slice(-8)
|
|
184
184
|
}
|
|
185
185
|
let hashbits = hash[0].toString(2)
|
|
186
186
|
hashbits = ('00000000' + hashbits).slice(-8).slice(0, bits / 32)
|
|
@@ -198,7 +198,7 @@ export default class Mnemonic {
|
|
|
198
198
|
if (mnemonic !== '') {
|
|
199
199
|
mnemonic = mnemonic + this.Wordlist.space
|
|
200
200
|
}
|
|
201
|
-
const wi = parseInt(bin.slice(i * 11, (i + 1) * 11), 2)
|
|
201
|
+
const wi = Number.parseInt(bin.slice(i * 11, (i + 1) * 11), 2)
|
|
202
202
|
mnemonic = mnemonic + this.Wordlist.value[wi]
|
|
203
203
|
}
|
|
204
204
|
|
|
@@ -218,8 +218,8 @@ export default class Mnemonic {
|
|
|
218
218
|
// confirm no invalid words
|
|
219
219
|
const words = mnemonic.split(this.Wordlist.space)
|
|
220
220
|
let bin = ''
|
|
221
|
-
for (
|
|
222
|
-
const ind = this.Wordlist.value.indexOf(
|
|
221
|
+
for (const word of words) {
|
|
222
|
+
const ind = this.Wordlist.value.indexOf(word)
|
|
223
223
|
if (ind < 0) {
|
|
224
224
|
return false
|
|
225
225
|
}
|
|
@@ -240,7 +240,7 @@ export default class Mnemonic {
|
|
|
240
240
|
const buf: number[] = []
|
|
241
241
|
|
|
242
242
|
for (let i = 0; i < nonhashBits.length / 8; i++) {
|
|
243
|
-
buf.push(parseInt(bin.slice(i * 8, (i + 1) * 8), 2))
|
|
243
|
+
buf.push(Number.parseInt(bin.slice(i * 8, (i + 1) * 8), 2))
|
|
244
244
|
}
|
|
245
245
|
const hash = Hash.sha256(buf.slice(0, nonhashBits.length / 8))
|
|
246
246
|
let expectedHashBits = hash[0].toString(2)
|
|
@@ -266,7 +266,7 @@ export default class Mnemonic {
|
|
|
266
266
|
)
|
|
267
267
|
}
|
|
268
268
|
if (typeof passphrase !== 'string') {
|
|
269
|
-
throw new
|
|
269
|
+
throw new TypeError('passphrase must be a string or undefined')
|
|
270
270
|
}
|
|
271
271
|
mnemonic = mnemonic.normalize('NFKD')
|
|
272
272
|
passphrase = passphrase.normalize('NFKD')
|