@bsv/sdk 1.3.12 → 1.3.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/package.json +15 -3
- package/dist/cjs/src/auth/Peer.js +83 -57
- package/dist/cjs/src/auth/Peer.js.map +1 -1
- package/dist/cjs/src/auth/SessionManager.js +14 -9
- package/dist/cjs/src/auth/SessionManager.js.map +1 -1
- package/dist/cjs/src/auth/certificates/Certificate.js +16 -10
- package/dist/cjs/src/auth/certificates/Certificate.js.map +1 -1
- package/dist/cjs/src/auth/certificates/MasterCertificate.js +25 -23
- package/dist/cjs/src/auth/certificates/MasterCertificate.js.map +1 -1
- package/dist/cjs/src/auth/certificates/VerifiableCertificate.js +2 -2
- package/dist/cjs/src/auth/certificates/VerifiableCertificate.js.map +1 -1
- package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js +62 -46
- package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
- package/dist/cjs/src/auth/clients/AuthFetch.js +1 -0
- package/dist/cjs/src/auth/clients/AuthFetch.js.map +1 -1
- package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js +70 -43
- package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
- package/dist/cjs/src/auth/utils/createNonce.js +2 -1
- package/dist/cjs/src/auth/utils/createNonce.js.map +1 -1
- package/dist/cjs/src/auth/utils/getVerifiableCertificates.js.map +1 -1
- package/dist/cjs/src/auth/utils/validateCertificates.js +5 -2
- package/dist/cjs/src/auth/utils/validateCertificates.js.map +1 -1
- package/dist/cjs/src/auth/utils/verifyNonce.js +2 -1
- package/dist/cjs/src/auth/utils/verifyNonce.js.map +1 -1
- package/dist/cjs/src/compat/BSM.js +7 -17
- package/dist/cjs/src/compat/BSM.js.map +1 -1
- package/dist/cjs/src/compat/ECIES.js +172 -133
- package/dist/cjs/src/compat/ECIES.js.map +1 -1
- package/dist/cjs/src/compat/HD.js +63 -73
- package/dist/cjs/src/compat/HD.js.map +1 -1
- package/dist/cjs/src/compat/Mnemonic.js +102 -106
- package/dist/cjs/src/compat/Mnemonic.js.map +1 -1
- package/dist/cjs/src/compat/Utxo.js +2 -2
- package/dist/cjs/src/compat/Utxo.js.map +1 -1
- package/dist/cjs/src/compat/index.js +7 -17
- package/dist/cjs/src/compat/index.js.map +1 -1
- package/dist/cjs/src/messages/EncryptedMessage.js +3 -1
- package/dist/cjs/src/messages/EncryptedMessage.js.map +1 -1
- package/dist/cjs/src/messages/SignedMessage.js +1 -0
- package/dist/cjs/src/messages/SignedMessage.js.map +1 -1
- package/dist/cjs/src/messages/index.js +7 -17
- package/dist/cjs/src/messages/index.js.map +1 -1
- package/dist/cjs/src/overlay-tools/LookupResolver.js +54 -35
- package/dist/cjs/src/overlay-tools/LookupResolver.js.map +1 -1
- package/dist/cjs/src/overlay-tools/OverlayAdminTokenTemplate.js +32 -20
- package/dist/cjs/src/overlay-tools/OverlayAdminTokenTemplate.js.map +1 -1
- package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js +40 -28
- package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
- package/dist/cjs/src/primitives/AESGCM.js +6 -5
- package/dist/cjs/src/primitives/AESGCM.js.map +1 -1
- package/dist/cjs/src/primitives/BasePoint.js +1 -1
- package/dist/cjs/src/primitives/BasePoint.js.map +1 -1
- package/dist/cjs/src/primitives/BigNumber.js +50 -62
- package/dist/cjs/src/primitives/BigNumber.js.map +1 -1
- package/dist/cjs/src/primitives/Curve.js +46 -22
- package/dist/cjs/src/primitives/Curve.js.map +1 -1
- package/dist/cjs/src/primitives/DRBG.js +2 -8
- package/dist/cjs/src/primitives/DRBG.js.map +1 -1
- package/dist/cjs/src/primitives/ECDSA.js +51 -35
- package/dist/cjs/src/primitives/ECDSA.js.map +1 -1
- package/dist/cjs/src/primitives/Hash.js +191 -216
- package/dist/cjs/src/primitives/Hash.js.map +1 -1
- package/dist/cjs/src/primitives/JacobianPoint.js +19 -5
- package/dist/cjs/src/primitives/JacobianPoint.js.map +1 -1
- package/dist/cjs/src/primitives/K256.js.map +1 -1
- package/dist/cjs/src/primitives/Mersenne.js.map +1 -1
- package/dist/cjs/src/primitives/MontgomoryMethod.js.map +1 -1
- package/dist/cjs/src/primitives/Point.js +117 -88
- package/dist/cjs/src/primitives/Point.js.map +1 -1
- package/dist/cjs/src/primitives/Polynomial.js +4 -2
- package/dist/cjs/src/primitives/Polynomial.js.map +1 -1
- package/dist/cjs/src/primitives/PrivateKey.js +32 -33
- package/dist/cjs/src/primitives/PrivateKey.js.map +1 -1
- package/dist/cjs/src/primitives/PublicKey.js.map +1 -1
- package/dist/cjs/src/primitives/Random.js +6 -5
- package/dist/cjs/src/primitives/Random.js.map +1 -1
- package/dist/cjs/src/primitives/ReductionContext.js +1 -1
- package/dist/cjs/src/primitives/ReductionContext.js.map +1 -1
- package/dist/cjs/src/primitives/Schnorr.js +21 -15
- package/dist/cjs/src/primitives/Schnorr.js.map +1 -1
- package/dist/cjs/src/primitives/Signature.js +8 -7
- package/dist/cjs/src/primitives/Signature.js.map +1 -1
- package/dist/cjs/src/primitives/SymmetricKey.js +13 -13
- package/dist/cjs/src/primitives/SymmetricKey.js.map +1 -1
- package/dist/cjs/src/primitives/TransactionSignature.js +31 -29
- package/dist/cjs/src/primitives/TransactionSignature.js.map +1 -1
- package/dist/cjs/src/primitives/index.js +7 -17
- package/dist/cjs/src/primitives/index.js.map +1 -1
- package/dist/cjs/src/primitives/utils.js +79 -68
- package/dist/cjs/src/primitives/utils.js.map +1 -1
- package/dist/cjs/src/script/OP.js +3 -3
- package/dist/cjs/src/script/OP.js.map +1 -1
- package/dist/cjs/src/script/Script.js +12 -10
- package/dist/cjs/src/script/Script.js.map +1 -1
- package/dist/cjs/src/script/Spend.js +47 -49
- package/dist/cjs/src/script/Spend.js.map +1 -1
- package/dist/cjs/src/script/templates/P2PKH.js +24 -12
- package/dist/cjs/src/script/templates/P2PKH.js.map +1 -1
- package/dist/cjs/src/script/templates/PushDrop.js +28 -23
- package/dist/cjs/src/script/templates/PushDrop.js.map +1 -1
- package/dist/cjs/src/script/templates/RPuzzle.js +10 -6
- package/dist/cjs/src/script/templates/RPuzzle.js.map +1 -1
- package/dist/cjs/src/totp/totp.js +2 -1
- package/dist/cjs/src/totp/totp.js.map +1 -1
- package/dist/cjs/src/transaction/Beef.js +177 -154
- package/dist/cjs/src/transaction/Beef.js.map +1 -1
- package/dist/cjs/src/transaction/BeefParty.js +24 -24
- package/dist/cjs/src/transaction/BeefParty.js.map +1 -1
- package/dist/cjs/src/transaction/BeefTx.js +26 -18
- package/dist/cjs/src/transaction/BeefTx.js.map +1 -1
- package/dist/cjs/src/transaction/Broadcaster.js +3 -2
- package/dist/cjs/src/transaction/Broadcaster.js.map +1 -1
- package/dist/cjs/src/transaction/MerklePath.js +64 -37
- package/dist/cjs/src/transaction/MerklePath.js.map +1 -1
- package/dist/cjs/src/transaction/Transaction.js +111 -137
- package/dist/cjs/src/transaction/Transaction.js.map +1 -1
- package/dist/cjs/src/transaction/broadcasters/ARC.js +25 -16
- package/dist/cjs/src/transaction/broadcasters/ARC.js.map +1 -1
- package/dist/cjs/src/transaction/broadcasters/DefaultBroadcaster.js +2 -1
- package/dist/cjs/src/transaction/broadcasters/DefaultBroadcaster.js.map +1 -1
- package/dist/cjs/src/transaction/broadcasters/WhatsOnChainBroadcaster.js.map +1 -1
- package/dist/cjs/src/transaction/chaintrackers/DefaultChainTracker.js +2 -1
- package/dist/cjs/src/transaction/chaintrackers/DefaultChainTracker.js.map +1 -1
- package/dist/cjs/src/transaction/chaintrackers/WhatsOnChain.js +3 -3
- package/dist/cjs/src/transaction/chaintrackers/WhatsOnChain.js.map +1 -1
- package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
- package/dist/cjs/src/transaction/http/DefaultHttpClient.js +5 -3
- package/dist/cjs/src/transaction/http/DefaultHttpClient.js.map +1 -1
- package/dist/cjs/src/transaction/http/FetchHttpClient.js +5 -2
- package/dist/cjs/src/transaction/http/FetchHttpClient.js.map +1 -1
- package/dist/cjs/src/transaction/http/NodejsHttpClient.js +5 -3
- package/dist/cjs/src/transaction/http/NodejsHttpClient.js.map +1 -1
- package/dist/cjs/src/transaction/http/index.js.map +1 -1
- package/dist/cjs/src/transaction/index.js.map +1 -1
- package/dist/cjs/src/wallet/CachedKeyDeriver.js +91 -66
- package/dist/cjs/src/wallet/CachedKeyDeriver.js.map +1 -1
- package/dist/cjs/src/wallet/KeyDeriver.js +61 -52
- package/dist/cjs/src/wallet/KeyDeriver.js.map +1 -1
- package/dist/cjs/src/wallet/ProtoWallet.js +79 -29
- package/dist/cjs/src/wallet/ProtoWallet.js.map +1 -1
- package/dist/cjs/src/wallet/WalletClient.js +7 -2
- package/dist/cjs/src/wallet/WalletClient.js.map +1 -1
- package/dist/cjs/src/wallet/WalletError.js +2 -2
- package/dist/cjs/src/wallet/WalletError.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js +4 -3
- package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/HTTPWalletWire.js +2 -2
- package/dist/cjs/src/wallet/substrates/HTTPWalletWire.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js +1239 -1261
- package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js +102 -43
- package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/XDM.js +8 -3
- package/dist/cjs/src/wallet/substrates/XDM.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/window.CWI.js +28 -28
- package/dist/cjs/src/wallet/substrates/window.CWI.js.map +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/mod.js +15 -15
- package/dist/esm/src/auth/Peer.js +75 -54
- package/dist/esm/src/auth/Peer.js.map +1 -1
- package/dist/esm/src/auth/SessionManager.js +14 -9
- package/dist/esm/src/auth/SessionManager.js.map +1 -1
- package/dist/esm/src/auth/certificates/Certificate.js +15 -11
- package/dist/esm/src/auth/certificates/Certificate.js.map +1 -1
- package/dist/esm/src/auth/certificates/MasterCertificate.js +25 -23
- package/dist/esm/src/auth/certificates/MasterCertificate.js.map +1 -1
- package/dist/esm/src/auth/certificates/VerifiableCertificate.js +2 -2
- package/dist/esm/src/auth/certificates/VerifiableCertificate.js.map +1 -1
- package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js +64 -47
- package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
- package/dist/esm/src/auth/clients/AuthFetch.js +1 -0
- package/dist/esm/src/auth/clients/AuthFetch.js.map +1 -1
- package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js +69 -43
- package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
- package/dist/esm/src/auth/utils/createNonce.js.map +1 -1
- package/dist/esm/src/auth/utils/getVerifiableCertificates.js +1 -1
- package/dist/esm/src/auth/utils/getVerifiableCertificates.js.map +1 -1
- package/dist/esm/src/auth/utils/validateCertificates.js +6 -3
- package/dist/esm/src/auth/utils/validateCertificates.js.map +1 -1
- package/dist/esm/src/auth/utils/verifyNonce.js.map +1 -1
- package/dist/esm/src/compat/BSM.js.map +1 -1
- package/dist/esm/src/compat/ECIES.js +165 -116
- package/dist/esm/src/compat/ECIES.js.map +1 -1
- package/dist/esm/src/compat/HD.js +56 -56
- package/dist/esm/src/compat/HD.js.map +1 -1
- package/dist/esm/src/compat/Mnemonic.js +95 -89
- package/dist/esm/src/compat/Mnemonic.js.map +1 -1
- package/dist/esm/src/compat/Utxo.js +1 -1
- package/dist/esm/src/compat/Utxo.js.map +1 -1
- package/dist/esm/src/messages/EncryptedMessage.js +3 -1
- package/dist/esm/src/messages/EncryptedMessage.js.map +1 -1
- package/dist/esm/src/messages/SignedMessage.js +1 -0
- package/dist/esm/src/messages/SignedMessage.js.map +1 -1
- package/dist/esm/src/overlay-tools/LookupResolver.js +53 -35
- package/dist/esm/src/overlay-tools/LookupResolver.js.map +1 -1
- package/dist/esm/src/overlay-tools/OverlayAdminTokenTemplate.js +32 -20
- package/dist/esm/src/overlay-tools/OverlayAdminTokenTemplate.js.map +1 -1
- package/dist/esm/src/overlay-tools/SHIPBroadcaster.js +40 -28
- package/dist/esm/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
- package/dist/esm/src/primitives/AESGCM.js +1 -0
- package/dist/esm/src/primitives/AESGCM.js.map +1 -1
- package/dist/esm/src/primitives/BasePoint.js +1 -1
- package/dist/esm/src/primitives/BasePoint.js.map +1 -1
- package/dist/esm/src/primitives/BigNumber.js +50 -62
- package/dist/esm/src/primitives/BigNumber.js.map +1 -1
- package/dist/esm/src/primitives/Curve.js +45 -22
- package/dist/esm/src/primitives/Curve.js.map +1 -1
- package/dist/esm/src/primitives/DRBG.js +2 -8
- package/dist/esm/src/primitives/DRBG.js.map +1 -1
- package/dist/esm/src/primitives/ECDSA.js +50 -35
- package/dist/esm/src/primitives/ECDSA.js.map +1 -1
- package/dist/esm/src/primitives/Hash.js +188 -213
- package/dist/esm/src/primitives/Hash.js.map +1 -1
- package/dist/esm/src/primitives/JacobianPoint.js +18 -5
- package/dist/esm/src/primitives/JacobianPoint.js.map +1 -1
- package/dist/esm/src/primitives/K256.js.map +1 -1
- package/dist/esm/src/primitives/Mersenne.js.map +1 -1
- package/dist/esm/src/primitives/MontgomoryMethod.js.map +1 -1
- package/dist/esm/src/primitives/Point.js +107 -88
- package/dist/esm/src/primitives/Point.js.map +1 -1
- package/dist/esm/src/primitives/Polynomial.js +4 -2
- package/dist/esm/src/primitives/Polynomial.js.map +1 -1
- package/dist/esm/src/primitives/PrivateKey.js +25 -16
- package/dist/esm/src/primitives/PrivateKey.js.map +1 -1
- package/dist/esm/src/primitives/PublicKey.js.map +1 -1
- package/dist/esm/src/primitives/Random.js +7 -6
- package/dist/esm/src/primitives/Random.js.map +1 -1
- package/dist/esm/src/primitives/ReductionContext.js +1 -1
- package/dist/esm/src/primitives/ReductionContext.js.map +1 -1
- package/dist/esm/src/primitives/Schnorr.js +21 -15
- package/dist/esm/src/primitives/Schnorr.js.map +1 -1
- package/dist/esm/src/primitives/Signature.js +8 -7
- package/dist/esm/src/primitives/Signature.js.map +1 -1
- package/dist/esm/src/primitives/SymmetricKey.js +13 -13
- package/dist/esm/src/primitives/SymmetricKey.js.map +1 -1
- package/dist/esm/src/primitives/TransactionSignature.js +22 -12
- package/dist/esm/src/primitives/TransactionSignature.js.map +1 -1
- package/dist/esm/src/primitives/utils.js +76 -66
- package/dist/esm/src/primitives/utils.js.map +1 -1
- package/dist/esm/src/script/OP.js +3 -3
- package/dist/esm/src/script/OP.js.map +1 -1
- package/dist/esm/src/script/Script.js +12 -10
- package/dist/esm/src/script/Script.js.map +1 -1
- package/dist/esm/src/script/Spend.js +39 -32
- package/dist/esm/src/script/Spend.js.map +1 -1
- package/dist/esm/src/script/templates/P2PKH.js +26 -11
- package/dist/esm/src/script/templates/P2PKH.js.map +1 -1
- package/dist/esm/src/script/templates/PushDrop.js +29 -22
- package/dist/esm/src/script/templates/PushDrop.js.map +1 -1
- package/dist/esm/src/script/templates/RPuzzle.js +11 -6
- package/dist/esm/src/script/templates/RPuzzle.js.map +1 -1
- package/dist/esm/src/totp/totp.js +2 -1
- package/dist/esm/src/totp/totp.js.map +1 -1
- package/dist/esm/src/transaction/Beef.js +176 -154
- package/dist/esm/src/transaction/Beef.js.map +1 -1
- package/dist/esm/src/transaction/BeefParty.js +24 -24
- package/dist/esm/src/transaction/BeefParty.js.map +1 -1
- package/dist/esm/src/transaction/BeefTx.js +26 -18
- package/dist/esm/src/transaction/BeefTx.js.map +1 -1
- package/dist/esm/src/transaction/Broadcaster.js.map +1 -1
- package/dist/esm/src/transaction/MerklePath.js +61 -36
- package/dist/esm/src/transaction/MerklePath.js.map +1 -1
- package/dist/esm/src/transaction/Transaction.js +105 -138
- package/dist/esm/src/transaction/Transaction.js.map +1 -1
- package/dist/esm/src/transaction/broadcasters/ARC.js +25 -16
- package/dist/esm/src/transaction/broadcasters/ARC.js.map +1 -1
- package/dist/esm/src/transaction/broadcasters/DefaultBroadcaster.js.map +1 -1
- package/dist/esm/src/transaction/broadcasters/WhatsOnChainBroadcaster.js.map +1 -1
- package/dist/esm/src/transaction/chaintrackers/WhatsOnChain.js +3 -3
- package/dist/esm/src/transaction/chaintrackers/WhatsOnChain.js.map +1 -1
- package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
- package/dist/esm/src/transaction/http/DefaultHttpClient.js +3 -2
- package/dist/esm/src/transaction/http/DefaultHttpClient.js.map +1 -1
- package/dist/esm/src/transaction/http/FetchHttpClient.js +4 -2
- package/dist/esm/src/transaction/http/FetchHttpClient.js.map +1 -1
- package/dist/esm/src/transaction/http/NodejsHttpClient.js +5 -3
- package/dist/esm/src/transaction/http/NodejsHttpClient.js.map +1 -1
- package/dist/esm/src/transaction/http/index.js.map +1 -1
- package/dist/esm/src/transaction/index.js.map +1 -1
- package/dist/esm/src/wallet/CachedKeyDeriver.js +91 -66
- package/dist/esm/src/wallet/CachedKeyDeriver.js.map +1 -1
- package/dist/esm/src/wallet/KeyDeriver.js +60 -52
- package/dist/esm/src/wallet/KeyDeriver.js.map +1 -1
- package/dist/esm/src/wallet/ProtoWallet.js +75 -29
- package/dist/esm/src/wallet/ProtoWallet.js.map +1 -1
- package/dist/esm/src/wallet/WalletClient.js +7 -2
- package/dist/esm/src/wallet/WalletClient.js.map +1 -1
- package/dist/esm/src/wallet/WalletError.js +2 -2
- package/dist/esm/src/wallet/WalletError.js.map +1 -1
- package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js +4 -4
- package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
- package/dist/esm/src/wallet/substrates/HTTPWalletWire.js +2 -2
- package/dist/esm/src/wallet/substrates/HTTPWalletWire.js.map +1 -1
- package/dist/esm/src/wallet/substrates/WalletWireProcessor.js +1239 -1261
- package/dist/esm/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
- package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js +95 -43
- package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
- package/dist/esm/src/wallet/substrates/XDM.js +8 -3
- package/dist/esm/src/wallet/substrates/XDM.js.map +1 -1
- package/dist/esm/src/wallet/substrates/window.CWI.js +28 -28
- package/dist/esm/src/wallet/substrates/window.CWI.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/types/mod.d.ts +15 -15
- package/dist/types/src/auth/Peer.d.ts +10 -10
- package/dist/types/src/auth/Peer.d.ts.map +1 -1
- package/dist/types/src/auth/SessionManager.d.ts +4 -4
- package/dist/types/src/auth/SessionManager.d.ts.map +1 -1
- package/dist/types/src/auth/certificates/Certificate.d.ts +6 -6
- package/dist/types/src/auth/certificates/Certificate.d.ts.map +1 -1
- package/dist/types/src/auth/certificates/MasterCertificate.d.ts +5 -5
- package/dist/types/src/auth/certificates/MasterCertificate.d.ts.map +1 -1
- package/dist/types/src/auth/certificates/VerifiableCertificate.d.ts.map +1 -1
- package/dist/types/src/auth/certificates/__tests/CompletedProtoWallet.d.ts +23 -22
- package/dist/types/src/auth/certificates/__tests/CompletedProtoWallet.d.ts.map +1 -1
- package/dist/types/src/auth/clients/AuthFetch.d.ts.map +1 -1
- package/dist/types/src/auth/transports/SimplifiedFetchTransport.d.ts +1 -1
- package/dist/types/src/auth/transports/SimplifiedFetchTransport.d.ts.map +1 -1
- package/dist/types/src/auth/utils/createNonce.d.ts.map +1 -1
- package/dist/types/src/auth/utils/getVerifiableCertificates.d.ts +3 -3
- package/dist/types/src/auth/utils/getVerifiableCertificates.d.ts.map +1 -1
- package/dist/types/src/auth/utils/validateCertificates.d.ts +2 -2
- package/dist/types/src/auth/utils/validateCertificates.d.ts.map +1 -1
- package/dist/types/src/auth/utils/verifyNonce.d.ts +1 -1
- package/dist/types/src/auth/utils/verifyNonce.d.ts.map +1 -1
- package/dist/types/src/compat/BSM.d.ts +1 -1
- package/dist/types/src/compat/BSM.d.ts.map +1 -1
- package/dist/types/src/compat/ECIES.d.ts +36 -36
- package/dist/types/src/compat/ECIES.d.ts.map +1 -1
- package/dist/types/src/compat/HD.d.ts +51 -51
- package/dist/types/src/compat/HD.d.ts.map +1 -1
- package/dist/types/src/compat/Mnemonic.d.ts +79 -79
- package/dist/types/src/compat/Mnemonic.d.ts.map +1 -1
- package/dist/types/src/compat/Utxo.d.ts.map +1 -1
- package/dist/types/src/messages/EncryptedMessage.d.ts.map +1 -1
- package/dist/types/src/messages/SignedMessage.d.ts.map +1 -1
- package/dist/types/src/overlay-tools/LookupResolver.d.ts +9 -9
- package/dist/types/src/overlay-tools/LookupResolver.d.ts.map +1 -1
- package/dist/types/src/overlay-tools/OverlayAdminTokenTemplate.d.ts +17 -17
- package/dist/types/src/overlay-tools/OverlayAdminTokenTemplate.d.ts.map +1 -1
- package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts +14 -14
- package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts.map +1 -1
- package/dist/types/src/primitives/AESGCM.d.ts.map +1 -1
- package/dist/types/src/primitives/BasePoint.d.ts +8 -8
- package/dist/types/src/primitives/BasePoint.d.ts.map +1 -1
- package/dist/types/src/primitives/BigNumber.d.ts.map +1 -1
- package/dist/types/src/primitives/Curve.d.ts +14 -7
- package/dist/types/src/primitives/Curve.d.ts.map +1 -1
- package/dist/types/src/primitives/DRBG.d.ts.map +1 -1
- package/dist/types/src/primitives/ECDSA.d.ts +1 -1
- package/dist/types/src/primitives/ECDSA.d.ts.map +1 -1
- package/dist/types/src/primitives/Hash.d.ts +11 -11
- package/dist/types/src/primitives/Hash.d.ts.map +1 -1
- package/dist/types/src/primitives/JacobianPoint.d.ts.map +1 -1
- package/dist/types/src/primitives/Point.d.ts +14 -10
- package/dist/types/src/primitives/Point.d.ts.map +1 -1
- package/dist/types/src/primitives/Polynomial.d.ts.map +1 -1
- package/dist/types/src/primitives/PrivateKey.d.ts +2 -2
- package/dist/types/src/primitives/PrivateKey.d.ts.map +1 -1
- package/dist/types/src/primitives/PublicKey.d.ts.map +1 -1
- package/dist/types/src/primitives/Random.d.ts.map +1 -1
- package/dist/types/src/primitives/Schnorr.d.ts +14 -14
- package/dist/types/src/primitives/Schnorr.d.ts.map +1 -1
- package/dist/types/src/primitives/Signature.d.ts +1 -1
- package/dist/types/src/primitives/Signature.d.ts.map +1 -1
- package/dist/types/src/primitives/SymmetricKey.d.ts +13 -13
- package/dist/types/src/primitives/SymmetricKey.d.ts.map +1 -1
- package/dist/types/src/primitives/TransactionSignature.d.ts +4 -4
- package/dist/types/src/primitives/TransactionSignature.d.ts.map +1 -1
- package/dist/types/src/primitives/utils.d.ts +3 -6
- package/dist/types/src/primitives/utils.d.ts.map +1 -1
- package/dist/types/src/script/Script.d.ts +3 -3
- package/dist/types/src/script/Script.d.ts.map +1 -1
- package/dist/types/src/script/ScriptTemplate.d.ts +2 -2
- package/dist/types/src/script/ScriptTemplate.d.ts.map +1 -1
- package/dist/types/src/script/Spend.d.ts.map +1 -1
- package/dist/types/src/script/templates/P2PKH.d.ts.map +1 -1
- package/dist/types/src/script/templates/PushDrop.d.ts +1 -2
- package/dist/types/src/script/templates/PushDrop.d.ts.map +1 -1
- package/dist/types/src/script/templates/RPuzzle.d.ts.map +1 -1
- package/dist/types/src/totp/totp.d.ts.map +1 -1
- package/dist/types/src/transaction/Beef.d.ts +96 -96
- package/dist/types/src/transaction/Beef.d.ts.map +1 -1
- package/dist/types/src/transaction/BeefParty.d.ts +22 -22
- package/dist/types/src/transaction/BeefParty.d.ts.map +1 -1
- package/dist/types/src/transaction/BeefTx.d.ts +5 -5
- package/dist/types/src/transaction/BeefTx.d.ts.map +1 -1
- package/dist/types/src/transaction/Broadcaster.d.ts.map +1 -1
- package/dist/types/src/transaction/ChainTracker.d.ts +2 -2
- package/dist/types/src/transaction/FeeModel.d.ts.map +1 -1
- package/dist/types/src/transaction/MerklePath.d.ts.map +1 -1
- package/dist/types/src/transaction/Transaction.d.ts +4 -12
- package/dist/types/src/transaction/Transaction.d.ts.map +1 -1
- package/dist/types/src/transaction/TransactionOutput.d.ts.map +1 -1
- package/dist/types/src/transaction/broadcasters/ARC.d.ts +1 -1
- package/dist/types/src/transaction/broadcasters/ARC.d.ts.map +1 -1
- package/dist/types/src/transaction/broadcasters/DefaultBroadcaster.d.ts.map +1 -1
- package/dist/types/src/transaction/broadcasters/WhatsOnChainBroadcaster.d.ts.map +1 -1
- package/dist/types/src/transaction/chaintrackers/DefaultChainTracker.d.ts.map +1 -1
- package/dist/types/src/transaction/chaintrackers/WhatsOnChain.d.ts.map +1 -1
- package/dist/types/src/transaction/fee-models/SatoshisPerKilobyte.d.ts.map +1 -1
- package/dist/types/src/transaction/http/DefaultHttpClient.d.ts +1 -1
- package/dist/types/src/transaction/http/DefaultHttpClient.d.ts.map +1 -1
- package/dist/types/src/transaction/http/FetchHttpClient.d.ts +5 -5
- package/dist/types/src/transaction/http/FetchHttpClient.d.ts.map +1 -1
- package/dist/types/src/transaction/http/HttpClient.d.ts +4 -4
- package/dist/types/src/transaction/http/HttpClient.d.ts.map +1 -1
- package/dist/types/src/transaction/http/NodejsHttpClient.d.ts +3 -3
- package/dist/types/src/transaction/http/NodejsHttpClient.d.ts.map +1 -1
- package/dist/types/src/transaction/http/index.d.ts.map +1 -1
- package/dist/types/src/transaction/index.d.ts.map +1 -1
- package/dist/types/src/wallet/CachedKeyDeriver.d.ts +58 -58
- package/dist/types/src/wallet/CachedKeyDeriver.d.ts.map +1 -1
- package/dist/types/src/wallet/KeyDeriver.d.ts +78 -78
- package/dist/types/src/wallet/KeyDeriver.d.ts.map +1 -1
- package/dist/types/src/wallet/ProtoWallet.d.ts +10 -10
- package/dist/types/src/wallet/ProtoWallet.d.ts.map +1 -1
- package/dist/types/src/wallet/Wallet.interfaces.d.ts +151 -152
- package/dist/types/src/wallet/Wallet.interfaces.d.ts.map +1 -1
- package/dist/types/src/wallet/WalletClient.d.ts +5 -5
- package/dist/types/src/wallet/WalletClient.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts +6 -6
- package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/HTTPWalletWire.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/WalletWireProcessor.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/WalletWireTransceiver.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/XDM.d.ts +1 -1
- package/dist/types/src/wallet/substrates/XDM.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/window.CWI.d.ts +6 -6
- package/dist/types/src/wallet/substrates/window.CWI.d.ts.map +1 -1
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/dist/umd/bundle.js +1 -1
- package/docs/auth.md +92 -82
- package/docs/compat.md +24 -24
- package/docs/messages.md +7 -5
- package/docs/overlay-tools.md +21 -21
- package/docs/primitives.md +336 -315
- package/docs/script.md +35 -35
- package/docs/swagger/dist/swagger-initializer.js +7 -7
- package/docs/swagger/dist/swagger-ui-bundle.js +1 -1
- package/docs/swagger/dist/swagger-ui-es-bundle-core.js +2 -2
- package/docs/swagger/dist/swagger-ui-es-bundle.js +1 -1
- package/docs/swagger/dist/swagger-ui-standalone-preset.js +1 -1
- package/docs/swagger/dist/swagger-ui.js +2 -2
- package/docs/totp.md +5 -5
- package/docs/transaction.md +103 -105
- package/docs/wallet-substrates.md +17 -17
- package/docs/wallet.md +202 -204
- package/mod.ts +15 -15
- package/package.json +15 -3
- package/src/auth/Peer.ts +271 -121
- package/src/auth/SessionManager.ts +17 -10
- package/src/auth/__tests/Peer.test.ts +361 -179
- package/src/auth/__tests/SessionManager.test.ts +67 -19
- package/src/auth/__tests/build.test.ts +11 -0
- package/src/auth/certificates/Certificate.ts +27 -14
- package/src/auth/certificates/MasterCertificate.ts +106 -62
- package/src/auth/certificates/VerifiableCertificate.ts +30 -8
- package/src/auth/certificates/__tests/Certificate.test.ts +32 -17
- package/src/auth/certificates/__tests/CompletedProtoWallet.ts +171 -68
- package/src/auth/certificates/__tests/MasterCertificate.test.ts +63 -47
- package/src/auth/certificates/__tests/VerifiableCertificate.test.ts +42 -31
- package/src/auth/certificates/index.ts +1 -1
- package/src/auth/clients/AuthFetch.ts +1 -0
- package/src/auth/clients/index.ts +1 -1
- package/src/auth/transports/SimplifiedFetchTransport.ts +145 -72
- package/src/auth/transports/index.ts +1 -1
- package/src/auth/utils/__tests/cryptononce.test.ts +52 -23
- package/src/auth/utils/__tests/getVerifiableCertificates.test.ts +56 -30
- package/src/auth/utils/__tests/validateCertificates.test.ts +53 -31
- package/src/auth/utils/createNonce.ts +11 -3
- package/src/auth/utils/getVerifiableCertificates.ts +12 -7
- package/src/auth/utils/validateCertificates.ts +57 -39
- package/src/auth/utils/verifyNonce.ts +6 -2
- package/src/compat/BSM.ts +10 -2
- package/src/compat/ECIES.ts +265 -141
- package/src/compat/HD.ts +81 -63
- package/src/compat/Mnemonic.ts +104 -91
- package/src/compat/Utxo.ts +8 -5
- package/src/compat/__tests/BSM.test.ts +42 -16
- package/src/compat/__tests/ECIES.test.ts +117 -52
- package/src/compat/__tests/HD.test.ts +55 -42
- package/src/compat/__tests/Mnemonic.test.ts +11 -12
- package/src/compat/__tests/Mnemonic.vectors.ts +110 -55
- package/src/messages/EncryptedMessage.ts +6 -2
- package/src/messages/SignedMessage.ts +14 -8
- package/src/messages/__tests/EncryptedMessage.test.ts +23 -24
- package/src/messages/__tests/SignedMessage.test.ts +17 -11
- package/src/overlay-tools/LookupResolver.ts +108 -56
- package/src/overlay-tools/OverlayAdminTokenTemplate.ts +52 -23
- package/src/overlay-tools/SHIPBroadcaster.ts +135 -59
- package/src/overlay-tools/__tests/LookupResolver.test.ts +723 -323
- package/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.ts +50 -22
- package/src/overlay-tools/__tests/SHIPBroadcaster.test.ts +607 -290
- package/src/primitives/AESGCM.ts +2 -0
- package/src/primitives/BasePoint.ts +4 -4
- package/src/primitives/BigNumber.ts +99 -90
- package/src/primitives/Curve.ts +117 -46
- package/src/primitives/DRBG.ts +9 -11
- package/src/primitives/ECDSA.ts +109 -63
- package/src/primitives/Hash.ts +492 -321
- package/src/primitives/JacobianPoint.ts +67 -19
- package/src/primitives/Point.ts +254 -152
- package/src/primitives/Polynomial.ts +8 -3
- package/src/primitives/PrivateKey.ts +41 -17
- package/src/primitives/PublicKey.ts +13 -3
- package/src/primitives/Random.ts +14 -8
- package/src/primitives/ReductionContext.ts +1 -1
- package/src/primitives/Schnorr.ts +40 -18
- package/src/primitives/Signature.ts +26 -16
- package/src/primitives/SymmetricKey.ts +14 -14
- package/src/primitives/TransactionSignature.ts +41 -17
- package/src/primitives/__tests/AESGCM.test.ts +457 -151
- package/src/primitives/__tests/BRC42.private.vectors.ts +30 -15
- package/src/primitives/__tests/BRC42.public.vectors.ts +30 -15
- package/src/primitives/__tests/BigNumber.arithmatic.test.ts +344 -125
- package/src/primitives/__tests/BigNumber.binary.test.ts +148 -67
- package/src/primitives/__tests/BigNumber.constructor.test.ts +65 -25
- package/src/primitives/__tests/BigNumber.dhGroup.test.ts +15 -11
- package/src/primitives/__tests/BigNumber.fixtures.ts +16 -8
- package/src/primitives/__tests/BigNumber.serializers.test.ts +41 -15
- package/src/primitives/__tests/BigNumber.utils.test.ts +132 -42
- package/src/primitives/__tests/Curve.unit.test.ts +75 -53
- package/src/primitives/__tests/DRBG.test.ts +1 -1
- package/src/primitives/__tests/DRBG.vectors.ts +45 -75
- package/src/primitives/__tests/ECDH.test.ts +15 -8
- package/src/primitives/__tests/ECDSA.test.ts +12 -6
- package/src/primitives/__tests/HMAC.test.ts +24 -18
- package/src/primitives/__tests/Hash.test.ts +57 -46
- package/src/primitives/__tests/PBKDF2.vectors.ts +130 -117
- package/src/primitives/__tests/PrivateKey.split.test.ts +33 -11
- package/src/primitives/__tests/PrivateKey.test.ts +11 -10
- package/src/primitives/__tests/PublicKey.test.ts +64 -53
- package/src/primitives/__tests/Random.test.ts +1 -1
- package/src/primitives/__tests/Reader.test.ts +240 -219
- package/src/primitives/__tests/ReductionContext.test.ts +98 -61
- package/src/primitives/__tests/Schnorr.test.ts +249 -237
- package/src/primitives/__tests/SymmetricKey.test.ts +18 -15
- package/src/primitives/__tests/SymmetricKey.vectors.ts +16 -8
- package/src/primitives/__tests/Writer.test.ts +23 -13
- package/src/primitives/__tests/bug-31.test.ts +6 -10
- package/src/primitives/__tests/utils.test.ts +70 -19
- package/src/primitives/utils.ts +103 -79
- package/src/script/Script.ts +18 -12
- package/src/script/ScriptTemplate.ts +3 -5
- package/src/script/Spend.ts +306 -108
- package/src/script/__tests/Script.test.ts +73 -55
- package/src/script/__tests/Spend.test.ts +208 -83
- package/src/script/__tests/SpendComplex.test.ts +19 -13
- package/src/script/__tests/script.invalid.vectors.ts +428 -1796
- package/src/script/__tests/script.valid.vectors.ts +728 -2764
- package/src/script/templates/P2PKH.ts +34 -12
- package/src/script/templates/PushDrop.ts +65 -31
- package/src/script/templates/RPuzzle.ts +29 -8
- package/src/script/templates/__tests/PushDrop.test.ts +146 -41
- package/src/totp/__tests/totp.test.ts +45 -44
- package/src/totp/totp.ts +3 -2
- package/src/transaction/Beef.ts +269 -174
- package/src/transaction/BeefParty.ts +41 -31
- package/src/transaction/BeefTx.ts +36 -26
- package/src/transaction/Broadcaster.ts +10 -6
- package/src/transaction/ChainTracker.ts +2 -2
- package/src/transaction/FeeModel.ts +0 -1
- package/src/transaction/MerklePath.ts +124 -59
- package/src/transaction/Transaction.ts +188 -187
- package/src/transaction/TransactionOutput.ts +0 -1
- package/src/transaction/__tests/Beef.test.ts +390 -287
- package/src/transaction/__tests/MerklePath.test.ts +59 -26
- package/src/transaction/__tests/Transaction.benchmarks.test.ts +231 -201
- package/src/transaction/__tests/Transaction.test.ts +758 -482
- package/src/transaction/__tests/bigtx.vectors.ts +2 -1
- package/src/transaction/__tests/bump.invalid.vectors.ts +24 -6
- package/src/transaction/__tests/bump.valid.vectors.ts +6 -2
- package/src/transaction/__tests/tx.invalid.vectors.ts +881 -185
- package/src/transaction/__tests/tx.valid.vectors.ts +1210 -257
- package/src/transaction/broadcasters/ARC.ts +69 -38
- package/src/transaction/broadcasters/DefaultBroadcaster.ts +9 -3
- package/src/transaction/broadcasters/WhatsOnChainBroadcaster.ts +20 -7
- package/src/transaction/broadcasters/__tests/ARC.test.ts +127 -59
- package/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.ts +27 -18
- package/src/transaction/chaintrackers/DefaultChainTracker.ts +1 -1
- package/src/transaction/chaintrackers/WhatsOnChain.ts +27 -11
- package/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.ts +59 -23
- package/src/transaction/fee-models/SatoshisPerKilobyte.ts +9 -5
- package/src/transaction/http/DefaultHttpClient.ts +5 -4
- package/src/transaction/http/FetchHttpClient.ts +18 -9
- package/src/transaction/http/HttpClient.ts +27 -22
- package/src/transaction/http/NodejsHttpClient.ts +23 -9
- package/src/transaction/http/index.ts +5 -1
- package/src/transaction/index.ts +5 -1
- package/src/wallet/CachedKeyDeriver.ts +151 -82
- package/src/wallet/KeyDeriver.ts +186 -105
- package/src/wallet/ProtoWallet.ts +121 -52
- package/src/wallet/Wallet.interfaces.ts +167 -156
- package/src/wallet/WalletClient.ts +314 -59
- package/src/wallet/WalletError.ts +2 -2
- package/src/wallet/__tests/CachedKeyDeriver.test.ts +86 -27
- package/src/wallet/__tests/KeyDeriver.test.ts +136 -33
- package/src/wallet/__tests/ProtoWallet.test.ts +190 -102
- package/src/wallet/substrates/HTTPWalletJSON.ts +250 -67
- package/src/wallet/substrates/HTTPWalletWire.ts +7 -3
- package/src/wallet/substrates/WalletWireCalls.ts +2 -2
- package/src/wallet/substrates/WalletWireProcessor.ts +1412 -1277
- package/src/wallet/substrates/WalletWireTransceiver.ts +713 -138
- package/src/wallet/substrates/XDM.ts +425 -36
- package/src/wallet/substrates/__tests/WalletWire.integration.test.ts +488 -225
- package/src/wallet/substrates/__tests/XDM.test.ts +232 -234
- package/src/wallet/substrates/window.CWI.ts +520 -61
|
@@ -20,7 +20,10 @@ export class PointInFiniteField {
|
|
|
20
20
|
|
|
21
21
|
static fromString (str: string): PointInFiniteField {
|
|
22
22
|
const [x, y] = str.split('.')
|
|
23
|
-
return new PointInFiniteField(
|
|
23
|
+
return new PointInFiniteField(
|
|
24
|
+
new BigNumber(fromBase58(x)),
|
|
25
|
+
new BigNumber(fromBase58(y))
|
|
26
|
+
)
|
|
24
27
|
}
|
|
25
28
|
}
|
|
26
29
|
|
|
@@ -45,13 +48,15 @@ export default class Polynomial {
|
|
|
45
48
|
|
|
46
49
|
constructor (points: PointInFiniteField[], threshold?: number) {
|
|
47
50
|
this.points = points
|
|
48
|
-
this.threshold = threshold
|
|
51
|
+
this.threshold = threshold ?? points.length // ✅ Handles undefined safely
|
|
49
52
|
}
|
|
50
53
|
|
|
51
54
|
static fromPrivateKey (key: PrivateKey, threshold: number): Polynomial {
|
|
52
55
|
const P = new Curve().p // arithmetic is mod P
|
|
53
56
|
// The key is the y-intercept of the polynomial where x=0.
|
|
54
|
-
const points = [
|
|
57
|
+
const points = [
|
|
58
|
+
new PointInFiniteField(new BigNumber(0), new BigNumber(key.toArray()))
|
|
59
|
+
]
|
|
55
60
|
|
|
56
61
|
// The other values are random
|
|
57
62
|
for (let i = 1; i < threshold; i++) {
|
|
@@ -6,7 +6,7 @@ import Curve from './Curve.js'
|
|
|
6
6
|
import { sign, verify } from './ECDSA.js'
|
|
7
7
|
import { sha256, sha256hmac } from './Hash.js'
|
|
8
8
|
import Random from './Random.js'
|
|
9
|
-
import { fromBase58Check, toArray,
|
|
9
|
+
import { fromBase58Check, toArray, toBase58Check } from './utils.js'
|
|
10
10
|
import Polynomial, { PointInFiniteField } from './Polynomial.js'
|
|
11
11
|
|
|
12
12
|
/**
|
|
@@ -29,7 +29,11 @@ export class KeyShares {
|
|
|
29
29
|
threshold: number
|
|
30
30
|
integrity: string
|
|
31
31
|
|
|
32
|
-
constructor (
|
|
32
|
+
constructor (
|
|
33
|
+
points: PointInFiniteField[],
|
|
34
|
+
threshold: number,
|
|
35
|
+
integrity: string
|
|
36
|
+
) {
|
|
33
37
|
this.points = points
|
|
34
38
|
this.threshold = threshold
|
|
35
39
|
this.integrity = integrity
|
|
@@ -40,13 +44,20 @@ export class KeyShares {
|
|
|
40
44
|
let integrity = ''
|
|
41
45
|
const points = shares.map((share, idx) => {
|
|
42
46
|
const shareParts = share.split('.')
|
|
43
|
-
if (shareParts.length !== 4)
|
|
47
|
+
if (shareParts.length !== 4) {
|
|
48
|
+
throw new Error(
|
|
49
|
+
'Invalid share format in share ' +
|
|
50
|
+
idx.toString() +
|
|
51
|
+
'. Expected format: "x.y.t.i" - received ' +
|
|
52
|
+
share
|
|
53
|
+
)
|
|
54
|
+
}
|
|
44
55
|
const [x, y, t, i] = shareParts
|
|
45
|
-
if (
|
|
46
|
-
if (
|
|
56
|
+
if (t === undefined) throw new Error('Threshold not found in share ' + idx.toString())
|
|
57
|
+
if (i === undefined) throw new Error('Integrity not found in share ' + idx.toString())
|
|
47
58
|
const tInt = parseInt(t)
|
|
48
|
-
if (idx !== 0 && threshold !== tInt) throw Error('Threshold mismatch in share ' + idx)
|
|
49
|
-
if (idx !== 0 && integrity !== i) throw Error('Integrity mismatch in share ' + idx)
|
|
59
|
+
if (idx !== 0 && threshold !== tInt) { throw new Error('Threshold mismatch in share ' + idx.toString()) }
|
|
60
|
+
if (idx !== 0 && integrity !== i) { throw new Error('Integrity mismatch in share ' + idx.toString()) }
|
|
50
61
|
threshold = tInt
|
|
51
62
|
integrity = i
|
|
52
63
|
return PointInFiniteField.fromString([x, y].join('.'))
|
|
@@ -54,8 +65,10 @@ export class KeyShares {
|
|
|
54
65
|
return new KeyShares(points, threshold, integrity)
|
|
55
66
|
}
|
|
56
67
|
|
|
57
|
-
toBackupFormat () {
|
|
58
|
-
return this.points.map(
|
|
68
|
+
toBackupFormat (): string[] {
|
|
69
|
+
return this.points.map(
|
|
70
|
+
(share) => share.toString() + '.' + this.threshold.toString() + '.' + this.integrity
|
|
71
|
+
)
|
|
59
72
|
}
|
|
60
73
|
}
|
|
61
74
|
|
|
@@ -121,7 +134,7 @@ export default class PrivateKey extends BigNumber {
|
|
|
121
134
|
* @throws Will throw an error if the string is not a valid WIF.
|
|
122
135
|
**/
|
|
123
136
|
static fromWif (wif: string, prefixLength: number = 1): PrivateKey {
|
|
124
|
-
const decoded = fromBase58Check(wif,
|
|
137
|
+
const decoded = fromBase58Check(wif, undefined, prefixLength)
|
|
125
138
|
if (decoded.data.length !== 33) {
|
|
126
139
|
throw new Error('Invalid WIF length')
|
|
127
140
|
}
|
|
@@ -140,7 +153,7 @@ export default class PrivateKey extends BigNumber {
|
|
|
140
153
|
*
|
|
141
154
|
* @param endian - The endianness provided. By default is 'big endian'. Ignored if number is BigNumber.
|
|
142
155
|
*
|
|
143
|
-
* @param modN - Optional. Default 'apply. If 'apply', apply modN to input to guarantee a valid PrivateKey. If 'error', if input is out of field throw Error('Input is out of field'). If 'nocheck', assumes input is in field.
|
|
156
|
+
* @param modN - Optional. Default 'apply. If 'apply', apply modN to input to guarantee a valid PrivateKey. If 'error', if input is out of field throw new Error('Input is out of field'). If 'nocheck', assumes input is in field.
|
|
144
157
|
*
|
|
145
158
|
* @example
|
|
146
159
|
* import PrivateKey from './PrivateKey';
|
|
@@ -204,7 +217,12 @@ export default class PrivateKey extends BigNumber {
|
|
|
204
217
|
* const privateKey = PrivateKey.fromRandom();
|
|
205
218
|
* const signature = privateKey.sign('Hello, World!');
|
|
206
219
|
*/
|
|
207
|
-
sign (
|
|
220
|
+
sign (
|
|
221
|
+
msg: number[] | string,
|
|
222
|
+
enc?: 'hex' | 'utf8',
|
|
223
|
+
forceLowS: boolean = true,
|
|
224
|
+
customK?: ((iter: number) => BigNumber) | BigNumber
|
|
225
|
+
): Signature {
|
|
208
226
|
const msgHash = new BigNumber(sha256(msg, enc), 16)
|
|
209
227
|
return sign(msgHash, this, forceLowS, customK)
|
|
210
228
|
}
|
|
@@ -265,7 +283,9 @@ export default class PrivateKey extends BigNumber {
|
|
|
265
283
|
* const testnetWif = privateKey.toWif([0xef]);
|
|
266
284
|
*/
|
|
267
285
|
toWif (prefix: number[] = [0x80]): string {
|
|
268
|
-
if (!this.isValid()) {
|
|
286
|
+
if (!this.isValid()) {
|
|
287
|
+
throw new Error('Value is out of field')
|
|
288
|
+
}
|
|
269
289
|
return toBase58Check([...this.toArray('be', 32), 1], prefix)
|
|
270
290
|
}
|
|
271
291
|
|
|
@@ -362,14 +382,14 @@ export default class PrivateKey extends BigNumber {
|
|
|
362
382
|
* const shares = key.toKeyShares(2, 5)
|
|
363
383
|
*/
|
|
364
384
|
toKeyShares (threshold: number, totalShares: number): KeyShares {
|
|
365
|
-
if (typeof threshold !== 'number' || typeof totalShares !== 'number') throw new Error('threshold and totalShares must be numbers')
|
|
385
|
+
if (typeof threshold !== 'number' || typeof totalShares !== 'number') { throw new Error('threshold and totalShares must be numbers') }
|
|
366
386
|
if (threshold < 2) throw new Error('threshold must be at least 2')
|
|
367
387
|
if (totalShares < 2) throw new Error('totalShares must be at least 2')
|
|
368
|
-
if (threshold > totalShares) throw new Error('threshold should be less than or equal to totalShares')
|
|
388
|
+
if (threshold > totalShares) { throw new Error('threshold should be less than or equal to totalShares') }
|
|
369
389
|
|
|
370
390
|
const poly = Polynomial.fromPrivateKey(this, threshold)
|
|
371
391
|
|
|
372
|
-
const points = []
|
|
392
|
+
const points: PointInFiniteField[] = []
|
|
373
393
|
for (let i = 0; i < totalShares; i++) {
|
|
374
394
|
const x = new BigNumber(PrivateKey.fromRandom().toArray())
|
|
375
395
|
const y = poly.valueAt(x)
|
|
@@ -427,7 +447,11 @@ export default class PrivateKey extends BigNumber {
|
|
|
427
447
|
static fromKeyShares (keyShares: KeyShares): PrivateKey {
|
|
428
448
|
const { points, threshold, integrity } = keyShares
|
|
429
449
|
if (threshold < 2) throw new Error('threshold must be at least 2')
|
|
430
|
-
if (points.length < threshold)
|
|
450
|
+
if (points.length < threshold) {
|
|
451
|
+
throw new Error(
|
|
452
|
+
`At least ${threshold} shares are required to reconstruct the private key`
|
|
453
|
+
)
|
|
454
|
+
}
|
|
431
455
|
// check to see if two points have the same x value
|
|
432
456
|
for (let i = 0; i < threshold; i++) {
|
|
433
457
|
for (let j = i + 1; j < threshold; j++) {
|
|
@@ -87,7 +87,9 @@ export default class PublicKey extends Point {
|
|
|
87
87
|
// Common gotcha: constructing PublicKey with a DER value when you should use .fromString()
|
|
88
88
|
if (y === null && isRed && typeof x === 'string') {
|
|
89
89
|
if (x.length === 66 || x.length === 130) {
|
|
90
|
-
throw new Error(
|
|
90
|
+
throw new Error(
|
|
91
|
+
'You are using the "new PublicKey()" constructor with a DER hex string. You need to use "PublicKey.fromString()" instead.'
|
|
92
|
+
)
|
|
91
93
|
}
|
|
92
94
|
}
|
|
93
95
|
super(x, y, isRed)
|
|
@@ -129,7 +131,11 @@ export default class PublicKey extends Point {
|
|
|
129
131
|
* const mySignature = new Signature(...)
|
|
130
132
|
* const isVerified = myPubKey.verify(myMessage, mySignature)
|
|
131
133
|
*/
|
|
132
|
-
verify (
|
|
134
|
+
verify (
|
|
135
|
+
msg: number[] | string,
|
|
136
|
+
sig: Signature,
|
|
137
|
+
enc?: 'hex' | 'utf8'
|
|
138
|
+
): boolean {
|
|
133
139
|
const msgHash = new BigNumber(sha256(msg, enc), 16)
|
|
134
140
|
return verify(msgHash, sig, this)
|
|
135
141
|
}
|
|
@@ -225,7 +231,11 @@ export default class PublicKey extends Point {
|
|
|
225
231
|
* @example
|
|
226
232
|
* const publicKey = Signature.fromMsgHashAndCompactSignature(msgHash, 'IMOl2mVKfDgsSsHT4uIYBNN4e...', 'base64');
|
|
227
233
|
*/
|
|
228
|
-
static fromMsgHashAndCompactSignature (
|
|
234
|
+
static fromMsgHashAndCompactSignature (
|
|
235
|
+
msgHash: BigNumber,
|
|
236
|
+
signature: number[] | string,
|
|
237
|
+
enc?: 'hex' | 'base64'
|
|
238
|
+
): PublicKey {
|
|
229
239
|
const data = toArray(signature, enc)
|
|
230
240
|
if (data.length !== 65) {
|
|
231
241
|
throw new Error('Invalid Compact Signature')
|
package/src/primitives/Random.ts
CHANGED
|
@@ -1,29 +1,35 @@
|
|
|
1
1
|
class Rand {
|
|
2
|
-
_rand:
|
|
2
|
+
_rand: (n: number) => number[] // ✅ Explicit function type
|
|
3
|
+
|
|
3
4
|
constructor () {
|
|
4
|
-
const noRand = () => {
|
|
5
|
-
throw new Error(
|
|
5
|
+
const noRand = (): never => {
|
|
6
|
+
throw new Error(
|
|
7
|
+
'No secure random number generator is available in this environment.'
|
|
8
|
+
)
|
|
6
9
|
}
|
|
10
|
+
|
|
11
|
+
this._rand = noRand // Assign the function
|
|
12
|
+
|
|
7
13
|
if (typeof self === 'object') {
|
|
8
14
|
/* eslint-disable-next-line */
|
|
9
15
|
if (self.crypto?.getRandomValues) {
|
|
10
|
-
this._rand = n => {
|
|
16
|
+
this._rand = (n) => {
|
|
11
17
|
const arr = new Uint8Array(n)
|
|
12
18
|
/* eslint-disable-next-line */
|
|
13
|
-
self.crypto.getRandomValues(arr)
|
|
19
|
+
self.crypto.getRandomValues(arr);
|
|
14
20
|
return [...arr]
|
|
15
21
|
}
|
|
16
|
-
}
|
|
22
|
+
} /* if (typeof window === 'object') */ else {
|
|
17
23
|
this._rand = noRand
|
|
18
24
|
}
|
|
19
25
|
} else {
|
|
20
26
|
try {
|
|
21
27
|
/* eslint-disable-next-line */
|
|
22
|
-
const crypto = require(
|
|
28
|
+
const crypto = require("crypto");
|
|
23
29
|
if (typeof crypto.randomBytes === 'function') {
|
|
24
30
|
this._rand = (n: number) => [...crypto.randomBytes(n)]
|
|
25
31
|
}
|
|
26
|
-
} catch
|
|
32
|
+
} catch {
|
|
27
33
|
this._rand = noRand
|
|
28
34
|
}
|
|
29
35
|
}
|
|
@@ -42,14 +42,19 @@ export default class Schnorr {
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
/**
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
generateProof (
|
|
45
|
+
* Generates a proof that demonstrates the link between public key A and shared secret S
|
|
46
|
+
* @param a Private key corresponding to public key A
|
|
47
|
+
* @param A Public key
|
|
48
|
+
* @param B Other party's public key
|
|
49
|
+
* @param S Shared secret
|
|
50
|
+
* @returns Proof (R, S', z)
|
|
51
|
+
*/
|
|
52
|
+
generateProof (
|
|
53
|
+
aArg: PrivateKey,
|
|
54
|
+
AArg: PublicKey,
|
|
55
|
+
BArg: PublicKey,
|
|
56
|
+
S: Point
|
|
57
|
+
): { R: Point, SPrime: Point, z: BigNumber } {
|
|
53
58
|
const r = PrivateKey.fromRandom()
|
|
54
59
|
const R = r.toPublicKey()
|
|
55
60
|
const SPrime = BArg.mul(r)
|
|
@@ -59,14 +64,19 @@ export default class Schnorr {
|
|
|
59
64
|
}
|
|
60
65
|
|
|
61
66
|
/**
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
verifyProof (
|
|
67
|
+
* Verifies the proof of the link between public key A and shared secret S
|
|
68
|
+
* @param A Public key
|
|
69
|
+
* @param B Other party's public key
|
|
70
|
+
* @param S Shared secret
|
|
71
|
+
* @param proof Proof (R, S', z)
|
|
72
|
+
* @returns True if the proof is valid, false otherwise
|
|
73
|
+
*/
|
|
74
|
+
verifyProof (
|
|
75
|
+
A: Point,
|
|
76
|
+
B: Point,
|
|
77
|
+
S: Point,
|
|
78
|
+
proof: { R: Point, SPrime: Point, z: BigNumber }
|
|
79
|
+
): boolean {
|
|
70
80
|
const { R, SPrime, z } = proof
|
|
71
81
|
const e = this.computeChallenge(A, B, S, SPrime, R)
|
|
72
82
|
|
|
@@ -87,8 +97,20 @@ export default class Schnorr {
|
|
|
87
97
|
return true
|
|
88
98
|
}
|
|
89
99
|
|
|
90
|
-
private computeChallenge (
|
|
91
|
-
|
|
100
|
+
private computeChallenge (
|
|
101
|
+
A: Point,
|
|
102
|
+
B: Point,
|
|
103
|
+
S: Point,
|
|
104
|
+
SPrime: Point,
|
|
105
|
+
R: Point
|
|
106
|
+
): BigNumber {
|
|
107
|
+
const message = [
|
|
108
|
+
...A.encode(true),
|
|
109
|
+
...B.encode(true),
|
|
110
|
+
...S.encode(true),
|
|
111
|
+
...SPrime.encode(true),
|
|
112
|
+
...R.encode(true)
|
|
113
|
+
] as number[]
|
|
92
114
|
const hash = sha256(message)
|
|
93
115
|
return new BigNumber(hash).umod(this.curve.n)
|
|
94
116
|
}
|
|
@@ -64,7 +64,7 @@ export default class Signature {
|
|
|
64
64
|
throw new Error('Signature DER must start with 0x30')
|
|
65
65
|
}
|
|
66
66
|
const len = getLength(data, p)
|
|
67
|
-
if (
|
|
67
|
+
if (len + p.place !== data.length) {
|
|
68
68
|
throw new Error('Signature DER invalid')
|
|
69
69
|
}
|
|
70
70
|
if (data[p.place++] !== 0x02) {
|
|
@@ -96,10 +96,7 @@ export default class Signature {
|
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
98
|
|
|
99
|
-
return new Signature(
|
|
100
|
-
new BigNumber(r),
|
|
101
|
-
new BigNumber(s)
|
|
102
|
-
)
|
|
99
|
+
return new Signature(new BigNumber(r), new BigNumber(s))
|
|
103
100
|
}
|
|
104
101
|
|
|
105
102
|
/**
|
|
@@ -120,7 +117,10 @@ export default class Signature {
|
|
|
120
117
|
* @example
|
|
121
118
|
* const signature = Signature.fromCompact('1b18c1f5502f8...', 'hex');
|
|
122
119
|
*/
|
|
123
|
-
static fromCompact (
|
|
120
|
+
static fromCompact (
|
|
121
|
+
data: number[] | string,
|
|
122
|
+
enc?: 'hex' | 'base64'
|
|
123
|
+
): Signature {
|
|
124
124
|
data = toArray(data, enc)
|
|
125
125
|
if (data.length !== 65) {
|
|
126
126
|
throw new Error('Invalid Compact Signature')
|
|
@@ -189,7 +189,7 @@ export default class Signature {
|
|
|
189
189
|
* @example
|
|
190
190
|
* const der = signature.toString('base64');
|
|
191
191
|
*/
|
|
192
|
-
toString (enc?: 'hex' | 'base64') {
|
|
192
|
+
toString (enc?: 'hex' | 'base64'): number[] | string {
|
|
193
193
|
return this.toDER(enc)
|
|
194
194
|
}
|
|
195
195
|
|
|
@@ -219,7 +219,7 @@ export default class Signature {
|
|
|
219
219
|
const rmPadding = (buf: number[]): number[] => {
|
|
220
220
|
let i = 0
|
|
221
221
|
const len = buf.length - 1
|
|
222
|
-
while (
|
|
222
|
+
while (buf[i] === 0 && (buf[i + 1] & 0x80) === 0 && i < len) {
|
|
223
223
|
i++
|
|
224
224
|
}
|
|
225
225
|
if (i === 0) {
|
|
@@ -232,14 +232,18 @@ export default class Signature {
|
|
|
232
232
|
let s = this.s.toArray()
|
|
233
233
|
|
|
234
234
|
// Pad values
|
|
235
|
-
if ((r[0] & 0x80) !== 0) {
|
|
235
|
+
if ((r[0] & 0x80) !== 0) {
|
|
236
|
+
r = [0].concat(r)
|
|
237
|
+
}
|
|
236
238
|
// Pad values
|
|
237
|
-
if ((s[0] & 0x80) !== 0) {
|
|
239
|
+
if ((s[0] & 0x80) !== 0) {
|
|
240
|
+
s = [0].concat(s)
|
|
241
|
+
}
|
|
238
242
|
|
|
239
243
|
r = rmPadding(r)
|
|
240
244
|
s = rmPadding(s)
|
|
241
245
|
|
|
242
|
-
while (
|
|
246
|
+
while (s[0] === 0 && (s[1] & 0x80) === 0) {
|
|
243
247
|
s = s.slice(1)
|
|
244
248
|
}
|
|
245
249
|
let arr = [0x02]
|
|
@@ -274,9 +278,15 @@ export default class Signature {
|
|
|
274
278
|
* @example
|
|
275
279
|
* const compact = signature.toCompact(3, true, 'base64');
|
|
276
280
|
*/
|
|
277
|
-
toCompact (
|
|
281
|
+
toCompact (
|
|
282
|
+
recovery: number,
|
|
283
|
+
compressed: boolean,
|
|
284
|
+
enc?: 'hex' | 'base64'
|
|
285
|
+
): number[] | string {
|
|
278
286
|
if (recovery < 0 || recovery > 3) throw new Error('Invalid recovery param')
|
|
279
|
-
if (typeof compressed !== 'boolean')
|
|
287
|
+
if (typeof compressed !== 'boolean') {
|
|
288
|
+
throw new Error('Invalid compressed param')
|
|
289
|
+
}
|
|
280
290
|
let compactByte = 27 + recovery
|
|
281
291
|
if (compressed) {
|
|
282
292
|
compactByte += 4
|
|
@@ -311,7 +321,7 @@ export default class Signature {
|
|
|
311
321
|
const s = this.s
|
|
312
322
|
|
|
313
323
|
// A set LSB signifies that the y-coordinate is odd
|
|
314
|
-
const isYOdd =
|
|
324
|
+
const isYOdd = (recovery & 1) !== 0
|
|
315
325
|
|
|
316
326
|
// The more significant bit specifies whether we should use the
|
|
317
327
|
// first or second candidate key.
|
|
@@ -322,7 +332,7 @@ export default class Signature {
|
|
|
322
332
|
const G = curve.g
|
|
323
333
|
|
|
324
334
|
// 1.1 LEt x = r + jn
|
|
325
|
-
const x = isSecondKey ? r.add(n) : r
|
|
335
|
+
const x = isSecondKey !== 0 ? r.add(n) : r
|
|
326
336
|
const R = Point.fromX(x, isYOdd)
|
|
327
337
|
|
|
328
338
|
// 1.4 Check that nR is at infinity
|
|
@@ -367,7 +377,7 @@ export default class Signature {
|
|
|
367
377
|
let Qprime
|
|
368
378
|
try {
|
|
369
379
|
Qprime = this.RecoverPublicKey(recovery, msgHash)
|
|
370
|
-
} catch
|
|
380
|
+
} catch {
|
|
371
381
|
continue
|
|
372
382
|
}
|
|
373
383
|
if (pubkey.eq(Qprime)) {
|
|
@@ -27,19 +27,19 @@ export default class SymmetricKey extends BigNumber {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
30
|
+
* Encrypts a given message using AES-GCM encryption.
|
|
31
|
+
* The generated Initialization Vector (IV) is attached to the encrypted message for decryption purposes.
|
|
32
|
+
* The OpenSSL format of |IV|encryptedContent|authTag| is used.
|
|
33
|
+
*
|
|
34
|
+
* @method encrypt
|
|
35
|
+
* @param msg - The message to be encrypted. It can be a string or an array of numbers.
|
|
36
|
+
* @param enc - optional. The encoding of the message. If hex, the string is assumed to be hex, UTF-8 otherwise.
|
|
37
|
+
* @returns Returns the encrypted message as a string or an array of numbers, depending on `enc` argument.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* const key = new SymmetricKey(1234);
|
|
41
|
+
* const encryptedMessage = key.encrypt('plainText', 'utf8');
|
|
42
|
+
*/
|
|
43
43
|
encrypt (msg: number[] | string, enc?: 'hex'): string | number[] {
|
|
44
44
|
const iv = Random(32)
|
|
45
45
|
msg = toArray(msg, enc)
|
|
@@ -69,7 +69,7 @@ export default class SymmetricKey extends BigNumber {
|
|
|
69
69
|
* @throws {Error} Will throw an error if the decryption fails, likely due to message tampering or incorrect decryption key.
|
|
70
70
|
*/
|
|
71
71
|
decrypt (msg: number[] | string, enc?: 'hex' | 'utf8'): string | number[] {
|
|
72
|
-
msg = toArray(msg, enc)
|
|
72
|
+
msg = toArray(msg, enc)
|
|
73
73
|
const iv = msg.slice(0, 32)
|
|
74
74
|
const ciphertextWithTag = msg.slice(32)
|
|
75
75
|
const messageTag = ciphertextWithTag.slice(-16)
|
|
@@ -38,8 +38,12 @@ export default class TransactionSignature extends Signature {
|
|
|
38
38
|
|
|
39
39
|
const getPrevoutHash = (): number[] => {
|
|
40
40
|
const writer = new Writer()
|
|
41
|
+
|
|
41
42
|
for (const input of inputs) {
|
|
42
43
|
if (typeof input.sourceTXID === 'undefined') {
|
|
44
|
+
if (input.sourceTransaction == null) {
|
|
45
|
+
throw new Error('Missing sourceTransaction for input')
|
|
46
|
+
}
|
|
43
47
|
writer.write(input.sourceTransaction.hash() as number[])
|
|
44
48
|
} else {
|
|
45
49
|
writer.writeReverse(toArray(input.sourceTXID, 'hex'))
|
|
@@ -56,7 +60,8 @@ export default class TransactionSignature extends Signature {
|
|
|
56
60
|
const writer = new Writer()
|
|
57
61
|
|
|
58
62
|
for (const input of inputs) {
|
|
59
|
-
|
|
63
|
+
const sequence = input.sequence ?? 0xffffffff // Default to max sequence number
|
|
64
|
+
writer.writeUInt32LE(sequence)
|
|
60
65
|
}
|
|
61
66
|
|
|
62
67
|
const buf = writer.toArray()
|
|
@@ -68,17 +73,25 @@ export default class TransactionSignature extends Signature {
|
|
|
68
73
|
const writer = new Writer()
|
|
69
74
|
|
|
70
75
|
if (typeof outputIndex === 'undefined') {
|
|
71
|
-
let script: number[]
|
|
72
76
|
for (const output of params.outputs) {
|
|
73
|
-
|
|
74
|
-
|
|
77
|
+
const satoshis = output.satoshis ?? 0 // Default to 0 if undefined
|
|
78
|
+
writer.writeUInt64LE(satoshis)
|
|
79
|
+
|
|
80
|
+
const script = output.lockingScript?.toBinary() ?? []
|
|
75
81
|
writer.writeVarIntNum(script.length)
|
|
76
82
|
writer.write(script)
|
|
77
83
|
}
|
|
78
84
|
} else {
|
|
79
85
|
const output = params.outputs[outputIndex]
|
|
80
|
-
|
|
81
|
-
|
|
86
|
+
|
|
87
|
+
if (output === undefined) { // ✅ Explicitly check for undefined
|
|
88
|
+
throw new Error(`Output at index ${outputIndex} does not exist`)
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const satoshis = output.satoshis ?? 0 // Default to 0 if undefined
|
|
92
|
+
writer.writeUInt64LE(satoshis)
|
|
93
|
+
|
|
94
|
+
const script = output.lockingScript?.toBinary() ?? []
|
|
82
95
|
writer.writeVarIntNum(script.length)
|
|
83
96
|
writer.write(script)
|
|
84
97
|
}
|
|
@@ -96,15 +109,23 @@ export default class TransactionSignature extends Signature {
|
|
|
96
109
|
hashPrevouts = getPrevoutHash()
|
|
97
110
|
}
|
|
98
111
|
|
|
99
|
-
if (
|
|
112
|
+
if (
|
|
113
|
+
(params.scope & TransactionSignature.SIGHASH_ANYONECANPAY) === 0 &&
|
|
100
114
|
(params.scope & 31) !== TransactionSignature.SIGHASH_SINGLE &&
|
|
101
|
-
(params.scope & 31) !== TransactionSignature.SIGHASH_NONE
|
|
115
|
+
(params.scope & 31) !== TransactionSignature.SIGHASH_NONE
|
|
116
|
+
) {
|
|
102
117
|
hashSequence = getSequenceHash()
|
|
103
118
|
}
|
|
104
119
|
|
|
105
|
-
if (
|
|
120
|
+
if (
|
|
121
|
+
(params.scope & 31) !== TransactionSignature.SIGHASH_SINGLE &&
|
|
122
|
+
(params.scope & 31) !== TransactionSignature.SIGHASH_NONE
|
|
123
|
+
) {
|
|
106
124
|
hashOutputs = getOutputsHash()
|
|
107
|
-
} else if (
|
|
125
|
+
} else if (
|
|
126
|
+
(params.scope & 31) === TransactionSignature.SIGHASH_SINGLE &&
|
|
127
|
+
params.inputIndex < params.outputs.length
|
|
128
|
+
) {
|
|
108
129
|
hashOutputs = getOutputsHash(params.inputIndex)
|
|
109
130
|
}
|
|
110
131
|
|
|
@@ -167,16 +188,19 @@ export default class TransactionSignature extends Signature {
|
|
|
167
188
|
}
|
|
168
189
|
|
|
169
190
|
/**
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
191
|
+
* Compares to bitcoind's IsLowDERSignature
|
|
192
|
+
* See also Ecdsa signature algorithm which enforces this.
|
|
193
|
+
* See also Bip 62, "low S values in signatures"
|
|
194
|
+
*/
|
|
174
195
|
public hasLowS (): boolean {
|
|
175
196
|
if (
|
|
176
197
|
this.s.ltn(1) ||
|
|
177
|
-
this.s.gt(
|
|
178
|
-
|
|
179
|
-
|
|
198
|
+
this.s.gt(
|
|
199
|
+
new BigNumber(
|
|
200
|
+
'7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0',
|
|
201
|
+
'hex'
|
|
202
|
+
)
|
|
203
|
+
)
|
|
180
204
|
) {
|
|
181
205
|
return false
|
|
182
206
|
}
|