@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/compat/ECIES.ts
CHANGED
|
@@ -6,8 +6,8 @@ import Point from '../primitives/Point.js'
|
|
|
6
6
|
import * as Hash from '../primitives/Hash.js'
|
|
7
7
|
import { toArray, toHex, encode } from '../primitives/utils.js'
|
|
8
8
|
|
|
9
|
-
function AES (key) {
|
|
10
|
-
if (
|
|
9
|
+
function AES (key): void {
|
|
10
|
+
if (this._tables[0][0][0] === 0) this._precompute()
|
|
11
11
|
|
|
12
12
|
let tmp, encKey, decKey
|
|
13
13
|
const sbox = this._tables[0][4]
|
|
@@ -19,20 +19,25 @@ function AES (key) {
|
|
|
19
19
|
throw new Error('invalid aes key size')
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
this._key = [encKey = key.slice(0), decKey = []]
|
|
22
|
+
this._key = [(encKey = key.slice(0)), (decKey = [])]
|
|
23
23
|
|
|
24
24
|
// schedule encryption keys
|
|
25
|
-
|
|
25
|
+
let i: number
|
|
26
|
+
for (i = keyLen; i < 4 * keyLen + 28; i++) {
|
|
26
27
|
tmp = encKey[i - 1]
|
|
27
28
|
|
|
28
29
|
// apply sbox
|
|
29
30
|
if (i % keyLen === 0 || (keyLen === 8 && i % keyLen === 4)) {
|
|
30
|
-
tmp =
|
|
31
|
+
tmp =
|
|
32
|
+
(sbox[tmp >>> 24] << 24) ^
|
|
33
|
+
(sbox[(tmp >> 16) & 255] << 16) ^
|
|
34
|
+
(sbox[(tmp >> 8) & 255] << 8) ^
|
|
35
|
+
sbox[tmp & 255]
|
|
31
36
|
|
|
32
37
|
// shift rows and add rcon
|
|
33
38
|
if (i % keyLen === 0) {
|
|
34
|
-
tmp = tmp << 8 ^ tmp >>> 24 ^ rcon << 24
|
|
35
|
-
rcon = rcon << 1 ^ (rcon >> 7) * 283
|
|
39
|
+
tmp = (tmp << 8) ^ (tmp >>> 24) ^ (rcon << 24)
|
|
40
|
+
rcon = (rcon << 1) ^ ((rcon >> 7) * 283)
|
|
36
41
|
}
|
|
37
42
|
}
|
|
38
43
|
|
|
@@ -40,89 +45,117 @@ function AES (key) {
|
|
|
40
45
|
}
|
|
41
46
|
|
|
42
47
|
// schedule decryption keys
|
|
43
|
-
for (let j = 0; i; j++, i--) {
|
|
44
|
-
tmp = encKey[j & 3 ? i : i - 4]
|
|
48
|
+
for (let j = 0; i > 0; j++, i--) {
|
|
49
|
+
tmp = encKey[(j & 3) !== 0 ? i : i - 4]
|
|
45
50
|
if (i <= 4 || j < 4) {
|
|
46
51
|
decKey[j] = tmp
|
|
47
52
|
} else {
|
|
48
|
-
decKey[j] =
|
|
49
|
-
decTable[
|
|
50
|
-
decTable[
|
|
53
|
+
decKey[j] =
|
|
54
|
+
decTable[0][sbox[tmp >>> 24]] ^
|
|
55
|
+
decTable[1][sbox[(tmp >> 16) & 255]] ^
|
|
56
|
+
decTable[2][sbox[(tmp >> 8) & 255]] ^
|
|
51
57
|
decTable[3][sbox[tmp & 255]]
|
|
52
58
|
}
|
|
53
59
|
}
|
|
54
60
|
}
|
|
55
61
|
|
|
56
62
|
AES.prototype = {
|
|
57
|
-
|
|
58
63
|
/**
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
encrypt: function (data) {
|
|
64
|
+
* Encrypt an array of 4 big-endian words.
|
|
65
|
+
* @param {Array} data The plaintext.
|
|
66
|
+
* @return {Array} The ciphertext.
|
|
67
|
+
*/
|
|
68
|
+
encrypt: function (data) {
|
|
69
|
+
return this._crypt(data, 0)
|
|
70
|
+
},
|
|
64
71
|
|
|
65
72
|
/**
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
decrypt: function (data) {
|
|
73
|
+
* Decrypt an array of 4 big-endian words.
|
|
74
|
+
* @param {Array} data The ciphertext.
|
|
75
|
+
* @return {Array} The plaintext.
|
|
76
|
+
*/
|
|
77
|
+
decrypt: function (data) {
|
|
78
|
+
return this._crypt(data, 1)
|
|
79
|
+
},
|
|
71
80
|
|
|
72
81
|
/**
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
* The expanded S-box and inverse S-box tables. These will be computed
|
|
83
|
+
* on the client so that we don't have to send them down the wire.
|
|
84
|
+
*
|
|
85
|
+
* There are two tables, _tables[0] is for encryption and
|
|
86
|
+
* _tables[1] is for decryption.
|
|
87
|
+
*
|
|
88
|
+
* The first 4 sub-tables are the expanded S-box with MixColumns. The
|
|
89
|
+
* last (_tables[01][4]) is the S-box itself.
|
|
90
|
+
*
|
|
91
|
+
* @private
|
|
92
|
+
*/
|
|
84
93
|
_tables: [
|
|
85
|
-
[
|
|
86
|
-
|
|
94
|
+
[
|
|
95
|
+
new Uint32Array(256),
|
|
96
|
+
new Uint32Array(256),
|
|
97
|
+
new Uint32Array(256),
|
|
98
|
+
new Uint32Array(256),
|
|
99
|
+
new Uint32Array(256)
|
|
100
|
+
],
|
|
101
|
+
[
|
|
102
|
+
new Uint32Array(256),
|
|
103
|
+
new Uint32Array(256),
|
|
104
|
+
new Uint32Array(256),
|
|
105
|
+
new Uint32Array(256),
|
|
106
|
+
new Uint32Array(256)
|
|
107
|
+
]
|
|
87
108
|
],
|
|
88
109
|
|
|
89
110
|
// Expand the S-box tables.
|
|
90
111
|
_precompute: function () {
|
|
91
|
-
const encTable = this._tables[0]
|
|
92
|
-
const
|
|
93
|
-
|
|
112
|
+
const encTable = this._tables[0]
|
|
113
|
+
const decTable = this._tables[1]
|
|
114
|
+
const sbox = encTable[4]
|
|
115
|
+
const sboxInv = decTable[4]
|
|
116
|
+
let i
|
|
117
|
+
let x
|
|
118
|
+
let xInv
|
|
119
|
+
const d = new Uint8Array(256)
|
|
120
|
+
const th = new Uint8Array(256)
|
|
121
|
+
let x2
|
|
122
|
+
let x4
|
|
123
|
+
let x8
|
|
124
|
+
let s
|
|
125
|
+
let tEnc
|
|
126
|
+
let tDec
|
|
94
127
|
|
|
95
128
|
// Compute double and third tables
|
|
96
129
|
for (i = 0; i < 256; i++) {
|
|
97
|
-
th[(d[i] = i << 1 ^ (i >> 7) * 283) ^ i] = i
|
|
130
|
+
th[(d[i] = (i << 1) ^ ((i >> 7) * 283)) ^ i] = i
|
|
98
131
|
}
|
|
99
132
|
|
|
100
|
-
for (x = xInv = 0;
|
|
133
|
+
for (x = xInv = 0; sbox[x] === 0; x ^= (x2 !== 0 ? x2 : 1), xInv = th[xInv] !== 0 ? th[xInv] : 1) {
|
|
101
134
|
// Compute sbox
|
|
102
|
-
s = xInv ^ xInv << 1 ^ xInv << 2 ^ xInv << 3 ^ xInv << 4
|
|
103
|
-
s = s >> 8 ^ s & 255 ^ 99
|
|
135
|
+
s = xInv ^ (xInv << 1) ^ (xInv << 2) ^ (xInv << 3) ^ (xInv << 4)
|
|
136
|
+
s = (s >> 8) ^ (s & 255) ^ 99
|
|
104
137
|
sbox[x] = s
|
|
105
138
|
sboxInv[s] = x
|
|
106
139
|
|
|
107
140
|
// Compute MixColumns
|
|
108
|
-
x8 = d[x4 = d[x2 = d[x]]]
|
|
109
|
-
tDec = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100
|
|
110
|
-
tEnc = d[s] * 0x101 ^ s * 0x1010100
|
|
141
|
+
x8 = d[(x4 = d[(x2 = d[x])])]
|
|
142
|
+
tDec = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)
|
|
143
|
+
tEnc = (d[s] * 0x101) ^ (s * 0x1010100)
|
|
111
144
|
|
|
112
145
|
for (i = 0; i < 4; i++) {
|
|
113
|
-
encTable[i][x] = tEnc = tEnc << 24 ^ tEnc >>> 8
|
|
114
|
-
decTable[i][s] = tDec = tDec << 24 ^ tDec >>> 8
|
|
146
|
+
encTable[i][x] = tEnc = (tEnc << 24) ^ (tEnc >>> 8)
|
|
147
|
+
decTable[i][s] = tDec = (tDec << 24) ^ (tDec >>> 8)
|
|
115
148
|
}
|
|
116
149
|
}
|
|
117
150
|
},
|
|
118
151
|
|
|
119
152
|
/**
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
153
|
+
* Encryption and decryption core.
|
|
154
|
+
* @param {Array} input Four words to be encrypted or decrypted.
|
|
155
|
+
* @param dir The direction, 0 for encrypt and 1 for decrypt.
|
|
156
|
+
* @return {Array} The four encrypted or decrypted words.
|
|
157
|
+
* @private
|
|
158
|
+
*/
|
|
126
159
|
_crypt: function (input, dir) {
|
|
127
160
|
if (input.length !== 4) {
|
|
128
161
|
throw new Error('invalid aes block size')
|
|
@@ -131,15 +164,18 @@ AES.prototype = {
|
|
|
131
164
|
const key = this._key[dir]
|
|
132
165
|
// state variables a,b,c,d are loaded with pre-whitened data
|
|
133
166
|
let a = input[0] ^ key[0]
|
|
134
|
-
let b = input[dir ? 3 : 1] ^ key[1]
|
|
167
|
+
let b = input[dir === 1 ? 3 : 1] ^ key[1]
|
|
135
168
|
let c = input[2] ^ key[2]
|
|
136
|
-
let d = input[dir ? 1 : 3] ^ key[3]
|
|
137
|
-
let a2
|
|
169
|
+
let d = input[dir === 1 ? 1 : 3] ^ key[3]
|
|
170
|
+
let a2
|
|
171
|
+
let b2
|
|
172
|
+
let c2
|
|
138
173
|
|
|
139
174
|
const nInnerRounds = key.length / 4 - 2
|
|
140
175
|
let i
|
|
141
176
|
let kIndex = 4
|
|
142
|
-
const out = new Uint32Array(4)
|
|
177
|
+
const out = new Uint32Array(4)
|
|
178
|
+
const // <--- this is slower in Node, about the same in Chrome */
|
|
143
179
|
table = this._tables[dir]
|
|
144
180
|
|
|
145
181
|
// load up the tables
|
|
@@ -151,33 +187,60 @@ AES.prototype = {
|
|
|
151
187
|
|
|
152
188
|
// Inner rounds. Cribbed from OpenSSL.
|
|
153
189
|
for (i = 0; i < nInnerRounds; i++) {
|
|
154
|
-
a2 =
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
190
|
+
a2 =
|
|
191
|
+
t0[a >>> 24] ^
|
|
192
|
+
t1[(b >> 16) & 255] ^
|
|
193
|
+
t2[(c >> 8) & 255] ^
|
|
194
|
+
t3[d & 255] ^
|
|
195
|
+
key[kIndex]
|
|
196
|
+
b2 =
|
|
197
|
+
t0[b >>> 24] ^
|
|
198
|
+
t1[(c >> 16) & 255] ^
|
|
199
|
+
t2[(d >> 8) & 255] ^
|
|
200
|
+
t3[a & 255] ^
|
|
201
|
+
key[kIndex + 1]
|
|
202
|
+
c2 =
|
|
203
|
+
t0[c >>> 24] ^
|
|
204
|
+
t1[(d >> 16) & 255] ^
|
|
205
|
+
t2[(a >> 8) & 255] ^
|
|
206
|
+
t3[b & 255] ^
|
|
207
|
+
key[kIndex + 2]
|
|
208
|
+
d =
|
|
209
|
+
t0[d >>> 24] ^
|
|
210
|
+
t1[(a >> 16) & 255] ^
|
|
211
|
+
t2[(b >> 8) & 255] ^
|
|
212
|
+
t3[c & 255] ^
|
|
213
|
+
key[kIndex + 3]
|
|
158
214
|
kIndex += 4
|
|
159
|
-
a = a2
|
|
215
|
+
a = a2
|
|
216
|
+
b = b2
|
|
217
|
+
c = c2
|
|
160
218
|
}
|
|
161
219
|
|
|
162
220
|
// Last round.
|
|
163
221
|
for (i = 0; i < 4; i++) {
|
|
164
|
-
out[dir ? 3 & -i : i] =
|
|
165
|
-
sbox[a >>> 24] << 24 ^
|
|
166
|
-
sbox[b >> 16 & 255] << 16 ^
|
|
167
|
-
sbox[c >> 8 & 255] << 8 ^
|
|
222
|
+
out[dir === 1 ? 3 & -i : i] =
|
|
223
|
+
(sbox[a >>> 24] << 24) ^
|
|
224
|
+
(sbox[(b >> 16) & 255] << 16) ^
|
|
225
|
+
(sbox[(c >> 8) & 255] << 8) ^
|
|
168
226
|
sbox[d & 255] ^
|
|
169
227
|
key[kIndex++]
|
|
170
|
-
a2 = a
|
|
228
|
+
a2 = a
|
|
229
|
+
a = b
|
|
230
|
+
b = c
|
|
231
|
+
c = d
|
|
232
|
+
d = a2
|
|
171
233
|
}
|
|
172
234
|
|
|
173
235
|
return out
|
|
174
236
|
}
|
|
175
237
|
}
|
|
176
238
|
|
|
239
|
+
// eslint-disable-next-line @typescript-eslint/no-extraneous-class
|
|
177
240
|
class AESWrapper {
|
|
178
241
|
public static encrypt (messageBuf: number[], keyBuf: number[]): number[] {
|
|
179
|
-
const key = AESWrapper.buf2Words(
|
|
180
|
-
const message = AESWrapper.buf2Words(
|
|
242
|
+
const key = AESWrapper.buf2Words(keyBuf)
|
|
243
|
+
const message = AESWrapper.buf2Words(messageBuf)
|
|
181
244
|
const a = new AES(key)
|
|
182
245
|
const enc = a.encrypt(message)
|
|
183
246
|
const encBuf = AESWrapper.words2Buf(enc)
|
|
@@ -185,8 +248,8 @@ class AESWrapper {
|
|
|
185
248
|
}
|
|
186
249
|
|
|
187
250
|
public static decrypt (encBuf: number[], keyBuf: number[]): number[] {
|
|
188
|
-
const enc = AESWrapper.buf2Words(
|
|
189
|
-
const key = AESWrapper.buf2Words(
|
|
251
|
+
const enc = AESWrapper.buf2Words(encBuf)
|
|
252
|
+
const key = AESWrapper.buf2Words(keyBuf)
|
|
190
253
|
const a = new AES(key)
|
|
191
254
|
const message = a.decrypt(enc)
|
|
192
255
|
const messageBuf = AESWrapper.words2Buf(message)
|
|
@@ -194,13 +257,13 @@ class AESWrapper {
|
|
|
194
257
|
}
|
|
195
258
|
|
|
196
259
|
public static buf2Words (buf: number[]): number[] {
|
|
197
|
-
if (buf.length % 4) {
|
|
260
|
+
if (buf.length % 4 !== 0) {
|
|
198
261
|
throw new Error('buf length must be a multiple of 4')
|
|
199
262
|
}
|
|
200
|
-
const words = []
|
|
263
|
+
const words: number[] = []
|
|
201
264
|
for (let i = 0; i < buf.length / 4; i++) {
|
|
202
265
|
const val =
|
|
203
|
-
|
|
266
|
+
buf[i * 4] * 0x1000000 + // Shift the first byte by 24 bits
|
|
204
267
|
((buf[i * 4 + 1] << 16) | // Shift the second byte by 16 bits
|
|
205
268
|
(buf[i * 4 + 2] << 8) | // Shift the third byte by 8 bits
|
|
206
269
|
buf[i * 4 + 3]) // The fourth byte
|
|
@@ -214,20 +277,21 @@ class AESWrapper {
|
|
|
214
277
|
|
|
215
278
|
for (let i = 0; i < words.length; i++) {
|
|
216
279
|
const word = words[i]
|
|
217
|
-
buf[i * 4] = (word >>> 24) &
|
|
218
|
-
buf[i * 4 + 1] = (word >>> 16) &
|
|
219
|
-
buf[i * 4 + 2] = (word >>> 8) &
|
|
220
|
-
buf[i * 4 + 3] = word &
|
|
280
|
+
buf[i * 4] = (word >>> 24) & 0xff
|
|
281
|
+
buf[i * 4 + 1] = (word >>> 16) & 0xff
|
|
282
|
+
buf[i * 4 + 2] = (word >>> 8) & 0xff
|
|
283
|
+
buf[i * 4 + 3] = word & 0xff
|
|
221
284
|
}
|
|
222
285
|
|
|
223
286
|
return buf
|
|
224
287
|
}
|
|
225
288
|
}
|
|
226
289
|
|
|
290
|
+
// eslint-disable-next-line @typescript-eslint/no-extraneous-class
|
|
227
291
|
class CBC {
|
|
228
292
|
public static buf2BlocksBuf (buf: number[], blockSize: number): number[][] {
|
|
229
293
|
const bytesize = blockSize / 8
|
|
230
|
-
const blockBufs = []
|
|
294
|
+
const blockBufs: number[][] = []
|
|
231
295
|
|
|
232
296
|
for (let i = 0; i <= buf.length / bytesize; i++) {
|
|
233
297
|
let blockBuf = buf.slice(i * bytesize, i * bytesize + bytesize)
|
|
@@ -260,7 +324,12 @@ class CBC {
|
|
|
260
324
|
): number[] {
|
|
261
325
|
const blockSize = ivBuf.length * 8
|
|
262
326
|
const blockBufs = CBC.buf2BlocksBuf(messageBuf, blockSize)
|
|
263
|
-
const encBufs = CBC.encryptBlocks(
|
|
327
|
+
const encBufs = CBC.encryptBlocks(
|
|
328
|
+
blockBufs,
|
|
329
|
+
ivBuf,
|
|
330
|
+
blockCipher,
|
|
331
|
+
cipherKeyBuf
|
|
332
|
+
)
|
|
264
333
|
const encBuf = encBufs.flat()
|
|
265
334
|
return encBuf
|
|
266
335
|
}
|
|
@@ -272,11 +341,16 @@ class CBC {
|
|
|
272
341
|
cipherKeyBuf: number[]
|
|
273
342
|
): number[] {
|
|
274
343
|
const bytesize = ivBuf.length
|
|
275
|
-
const encBufs = []
|
|
344
|
+
const encBufs: number[][] = []
|
|
276
345
|
for (let i = 0; i < encBuf.length / bytesize; i++) {
|
|
277
346
|
encBufs.push(encBuf.slice(i * bytesize, i * bytesize + bytesize))
|
|
278
347
|
}
|
|
279
|
-
const blockBufs = CBC.decryptBlocks(
|
|
348
|
+
const blockBufs = CBC.decryptBlocks(
|
|
349
|
+
encBufs,
|
|
350
|
+
ivBuf,
|
|
351
|
+
blockCipher,
|
|
352
|
+
cipherKeyBuf
|
|
353
|
+
)
|
|
280
354
|
const buf = CBC.blockBufs2Buf(blockBufs)
|
|
281
355
|
return buf
|
|
282
356
|
}
|
|
@@ -309,11 +383,16 @@ class CBC {
|
|
|
309
383
|
blockCipher: any /* TODO: type */,
|
|
310
384
|
cipherKeyBuf: number[]
|
|
311
385
|
): number[][] {
|
|
312
|
-
const encBufs = []
|
|
386
|
+
const encBufs: number[][] = []
|
|
313
387
|
|
|
314
388
|
for (let i = 0; i < blockBufs.length; i++) {
|
|
315
389
|
const blockBuf = blockBufs[i]
|
|
316
|
-
const encBuf = CBC.encryptBlock(
|
|
390
|
+
const encBuf = CBC.encryptBlock(
|
|
391
|
+
blockBuf,
|
|
392
|
+
ivBuf,
|
|
393
|
+
blockCipher,
|
|
394
|
+
cipherKeyBuf
|
|
395
|
+
)
|
|
317
396
|
|
|
318
397
|
encBufs.push(encBuf)
|
|
319
398
|
|
|
@@ -329,11 +408,16 @@ class CBC {
|
|
|
329
408
|
blockCipher: any /* TODO: type */,
|
|
330
409
|
cipherKeyBuf: number[]
|
|
331
410
|
): number[][] {
|
|
332
|
-
const blockBufs = []
|
|
411
|
+
const blockBufs: number[][] = []
|
|
333
412
|
|
|
334
413
|
for (let i = 0; i < encBufs.length; i++) {
|
|
335
414
|
const encBuf = encBufs[i]
|
|
336
|
-
const blockBuf = CBC.decryptBlock(
|
|
415
|
+
const blockBuf = CBC.decryptBlock(
|
|
416
|
+
encBuf,
|
|
417
|
+
ivBuf,
|
|
418
|
+
blockCipher,
|
|
419
|
+
cipherKeyBuf
|
|
420
|
+
)
|
|
337
421
|
|
|
338
422
|
blockBufs.push(blockBuf)
|
|
339
423
|
|
|
@@ -354,7 +438,10 @@ class CBC {
|
|
|
354
438
|
|
|
355
439
|
public static pkcs7Unpad (paddedbuf: number[]): number[] {
|
|
356
440
|
const padlength = paddedbuf[paddedbuf.length - 1]
|
|
357
|
-
const padbuf = paddedbuf.slice(
|
|
441
|
+
const padbuf = paddedbuf.slice(
|
|
442
|
+
paddedbuf.length - padlength,
|
|
443
|
+
paddedbuf.length
|
|
444
|
+
)
|
|
358
445
|
const padbuf2 = new Array(padlength)
|
|
359
446
|
padbuf2.fill(padlength)
|
|
360
447
|
if (toHex(padbuf) !== toHex(padbuf2)) {
|
|
@@ -378,9 +465,15 @@ class CBC {
|
|
|
378
465
|
}
|
|
379
466
|
}
|
|
380
467
|
|
|
468
|
+
// eslint-disable-next-line @typescript-eslint/no-extraneous-class
|
|
381
469
|
class AESCBC {
|
|
382
|
-
public static encrypt (
|
|
383
|
-
|
|
470
|
+
public static encrypt (
|
|
471
|
+
messageBuf: number[],
|
|
472
|
+
cipherKeyBuf: number[],
|
|
473
|
+
ivBuf: number[],
|
|
474
|
+
concatIvBuf = true
|
|
475
|
+
): number[] {
|
|
476
|
+
ivBuf = ivBuf ?? Random(128 / 8)
|
|
384
477
|
const ctBuf = CBC.encrypt(messageBuf, ivBuf, AESWrapper, cipherKeyBuf)
|
|
385
478
|
if (concatIvBuf) {
|
|
386
479
|
return [...ivBuf, ...ctBuf]
|
|
@@ -389,8 +482,12 @@ class AESCBC {
|
|
|
389
482
|
}
|
|
390
483
|
}
|
|
391
484
|
|
|
392
|
-
public static decrypt (
|
|
393
|
-
|
|
485
|
+
public static decrypt (
|
|
486
|
+
encBuf: number[],
|
|
487
|
+
cipherKeyBuf: number[],
|
|
488
|
+
ivBuf?: number[]
|
|
489
|
+
): number[] {
|
|
490
|
+
if (ivBuf == null) {
|
|
394
491
|
ivBuf = encBuf.slice(0, 128 / 8)
|
|
395
492
|
const ctBuf = encBuf.slice(128 / 8)
|
|
396
493
|
return CBC.decrypt(ctBuf, ivBuf, AESWrapper, cipherKeyBuf)
|
|
@@ -408,16 +505,20 @@ class AESCBC {
|
|
|
408
505
|
* @prprecated This class is deprecated in favor of the BRC-78 standard for portable encrypted messages,
|
|
409
506
|
* which provides a more comprehensive and secure solution by integrating with BRC-42 and BRC-43 standards.
|
|
410
507
|
*/
|
|
508
|
+
// eslint-disable-next-line @typescript-eslint/no-extraneous-class
|
|
411
509
|
export default class ECIES {
|
|
412
510
|
/**
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
public static ivkEkM (
|
|
511
|
+
* Generates the initialization vector (iv), encryption key (kE), and MAC key (kM)
|
|
512
|
+
* using the sender's private key and receiver's public key.
|
|
513
|
+
*
|
|
514
|
+
* @param {PrivateKey} privKey - The sender's private key.
|
|
515
|
+
* @param {PublicKey} pubKey - The receiver's public key.
|
|
516
|
+
* @returns {Object} An object containing the iv, kE, and kM as number arrays.
|
|
517
|
+
*/
|
|
518
|
+
public static ivkEkM (
|
|
519
|
+
privKey: PrivateKey,
|
|
520
|
+
pubKey: PublicKey
|
|
521
|
+
): { iv: number[], kE: number[], kM: number[] } {
|
|
421
522
|
const r = privKey
|
|
422
523
|
const KB = pubKey
|
|
423
524
|
const P = KB.mul(r)
|
|
@@ -432,17 +533,22 @@ export default class ECIES {
|
|
|
432
533
|
}
|
|
433
534
|
|
|
434
535
|
/**
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
public static electrumEncrypt (
|
|
444
|
-
|
|
445
|
-
|
|
536
|
+
* Encrypts a given message using the Electrum ECIES method.
|
|
537
|
+
*
|
|
538
|
+
* @param {number[]} messageBuf - The message to be encrypted, in number array format.
|
|
539
|
+
* @param {PublicKey} toPublicKey - The public key of the recipient.
|
|
540
|
+
* @param {PrivateKey} [fromPrivateKey] - The private key of the sender. If not provided, a random private key is used.
|
|
541
|
+
* @param {boolean} [noKey=false] - If true, does not include the sender's public key in the encrypted message.
|
|
542
|
+
* @returns {number[]} The encrypted message as a number array.
|
|
543
|
+
*/
|
|
544
|
+
public static electrumEncrypt (
|
|
545
|
+
messageBuf: number[],
|
|
546
|
+
toPublicKey: PublicKey,
|
|
547
|
+
fromPrivateKey?: PrivateKey,
|
|
548
|
+
noKey = false
|
|
549
|
+
): number[] {
|
|
550
|
+
let Rbuf: string | number[] | null = null
|
|
551
|
+
if (fromPrivateKey == null) {
|
|
446
552
|
fromPrivateKey = PrivateKey.fromRandom()
|
|
447
553
|
}
|
|
448
554
|
if (!noKey) {
|
|
@@ -452,7 +558,7 @@ export default class ECIES {
|
|
|
452
558
|
const ciphertext = AESCBC.encrypt(messageBuf, kE, iv, false)
|
|
453
559
|
const BIE1 = toArray('BIE1', 'utf8')
|
|
454
560
|
let encBuf: number[]
|
|
455
|
-
if (Rbuf) {
|
|
561
|
+
if (Rbuf !== undefined && Rbuf !== null && Rbuf.length > 0) {
|
|
456
562
|
encBuf = [...BIE1, ...Rbuf, ...ciphertext]
|
|
457
563
|
} else {
|
|
458
564
|
encBuf = [...BIE1, ...ciphertext]
|
|
@@ -462,14 +568,18 @@ export default class ECIES {
|
|
|
462
568
|
}
|
|
463
569
|
|
|
464
570
|
/**
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
public static electrumDecrypt (
|
|
571
|
+
* Decrypts a message encrypted using the Electrum ECIES method.
|
|
572
|
+
*
|
|
573
|
+
* @param {number[]} encBuf - The encrypted message buffer.
|
|
574
|
+
* @param {PrivateKey} toPrivateKey - The private key of the recipient.
|
|
575
|
+
* @param {PublicKey} [fromPublicKey=null] - The public key of the sender. If not provided, it is extracted from the message.
|
|
576
|
+
* @returns {number[]} The decrypted message as a number array.
|
|
577
|
+
*/
|
|
578
|
+
public static electrumDecrypt (
|
|
579
|
+
encBuf: number[],
|
|
580
|
+
toPrivateKey: PrivateKey,
|
|
581
|
+
fromPublicKey?: PublicKey
|
|
582
|
+
): number[] {
|
|
473
583
|
const tagLength = 32
|
|
474
584
|
|
|
475
585
|
const magic = encBuf.slice(0, 4)
|
|
@@ -493,12 +603,12 @@ export default class ECIES {
|
|
|
493
603
|
}
|
|
494
604
|
}
|
|
495
605
|
|
|
496
|
-
if (Rbuf) {
|
|
497
|
-
if (
|
|
606
|
+
if (Rbuf !== null) {
|
|
607
|
+
if (fromPublicKey == null) {
|
|
498
608
|
fromPublicKey = PublicKey.fromString(toHex(Rbuf))
|
|
499
609
|
}
|
|
500
610
|
} else {
|
|
501
|
-
if (
|
|
611
|
+
if (fromPublicKey == null) {
|
|
502
612
|
throw new Error('Sender public key is required')
|
|
503
613
|
}
|
|
504
614
|
}
|
|
@@ -507,7 +617,10 @@ export default class ECIES {
|
|
|
507
617
|
const ciphertext = encBuf.slice(offset, encBuf.length - tagLength)
|
|
508
618
|
const hmac = encBuf.slice(encBuf.length - tagLength, encBuf.length)
|
|
509
619
|
|
|
510
|
-
const hmac2 = Hash.sha256hmac(
|
|
620
|
+
const hmac2 = Hash.sha256hmac(
|
|
621
|
+
kM,
|
|
622
|
+
encBuf.slice(0, encBuf.length - tagLength)
|
|
623
|
+
)
|
|
511
624
|
|
|
512
625
|
if (toHex(hmac) !== toHex(hmac2)) {
|
|
513
626
|
throw new Error('Invalid checksum')
|
|
@@ -517,18 +630,26 @@ export default class ECIES {
|
|
|
517
630
|
}
|
|
518
631
|
|
|
519
632
|
/**
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
public static bitcoreEncrypt (
|
|
529
|
-
|
|
633
|
+
* Encrypts a given message using the Bitcore variant of ECIES.
|
|
634
|
+
*
|
|
635
|
+
* @param {number[]} messageBuf - The message to be encrypted, in number array format.
|
|
636
|
+
* @param {PublicKey} toPublicKey - The public key of the recipient.
|
|
637
|
+
* @param {PrivateKey} [fromPrivateKey] - The private key of the sender. If not provided, a random private key is used.
|
|
638
|
+
* @param {number[]} [ivBuf] - The initialization vector for encryption. If not provided, a random IV is used.
|
|
639
|
+
* @returns {number[]} The encrypted message as a number array.
|
|
640
|
+
*/
|
|
641
|
+
public static bitcoreEncrypt (
|
|
642
|
+
messageBuf: number[],
|
|
643
|
+
toPublicKey: PublicKey,
|
|
644
|
+
fromPrivateKey?: PrivateKey,
|
|
645
|
+
ivBuf?: number[]
|
|
646
|
+
): number[] {
|
|
647
|
+
if (fromPrivateKey == null) {
|
|
530
648
|
fromPrivateKey = PrivateKey.fromRandom()
|
|
531
649
|
}
|
|
650
|
+
if (ivBuf == null) {
|
|
651
|
+
ivBuf = Random(16)
|
|
652
|
+
}
|
|
532
653
|
const r = fromPrivateKey
|
|
533
654
|
const RPublicKey = fromPrivateKey.toPublicKey()
|
|
534
655
|
const RBuf = RPublicKey.encode(true) as number[]
|
|
@@ -546,13 +667,16 @@ export default class ECIES {
|
|
|
546
667
|
}
|
|
547
668
|
|
|
548
669
|
/**
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
public static bitcoreDecrypt (
|
|
670
|
+
* Decrypts a message encrypted using the Bitcore variant of ECIES.
|
|
671
|
+
*
|
|
672
|
+
* @param {number[]} encBuf - The encrypted message buffer.
|
|
673
|
+
* @param {PrivateKey} toPrivateKey - The private key of the recipient.
|
|
674
|
+
* @returns {number[]} The decrypted message as a number array.
|
|
675
|
+
*/
|
|
676
|
+
public static bitcoreDecrypt (
|
|
677
|
+
encBuf: number[],
|
|
678
|
+
toPrivateKey: PrivateKey
|
|
679
|
+
): number[] {
|
|
556
680
|
const kB = toPrivateKey
|
|
557
681
|
const fromPublicKey = PublicKey.fromString(toHex(encBuf.slice(0, 33)))
|
|
558
682
|
const R = fromPublicKey
|