@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
|
@@ -2,6 +2,8 @@ import BasePoint from './BasePoint.js'
|
|
|
2
2
|
import BigNumber from './BigNumber.js'
|
|
3
3
|
import Point from './Point.js'
|
|
4
4
|
|
|
5
|
+
type JacobianCoord = string | BigNumber | null
|
|
6
|
+
|
|
5
7
|
/**
|
|
6
8
|
* The `JacobianPoint` class extends the `BasePoint` class for handling Jacobian coordinates on an Elliptic Curve.
|
|
7
9
|
* This class defines the properties and the methods needed to work with points in Jacobian coordinates.
|
|
@@ -39,9 +41,9 @@ export default class JacobianPoint extends BasePoint {
|
|
|
39
41
|
* const pointJ2 = new JacobianPoint('3', '4', '1'); // creates point (3, 4, 1)
|
|
40
42
|
*/
|
|
41
43
|
constructor (
|
|
42
|
-
x:
|
|
43
|
-
y:
|
|
44
|
-
z:
|
|
44
|
+
x: JacobianCoord,
|
|
45
|
+
y: JacobianCoord,
|
|
46
|
+
z: JacobianCoord
|
|
45
47
|
) {
|
|
46
48
|
super('jacobian')
|
|
47
49
|
if (x === null && y === null && z === null) {
|
|
@@ -157,10 +159,10 @@ export default class JacobianPoint extends BasePoint {
|
|
|
157
159
|
const h = u1.redSub(u2)
|
|
158
160
|
const r = s1.redSub(s2)
|
|
159
161
|
if (h.cmpn(0) === 0) {
|
|
160
|
-
if (r.cmpn(0)
|
|
161
|
-
return new JacobianPoint(null, null, null)
|
|
162
|
-
} else {
|
|
162
|
+
if (r.cmpn(0) === 0) {
|
|
163
163
|
return this.dbl()
|
|
164
|
+
} else {
|
|
165
|
+
return new JacobianPoint(null, null, null)
|
|
164
166
|
}
|
|
165
167
|
}
|
|
166
168
|
|
|
@@ -215,10 +217,10 @@ export default class JacobianPoint extends BasePoint {
|
|
|
215
217
|
const h = u1.redSub(u2)
|
|
216
218
|
const r = s1.redSub(s2)
|
|
217
219
|
if (h.cmpn(0) === 0) {
|
|
218
|
-
if (r.cmpn(0)
|
|
219
|
-
return new JacobianPoint(null, null, null)
|
|
220
|
-
} else {
|
|
220
|
+
if (r.cmpn(0) === 0) {
|
|
221
221
|
return this.dbl()
|
|
222
|
+
} else {
|
|
223
|
+
return new JacobianPoint(null, null, null)
|
|
222
224
|
}
|
|
223
225
|
}
|
|
224
226
|
|
|
@@ -251,7 +253,7 @@ export default class JacobianPoint extends BasePoint {
|
|
|
251
253
|
if (this.isInfinity()) {
|
|
252
254
|
return this
|
|
253
255
|
}
|
|
254
|
-
if (
|
|
256
|
+
if (pow === undefined) {
|
|
255
257
|
return this.dbl()
|
|
256
258
|
}
|
|
257
259
|
|
|
@@ -414,7 +416,7 @@ export default class JacobianPoint extends BasePoint {
|
|
|
414
416
|
}
|
|
415
417
|
|
|
416
418
|
const xc = x.clone()
|
|
417
|
-
if (this.curve
|
|
419
|
+
if (this.curve?.redN == null) {
|
|
418
420
|
throw new Error('Curve or redN is not initialized.')
|
|
419
421
|
}
|
|
420
422
|
|
package/src/primitives/K256.ts
CHANGED
|
@@ -77,7 +77,7 @@ export default class K256 extends Mersenne {
|
|
|
77
77
|
let currentInputNewWordCount = 0
|
|
78
78
|
|
|
79
79
|
for (let i = 10; i < inputNominalLength; i++) {
|
|
80
|
-
const next = inputWords[i]
|
|
80
|
+
const next = Math.trunc(inputWords[i])
|
|
81
81
|
if (currentInputNewWordCount < tempInputNewWords.length) { // Boundary check
|
|
82
82
|
tempInputNewWords[currentInputNewWordCount++] = ((next & mask) << 4) | (prev >>> 22)
|
|
83
83
|
}
|
|
@@ -123,10 +123,10 @@ export default class K256 extends Mersenne {
|
|
|
123
123
|
|
|
124
124
|
let lo = 0
|
|
125
125
|
for (let i = 0; i < newNominalLength; i++) { // Iterate up to new expanded length
|
|
126
|
-
const w = tempWords[i]
|
|
126
|
+
const w = Math.trunc(tempWords[i])
|
|
127
127
|
lo += w * 0x3d1 // 0x3d1 = 977
|
|
128
128
|
tempWords[i] = lo & 0x3ffffff // 26-bit mask
|
|
129
|
-
lo = w * 0x40 + (
|
|
129
|
+
lo = w * 0x40 + Math.trunc(lo / 0x4000000) // 0x40 = 64. 0x4000000 = 2^26
|
|
130
130
|
}
|
|
131
131
|
|
|
132
132
|
num.words = tempWords // Use setter to re-initialize from tempWords
|
package/src/primitives/Point.ts
CHANGED
|
@@ -163,20 +163,17 @@ export const scalarMultiplyWNAF = (
|
|
|
163
163
|
): JacobianPointBI => {
|
|
164
164
|
const key = `${window}:${P0.x.toString(16)}:${P0.y.toString(16)}`
|
|
165
165
|
let tbl = WNAF_TABLE_CACHE.get(key)
|
|
166
|
-
let P: JacobianPointBI
|
|
167
166
|
if (tbl === undefined) {
|
|
168
167
|
// Convert affine to Jacobian and pre-compute odd multiples
|
|
169
168
|
const tblSize = 1 << (window - 1) // e.g. w=5 → 16 entries
|
|
170
169
|
tbl = new Array(tblSize)
|
|
171
|
-
P = { X: P0.x, Y: P0.y, Z: BI_ONE }
|
|
170
|
+
const P: JacobianPointBI = { X: P0.x, Y: P0.y, Z: BI_ONE }
|
|
172
171
|
tbl[0] = P
|
|
173
172
|
const twoP = jpDouble(P)
|
|
174
173
|
for (let i = 1; i < tblSize; i++) {
|
|
175
174
|
tbl[i] = jpAdd(tbl[i - 1], twoP)
|
|
176
175
|
}
|
|
177
176
|
WNAF_TABLE_CACHE.set(key, tbl)
|
|
178
|
-
} else {
|
|
179
|
-
P = tbl[0]
|
|
180
177
|
}
|
|
181
178
|
|
|
182
179
|
// Build wNAF representation of k
|
|
@@ -277,11 +274,11 @@ export default class Point extends BasePoint {
|
|
|
277
274
|
bytes.length - 1 === 2 * len
|
|
278
275
|
) {
|
|
279
276
|
if (bytes[0] === 0x06) {
|
|
280
|
-
if (bytes
|
|
277
|
+
if (bytes.at(-1) % 2 !== 0) {
|
|
281
278
|
throw new Error('Point string value is wrong length')
|
|
282
279
|
}
|
|
283
280
|
} else if (bytes[0] === 0x07) {
|
|
284
|
-
if (bytes
|
|
281
|
+
if (bytes.at(-1) % 2 !== 1) {
|
|
285
282
|
throw new Error('Point string value is wrong length')
|
|
286
283
|
}
|
|
287
284
|
}
|
|
@@ -523,10 +520,10 @@ export default class Point extends BasePoint {
|
|
|
523
520
|
} else {
|
|
524
521
|
res = [0x04].concat(x, this.getY().toArray('be', len))
|
|
525
522
|
}
|
|
526
|
-
if (enc
|
|
527
|
-
return res
|
|
528
|
-
} else {
|
|
523
|
+
if (enc === 'hex') {
|
|
529
524
|
return toHex(res)
|
|
525
|
+
} else {
|
|
526
|
+
return res
|
|
530
527
|
}
|
|
531
528
|
}
|
|
532
529
|
|
|
@@ -573,19 +570,19 @@ export default class Point extends BasePoint {
|
|
|
573
570
|
typeof this.precomputed === 'object' && this.precomputed !== null
|
|
574
571
|
? {
|
|
575
572
|
doubles:
|
|
576
|
-
this.precomputed.doubles
|
|
577
|
-
?
|
|
573
|
+
this.precomputed.doubles == null
|
|
574
|
+
? undefined
|
|
575
|
+
: {
|
|
578
576
|
step: this.precomputed.doubles.step,
|
|
579
577
|
points: this.precomputed.doubles.points.slice(1)
|
|
580
|
-
}
|
|
581
|
-
: undefined,
|
|
578
|
+
},
|
|
582
579
|
naf:
|
|
583
|
-
this.precomputed.naf
|
|
584
|
-
?
|
|
580
|
+
this.precomputed.naf == null
|
|
581
|
+
? undefined
|
|
582
|
+
: {
|
|
585
583
|
wnd: this.precomputed.naf.wnd,
|
|
586
584
|
points: this.precomputed.naf.points.slice(1)
|
|
587
585
|
}
|
|
588
|
-
: undefined
|
|
589
586
|
}
|
|
590
587
|
: undefined
|
|
591
588
|
]
|
|
@@ -827,8 +824,8 @@ export default class Point extends BasePoint {
|
|
|
827
824
|
let R1: JacobianPointBI = { X: Px, Y: Py, Z: 1n }
|
|
828
825
|
|
|
829
826
|
const bits = kBig.toString(2)
|
|
830
|
-
for (
|
|
831
|
-
const bit =
|
|
827
|
+
for (const bitChar of bits) {
|
|
828
|
+
const bit = bitChar === '1' ? 1n : 0n
|
|
832
829
|
ctSwap(bit, R0, R1)
|
|
833
830
|
R1 = jpAdd(R0, R1)
|
|
834
831
|
R0 = jpDouble(R0)
|
|
@@ -927,18 +924,18 @@ export default class Point extends BasePoint {
|
|
|
927
924
|
const pre = this.precomputed
|
|
928
925
|
const negate = (p: Point): Point => p.neg()
|
|
929
926
|
res.precomputed = {
|
|
930
|
-
naf: pre.naf
|
|
931
|
-
?
|
|
927
|
+
naf: pre.naf == null
|
|
928
|
+
? undefined
|
|
929
|
+
: {
|
|
932
930
|
wnd: pre.naf.wnd,
|
|
933
931
|
points: pre.naf.points.map(negate) as BasePoint[]
|
|
934
|
-
}
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
932
|
+
},
|
|
933
|
+
doubles: pre.doubles == null
|
|
934
|
+
? undefined
|
|
935
|
+
: {
|
|
938
936
|
step: pre.doubles.step,
|
|
939
937
|
points: pre.doubles.points.map((p) => (p as Point).neg())
|
|
940
|
-
}
|
|
941
|
-
: undefined,
|
|
938
|
+
},
|
|
942
939
|
beta: undefined
|
|
943
940
|
}
|
|
944
941
|
}
|
|
@@ -1019,19 +1016,19 @@ export default class Point extends BasePoint {
|
|
|
1019
1016
|
beta.precomputed = {
|
|
1020
1017
|
beta: null,
|
|
1021
1018
|
naf:
|
|
1022
|
-
pre.naf
|
|
1023
|
-
?
|
|
1019
|
+
pre.naf == null
|
|
1020
|
+
? undefined
|
|
1021
|
+
: {
|
|
1024
1022
|
wnd: pre.naf.wnd,
|
|
1025
1023
|
points: pre.naf.points.map(endoMul)
|
|
1026
|
-
}
|
|
1027
|
-
: undefined,
|
|
1024
|
+
},
|
|
1028
1025
|
doubles:
|
|
1029
|
-
pre.doubles
|
|
1030
|
-
?
|
|
1026
|
+
pre.doubles == null
|
|
1027
|
+
? undefined
|
|
1028
|
+
: {
|
|
1031
1029
|
step: pre.doubles.step,
|
|
1032
1030
|
points: pre.doubles.points.map(endoMul)
|
|
1033
1031
|
}
|
|
1034
|
-
: undefined
|
|
1035
1032
|
}
|
|
1036
1033
|
}
|
|
1037
1034
|
return beta
|
|
@@ -1142,8 +1139,8 @@ export default class Point extends BasePoint {
|
|
|
1142
1139
|
naf[a] = new Array(max)
|
|
1143
1140
|
naf[b] = new Array(max)
|
|
1144
1141
|
for (let j = 0; j < max; j++) {
|
|
1145
|
-
const ja = jsf[0][j]
|
|
1146
|
-
const jb = jsf[1][j]
|
|
1142
|
+
const ja = Math.trunc(jsf[0][j])
|
|
1143
|
+
const jb = Math.trunc(jsf[1][j])
|
|
1147
1144
|
|
|
1148
1145
|
naf[a][j] = index[(ja + 1) * 3 + (jb + 1)]
|
|
1149
1146
|
naf[b][j] = 0
|
|
@@ -1187,10 +1184,10 @@ export default class Point extends BasePoint {
|
|
|
1187
1184
|
|
|
1188
1185
|
if (z.cmpn(0) === 0) { // Check if z is 0
|
|
1189
1186
|
continue
|
|
1190
|
-
} else if (
|
|
1191
|
-
p = wnd[j][z.sub(one).div(two).toNumber()]
|
|
1192
|
-
} else { // If z is negative
|
|
1187
|
+
} else if (z.isNeg()) { // If z is negative
|
|
1193
1188
|
p = wnd[j][z.neg().sub(one).div(two).toNumber()].neg()
|
|
1189
|
+
} else { // If z is positive
|
|
1190
|
+
p = wnd[j][z.sub(one).div(two).toNumber()]
|
|
1194
1191
|
}
|
|
1195
1192
|
|
|
1196
1193
|
if (p.type === 'affine') {
|
|
@@ -399,13 +399,13 @@ export default class PrivateKey extends BigNumber {
|
|
|
399
399
|
let sharedSecret: Point
|
|
400
400
|
if (typeof retrieveCachedSharedSecret === 'function') {
|
|
401
401
|
const retrieved = retrieveCachedSharedSecret(this, publicKey)
|
|
402
|
-
if (retrieved
|
|
403
|
-
sharedSecret = retrieved
|
|
404
|
-
} else {
|
|
402
|
+
if (retrieved === undefined) {
|
|
405
403
|
sharedSecret = this.deriveSharedSecret(publicKey)
|
|
406
404
|
if (typeof cacheSharedSecret === 'function') {
|
|
407
405
|
cacheSharedSecret(this, publicKey, sharedSecret)
|
|
408
406
|
}
|
|
407
|
+
} else {
|
|
408
|
+
sharedSecret = retrieved
|
|
409
409
|
}
|
|
410
410
|
} else {
|
|
411
411
|
sharedSecret = this.deriveSharedSecret(publicKey)
|
|
@@ -215,13 +215,13 @@ export default class PublicKey extends Point {
|
|
|
215
215
|
let sharedSecret: Point
|
|
216
216
|
if (typeof retrieveCachedSharedSecret === 'function') {
|
|
217
217
|
const retrieved = retrieveCachedSharedSecret(privateKey, this)
|
|
218
|
-
if (
|
|
219
|
-
sharedSecret = retrieved
|
|
220
|
-
} else {
|
|
218
|
+
if (retrieved === undefined) {
|
|
221
219
|
sharedSecret = this.deriveSharedSecret(privateKey)
|
|
222
220
|
if (typeof cacheSharedSecret === 'function') {
|
|
223
221
|
cacheSharedSecret(privateKey, this, sharedSecret)
|
|
224
222
|
}
|
|
223
|
+
} else {
|
|
224
|
+
sharedSecret = retrieved
|
|
225
225
|
}
|
|
226
226
|
} else {
|
|
227
227
|
sharedSecret = this.deriveSharedSecret(privateKey)
|
package/src/primitives/Random.ts
CHANGED
|
@@ -31,7 +31,6 @@ class Rand {
|
|
|
31
31
|
// Try globalThis.crypto (works in Node.js 18+, modern browsers, and Deno)
|
|
32
32
|
if (typeof globalThis !== 'undefined' && typeof (globalThis as any).crypto?.getRandomValues === 'function') {
|
|
33
33
|
this._rand = (n) => {
|
|
34
|
-
/* eslint-disable-next-line */
|
|
35
34
|
return this.getRandomValues(globalThis as any, n)
|
|
36
35
|
}
|
|
37
36
|
return
|
|
@@ -41,32 +40,30 @@ class Rand {
|
|
|
41
40
|
if (typeof process !== 'undefined' && process.release?.name === 'node') {
|
|
42
41
|
try {
|
|
43
42
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
44
|
-
const crypto = require('crypto')
|
|
43
|
+
const crypto = require('node:crypto')
|
|
45
44
|
if (typeof crypto.randomBytes === 'function') {
|
|
46
45
|
this._rand = (n) => {
|
|
47
46
|
return Array.from(crypto.randomBytes(n))
|
|
48
47
|
}
|
|
49
48
|
return
|
|
50
49
|
}
|
|
51
|
-
} catch (
|
|
52
|
-
// crypto
|
|
50
|
+
} catch (_cryptoModuleUnavailable) {
|
|
51
|
+
// node:crypto not available in this runtime; continue to other crypto API checks
|
|
53
52
|
}
|
|
54
53
|
}
|
|
55
54
|
|
|
56
55
|
// Try self.crypto (Web Workers and Service Workers)
|
|
57
|
-
if (typeof self !== 'undefined' && typeof self.crypto?.getRandomValues === 'function') {
|
|
56
|
+
if (typeof globalThis.self !== 'undefined' && typeof globalThis.self.crypto?.getRandomValues === 'function') {
|
|
58
57
|
this._rand = (n) => {
|
|
59
|
-
|
|
60
|
-
return this.getRandomValues(self as any, n)
|
|
58
|
+
return this.getRandomValues(globalThis.self, n)
|
|
61
59
|
}
|
|
62
60
|
return
|
|
63
61
|
}
|
|
64
62
|
|
|
65
63
|
// Try window.crypto (browsers)
|
|
66
|
-
if (typeof window !== 'undefined' && typeof (window as any).crypto?.getRandomValues === 'function') {
|
|
64
|
+
if (typeof globalThis.window !== 'undefined' && typeof (globalThis.window as any).crypto?.getRandomValues === 'function') {
|
|
67
65
|
this._rand = (n) => {
|
|
68
|
-
|
|
69
|
-
return this.getRandomValues(window as any, n)
|
|
66
|
+
return this.getRandomValues(globalThis.window, n)
|
|
70
67
|
}
|
|
71
68
|
return
|
|
72
69
|
}
|
|
@@ -93,9 +90,9 @@ let ayn: Rand | null = null
|
|
|
93
90
|
* import Random from '@bsv/sdk/primitives/Random'
|
|
94
91
|
* const bytes = Random(32) // Produces 32 random bytes
|
|
95
92
|
*/
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
ayn = new Rand()
|
|
99
|
-
}
|
|
93
|
+
const Random = (len: number): number[] => {
|
|
94
|
+
ayn ??= new Rand()
|
|
100
95
|
return ayn.generate(len)
|
|
101
96
|
}
|
|
97
|
+
|
|
98
|
+
export default Random
|
|
@@ -25,7 +25,7 @@ export class ReaderUint8Array {
|
|
|
25
25
|
} else if (Array.isArray(bin)) {
|
|
26
26
|
this.bin = new Uint8Array(bin)
|
|
27
27
|
} else {
|
|
28
|
-
throw new
|
|
28
|
+
throw new TypeError('ReaderUint8Array constructor: bin must be Uint8Array or number[]')
|
|
29
29
|
}
|
|
30
30
|
this.pos = pos
|
|
31
31
|
this.length = this.bin.length
|
|
@@ -61,7 +61,7 @@ export class ReaderUint8Array {
|
|
|
61
61
|
const val = this.bin[this.pos]
|
|
62
62
|
this.pos += 1
|
|
63
63
|
// If the sign bit is set, convert to negative value
|
|
64
|
-
return (val & 0x80)
|
|
64
|
+
return (val & 0x80) === 0 ? val : val - 0x100
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
public readUInt16BE (): number {
|
|
@@ -73,10 +73,10 @@ export class ReaderUint8Array {
|
|
|
73
73
|
public readInt16BE (): number {
|
|
74
74
|
const val = this.readUInt16BE()
|
|
75
75
|
// If the sign bit is set, convert to negative value
|
|
76
|
-
return (val & 0x8000)
|
|
76
|
+
return (val & 0x8000) === 0 ? val : val - 0x10000
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
-
public readUInt16LE
|
|
79
|
+
public readUInt16LE(): number {
|
|
80
80
|
const val = this.bin[this.pos] | (this.bin[this.pos + 1] << 8)
|
|
81
81
|
this.pos += 2
|
|
82
82
|
return val
|
|
@@ -85,7 +85,7 @@ export class ReaderUint8Array {
|
|
|
85
85
|
public readInt16LE (): number {
|
|
86
86
|
const val = this.readUInt16LE()
|
|
87
87
|
// If the sign bit is set, convert to negative value
|
|
88
|
-
const x = (val & 0x8000)
|
|
88
|
+
const x = (val & 0x8000) === 0 ? val : val - 0x10000
|
|
89
89
|
return x
|
|
90
90
|
}
|
|
91
91
|
|
|
@@ -102,7 +102,7 @@ export class ReaderUint8Array {
|
|
|
102
102
|
public readInt32BE (): number {
|
|
103
103
|
const val = this.readUInt32BE()
|
|
104
104
|
// If the sign bit is set, convert to negative value
|
|
105
|
-
return (val & 0x80000000)
|
|
105
|
+
return (val & 0x80000000) === 0 ? val : val - 0x100000000
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
public readUInt32LE (): number {
|
|
@@ -119,7 +119,7 @@ export class ReaderUint8Array {
|
|
|
119
119
|
public readInt32LE (): number {
|
|
120
120
|
const val = this.readUInt32LE()
|
|
121
121
|
// Explicitly check if the sign bit is set and then convert to a negative value
|
|
122
|
-
return (val & 0x80000000)
|
|
122
|
+
return (val & 0x80000000) === 0 ? val : val - 0x100000000
|
|
123
123
|
}
|
|
124
124
|
|
|
125
125
|
public readUInt64BEBn (): BigNumber {
|
|
@@ -2,7 +2,8 @@ import BigNumber from './BigNumber.js'
|
|
|
2
2
|
import Curve from './Curve.js'
|
|
3
3
|
import Point from './Point.js'
|
|
4
4
|
import { sha256 } from './Hash.js'
|
|
5
|
-
import
|
|
5
|
+
import PrivateKey from './PrivateKey.js'
|
|
6
|
+
import PublicKey from './PublicKey.js'
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* Class representing the Schnorr Zero-Knowledge Proof (ZKP) protocol.
|
|
@@ -82,17 +82,17 @@ export default class Signature {
|
|
|
82
82
|
}
|
|
83
83
|
let s = data.slice(p.place, slen + p.place)
|
|
84
84
|
if (r[0] === 0) {
|
|
85
|
-
if ((r[1] & 0x80)
|
|
86
|
-
r = r.slice(1)
|
|
87
|
-
} else {
|
|
85
|
+
if ((r[1] & 0x80) === 0) {
|
|
88
86
|
throw new Error('Invalid R-value in signature DER')
|
|
87
|
+
} else {
|
|
88
|
+
r = r.slice(1)
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
if (s[0] === 0) {
|
|
92
|
-
if ((s[1] & 0x80)
|
|
93
|
-
s = s.slice(1)
|
|
94
|
-
} else {
|
|
92
|
+
if ((s[1] & 0x80) === 0) {
|
|
95
93
|
throw new Error('Invalid S-value in signature DER')
|
|
94
|
+
} else {
|
|
95
|
+
s = s.slice(1)
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
98
|
|
|
@@ -285,7 +285,7 @@ export default class Signature {
|
|
|
285
285
|
): number[] | string {
|
|
286
286
|
if (recovery < 0 || recovery > 3) throw new Error('Invalid recovery param')
|
|
287
287
|
if (typeof compressed !== 'boolean') {
|
|
288
|
-
throw new
|
|
288
|
+
throw new TypeError('Invalid compressed param')
|
|
289
289
|
}
|
|
290
290
|
let compactByte = 27 + recovery
|
|
291
291
|
if (compressed) {
|
|
@@ -332,7 +332,7 @@ export default class Signature {
|
|
|
332
332
|
const G = curve.g
|
|
333
333
|
|
|
334
334
|
// 1.1 LEt x = r + jn
|
|
335
|
-
const x = isSecondKey
|
|
335
|
+
const x = isSecondKey === 0 ? r : r.add(n)
|
|
336
336
|
const R = Point.fromX(x, isYOdd)
|
|
337
337
|
|
|
338
338
|
// 1.4 Check that nR is at infinity
|
|
@@ -3,6 +3,124 @@ import { AESGCM, AESGCMDecrypt } from './AESGCM.js'
|
|
|
3
3
|
import Random from './Random.js'
|
|
4
4
|
import { toArray, encode } from './utils.js'
|
|
5
5
|
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// Native AES-GCM fast-path via node:crypto / react-native-quick-crypto
|
|
8
|
+
//
|
|
9
|
+
// Resolved once at module load using the same pattern as Hash.ts. When
|
|
10
|
+
// `node:crypto` (or a compatible shim) is available and exposes
|
|
11
|
+
// `createCipheriv` / `createDecipheriv`, encrypt and decrypt will use it
|
|
12
|
+
// instead of the pure-TS implementation. The pure-TS path remains the
|
|
13
|
+
// unconditional fallback — any error in the native path causes silent
|
|
14
|
+
// re-execution through the pure-TS implementation.
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
const NODE_CRYPTO_SYM = (() => {
|
|
17
|
+
const processLike =
|
|
18
|
+
typeof globalThis === 'undefined' ? undefined : (globalThis as any).process
|
|
19
|
+
const getBuiltinModule = processLike?.getBuiltinModule
|
|
20
|
+
if (typeof getBuiltinModule === 'function') {
|
|
21
|
+
try {
|
|
22
|
+
const crypto = getBuiltinModule.call(processLike, 'node:crypto')
|
|
23
|
+
if (crypto != null) return crypto
|
|
24
|
+
} catch {
|
|
25
|
+
// continue to CommonJS fallback
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
if (typeof require === 'function') {
|
|
30
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
31
|
+
return require('node:crypto')
|
|
32
|
+
}
|
|
33
|
+
} catch {
|
|
34
|
+
// node:crypto is unavailable in this runtime
|
|
35
|
+
}
|
|
36
|
+
return undefined
|
|
37
|
+
})()
|
|
38
|
+
|
|
39
|
+
/** True when the runtime provides a usable createCipheriv for aes-256-gcm. */
|
|
40
|
+
const NATIVE_AES_GCM_AVAILABLE: boolean = (() => {
|
|
41
|
+
if (NODE_CRYPTO_SYM == null) return false
|
|
42
|
+
return (
|
|
43
|
+
typeof NODE_CRYPTO_SYM.createCipheriv === 'function' &&
|
|
44
|
+
typeof NODE_CRYPTO_SYM.createDecipheriv === 'function'
|
|
45
|
+
)
|
|
46
|
+
})()
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Encrypt `plaintext` with AES-256-GCM via node:crypto.
|
|
50
|
+
* Returns `iv (32 bytes) || ciphertext || authTag (16 bytes)` — identical
|
|
51
|
+
* layout to the pure-TS AESGCM path used by SymmetricKey.encrypt.
|
|
52
|
+
*
|
|
53
|
+
* Returns `null` on any failure so the caller can fall back to pure-TS.
|
|
54
|
+
*/
|
|
55
|
+
function nativeEncrypt (
|
|
56
|
+
plaintext: Uint8Array,
|
|
57
|
+
iv: Uint8Array,
|
|
58
|
+
key: Uint8Array
|
|
59
|
+
): Uint8Array | null {
|
|
60
|
+
try {
|
|
61
|
+
const cipher = NODE_CRYPTO_SYM.createCipheriv(
|
|
62
|
+
'aes-256-gcm',
|
|
63
|
+
Buffer.from(key.buffer, key.byteOffset, key.byteLength),
|
|
64
|
+
Buffer.from(iv.buffer, iv.byteOffset, iv.byteLength)
|
|
65
|
+
)
|
|
66
|
+
const encrypted: Buffer = Buffer.concat([
|
|
67
|
+
cipher.update(Buffer.from(plaintext.buffer, plaintext.byteOffset, plaintext.byteLength)),
|
|
68
|
+
cipher.final()
|
|
69
|
+
])
|
|
70
|
+
const authTag: Buffer = cipher.getAuthTag() // always 16 bytes for GCM
|
|
71
|
+
|
|
72
|
+
const out = new Uint8Array(iv.length + encrypted.length + authTag.length)
|
|
73
|
+
let offset = 0
|
|
74
|
+
out.set(iv, offset); offset += iv.length
|
|
75
|
+
out.set(encrypted, offset); offset += encrypted.length
|
|
76
|
+
out.set(authTag, offset)
|
|
77
|
+
return out
|
|
78
|
+
} catch {
|
|
79
|
+
return null
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Decrypt an `iv || ciphertext || authTag` bundle produced by nativeEncrypt
|
|
85
|
+
* (or by the pure-TS SymmetricKey.encrypt path) using node:crypto.
|
|
86
|
+
*
|
|
87
|
+
* Returns the plaintext on success, `null` on authentication failure, or
|
|
88
|
+
* `undefined` to signal a non-auth error so the caller can fall back.
|
|
89
|
+
*/
|
|
90
|
+
function nativeDecrypt (
|
|
91
|
+
msgBytes: Uint8Array,
|
|
92
|
+
ivLength: number,
|
|
93
|
+
tagLength: number,
|
|
94
|
+
key: Uint8Array
|
|
95
|
+
): Uint8Array | null | undefined {
|
|
96
|
+
try {
|
|
97
|
+
const iv = msgBytes.slice(0, ivLength)
|
|
98
|
+
const tagStart = msgBytes.length - tagLength
|
|
99
|
+
const ciphertext = msgBytes.slice(ivLength, tagStart)
|
|
100
|
+
const messageTag = msgBytes.slice(tagStart)
|
|
101
|
+
|
|
102
|
+
const decipher = NODE_CRYPTO_SYM.createDecipheriv(
|
|
103
|
+
'aes-256-gcm',
|
|
104
|
+
Buffer.from(key.buffer, key.byteOffset, key.byteLength),
|
|
105
|
+
Buffer.from(iv.buffer, iv.byteOffset, iv.byteLength)
|
|
106
|
+
)
|
|
107
|
+
decipher.setAuthTag(Buffer.from(messageTag.buffer, messageTag.byteOffset, messageTag.byteLength))
|
|
108
|
+
|
|
109
|
+
// Decryption authenticates on final(); throws if tag is wrong.
|
|
110
|
+
const decrypted: Buffer = Buffer.concat([
|
|
111
|
+
decipher.update(Buffer.from(ciphertext.buffer, ciphertext.byteOffset, ciphertext.byteLength)),
|
|
112
|
+
decipher.final()
|
|
113
|
+
])
|
|
114
|
+
return new Uint8Array(decrypted.buffer, decrypted.byteOffset, decrypted.byteLength)
|
|
115
|
+
} catch {
|
|
116
|
+
// Node throws "Unsupported state or unable to authenticate data" on auth
|
|
117
|
+
// failure. Treat any error as auth failure so SymmetricKey.decrypt re-throws
|
|
118
|
+
// its own descriptive message — pure-TS fallback would return null in the
|
|
119
|
+
// same scenario.
|
|
120
|
+
return null
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
6
124
|
/**
|
|
7
125
|
* `SymmetricKey` is a class that extends the `BigNumber` class and implements symmetric encryption and decryption methods.
|
|
8
126
|
* Symmetric-Key encryption is a form of encryption where the same key is used to encrypt and decrypt the message.
|
|
@@ -45,6 +163,16 @@ export default class SymmetricKey extends BigNumber {
|
|
|
45
163
|
const msgBytes = new Uint8Array(toArray(msg, enc))
|
|
46
164
|
const keyBytes = new Uint8Array(this.toArray('be', 32))
|
|
47
165
|
|
|
166
|
+
// Fast path: native AES-256-GCM via node:crypto / react-native-quick-crypto.
|
|
167
|
+
// Falls back to pure-TS on any failure.
|
|
168
|
+
if (NATIVE_AES_GCM_AVAILABLE) {
|
|
169
|
+
const nativeResult = nativeEncrypt(msgBytes, iv, keyBytes)
|
|
170
|
+
if (nativeResult !== null) {
|
|
171
|
+
return encode(Array.from(nativeResult), enc)
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// Pure-TS fallback.
|
|
48
176
|
const { result, authenticationTag } = AESGCM(
|
|
49
177
|
msgBytes,
|
|
50
178
|
iv,
|
|
@@ -90,12 +218,28 @@ export default class SymmetricKey extends BigNumber {
|
|
|
90
218
|
throw new Error('Ciphertext too short')
|
|
91
219
|
}
|
|
92
220
|
|
|
221
|
+
const keyBytes = new Uint8Array(this.toArray('be', 32))
|
|
222
|
+
|
|
223
|
+
// Fast path: native AES-256-GCM via node:crypto / react-native-quick-crypto.
|
|
224
|
+
// Falls back to pure-TS on null/undefined return.
|
|
225
|
+
if (NATIVE_AES_GCM_AVAILABLE) {
|
|
226
|
+
const nativeResult = nativeDecrypt(msgBytes, ivLength, tagLength, keyBytes)
|
|
227
|
+
if (nativeResult !== undefined) {
|
|
228
|
+
// nativeResult is Uint8Array on success or null on auth/decryption failure.
|
|
229
|
+
if (nativeResult === null) {
|
|
230
|
+
throw new Error('Decryption failed!')
|
|
231
|
+
}
|
|
232
|
+
return encode(Array.from(nativeResult), enc)
|
|
233
|
+
}
|
|
234
|
+
// undefined means unexpected setup error — fall through to pure-TS.
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// Pure-TS fallback.
|
|
93
238
|
const iv = msgBytes.slice(0, ivLength)
|
|
94
239
|
const tagStart = msgBytes.length - tagLength
|
|
95
240
|
const ciphertext = msgBytes.slice(ivLength, tagStart)
|
|
96
241
|
const messageTag = msgBytes.slice(tagStart)
|
|
97
242
|
|
|
98
|
-
const keyBytes = new Uint8Array(this.toArray('be', 32))
|
|
99
243
|
const result = AESGCMDecrypt(
|
|
100
244
|
ciphertext,
|
|
101
245
|
iv,
|