@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
package/src/primitives/Curve.ts
CHANGED
|
@@ -23,13 +23,13 @@ export default class Curve {
|
|
|
23
23
|
tinv: BigNumber
|
|
24
24
|
zeroA: boolean
|
|
25
25
|
threeA: boolean
|
|
26
|
-
endo:
|
|
27
|
-
_endoWnafT1:
|
|
28
|
-
_endoWnafT2:
|
|
29
|
-
_wnafT1:
|
|
30
|
-
_wnafT2:
|
|
31
|
-
_wnafT3:
|
|
32
|
-
_wnafT4:
|
|
26
|
+
endo: { beta: BigNumber, lambda: BigNumber, basis: Array<{ a: BigNumber, b: BigNumber }> } | undefined // beta, lambda, basis
|
|
27
|
+
_endoWnafT1: BigNumber[]
|
|
28
|
+
_endoWnafT2: BigNumber[]
|
|
29
|
+
_wnafT1: BigNumber[]
|
|
30
|
+
_wnafT2: BigNumber[]
|
|
31
|
+
_wnafT3: BigNumber[]
|
|
32
|
+
_wnafT4: BigNumber[]
|
|
33
33
|
_bitLength: number
|
|
34
34
|
|
|
35
35
|
// Represent num in a w-NAF form
|
|
@@ -53,7 +53,11 @@ export default class Curve {
|
|
|
53
53
|
let z
|
|
54
54
|
const mod = k.andln(ws - 1)
|
|
55
55
|
if (k.isOdd()) {
|
|
56
|
-
if (mod > (ws >> 1) - 1) {
|
|
56
|
+
if (mod > (ws >> 1) - 1) {
|
|
57
|
+
z = (ws >> 1) - mod
|
|
58
|
+
} else {
|
|
59
|
+
z = mod
|
|
60
|
+
}
|
|
57
61
|
k.isubn(z)
|
|
58
62
|
} else {
|
|
59
63
|
z = 0
|
|
@@ -68,10 +72,7 @@ export default class Curve {
|
|
|
68
72
|
|
|
69
73
|
// Represent k1, k2 in a Joint Sparse Form
|
|
70
74
|
getJSF (k1: BigNumber, k2: BigNumber): number[][] {
|
|
71
|
-
const jsf:
|
|
72
|
-
[],
|
|
73
|
-
[]
|
|
74
|
-
]
|
|
75
|
+
const jsf: number[][] = [[], []]
|
|
75
76
|
|
|
76
77
|
k1 = k1.clone()
|
|
77
78
|
k2 = k2.clone()
|
|
@@ -81,8 +82,12 @@ export default class Curve {
|
|
|
81
82
|
// First phase
|
|
82
83
|
let m14 = (k1.andln(3) + d1) & 3
|
|
83
84
|
let m24 = (k2.andln(3) + d2) & 3
|
|
84
|
-
if (m14 === 3) {
|
|
85
|
-
|
|
85
|
+
if (m14 === 3) {
|
|
86
|
+
m14 = -1
|
|
87
|
+
}
|
|
88
|
+
if (m24 === 3) {
|
|
89
|
+
m24 = -1
|
|
90
|
+
}
|
|
86
91
|
let u1: number
|
|
87
92
|
if ((m14 & 1) === 0) {
|
|
88
93
|
u1 = 0
|
|
@@ -101,13 +106,21 @@ export default class Curve {
|
|
|
101
106
|
u2 = 0
|
|
102
107
|
} else {
|
|
103
108
|
const m8 = (k2.andln(7) + d2) & 7
|
|
104
|
-
if ((m8 === 3 || m8 === 5) && m14 === 2) {
|
|
109
|
+
if ((m8 === 3 || m8 === 5) && m14 === 2) {
|
|
110
|
+
u2 = -m24
|
|
111
|
+
} else {
|
|
112
|
+
u2 = m24
|
|
113
|
+
}
|
|
105
114
|
}
|
|
106
115
|
jsf[1].push(u2)
|
|
107
116
|
|
|
108
117
|
// Second phase
|
|
109
|
-
if (2 * d1 === u1 + 1) {
|
|
110
|
-
|
|
118
|
+
if (2 * d1 === u1 + 1) {
|
|
119
|
+
d1 = 1 - d1
|
|
120
|
+
}
|
|
121
|
+
if (2 * d2 === u2 + 1) {
|
|
122
|
+
d2 = 1 - d2
|
|
123
|
+
}
|
|
111
124
|
k1.iushrn(1)
|
|
112
125
|
k2.iushrn(1)
|
|
113
126
|
}
|
|
@@ -118,17 +131,14 @@ export default class Curve {
|
|
|
118
131
|
static cachedProperty (obj, name: string, computer): void {
|
|
119
132
|
const key = '_' + name
|
|
120
133
|
obj.prototype[name] = function cachedProperty () {
|
|
121
|
-
const r =
|
|
122
|
-
? this[key]
|
|
123
|
-
: this[key] = computer.call(this)
|
|
134
|
+
const r =
|
|
135
|
+
this[key] !== undefined ? this[key] : (this[key] = computer.call(this))
|
|
124
136
|
return r
|
|
125
137
|
}
|
|
126
138
|
}
|
|
127
139
|
|
|
128
140
|
static parseBytes (bytes: string | number[]): number[] {
|
|
129
|
-
return typeof bytes === 'string'
|
|
130
|
-
? toArray(bytes, 'hex')
|
|
131
|
-
: bytes
|
|
141
|
+
return typeof bytes === 'string' ? toArray(bytes, 'hex') : bytes
|
|
132
142
|
}
|
|
133
143
|
|
|
134
144
|
static intFromLE (bytes: number[]): BigNumber {
|
|
@@ -933,7 +943,8 @@ export default class Curve {
|
|
|
933
943
|
|
|
934
944
|
// Precomputed endomorphism
|
|
935
945
|
beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
|
|
936
|
-
lambda:
|
|
946
|
+
lambda:
|
|
947
|
+
'5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
|
|
937
948
|
basis: [
|
|
938
949
|
{
|
|
939
950
|
a: '3086d221a7d46bcde86c90e49284eb15',
|
|
@@ -965,7 +976,7 @@ export default class Curve {
|
|
|
965
976
|
|
|
966
977
|
// Curve configuration, optional
|
|
967
978
|
this.n = new BigNumber(conf.n, 16)
|
|
968
|
-
this.g = Point.fromJSON(conf.g, conf.gRed)
|
|
979
|
+
this.g = Point.fromJSON(conf.g as [string, string, { doubles?: { step: number, points: Array<[string, string]> }, naf?: { wnd: number, points: Array<[string, string]> } }], conf.gRed)
|
|
969
980
|
|
|
970
981
|
// Temporary arrays
|
|
971
982
|
this._wnafT1 = new Array(4)
|
|
@@ -988,35 +999,70 @@ export default class Curve {
|
|
|
988
999
|
this._endoWnafT2 = new Array(4)
|
|
989
1000
|
}
|
|
990
1001
|
|
|
991
|
-
_getEndomorphism (conf):
|
|
1002
|
+
_getEndomorphism (conf):
|
|
1003
|
+
| {
|
|
992
1004
|
beta: BigNumber
|
|
993
1005
|
lambda: BigNumber
|
|
994
1006
|
basis: Array<{ a: BigNumber, b: BigNumber }>
|
|
995
|
-
}
|
|
1007
|
+
}
|
|
1008
|
+
| undefined {
|
|
996
1009
|
// No efficient endomorphism
|
|
997
|
-
if (!this.zeroA || this.p.modrn(3) !== 1) {
|
|
1010
|
+
if (!this.zeroA || this.p.modrn(3) !== 1) {
|
|
1011
|
+
return
|
|
1012
|
+
}
|
|
998
1013
|
|
|
999
1014
|
// Compute beta and lambda, that lambda * P = (beta * Px; Py)
|
|
1000
1015
|
let beta: BigNumber
|
|
1001
1016
|
let lambda: BigNumber
|
|
1017
|
+
|
|
1002
1018
|
if (conf.beta !== undefined) {
|
|
1003
1019
|
beta = new BigNumber(conf.beta, 16).toRed(this.red)
|
|
1004
1020
|
} else {
|
|
1005
1021
|
const betas = this._getEndoRoots(this.p)
|
|
1022
|
+
if (betas === null) {
|
|
1023
|
+
throw new Error('Failed to get endomorphism roots for beta.')
|
|
1024
|
+
}
|
|
1006
1025
|
// Choose the smallest beta
|
|
1007
1026
|
beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1]
|
|
1008
1027
|
beta = beta.toRed(this.red)
|
|
1009
1028
|
}
|
|
1029
|
+
|
|
1010
1030
|
if (conf.lambda !== undefined) {
|
|
1011
1031
|
lambda = new BigNumber(conf.lambda, 16)
|
|
1012
1032
|
} else {
|
|
1013
|
-
// Choose the lambda that
|
|
1033
|
+
// Choose the lambda that matches selected beta
|
|
1014
1034
|
const lambdas = this._getEndoRoots(this.n)
|
|
1015
|
-
if (
|
|
1035
|
+
if (lambdas === null) {
|
|
1036
|
+
throw new Error('Failed to get endomorphism roots for lambda.')
|
|
1037
|
+
}
|
|
1038
|
+
|
|
1039
|
+
if (this.g == null) {
|
|
1040
|
+
throw new Error('Curve generator point (g) is not defined.')
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1043
|
+
const gMulX = this.g.mul(lambdas[0])?.x
|
|
1044
|
+
const gXRedMulBeta = (this.g.x != null) ? this.g.x.redMul(beta) : undefined
|
|
1045
|
+
|
|
1046
|
+
if ((gMulX != null) && (gXRedMulBeta != null) && gMulX.cmp(gXRedMulBeta) === 0) {
|
|
1016
1047
|
lambda = lambdas[0]
|
|
1017
1048
|
} else {
|
|
1018
1049
|
lambda = lambdas[1]
|
|
1019
|
-
|
|
1050
|
+
|
|
1051
|
+
if (this.g == null) {
|
|
1052
|
+
throw new Error('Curve generator point (g) is not defined.')
|
|
1053
|
+
}
|
|
1054
|
+
|
|
1055
|
+
const gMulX = this.g.mul(lambda)?.x
|
|
1056
|
+
const gXRedMulBeta = (this.g.x != null) ? this.g.x.redMul(beta) : undefined
|
|
1057
|
+
|
|
1058
|
+
if ((gMulX == null) || (gXRedMulBeta == null)) {
|
|
1059
|
+
throw new Error('Lambda computation failed: g.mul(lambda).x or g.x.redMul(beta) is undefined.')
|
|
1060
|
+
}
|
|
1061
|
+
|
|
1062
|
+
Curve.assert(
|
|
1063
|
+
gMulX.cmp(gXRedMulBeta) === 0,
|
|
1064
|
+
'Lambda selection does not match computed beta.'
|
|
1065
|
+
)
|
|
1020
1066
|
}
|
|
1021
1067
|
}
|
|
1022
1068
|
|
|
@@ -1038,7 +1084,7 @@ export default class Curve {
|
|
|
1038
1084
|
lambda,
|
|
1039
1085
|
basis
|
|
1040
1086
|
}
|
|
1041
|
-
}
|
|
1087
|
+
}
|
|
1042
1088
|
|
|
1043
1089
|
_getEndoRoots (num: BigNumber): [BigNumber, BigNumber] {
|
|
1044
1090
|
// Find roots of for x^2 + x + 1 in F
|
|
@@ -1053,9 +1099,11 @@ export default class Curve {
|
|
|
1053
1099
|
const l1 = ntinv.redAdd(s).fromRed()
|
|
1054
1100
|
const l2 = ntinv.redSub(s).fromRed()
|
|
1055
1101
|
return [l1, l2]
|
|
1056
|
-
}
|
|
1102
|
+
}
|
|
1057
1103
|
|
|
1058
|
-
_getEndoBasis (
|
|
1104
|
+
_getEndoBasis (
|
|
1105
|
+
lambda: BigNumber
|
|
1106
|
+
): [{ a: BigNumber, b: BigNumber }, { a: BigNumber, b: BigNumber }] {
|
|
1059
1107
|
// aprxSqrt >= sqrt(this.n)
|
|
1060
1108
|
const aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2))
|
|
1061
1109
|
|
|
@@ -1069,31 +1117,32 @@ export default class Curve {
|
|
|
1069
1117
|
let y2 = new BigNumber(1)
|
|
1070
1118
|
|
|
1071
1119
|
// NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
|
|
1072
|
-
let a0: BigNumber
|
|
1073
|
-
let b0: BigNumber
|
|
1120
|
+
let a0: BigNumber | undefined
|
|
1121
|
+
let b0: BigNumber | undefined
|
|
1074
1122
|
// First vector
|
|
1075
|
-
let a1: BigNumber
|
|
1076
|
-
let b1: BigNumber
|
|
1123
|
+
let a1: BigNumber | undefined
|
|
1124
|
+
let b1: BigNumber | undefined
|
|
1077
1125
|
// Second vector
|
|
1078
1126
|
let a2: BigNumber
|
|
1079
1127
|
let b2: BigNumber
|
|
1080
1128
|
|
|
1081
|
-
let prevR
|
|
1129
|
+
let prevR: BigNumber = new BigNumber(0)
|
|
1082
1130
|
let i = 0
|
|
1083
|
-
let r
|
|
1084
|
-
let x
|
|
1131
|
+
let r: BigNumber = new BigNumber(0)
|
|
1132
|
+
let x: BigNumber = new BigNumber(0) // Ensure x is initialized
|
|
1133
|
+
|
|
1085
1134
|
while (u.cmpn(0) !== 0) {
|
|
1086
1135
|
const q = v.div(u)
|
|
1087
1136
|
r = v.sub(q.mul(u))
|
|
1088
|
-
x = x2.sub(q.mul(x1))
|
|
1137
|
+
x = x2.sub(q.mul(x1)) // Now TypeScript knows x is always assigned
|
|
1089
1138
|
const y = y2.sub(q.mul(y1))
|
|
1090
1139
|
|
|
1091
|
-
if (
|
|
1140
|
+
if (a1 === undefined && r.cmp(aprxSqrt) < 0) {
|
|
1092
1141
|
a0 = prevR.neg()
|
|
1093
1142
|
b0 = x1
|
|
1094
1143
|
a1 = r.neg()
|
|
1095
1144
|
b1 = x
|
|
1096
|
-
} else if (
|
|
1145
|
+
} else if (a1 !== undefined && ++i === 2) {
|
|
1097
1146
|
break
|
|
1098
1147
|
}
|
|
1099
1148
|
prevR = r
|
|
@@ -1105,11 +1154,23 @@ export default class Curve {
|
|
|
1105
1154
|
y2 = y1
|
|
1106
1155
|
y1 = y
|
|
1107
1156
|
}
|
|
1157
|
+
|
|
1158
|
+
// Ensure a0 and b0 have been assigned
|
|
1159
|
+
if (
|
|
1160
|
+
a0 === undefined ||
|
|
1161
|
+
b0 === undefined ||
|
|
1162
|
+
a1 === undefined ||
|
|
1163
|
+
b1 === undefined
|
|
1164
|
+
) {
|
|
1165
|
+
throw new Error('Failed to compute Endo Basis values')
|
|
1166
|
+
}
|
|
1167
|
+
|
|
1108
1168
|
a2 = r.neg()
|
|
1109
1169
|
b2 = x
|
|
1110
1170
|
|
|
1111
1171
|
const len1 = a1.sqr().add(b1.sqr())
|
|
1112
1172
|
const len2 = a2.sqr().add(b2.sqr())
|
|
1173
|
+
|
|
1113
1174
|
if (len2.cmp(len1) >= 0) {
|
|
1114
1175
|
a2 = a0
|
|
1115
1176
|
b2 = b0
|
|
@@ -1132,6 +1193,9 @@ export default class Curve {
|
|
|
1132
1193
|
}
|
|
1133
1194
|
|
|
1134
1195
|
_endoSplit (k: BigNumber): { k1: BigNumber, k2: BigNumber } {
|
|
1196
|
+
if (this.endo == null) {
|
|
1197
|
+
throw new Error('Endomorphism is not defined.')
|
|
1198
|
+
}
|
|
1135
1199
|
const basis = this.endo.basis
|
|
1136
1200
|
const v1 = basis[0]
|
|
1137
1201
|
const v2 = basis[1]
|
|
@@ -1151,13 +1215,20 @@ export default class Curve {
|
|
|
1151
1215
|
}
|
|
1152
1216
|
|
|
1153
1217
|
validate (point: Point): boolean {
|
|
1154
|
-
if (point.inf) {
|
|
1218
|
+
if (point.inf) {
|
|
1219
|
+
return true
|
|
1220
|
+
}
|
|
1155
1221
|
|
|
1156
1222
|
const x = point.x
|
|
1157
1223
|
const y = point.y
|
|
1158
1224
|
|
|
1225
|
+
// Ensure x and y are not null before proceeding
|
|
1226
|
+
if (x === null || y === null) {
|
|
1227
|
+
throw new Error('Point coordinates cannot be null')
|
|
1228
|
+
}
|
|
1229
|
+
|
|
1159
1230
|
const ax = this.a.redMul(x)
|
|
1160
1231
|
const rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b)
|
|
1161
1232
|
return y.redSqr().redISub(rhs).cmpn(0) === 0
|
|
1162
|
-
}
|
|
1233
|
+
}
|
|
1163
1234
|
}
|
package/src/primitives/DRBG.ts
CHANGED
|
@@ -61,19 +61,17 @@ export default class DRBG {
|
|
|
61
61
|
* drbg.update('e13af...');
|
|
62
62
|
*/
|
|
63
63
|
update (seed?): void {
|
|
64
|
-
let kmac = this.hmac()
|
|
65
|
-
|
|
66
|
-
.update(
|
|
67
|
-
|
|
64
|
+
let kmac = this.hmac().update(this.V).update([0x00])
|
|
65
|
+
if (seed !== undefined) {
|
|
66
|
+
kmac = kmac.update(seed)
|
|
67
|
+
}
|
|
68
68
|
this.K = kmac.digest()
|
|
69
69
|
this.V = this.hmac().update(this.V).digest()
|
|
70
|
-
if (seed === undefined) {
|
|
70
|
+
if (seed === undefined) {
|
|
71
|
+
return
|
|
72
|
+
}
|
|
71
73
|
|
|
72
|
-
this.K = this.hmac()
|
|
73
|
-
.update(this.V)
|
|
74
|
-
.update([0x01])
|
|
75
|
-
.update(seed)
|
|
76
|
-
.digest()
|
|
74
|
+
this.K = this.hmac().update(this.V).update([0x01]).update(seed).digest()
|
|
77
75
|
this.V = this.hmac().update(this.V).digest()
|
|
78
76
|
}
|
|
79
77
|
|
|
@@ -89,7 +87,7 @@ export default class DRBG {
|
|
|
89
87
|
* const randomHex = drbg.generate(256);
|
|
90
88
|
*/
|
|
91
89
|
generate (len: number): string {
|
|
92
|
-
let temp = []
|
|
90
|
+
let temp: number[] = []
|
|
93
91
|
while (temp.length < len) {
|
|
94
92
|
this.V = this.hmac().update(this.V).digest()
|
|
95
93
|
temp = temp.concat(this.V)
|
package/src/primitives/ECDSA.ts
CHANGED
|
@@ -23,10 +23,16 @@ import DRBG from './DRBG.js'
|
|
|
23
23
|
* let msg = new BigNumber('1234567890abcdef', 16);
|
|
24
24
|
* let truncatedMsg = truncateToN(msg);
|
|
25
25
|
*/
|
|
26
|
-
function truncateToN (
|
|
26
|
+
function truncateToN (
|
|
27
|
+
msg: BigNumber,
|
|
28
|
+
truncOnly?: boolean,
|
|
29
|
+
curve = new Curve()
|
|
30
|
+
): BigNumber {
|
|
27
31
|
const delta = msg.byteLength() * 8 - curve.n.bitLength()
|
|
28
|
-
if (delta > 0) {
|
|
29
|
-
|
|
32
|
+
if (delta > 0) {
|
|
33
|
+
msg.iushrn(delta)
|
|
34
|
+
}
|
|
35
|
+
if (truncOnly === null && msg.cmp(curve.n) >= 0) {
|
|
30
36
|
return msg.sub(curve.n)
|
|
31
37
|
} else {
|
|
32
38
|
return msg
|
|
@@ -48,7 +54,12 @@ function truncateToN (msg: BigNumber, truncOnly?: boolean, curve = new Curve()):
|
|
|
48
54
|
* const key = new BigNumber('123456')
|
|
49
55
|
* const signature = sign(msg, key)
|
|
50
56
|
*/
|
|
51
|
-
export const sign = (
|
|
57
|
+
export const sign = (
|
|
58
|
+
msg: BigNumber,
|
|
59
|
+
key: BigNumber,
|
|
60
|
+
forceLowS: boolean = false,
|
|
61
|
+
customK?: BigNumber | ((iter: number) => BigNumber)
|
|
62
|
+
): Signature => {
|
|
52
63
|
if (typeof BigInt === 'function') {
|
|
53
64
|
// Curve parameters for secp256k1
|
|
54
65
|
const zero = BigInt(0)
|
|
@@ -103,7 +114,11 @@ export const sign = (msg: BigNumber, key: BigNumber, forceLowS: boolean = false,
|
|
|
103
114
|
let iter = 0
|
|
104
115
|
|
|
105
116
|
// Truncate to N function for BigInt
|
|
106
|
-
function truncateToN (
|
|
117
|
+
function truncateToN (
|
|
118
|
+
k: bigint,
|
|
119
|
+
n: bigint,
|
|
120
|
+
truncOnly: boolean = true
|
|
121
|
+
): bigint {
|
|
107
122
|
const kBitLength = k.toString(2).length
|
|
108
123
|
const nBitLength = n.toString(2).length
|
|
109
124
|
const delta = kBitLength - nBitLength
|
|
@@ -117,21 +132,23 @@ export const sign = (msg: BigNumber, key: BigNumber, forceLowS: boolean = false,
|
|
|
117
132
|
}
|
|
118
133
|
}
|
|
119
134
|
|
|
120
|
-
function generateK (
|
|
135
|
+
function generateK (
|
|
136
|
+
customK?: BigNumber | ((iter: number) => BigNumber)
|
|
137
|
+
): bigint {
|
|
121
138
|
if (typeof customK === 'function') {
|
|
122
139
|
// Call customK function to get k as BigNumber
|
|
123
|
-
const
|
|
140
|
+
const kbn = customK(iter)
|
|
124
141
|
// Convert k_bn (BigNumber) to BigInt
|
|
125
|
-
const
|
|
126
|
-
return BigInt('0x' +
|
|
127
|
-
} else if (BigNumber.isBN(customK)) {
|
|
142
|
+
const kstr = kbn.toString(16)
|
|
143
|
+
return BigInt('0x' + kstr)
|
|
144
|
+
} else if ((customK != null) && BigNumber.isBN(customK)) {
|
|
128
145
|
// Use customK provided, convert to BigInt
|
|
129
|
-
const
|
|
130
|
-
return BigInt('0x' +
|
|
146
|
+
const kstr = customK.toString(16)
|
|
147
|
+
return BigInt('0x' + kstr)
|
|
131
148
|
} else {
|
|
132
149
|
// Use DRBG to generate k
|
|
133
|
-
const
|
|
134
|
-
return BigInt('0x' +
|
|
150
|
+
const khex = drbg.generate(bytes) // Generate hex string
|
|
151
|
+
return BigInt('0x' + khex)
|
|
135
152
|
}
|
|
136
153
|
}
|
|
137
154
|
|
|
@@ -192,23 +209,33 @@ export const sign = (msg: BigNumber, key: BigNumber, forceLowS: boolean = false,
|
|
|
192
209
|
function scalarMul (
|
|
193
210
|
k: bigint,
|
|
194
211
|
P: { x: bigint, y: bigint }
|
|
195
|
-
): { x: bigint, y: bigint }
|
|
212
|
+
): { x: bigint, y: bigint } {
|
|
196
213
|
let N = P
|
|
197
|
-
let Q
|
|
214
|
+
let Q: { x: bigint, y: bigint } | null = null
|
|
198
215
|
|
|
199
|
-
while (k >
|
|
200
|
-
if (k %
|
|
201
|
-
Q = pointAdd(Q, N)
|
|
216
|
+
while (k > BigInt(0)) {
|
|
217
|
+
if (k % BigInt(2) === BigInt(1)) {
|
|
218
|
+
Q = Q === null ? N : (pointAdd(Q, N) ?? Q)
|
|
202
219
|
}
|
|
203
|
-
N = pointAdd(N, N)
|
|
204
|
-
k >>=
|
|
220
|
+
N = pointAdd(N, N) ?? N
|
|
221
|
+
k >>= BigInt(1)
|
|
205
222
|
}
|
|
223
|
+
|
|
224
|
+
if (Q === null) {
|
|
225
|
+
throw new Error('Scalar multiplication resulted in an invalid point.')
|
|
226
|
+
}
|
|
227
|
+
|
|
206
228
|
return Q
|
|
207
229
|
}
|
|
208
230
|
|
|
209
|
-
|
|
210
|
-
|
|
231
|
+
let validSignature = false
|
|
232
|
+
while (!validSignature) {
|
|
211
233
|
iter += 1
|
|
234
|
+
validSignature = true
|
|
235
|
+
iter += 1
|
|
236
|
+
|
|
237
|
+
// Generate k value
|
|
238
|
+
let k = generateK(customK)
|
|
212
239
|
|
|
213
240
|
// Truncate k to n bits
|
|
214
241
|
k = truncateToN(k, n, true)
|
|
@@ -264,9 +291,9 @@ export const sign = (msg: BigNumber, key: BigNumber, forceLowS: boolean = false,
|
|
|
264
291
|
}
|
|
265
292
|
|
|
266
293
|
// Return signature as BigNumbers
|
|
267
|
-
const
|
|
268
|
-
const
|
|
269
|
-
return new Signature(
|
|
294
|
+
const rbn = new BigNumber(r.toString(16), 16)
|
|
295
|
+
const sbn = new BigNumber(s.toString(16), 16)
|
|
296
|
+
return new Signature(rbn, sbn)
|
|
270
297
|
}
|
|
271
298
|
} else {
|
|
272
299
|
const curve = new Curve()
|
|
@@ -287,15 +314,22 @@ export const sign = (msg: BigNumber, key: BigNumber, forceLowS: boolean = false,
|
|
|
287
314
|
|
|
288
315
|
for (let iter = 0; ; iter++) {
|
|
289
316
|
// Compute the k-value
|
|
290
|
-
let k =
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
317
|
+
let k =
|
|
318
|
+
typeof customK === 'function'
|
|
319
|
+
? customK(iter)
|
|
320
|
+
: BigNumber.isBN(customK)
|
|
321
|
+
? customK
|
|
322
|
+
: new BigNumber(drbg.generate(bytes), 16)
|
|
323
|
+
if (k != null) {
|
|
324
|
+
k = truncateToN(k, true)
|
|
325
|
+
} else {
|
|
326
|
+
throw new Error('k is undefined')
|
|
327
|
+
}
|
|
296
328
|
if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0) {
|
|
297
329
|
if (BigNumber.isBN(customK)) {
|
|
298
|
-
throw new Error(
|
|
330
|
+
throw new Error(
|
|
331
|
+
'Invalid fixed custom K value (must be more than 1 and less than N-1)'
|
|
332
|
+
)
|
|
299
333
|
} else {
|
|
300
334
|
continue
|
|
301
335
|
}
|
|
@@ -304,7 +338,9 @@ export const sign = (msg: BigNumber, key: BigNumber, forceLowS: boolean = false,
|
|
|
304
338
|
const kp = curve.g.mul(k)
|
|
305
339
|
if (kp.isInfinity()) {
|
|
306
340
|
if (BigNumber.isBN(customK)) {
|
|
307
|
-
throw new Error(
|
|
341
|
+
throw new Error(
|
|
342
|
+
'Invalid fixed custom K value (must not create a point at infinity when multiplied by the generator point)'
|
|
343
|
+
)
|
|
308
344
|
} else {
|
|
309
345
|
continue
|
|
310
346
|
}
|
|
@@ -314,7 +350,9 @@ export const sign = (msg: BigNumber, key: BigNumber, forceLowS: boolean = false,
|
|
|
314
350
|
const r = kpX.umod(curve.n)
|
|
315
351
|
if (r.cmpn(0) === 0) {
|
|
316
352
|
if (BigNumber.isBN(customK)) {
|
|
317
|
-
throw new Error(
|
|
353
|
+
throw new Error(
|
|
354
|
+
'Invalid fixed custom K value (when multiplied by G, the resulting x coordinate mod N must not be zero)'
|
|
355
|
+
)
|
|
318
356
|
} else {
|
|
319
357
|
continue
|
|
320
358
|
}
|
|
@@ -324,7 +362,9 @@ export const sign = (msg: BigNumber, key: BigNumber, forceLowS: boolean = false,
|
|
|
324
362
|
s = s.umod(curve.n)
|
|
325
363
|
if (s.cmpn(0) === 0) {
|
|
326
364
|
if (BigNumber.isBN(customK)) {
|
|
327
|
-
throw new Error(
|
|
365
|
+
throw new Error(
|
|
366
|
+
'Invalid fixed custom K value (when used with the key, it cannot create a zero value for S)'
|
|
367
|
+
)
|
|
328
368
|
} else {
|
|
329
369
|
continue
|
|
330
370
|
}
|
|
@@ -337,6 +377,7 @@ export const sign = (msg: BigNumber, key: BigNumber, forceLowS: boolean = false,
|
|
|
337
377
|
return new Signature(r, s)
|
|
338
378
|
}
|
|
339
379
|
}
|
|
380
|
+
throw new Error('Failed to generate a valid signature')
|
|
340
381
|
}
|
|
341
382
|
|
|
342
383
|
/**
|
|
@@ -384,22 +425,18 @@ export const verify = (msg: BigNumber, sig: Signature, key: Point): boolean => {
|
|
|
384
425
|
const mod = (a: bigint, m: bigint): bigint => ((a % m) + m) % m
|
|
385
426
|
const modInv = (a: bigint, m: bigint): bigint => {
|
|
386
427
|
// Extended Euclidean Algorithm for modular inverse
|
|
387
|
-
let [
|
|
388
|
-
let [
|
|
428
|
+
let [oldr, r] = [a, m]
|
|
429
|
+
let [olds, s] = [BigInt(1), BigInt(0)]
|
|
389
430
|
while (r !== zero) {
|
|
390
|
-
const q =
|
|
391
|
-
[
|
|
392
|
-
[
|
|
431
|
+
const q = oldr / r;
|
|
432
|
+
[oldr, r] = [r, oldr - q * r];
|
|
433
|
+
[olds, s] = [s, olds - q * s]
|
|
393
434
|
}
|
|
394
|
-
if (
|
|
395
|
-
return mod(
|
|
435
|
+
if (oldr > one) return zero // No inverse
|
|
436
|
+
return mod(olds, m)
|
|
396
437
|
}
|
|
397
|
-
const modMul = (a: bigint, b: bigint, m: bigint): bigint =>
|
|
398
|
-
|
|
399
|
-
const modSub = (a: bigint, b: bigint, m: bigint): bigint =>
|
|
400
|
-
mod(a - b, m)
|
|
401
|
-
const modAdd = (a: bigint, b: bigint, m: bigint): bigint =>
|
|
402
|
-
mod(a + b, m)
|
|
438
|
+
const modMul = (a: bigint, b: bigint, m: bigint): bigint => mod(a * b, m)
|
|
439
|
+
const modSub = (a: bigint, b: bigint, m: bigint): bigint => mod(a - b, m)
|
|
403
440
|
|
|
404
441
|
// Define constants
|
|
405
442
|
const four = BigInt(4)
|
|
@@ -420,13 +457,13 @@ export const verify = (msg: BigNumber, sig: Signature, key: Point): boolean => {
|
|
|
420
457
|
return { X: zero, Y: one, Z: zero } // Point at infinity
|
|
421
458
|
}
|
|
422
459
|
|
|
423
|
-
const
|
|
424
|
-
const S = modMul(four, modMul(X1,
|
|
460
|
+
const Y1sq = modMul(Y1, Y1, p) // Y1^2
|
|
461
|
+
const S = modMul(four, modMul(X1, Y1sq, p), p) // S = 4 * X1 * Y1^2
|
|
425
462
|
const M = modMul(three, modMul(X1, X1, p), p) // M = 3 * X1^2
|
|
426
463
|
const X3 = modSub(modMul(M, M, p), modMul(two, S, p), p) // X3 = M^2 - 2 * S
|
|
427
464
|
const Y3 = modSub(
|
|
428
465
|
modMul(M, modSub(S, X3, p), p),
|
|
429
|
-
modMul(eight, modMul(
|
|
466
|
+
modMul(eight, modMul(Y1sq, Y1sq, p), p),
|
|
430
467
|
p
|
|
431
468
|
) // Y3 = M * (S - X3) - 8 * Y1^4
|
|
432
469
|
const Z3 = modMul(two, modMul(Y1, Z1, p), p) // Z3 = 2 * Y1 * Z1
|
|
@@ -464,18 +501,17 @@ export const verify = (msg: BigNumber, sig: Signature, key: Point): boolean => {
|
|
|
464
501
|
const V = modMul(U1, HH, p)
|
|
465
502
|
|
|
466
503
|
const X3 = modSub(modSub(modMul(r, r, p), HHH, p), modMul(two, V, p), p)
|
|
467
|
-
const Y3 = modSub(
|
|
468
|
-
modMul(r, modSub(V, X3, p), p),
|
|
469
|
-
modMul(S1, HHH, p),
|
|
470
|
-
p
|
|
471
|
-
)
|
|
504
|
+
const Y3 = modSub(modMul(r, modSub(V, X3, p), p), modMul(S1, HHH, p), p)
|
|
472
505
|
const Z3 = modMul(H, modMul(P.Z, Q.Z, p), p)
|
|
473
506
|
|
|
474
507
|
return { X: X3, Y: Y3, Z: Z3 }
|
|
475
508
|
}
|
|
476
509
|
|
|
477
510
|
// Scalar Multiplication
|
|
478
|
-
const scalarMultiply = (
|
|
511
|
+
const scalarMultiply = (
|
|
512
|
+
k: bigint,
|
|
513
|
+
P: { x: bigint, y: bigint }
|
|
514
|
+
): JacobianPoint => {
|
|
479
515
|
const N: JacobianPoint = { X: P.x, Y: P.y, Z: one }
|
|
480
516
|
let Q: JacobianPoint = { X: zero, Y: one, Z: zero } // Point at infinity
|
|
481
517
|
|
|
@@ -526,10 +562,10 @@ export const verify = (msg: BigNumber, sig: Signature, key: Point): boolean => {
|
|
|
526
562
|
return false // No inverse exists
|
|
527
563
|
}
|
|
528
564
|
const ZInv2 = modMul(ZInv, ZInv, p)
|
|
529
|
-
const
|
|
565
|
+
const x1affine = modMul(R.X, ZInv2, p)
|
|
530
566
|
|
|
531
567
|
// Compute v = x1_affine mod n
|
|
532
|
-
const v = mod(
|
|
568
|
+
const v = mod(x1affine, n)
|
|
533
569
|
|
|
534
570
|
// Signature is valid if v == r mod n
|
|
535
571
|
return v === r
|
|
@@ -537,6 +573,10 @@ export const verify = (msg: BigNumber, sig: Signature, key: Point): boolean => {
|
|
|
537
573
|
|
|
538
574
|
// Convert inputs to BigInt
|
|
539
575
|
const hash = BigInt('0x' + msg.toString(16))
|
|
576
|
+
if ((key.x == null) || (key.y == null)) {
|
|
577
|
+
throw new Error('Invalid public key: missing coordinates.')
|
|
578
|
+
}
|
|
579
|
+
|
|
540
580
|
const publicKey = {
|
|
541
581
|
x: BigInt('0x' + key.x.toString(16)),
|
|
542
582
|
y: BigInt('0x' + key.y.toString(16))
|
|
@@ -553,8 +593,12 @@ export const verify = (msg: BigNumber, sig: Signature, key: Point): boolean => {
|
|
|
553
593
|
// Perform primitive values validation
|
|
554
594
|
const r = sig.r
|
|
555
595
|
const s = sig.s
|
|
556
|
-
if (r.cmpn(1) < 0 || r.cmp(curve.n) >= 0) {
|
|
557
|
-
|
|
596
|
+
if (r.cmpn(1) < 0 || r.cmp(curve.n) >= 0) {
|
|
597
|
+
return false
|
|
598
|
+
}
|
|
599
|
+
if (s.cmpn(1) < 0 || s.cmp(curve.n) >= 0) {
|
|
600
|
+
return false
|
|
601
|
+
}
|
|
558
602
|
|
|
559
603
|
// Validate signature
|
|
560
604
|
const sinv = s.invm(curve.n)
|
|
@@ -564,7 +608,9 @@ export const verify = (msg: BigNumber, sig: Signature, key: Point): boolean => {
|
|
|
564
608
|
// NOTE: Greg Maxwell's trick, inspired by:
|
|
565
609
|
// https://git.io/vad3K
|
|
566
610
|
const p = curve.g.jmulAdd(u1, key, u2)
|
|
567
|
-
if (p.isInfinity()) {
|
|
611
|
+
if (p.isInfinity()) {
|
|
612
|
+
return false
|
|
613
|
+
}
|
|
568
614
|
|
|
569
615
|
// Compare `p.x` of Jacobian point with `r`,
|
|
570
616
|
// this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
|