@bsv/sdk 2.1.0 → 2.1.1
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 +172 -232
- package/dist/cjs/src/identity/ContactsManager.js.map +1 -1
- package/dist/cjs/src/identity/IdentityClient.js +122 -55
- 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 +139 -46
- 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 +140 -56
- 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/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 +172 -232
- package/dist/esm/src/identity/ContactsManager.js.map +1 -1
- package/dist/esm/src/identity/IdentityClient.js +122 -55
- 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 +139 -46
- 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 +140 -56
- 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/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 +18 -0
- package/dist/types/src/identity/ContactsManager.d.ts.map +1 -1
- package/dist/types/src/identity/IdentityClient.d.ts +47 -8
- 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 +59 -1
- 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 +3 -3
- 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/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 +2 -2
- package/dist/types/src/wallet/Wallet.interfaces.d.ts.map +1 -1
- package/dist/types/src/wallet/WalletClient.d.ts +7 -7
- 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 +8 -8
- 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 +194 -257
- package/src/identity/IdentityClient.ts +155 -66
- package/src/identity/__tests/IdentityClient.test.ts +25 -1
- 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 +182 -45
- 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 +152 -53
- 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/TransactionSignature.ts +16 -16
- 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 +2 -4
- package/src/wallet/WalletClient.ts +8 -8
- 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 +10 -10
- package/src/wallet/validationHelpers.ts +9 -9
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
// @ts-nocheck
|
|
2
2
|
import ReductionContext from './ReductionContext.js'
|
|
3
3
|
|
|
4
|
+
/** Comparison result: -1 (less than), 0 (equal), or 1 (greater than). */
|
|
5
|
+
type CompareResult = 1 | 0 | -1
|
|
6
|
+
|
|
4
7
|
const BufferCtor =
|
|
5
|
-
typeof globalThis
|
|
8
|
+
typeof globalThis === 'undefined' ? undefined : (globalThis as any).Buffer
|
|
6
9
|
const CAN_USE_BUFFER =
|
|
7
10
|
BufferCtor != null && typeof BufferCtor.from === 'function'
|
|
8
11
|
const HEX_CHAR_TO_VALUE = new Int8Array(256).fill(-1)
|
|
@@ -69,9 +72,9 @@ export default class BigNumber {
|
|
|
69
72
|
private static readonly MAX_IMULN_ARG: number = 0x4000000 - 1
|
|
70
73
|
private static readonly MAX_NUMBER_CONSTRUCTOR_MAG_BIGINT: bigint = (1n << 53n) - 1n
|
|
71
74
|
|
|
72
|
-
private _magnitude: bigint
|
|
73
|
-
private _sign: 0 | 1
|
|
74
|
-
private _nominalWordLength: number
|
|
75
|
+
private _magnitude: bigint = 0n
|
|
76
|
+
private _sign: 0 | 1 = 0
|
|
77
|
+
private _nominalWordLength: number = 1
|
|
75
78
|
|
|
76
79
|
/**
|
|
77
80
|
* Reduction context of the big number.
|
|
@@ -140,7 +143,7 @@ export default class BigNumber {
|
|
|
140
143
|
let newMagnitude = 0n
|
|
141
144
|
const len = newWords.length > 0 ? newWords.length : 1
|
|
142
145
|
for (let i = len - 1; i >= 0; i--) {
|
|
143
|
-
const wordVal = newWords[i]
|
|
146
|
+
const wordVal = newWords[i] ?? 0
|
|
144
147
|
newMagnitude = (newMagnitude << BigNumber.WORD_SIZE_BIGINT) | BigInt(wordVal & Number(BigNumber.WORD_MASK))
|
|
145
148
|
}
|
|
146
149
|
this._magnitude = newMagnitude
|
|
@@ -207,77 +210,84 @@ export default class BigNumber {
|
|
|
207
210
|
base: number | 'be' | 'le' | 'hex' = 10,
|
|
208
211
|
endian: 'be' | 'le' = 'be'
|
|
209
212
|
) {
|
|
210
|
-
this._magnitude = 0n
|
|
211
|
-
this._sign = 0
|
|
212
|
-
this._nominalWordLength = 1
|
|
213
213
|
this.red = null
|
|
214
|
-
|
|
215
|
-
if (number === undefined) number = 0
|
|
214
|
+
number ??= 0
|
|
216
215
|
|
|
217
216
|
if (number === null) { this._initializeState(0n, 0); return }
|
|
218
217
|
if (typeof number === 'bigint') { this._initializeState(number < 0n ? -number : number, number < 0n ? 1 : 0); this.normSign(); return }
|
|
219
218
|
|
|
220
219
|
let effectiveBase: number | 'hex' = base
|
|
221
220
|
let effectiveEndian: 'be' | 'le' = endian
|
|
222
|
-
|
|
223
221
|
if (base === 'le' || base === 'be') { effectiveEndian = base; effectiveBase = 10 }
|
|
224
222
|
|
|
225
223
|
if (typeof number === 'number') { this.initNumber(number, effectiveEndian); return }
|
|
226
224
|
if (Array.isArray(number)) { this.initArray(number, effectiveEndian); return }
|
|
225
|
+
if (typeof number === 'string') { this._initFromString(number, effectiveBase, effectiveEndian); return }
|
|
227
226
|
|
|
228
|
-
if (
|
|
229
|
-
if (effectiveBase === 'hex') effectiveBase = 16
|
|
230
|
-
this.assert(typeof effectiveBase === 'number' && effectiveBase === (effectiveBase | 0) && effectiveBase >= 2 && effectiveBase <= 36, 'Base must be an integer between 2 and 36')
|
|
231
|
-
const originalNumberStr = number.toString().replace(/\s+/g, '')
|
|
232
|
-
let start = 0; let sign = 0
|
|
233
|
-
if (originalNumberStr.startsWith('-')) { start++; sign = 1 } else if (originalNumberStr.startsWith('+')) { start++ }
|
|
234
|
-
|
|
235
|
-
const numStr = originalNumberStr.substring(start)
|
|
236
|
-
if (numStr.length === 0) { this._initializeState(0n, (sign === 1 && originalNumberStr.startsWith('-')) ? 1 : 0); this.normSign(); return }
|
|
237
|
-
|
|
238
|
-
if (effectiveBase === 16) {
|
|
239
|
-
let tempMagnitude: bigint
|
|
240
|
-
if (effectiveEndian === 'le') {
|
|
241
|
-
const bytes: number[] = []; let hexStr = numStr
|
|
242
|
-
if (hexStr.length % 2 !== 0) hexStr = '0' + hexStr
|
|
243
|
-
for (let i = 0; i < hexStr.length; i += 2) {
|
|
244
|
-
const byteHex = hexStr.substring(i, i + 2); const byteVal = parseInt(byteHex, 16)
|
|
245
|
-
if (isNaN(byteVal)) throw new Error('Invalid character in ' + hexStr)
|
|
246
|
-
bytes.push(byteVal)
|
|
247
|
-
}
|
|
248
|
-
this.initArray(bytes, 'le'); this._sign = sign; this.normSign(); return
|
|
249
|
-
} else {
|
|
250
|
-
try { tempMagnitude = BigInt('0x' + numStr) } catch (e) { throw new Error('Invalid character in ' + numStr) }
|
|
251
|
-
}
|
|
252
|
-
this._initializeState(tempMagnitude, sign); this.normSign()
|
|
253
|
-
} else {
|
|
254
|
-
try {
|
|
255
|
-
this._parseBaseString(numStr, effectiveBase)
|
|
256
|
-
this._sign = sign; this.normSign()
|
|
257
|
-
if (effectiveEndian === 'le') {
|
|
258
|
-
const currentSign = this._sign
|
|
259
|
-
this.initArray(this.toArray('be'), 'le')
|
|
260
|
-
this._sign = currentSign; this.normSign()
|
|
261
|
-
}
|
|
262
|
-
} catch (err) {
|
|
263
|
-
const error = err as Error
|
|
264
|
-
if (
|
|
265
|
-
error.message.includes('Invalid character in string') ||
|
|
266
|
-
error.message.includes('Invalid digit for base') ||
|
|
267
|
-
error.message.startsWith('Invalid character:')
|
|
268
|
-
) {
|
|
269
|
-
throw new Error('Invalid character')
|
|
270
|
-
}
|
|
271
|
-
throw error
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
} else if (number !== 0) {
|
|
227
|
+
if (number !== 0) {
|
|
275
228
|
this.assert(false, 'Unsupported input type for BigNumber constructor')
|
|
276
229
|
} else {
|
|
277
230
|
this._initializeState(0n, 0)
|
|
278
231
|
}
|
|
279
232
|
}
|
|
280
233
|
|
|
234
|
+
private _initFromString (number: string, effectiveBase: number | 'hex', effectiveEndian: 'be' | 'le'): void {
|
|
235
|
+
if (effectiveBase === 'hex') effectiveBase = 16
|
|
236
|
+
// eslint-disable-next-line no-bitwise -- ToInt32 (ECMA-262); required for integer base validation.
|
|
237
|
+
this.assert(typeof effectiveBase === 'number' && effectiveBase === (effectiveBase | 0) && effectiveBase >= 2 && effectiveBase <= 36, 'Base must be an integer between 2 and 36')
|
|
238
|
+
const originalNumberStr = number.toString().replace(/\s+/g, '')
|
|
239
|
+
let start = 0; let sign = 0
|
|
240
|
+
if (originalNumberStr.startsWith('-')) { start++; sign = 1 } else if (originalNumberStr.startsWith('+')) { start++ }
|
|
241
|
+
|
|
242
|
+
const numStr = originalNumberStr.substring(start)
|
|
243
|
+
if (numStr.length === 0) { this._initializeState(0n, (sign === 1 && originalNumberStr.startsWith('-')) ? 1 : 0); this.normSign(); return }
|
|
244
|
+
|
|
245
|
+
if (effectiveBase === 16) {
|
|
246
|
+
this._initFromHexString(numStr, sign, effectiveEndian)
|
|
247
|
+
} else {
|
|
248
|
+
this._initFromNonHexString(numStr, effectiveBase as number, sign, effectiveEndian)
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
private _initFromHexString (numStr: string, sign: number, effectiveEndian: 'be' | 'le'): void {
|
|
253
|
+
if (effectiveEndian === 'le') {
|
|
254
|
+
const bytes: number[] = []; let hexStr = numStr
|
|
255
|
+
if (hexStr.length % 2 !== 0) hexStr = '0' + hexStr
|
|
256
|
+
for (let i = 0; i < hexStr.length; i += 2) {
|
|
257
|
+
const byteHex = hexStr.substring(i, i + 2); const byteVal = Number.parseInt(byteHex, 16)
|
|
258
|
+
if (Number.isNaN(byteVal)) throw new Error('Invalid character in ' + hexStr)
|
|
259
|
+
bytes.push(byteVal)
|
|
260
|
+
}
|
|
261
|
+
this.initArray(bytes, 'le'); this._sign = sign; this.normSign()
|
|
262
|
+
} else {
|
|
263
|
+
let tempMagnitude: bigint
|
|
264
|
+
try { tempMagnitude = BigInt('0x' + numStr) } catch (_bigIntParseError) { throw new Error('Invalid character in ' + numStr) }
|
|
265
|
+
this._initializeState(tempMagnitude, sign); this.normSign()
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
private _initFromNonHexString (numStr: string, base: number, sign: number, effectiveEndian: 'be' | 'le'): void {
|
|
270
|
+
try {
|
|
271
|
+
this._parseBaseString(numStr, base)
|
|
272
|
+
this._sign = sign; this.normSign()
|
|
273
|
+
if (effectiveEndian === 'le') {
|
|
274
|
+
const currentSign = this._sign
|
|
275
|
+
this.initArray(this.toArray('be'), 'le')
|
|
276
|
+
this._sign = currentSign; this.normSign()
|
|
277
|
+
}
|
|
278
|
+
} catch (err) {
|
|
279
|
+
const error = err as Error
|
|
280
|
+
if (
|
|
281
|
+
error.message.includes('Invalid character in string') ||
|
|
282
|
+
error.message.includes('Invalid digit for base') ||
|
|
283
|
+
error.message.startsWith('Invalid character:')
|
|
284
|
+
) {
|
|
285
|
+
throw new Error('Invalid character')
|
|
286
|
+
}
|
|
287
|
+
throw error
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
281
291
|
private _bigIntToStringInBase (num: bigint, base: number): string {
|
|
282
292
|
if (num === 0n) return '0'
|
|
283
293
|
if (base < 2 || base > 36) throw new Error('Base must be between 2 and 36')
|
|
@@ -334,7 +344,7 @@ export default class BigNumber {
|
|
|
334
344
|
private _parseBaseWord (str: string, base: number): number {
|
|
335
345
|
let r = 0
|
|
336
346
|
for (let i = 0; i < str.length; i++) {
|
|
337
|
-
const charCode = str.
|
|
347
|
+
const charCode = str.codePointAt(i) as number
|
|
338
348
|
let digitVal
|
|
339
349
|
if (charCode >= 48 && charCode <= 57) digitVal = charCode - 48
|
|
340
350
|
else if (charCode >= 65 && charCode <= 90) digitVal = charCode - 65 + 10
|
|
@@ -383,7 +393,7 @@ export default class BigNumber {
|
|
|
383
393
|
if (bytes.length === 0) { this._initializeState(0n, 0); return this }
|
|
384
394
|
let magnitude = 0n
|
|
385
395
|
if (endian === 'be') {
|
|
386
|
-
for (
|
|
396
|
+
for (const byte of bytes) magnitude = (magnitude << 8n) | BigInt(byte & 0xff)
|
|
387
397
|
} else {
|
|
388
398
|
for (let i = bytes.length - 1; i >= 0; i--) magnitude = (magnitude << 8n) | BigInt(bytes[i] & 0xff)
|
|
389
399
|
}
|
|
@@ -402,8 +412,8 @@ export default class BigNumber {
|
|
|
402
412
|
}
|
|
403
413
|
|
|
404
414
|
strip (): this { this._finishInitialization(); return this.normSign() }
|
|
405
|
-
normSign (): this { if (this._magnitude === 0n) this._sign = 0
|
|
406
|
-
inspect (): string { return (this.red
|
|
415
|
+
normSign (): this { if (this._magnitude === 0n) { this._sign = 0 } return this }
|
|
416
|
+
inspect (): string { return (this.red === null ? '<BN: ' : '<BN-R: ') + this.toString(16) + '>' }
|
|
407
417
|
|
|
408
418
|
private _getMinimalHex (): string {
|
|
409
419
|
if (this._magnitude === 0n) return '0'
|
|
@@ -464,27 +474,22 @@ export default class BigNumber {
|
|
|
464
474
|
while (tempMag > 0n) {
|
|
465
475
|
const remainder = tempMag % groupBaseBigInt
|
|
466
476
|
tempMag /= groupBaseBigInt
|
|
467
|
-
|
|
468
477
|
const chunkStr = this._bigIntToStringInBase(remainder, base)
|
|
469
|
-
|
|
470
|
-
if (tempMag > 0n) {
|
|
471
|
-
const zerosToPrepend = groupSize - chunkStr.length
|
|
472
|
-
if (zerosToPrepend > 0 && zerosToPrepend < BigNumber.zeros.length) {
|
|
473
|
-
out = BigNumber.zeros[zerosToPrepend] + chunkStr + out
|
|
474
|
-
} else if (zerosToPrepend > 0) {
|
|
475
|
-
out = '0'.repeat(zerosToPrepend) + chunkStr + out
|
|
476
|
-
} else {
|
|
477
|
-
out = chunkStr + out
|
|
478
|
-
}
|
|
479
|
-
} else {
|
|
480
|
-
out = chunkStr + out
|
|
481
|
-
}
|
|
478
|
+
out = (tempMag > 0n ? this._zeroPaddedChunk(chunkStr, groupSize) : chunkStr) + out
|
|
482
479
|
}
|
|
483
480
|
|
|
484
481
|
if (padding > 0) { while (out.length < padding) out = '0' + out }
|
|
485
482
|
return (this._sign === 1 ? '-' : '') + out
|
|
486
483
|
}
|
|
487
484
|
|
|
485
|
+
/** Returns a chunk string zero-padded to groupSize (used by toBaseString for interior chunks). */
|
|
486
|
+
private _zeroPaddedChunk (chunkStr: string, groupSize: number): string {
|
|
487
|
+
const zerosToPrepend = groupSize - chunkStr.length
|
|
488
|
+
if (zerosToPrepend <= 0) return chunkStr
|
|
489
|
+
if (zerosToPrepend < BigNumber.zeros.length) return BigNumber.zeros[zerosToPrepend] + chunkStr
|
|
490
|
+
return '0'.repeat(zerosToPrepend) + chunkStr
|
|
491
|
+
}
|
|
492
|
+
|
|
488
493
|
/**
|
|
489
494
|
* Converts the BigNumber instance to a JavaScript number.
|
|
490
495
|
* Please note that JavaScript numbers are only precise up to 53 bits.
|
|
@@ -568,7 +573,7 @@ export default class BigNumber {
|
|
|
568
573
|
* @method bitLength
|
|
569
574
|
* @returns The bit length of the BigNumber.
|
|
570
575
|
*/
|
|
571
|
-
bitLength (): number { if (this._magnitude === 0n) return 0
|
|
576
|
+
bitLength (): number { if (this._magnitude === 0n) { return 0 } return this._magnitude.toString(2).length }
|
|
572
577
|
/**
|
|
573
578
|
* Converts a BigNumber to an array of bits.
|
|
574
579
|
*
|
|
@@ -582,7 +587,7 @@ export default class BigNumber {
|
|
|
582
587
|
const w = new Array<0 | 1>(len)
|
|
583
588
|
const mag = num._magnitude
|
|
584
589
|
for (let bit = 0; bit < len; bit++) {
|
|
585
|
-
w[bit] = ((mag >> BigInt(bit)) & 1n)
|
|
590
|
+
w[bit] = ((mag >> BigInt(bit)) & 1n) === 0n ? 0 : 1
|
|
586
591
|
}
|
|
587
592
|
return w
|
|
588
593
|
}
|
|
@@ -620,7 +625,7 @@ export default class BigNumber {
|
|
|
620
625
|
* @method byteLength
|
|
621
626
|
* @returns The byte length of the BigNumber.
|
|
622
627
|
*/
|
|
623
|
-
byteLength (): number { if (this._magnitude === 0n) return 0
|
|
628
|
+
byteLength (): number { if (this._magnitude === 0n) { return 0 } return Math.ceil(this.bitLength() / 8) }
|
|
624
629
|
|
|
625
630
|
private _getSignedValue (): bigint { return this._sign === 1 ? -this._magnitude : this._magnitude }
|
|
626
631
|
|
|
@@ -662,7 +667,7 @@ export default class BigNumber {
|
|
|
662
667
|
|
|
663
668
|
isNeg (): boolean { return this._sign === 1 && this._magnitude !== 0n }
|
|
664
669
|
neg (): BigNumber { return this.clone().ineg() }
|
|
665
|
-
ineg (): this { if (this._magnitude !== 0n) this._sign = this._sign === 1 ? 0 : 1
|
|
670
|
+
ineg (): this { if (this._magnitude !== 0n) { this._sign = this._sign === 1 ? 0 : 1 } return this }
|
|
666
671
|
|
|
667
672
|
private _iuop (num: BigNumber, op: (a: bigint, b: bigint) => bigint, isXor: boolean = false): this {
|
|
668
673
|
const newMag = op(this._magnitude, num._magnitude)
|
|
@@ -682,7 +687,7 @@ export default class BigNumber {
|
|
|
682
687
|
ior (num: BigNumber): this { return this._iop(num, (a, b) => a | b) }
|
|
683
688
|
iand (num: BigNumber): this { return this._iop(num, (a, b) => a & b) }
|
|
684
689
|
ixor (num: BigNumber): this { return this._iop(num, (a, b) => a ^ b, true) }
|
|
685
|
-
private _uop_new (num: BigNumber, opName: 'iuor' | 'iuand' | 'iuxor'): BigNumber { if (this.length >= num.length) return this.clone()[opName](num)
|
|
690
|
+
private _uop_new (num: BigNumber, opName: 'iuor' | 'iuand' | 'iuxor'): BigNumber { if (this.length >= num.length) { return this.clone()[opName](num) } return num.clone()[opName](this) }
|
|
686
691
|
or (num: BigNumber): BigNumber { this.assert(this._sign === 0 && num._sign === 0); return this._uop_new(num, 'iuor') }
|
|
687
692
|
uor (num: BigNumber): BigNumber { return this._uop_new(num, 'iuor') }
|
|
688
693
|
and (num: BigNumber): BigNumber { this.assert(this._sign === 0 && num._sign === 0); return this._uop_new(num, 'iuand') }
|
|
@@ -848,22 +853,27 @@ export default class BigNumber {
|
|
|
848
853
|
this.assert(!num.isZero(), 'Division by zero')
|
|
849
854
|
if (this.isZero()) {
|
|
850
855
|
const z = new BigNumber(0n)
|
|
851
|
-
return { div: mode
|
|
856
|
+
return { div: mode === 'mod' ? null : z, mod: mode === 'div' ? null : z }
|
|
852
857
|
}
|
|
853
858
|
const tV = this._getSignedValue()
|
|
854
859
|
const nV = num._getSignedValue()
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
if (
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
860
|
+
const dV = mode !== 'mod' ? tV / nV : null
|
|
861
|
+
const mV = this._computeMod(tV, nV, mode, positive)
|
|
862
|
+
return { div: this._bigNumberFromSigned(dV), mod: this._bigNumberFromSigned(mV) }
|
|
863
|
+
}
|
|
864
|
+
|
|
865
|
+
private _computeMod (tV: bigint, nV: bigint, mode?: 'div' | 'mod', positive?: boolean): bigint | null {
|
|
866
|
+
if (mode === 'div') return null
|
|
867
|
+
let mV = tV % nV
|
|
868
|
+
if (positive === true && mV < 0n) mV += nV < 0n ? -nV : nV
|
|
869
|
+
return mV
|
|
870
|
+
}
|
|
871
|
+
|
|
872
|
+
private _bigNumberFromSigned (v: bigint | null): BigNumber | null {
|
|
873
|
+
if (v === null) return null
|
|
874
|
+
const r = new BigNumber(0n)
|
|
875
|
+
r._setValueFromSigned(v)
|
|
876
|
+
return r
|
|
867
877
|
}
|
|
868
878
|
|
|
869
879
|
div (num: BigNumber): BigNumber {
|
|
@@ -985,9 +995,9 @@ export default class BigNumber {
|
|
|
985
995
|
andln (num: number): number { this.assert(num >= 0); return Number(this._magnitude & BigInt(num)) }
|
|
986
996
|
bincn (bit: number): this { this.assert(typeof bit === 'number' && bit >= 0); const BVal = 1n << BigInt(bit); this._setValueFromSigned(this._getSignedValue() + BVal); return this }
|
|
987
997
|
isZero (): boolean { return this._magnitude === 0n }
|
|
988
|
-
cmpn (num: number):
|
|
989
|
-
cmp (num: BigNumber):
|
|
990
|
-
ucmp (num: BigNumber):
|
|
998
|
+
cmpn (num: number): CompareResult { this.assert(Math.abs(num) <= BigNumber.MAX_IMULN_ARG, 'Number is too big'); const tV = this._getSignedValue(); const nV = BigInt(num); if (tV < nV) { return -1 } if (tV > nV) { return 1 } return 0 }
|
|
999
|
+
cmp (num: BigNumber): CompareResult { const tV = this._getSignedValue(); const nV = num._getSignedValue(); if (tV < nV) { return -1 } if (tV > nV) { return 1 } return 0 }
|
|
1000
|
+
ucmp (num: BigNumber): CompareResult { if (this._magnitude < num._magnitude) { return -1 } if (this._magnitude > num._magnitude) { return 1 } return 0 }
|
|
991
1001
|
gtn (num: number): boolean { return this.cmpn(num) === 1 } gt (num: BigNumber): boolean { return this.cmp(num) === 1 } gten (num: number): boolean { return this.cmpn(num) >= 0 } gte (num: BigNumber): boolean { return this.cmp(num) >= 0 }
|
|
992
1002
|
ltn (num: number): boolean { return this.cmpn(num) === -1 } lt (num: BigNumber): boolean { return this.cmp(num) === -1 } lten (num: number): boolean { return this.cmpn(num) <= 0 } lte (num: BigNumber): boolean { return this.cmp(num) <= 0 }
|
|
993
1003
|
eqn (num: number): boolean { return this.cmpn(num) === 0 } eq (num: BigNumber): boolean { return this.cmp(num) === 0 }
|
|
@@ -1110,17 +1120,16 @@ export default class BigNumber {
|
|
|
1110
1120
|
beBytes[0] &= 0x7f
|
|
1111
1121
|
}
|
|
1112
1122
|
|
|
1113
|
-
let
|
|
1123
|
+
let hexStr: string
|
|
1114
1124
|
if (CAN_USE_BUFFER) {
|
|
1115
|
-
|
|
1116
|
-
magnitude = hex.length === 0 ? 0n : BigInt('0x' + hex)
|
|
1125
|
+
hexStr = BufferCtor.from(beBytes).toString('hex') as string
|
|
1117
1126
|
} else {
|
|
1118
|
-
|
|
1127
|
+
hexStr = ''
|
|
1119
1128
|
for (const byte of beBytes) {
|
|
1120
|
-
|
|
1129
|
+
hexStr += byte < 16 ? '0' + byte.toString(16) : byte.toString(16)
|
|
1121
1130
|
}
|
|
1122
|
-
magnitude = hex.length === 0 ? 0n : BigInt('0x' + hex)
|
|
1123
1131
|
}
|
|
1132
|
+
const magnitude = hexStr.length === 0 ? 0n : BigInt('0x' + hexStr)
|
|
1124
1133
|
|
|
1125
1134
|
const r = new BigNumber(0n)
|
|
1126
1135
|
r._initializeState(magnitude, sign)
|
|
@@ -1145,23 +1154,23 @@ export default class BigNumber {
|
|
|
1145
1154
|
const byteLen = hex.length / 2
|
|
1146
1155
|
const bytes = new Array(byteLen)
|
|
1147
1156
|
for (let i = 0, j = 0; i < hex.length; i += 2) {
|
|
1148
|
-
const high = HEX_CHAR_TO_VALUE[hex.
|
|
1149
|
-
const low = HEX_CHAR_TO_VALUE[hex.
|
|
1157
|
+
const high = HEX_CHAR_TO_VALUE[hex.codePointAt(i) as number]
|
|
1158
|
+
const low = HEX_CHAR_TO_VALUE[hex.codePointAt(i + 1) as number]
|
|
1150
1159
|
bytes[j++] = ((high & 0xf) << 4) | (low & 0xf)
|
|
1151
1160
|
}
|
|
1152
1161
|
|
|
1153
1162
|
let result: number[]
|
|
1154
1163
|
if (this._sign === 1) {
|
|
1155
|
-
if ((bytes[0] & 0x80)
|
|
1156
|
-
result = [0x80, ...bytes]
|
|
1157
|
-
} else {
|
|
1164
|
+
if ((bytes[0] & 0x80) === 0) {
|
|
1158
1165
|
result = bytes.slice()
|
|
1159
1166
|
result[0] |= 0x80
|
|
1167
|
+
} else {
|
|
1168
|
+
result = [0x80, ...bytes]
|
|
1160
1169
|
}
|
|
1161
|
-
} else if ((bytes[0] & 0x80)
|
|
1162
|
-
result = [0x00, ...bytes]
|
|
1163
|
-
} else {
|
|
1170
|
+
} else if ((bytes[0] & 0x80) === 0) {
|
|
1164
1171
|
result = bytes.slice()
|
|
1172
|
+
} else {
|
|
1173
|
+
result = [0x00, ...bytes]
|
|
1165
1174
|
}
|
|
1166
1175
|
|
|
1167
1176
|
return endian === 'little' ? result.reverse() : result
|
|
@@ -1279,8 +1288,8 @@ export default class BigNumber {
|
|
|
1279
1288
|
if (maxNumSize !== undefined && num.length > maxNumSize) throw new Error('script number overflow')
|
|
1280
1289
|
if (num.length === 0) return new BigNumber(0n)
|
|
1281
1290
|
if (requireMinimal) {
|
|
1282
|
-
if ((num
|
|
1283
|
-
if (num.length <= 1 || (num
|
|
1291
|
+
if ((num.at(-1) & 0x7f) === 0) {
|
|
1292
|
+
if (num.length <= 1 || (num.at(-2) & 0x80) === 0) {
|
|
1284
1293
|
throw new Error('non-minimally encoded script number')
|
|
1285
1294
|
}
|
|
1286
1295
|
}
|
package/src/primitives/Curve.ts
CHANGED
|
@@ -131,9 +131,10 @@ export default class Curve {
|
|
|
131
131
|
static cachedProperty (obj, name: string, computer): void {
|
|
132
132
|
const key = '_' + name
|
|
133
133
|
obj.prototype[name] = function cachedProperty () {
|
|
134
|
-
|
|
135
|
-
this[key]
|
|
136
|
-
|
|
134
|
+
if (this[key] === undefined) {
|
|
135
|
+
this[key] = computer.call(this)
|
|
136
|
+
}
|
|
137
|
+
return this[key]
|
|
137
138
|
}
|
|
138
139
|
}
|
|
139
140
|
|
|
@@ -146,11 +147,11 @@ export default class Curve {
|
|
|
146
147
|
}
|
|
147
148
|
|
|
148
149
|
constructor () {
|
|
149
|
-
if (
|
|
150
|
-
|
|
151
|
-
} else {
|
|
152
|
-
/* eslint-disable @typescript-eslint/no-this-alias */
|
|
150
|
+
if (globalCurve === undefined) {
|
|
151
|
+
/* eslint-disable-next-line @typescript-eslint/no-this-alias */
|
|
153
152
|
globalCurve = this
|
|
153
|
+
} else {
|
|
154
|
+
return globalCurve
|
|
154
155
|
}
|
|
155
156
|
|
|
156
157
|
const precomputed = {
|
|
@@ -1015,9 +1016,7 @@ export default class Curve {
|
|
|
1015
1016
|
let beta: BigNumber
|
|
1016
1017
|
let lambda: BigNumber
|
|
1017
1018
|
|
|
1018
|
-
if (conf.beta
|
|
1019
|
-
beta = new BigNumber(conf.beta, 16).toRed(this.red)
|
|
1020
|
-
} else {
|
|
1019
|
+
if (conf.beta === undefined) {
|
|
1021
1020
|
const betas = this._getEndoRoots(this.p)
|
|
1022
1021
|
if (betas === null) {
|
|
1023
1022
|
throw new Error('Failed to get endomorphism roots for beta.')
|
|
@@ -1025,11 +1024,11 @@ export default class Curve {
|
|
|
1025
1024
|
// Choose the smallest beta
|
|
1026
1025
|
beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1]
|
|
1027
1026
|
beta = beta.toRed(this.red)
|
|
1027
|
+
} else {
|
|
1028
|
+
beta = new BigNumber(conf.beta, 16).toRed(this.red)
|
|
1028
1029
|
}
|
|
1029
1030
|
|
|
1030
|
-
if (conf.lambda
|
|
1031
|
-
lambda = new BigNumber(conf.lambda, 16)
|
|
1032
|
-
} else {
|
|
1031
|
+
if (conf.lambda === undefined) {
|
|
1033
1032
|
// Choose the lambda that matches selected beta
|
|
1034
1033
|
const lambdas = this._getEndoRoots(this.n)
|
|
1035
1034
|
if (lambdas === null) {
|
|
@@ -1041,7 +1040,7 @@ export default class Curve {
|
|
|
1041
1040
|
}
|
|
1042
1041
|
|
|
1043
1042
|
const gMulX = this.g.mul(lambdas[0])?.x
|
|
1044
|
-
const gXRedMulBeta = (this.g.x
|
|
1043
|
+
const gXRedMulBeta = (this.g.x == null) ? undefined : this.g.x.redMul(beta)
|
|
1045
1044
|
|
|
1046
1045
|
if ((gMulX != null) && (gXRedMulBeta != null) && gMulX.cmp(gXRedMulBeta) === 0) {
|
|
1047
1046
|
lambda = lambdas[0]
|
|
@@ -1053,7 +1052,7 @@ export default class Curve {
|
|
|
1053
1052
|
}
|
|
1054
1053
|
|
|
1055
1054
|
const gMulX = this.g.mul(lambda)?.x
|
|
1056
|
-
const gXRedMulBeta = (this.g.x
|
|
1055
|
+
const gXRedMulBeta = (this.g.x == null) ? undefined : this.g.x.redMul(beta)
|
|
1057
1056
|
|
|
1058
1057
|
if ((gMulX == null) || (gXRedMulBeta == null)) {
|
|
1059
1058
|
throw new Error('Lambda computation failed: g.mul(lambda).x or g.x.redMul(beta) is undefined.')
|
|
@@ -1064,6 +1063,8 @@ export default class Curve {
|
|
|
1064
1063
|
'Lambda selection does not match computed beta.'
|
|
1065
1064
|
)
|
|
1066
1065
|
}
|
|
1066
|
+
} else {
|
|
1067
|
+
lambda = new BigNumber(conf.lambda, 16)
|
|
1067
1068
|
}
|
|
1068
1069
|
|
|
1069
1070
|
// Get basis vectors, used for balanced length-two representation
|
package/src/primitives/ECDSA.ts
CHANGED
|
@@ -44,8 +44,8 @@ function truncateToN (
|
|
|
44
44
|
function bnToBigInt (bn: BigNumber): bigint {
|
|
45
45
|
const bytes = bn.toArray('be')
|
|
46
46
|
let x = 0n
|
|
47
|
-
for (
|
|
48
|
-
x = (x << 8n) | BigInt(
|
|
47
|
+
for (const byte of bytes) {
|
|
48
|
+
x = (x << 8n) | BigInt(byte)
|
|
49
49
|
}
|
|
50
50
|
return x
|
|
51
51
|
}
|
|
@@ -107,12 +107,14 @@ export const sign = (
|
|
|
107
107
|
const drbg = new DRBG(bkey, nonce)
|
|
108
108
|
|
|
109
109
|
for (let iter = 0; ; iter++) {
|
|
110
|
-
let kBN
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
110
|
+
let kBN: BigNumber | null
|
|
111
|
+
if (typeof customK === 'function') {
|
|
112
|
+
kBN = customK(iter)
|
|
113
|
+
} else if (BigNumber.isBN(customK)) {
|
|
114
|
+
kBN = customK
|
|
115
|
+
} else {
|
|
116
|
+
kBN = new BigNumber(drbg.generate(bytes), 16)
|
|
117
|
+
}
|
|
116
118
|
|
|
117
119
|
if (kBN == null) {
|
|
118
120
|
throw new Error('k is undefined')
|