@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/Hash.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/* eslint-disable @typescript-eslint/naming-convention */
|
|
1
3
|
const assert = (
|
|
2
4
|
expression: unknown,
|
|
3
5
|
message: string = 'Hash assertion failed'
|
|
@@ -50,7 +52,10 @@ abstract class BaseHash {
|
|
|
50
52
|
hmacStrength: number
|
|
51
53
|
|
|
52
54
|
constructor (
|
|
53
|
-
blockSize: number,
|
|
55
|
+
blockSize: number,
|
|
56
|
+
outSize: number,
|
|
57
|
+
hmacStrength: number,
|
|
58
|
+
padLength: number
|
|
54
59
|
) {
|
|
55
60
|
this.pending = null
|
|
56
61
|
this.pendingTotal = 0
|
|
@@ -106,7 +111,9 @@ abstract class BaseHash {
|
|
|
106
111
|
// Process pending data in blocks
|
|
107
112
|
const r = msg.length % this._delta8
|
|
108
113
|
this.pending = msg.slice(msg.length - r, msg.length)
|
|
109
|
-
if (this.pending.length === 0) {
|
|
114
|
+
if (this.pending.length === 0) {
|
|
115
|
+
this.pending = null
|
|
116
|
+
}
|
|
110
117
|
|
|
111
118
|
msg = join32(msg, 0, msg.length - r, this.endian)
|
|
112
119
|
for (let i = 0; i < msg.length; i += this._delta32) {
|
|
@@ -132,7 +139,7 @@ abstract class BaseHash {
|
|
|
132
139
|
assert(this.pending === null)
|
|
133
140
|
|
|
134
141
|
return this._digest()
|
|
135
|
-
}
|
|
142
|
+
}
|
|
136
143
|
|
|
137
144
|
/**
|
|
138
145
|
* Finalizes the hash computation and returns the hash value/result as a hex string.
|
|
@@ -149,7 +156,7 @@ abstract class BaseHash {
|
|
|
149
156
|
assert(this.pending === null)
|
|
150
157
|
|
|
151
158
|
return this._digestHex()
|
|
152
|
-
}
|
|
159
|
+
}
|
|
153
160
|
|
|
154
161
|
/**
|
|
155
162
|
* [Private Method] Used internally to prepare the padding for the final stage of the hash computation.
|
|
@@ -159,20 +166,25 @@ abstract class BaseHash {
|
|
|
159
166
|
*
|
|
160
167
|
* @returns Returns an array denoting the padding.
|
|
161
168
|
*/
|
|
162
|
-
private _pad (): number[] {
|
|
169
|
+
private _pad (): number[] {
|
|
170
|
+
//
|
|
163
171
|
let len = this.pendingTotal
|
|
164
172
|
const bytes = this._delta8
|
|
165
173
|
const k = bytes - ((len + this.padLength) % bytes)
|
|
166
174
|
const res = new Array(k + this.padLength)
|
|
167
175
|
res[0] = 0x80
|
|
168
176
|
let i
|
|
169
|
-
for (i = 1; i < k; i++) {
|
|
177
|
+
for (i = 1; i < k; i++) {
|
|
178
|
+
res[i] = 0
|
|
179
|
+
}
|
|
170
180
|
|
|
171
181
|
// Append length
|
|
172
182
|
len <<= 3
|
|
173
183
|
let t
|
|
174
184
|
if (this.endian === 'big') {
|
|
175
|
-
for (t = 8; t < this.padLength; t++) {
|
|
185
|
+
for (t = 8; t < this.padLength; t++) {
|
|
186
|
+
res[i++] = 0
|
|
187
|
+
}
|
|
176
188
|
|
|
177
189
|
res[i++] = 0
|
|
178
190
|
res[i++] = 0
|
|
@@ -192,7 +204,9 @@ abstract class BaseHash {
|
|
|
192
204
|
res[i++] = 0
|
|
193
205
|
res[i++] = 0
|
|
194
206
|
|
|
195
|
-
for (t = 8; t < this.padLength; t++) {
|
|
207
|
+
for (t = 8; t < this.padLength; t++) {
|
|
208
|
+
res[i++] = 0
|
|
209
|
+
}
|
|
196
210
|
}
|
|
197
211
|
|
|
198
212
|
return res
|
|
@@ -200,13 +214,13 @@ abstract class BaseHash {
|
|
|
200
214
|
}
|
|
201
215
|
|
|
202
216
|
function isSurrogatePair (msg: string, i: number): boolean {
|
|
203
|
-
if ((msg.charCodeAt(i) &
|
|
217
|
+
if ((msg.charCodeAt(i) & 0xfc00) !== 0xd800) {
|
|
204
218
|
return false
|
|
205
219
|
}
|
|
206
220
|
if (i < 0 || i + 1 >= msg.length) {
|
|
207
221
|
return false
|
|
208
222
|
}
|
|
209
|
-
return (msg.charCodeAt(i + 1) &
|
|
223
|
+
return (msg.charCodeAt(i + 1) & 0xfc00) === 0xdc00
|
|
210
224
|
}
|
|
211
225
|
|
|
212
226
|
/**
|
|
@@ -215,14 +229,21 @@ function isSurrogatePair (msg: string, i: number): boolean {
|
|
|
215
229
|
* @param enc Optional. Encoding to use if msg is string. Default is 'utf8'.
|
|
216
230
|
* @returns array of byte values from msg. If msg is an array, a copy is returned.
|
|
217
231
|
*/
|
|
218
|
-
export function toArray (
|
|
219
|
-
|
|
220
|
-
|
|
232
|
+
export function toArray (
|
|
233
|
+
msg: number[] | string,
|
|
234
|
+
enc?: 'hex' | 'utf8'
|
|
235
|
+
): number[] {
|
|
236
|
+
if (Array.isArray(msg)) {
|
|
237
|
+
return msg.slice()
|
|
238
|
+
}
|
|
239
|
+
if (!(msg as unknown as boolean)) {
|
|
240
|
+
return []
|
|
241
|
+
}
|
|
221
242
|
const res = []
|
|
222
243
|
if (typeof msg === 'string') {
|
|
223
244
|
if (enc !== 'hex') {
|
|
224
245
|
// Inspired by stringToUtf8ByteArray() in closure-library by Google
|
|
225
|
-
// https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt
|
|
246
|
+
// https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt#L117-L143
|
|
226
247
|
// Apache License 2.0
|
|
227
248
|
// https://github.com/google/closure-library/blob/master/LICENSE
|
|
228
249
|
let p = 0
|
|
@@ -234,7 +255,7 @@ export function toArray (msg: number[] | string, enc?: 'hex' | 'utf8'): number[]
|
|
|
234
255
|
res[p++] = (c >> 6) | 192
|
|
235
256
|
res[p++] = (c & 63) | 128
|
|
236
257
|
} else if (isSurrogatePair(msg, i)) {
|
|
237
|
-
c = 0x10000 + ((c &
|
|
258
|
+
c = 0x10000 + ((c & 0x03ff) << 10) + (msg.charCodeAt(++i) & 0x03ff)
|
|
238
259
|
res[p++] = (c >> 18) | 240
|
|
239
260
|
res[p++] = ((c >> 12) & 63) | 128
|
|
240
261
|
res[p++] = ((c >> 6) & 63) | 128
|
|
@@ -246,7 +267,7 @@ export function toArray (msg: number[] | string, enc?: 'hex' | 'utf8'): number[]
|
|
|
246
267
|
}
|
|
247
268
|
}
|
|
248
269
|
} else {
|
|
249
|
-
msg = msg.replace(/[^a-z0-9]+/
|
|
270
|
+
msg = msg.replace(/[^a-z0-9]+/gi, '')
|
|
250
271
|
if (msg.length % 2 !== 0) {
|
|
251
272
|
msg = '0' + msg
|
|
252
273
|
}
|
|
@@ -256,13 +277,16 @@ export function toArray (msg: number[] | string, enc?: 'hex' | 'utf8'): number[]
|
|
|
256
277
|
}
|
|
257
278
|
} else {
|
|
258
279
|
msg = msg as number[]
|
|
259
|
-
for (let i = 0; i < msg.length; i++) {
|
|
280
|
+
for (let i = 0; i < msg.length; i++) {
|
|
281
|
+
res[i] = msg[i] | 0
|
|
282
|
+
}
|
|
260
283
|
}
|
|
261
284
|
return res
|
|
262
285
|
}
|
|
263
286
|
|
|
264
287
|
function htonl (w: number): number {
|
|
265
|
-
const res =
|
|
288
|
+
const res =
|
|
289
|
+
(w >>> 24) |
|
|
266
290
|
((w >>> 8) & 0xff00) |
|
|
267
291
|
((w << 8) & 0xff0000) |
|
|
268
292
|
((w & 0xff) << 24)
|
|
@@ -273,7 +297,9 @@ function toHex32 (msg: number[], endian?: 'little' | 'big'): string {
|
|
|
273
297
|
let res = ''
|
|
274
298
|
for (let i = 0; i < msg.length; i++) {
|
|
275
299
|
let w = msg[i]
|
|
276
|
-
if (endian === 'little') {
|
|
300
|
+
if (endian === 'little') {
|
|
301
|
+
w = htonl(w)
|
|
302
|
+
}
|
|
277
303
|
res += zero8(w.toString(16))
|
|
278
304
|
}
|
|
279
305
|
return res
|
|
@@ -355,19 +381,29 @@ function SUM32_4 (a: number, b: number, c: number, d: number): number {
|
|
|
355
381
|
}
|
|
356
382
|
|
|
357
383
|
function SUM32_5 (
|
|
358
|
-
a: number,
|
|
384
|
+
a: number,
|
|
385
|
+
b: number,
|
|
386
|
+
c: number,
|
|
387
|
+
d: number,
|
|
388
|
+
e: number
|
|
359
389
|
): number {
|
|
360
390
|
return (a + b + c + d + e) >>> 0
|
|
361
391
|
}
|
|
362
392
|
|
|
363
393
|
function FT_1 (s, x, y, z): number {
|
|
364
|
-
if (s === 0) {
|
|
365
|
-
|
|
366
|
-
|
|
394
|
+
if (s === 0) {
|
|
395
|
+
return ch32(x, y, z)
|
|
396
|
+
}
|
|
397
|
+
if (s === 1 || s === 3) {
|
|
398
|
+
return p32(x, y, z)
|
|
399
|
+
}
|
|
400
|
+
if (s === 2) {
|
|
401
|
+
return maj32(x, y, z)
|
|
402
|
+
}
|
|
367
403
|
}
|
|
368
404
|
|
|
369
405
|
function ch32 (x, y, z): number {
|
|
370
|
-
return (x & y) ^ (
|
|
406
|
+
return (x & y) ^ (~x & z)
|
|
371
407
|
}
|
|
372
408
|
|
|
373
409
|
function maj32 (x, y, z): number {
|
|
@@ -395,50 +431,76 @@ function G1_256 (x): number {
|
|
|
395
431
|
}
|
|
396
432
|
|
|
397
433
|
const r = [
|
|
398
|
-
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
|
|
434
|
+
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15,
|
|
435
|
+
3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11,
|
|
436
|
+
5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7,
|
|
437
|
+
12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
|
|
403
438
|
]
|
|
404
439
|
|
|
405
440
|
const rh = [
|
|
406
|
-
5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
|
|
441
|
+
5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5,
|
|
442
|
+
10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0,
|
|
443
|
+
4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1,
|
|
444
|
+
5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
|
|
411
445
|
]
|
|
412
446
|
|
|
413
447
|
const s = [
|
|
414
|
-
11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
|
|
415
|
-
7,
|
|
416
|
-
11,
|
|
417
|
-
11,
|
|
418
|
-
9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
|
|
448
|
+
11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7,
|
|
449
|
+
15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5,
|
|
450
|
+
12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5,
|
|
451
|
+
11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
|
|
419
452
|
]
|
|
420
453
|
|
|
421
454
|
const sh = [
|
|
422
|
-
8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
|
|
423
|
-
9,
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
|
|
455
|
+
8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8,
|
|
456
|
+
9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14,
|
|
457
|
+
13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5,
|
|
458
|
+
12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
|
|
427
459
|
]
|
|
428
460
|
|
|
429
461
|
function f (j, x, y, z): number {
|
|
430
|
-
if (j <= 15) {
|
|
462
|
+
if (j <= 15) {
|
|
463
|
+
return x ^ y ^ z
|
|
464
|
+
} else if (j <= 31) {
|
|
465
|
+
return (x & y) | (~x & z)
|
|
466
|
+
} else if (j <= 47) {
|
|
467
|
+
return (x | ~y) ^ z
|
|
468
|
+
} else if (j <= 63) {
|
|
469
|
+
return (x & z) | (y & ~z)
|
|
470
|
+
} else {
|
|
471
|
+
return x ^ (y | ~z)
|
|
472
|
+
}
|
|
431
473
|
}
|
|
432
474
|
|
|
433
475
|
function K (j): number {
|
|
434
|
-
if (j <= 15) {
|
|
476
|
+
if (j <= 15) {
|
|
477
|
+
return 0x00000000
|
|
478
|
+
} else if (j <= 31) {
|
|
479
|
+
return 0x5a827999
|
|
480
|
+
} else if (j <= 47) {
|
|
481
|
+
return 0x6ed9eba1
|
|
482
|
+
} else if (j <= 63) {
|
|
483
|
+
return 0x8f1bbcdc
|
|
484
|
+
} else {
|
|
485
|
+
return 0xa953fd4e
|
|
486
|
+
}
|
|
435
487
|
}
|
|
436
488
|
|
|
437
489
|
function Kh (j): number {
|
|
438
|
-
if (j <= 15) {
|
|
490
|
+
if (j <= 15) {
|
|
491
|
+
return 0x50a28be6
|
|
492
|
+
} else if (j <= 31) {
|
|
493
|
+
return 0x5c4dd124
|
|
494
|
+
} else if (j <= 47) {
|
|
495
|
+
return 0x6d703ef3
|
|
496
|
+
} else if (j <= 63) {
|
|
497
|
+
return 0x7a6d76e9
|
|
498
|
+
} else {
|
|
499
|
+
return 0x00000000
|
|
500
|
+
}
|
|
439
501
|
}
|
|
440
502
|
|
|
441
|
-
function sum64 (buf, pos, ah, al) {
|
|
503
|
+
function sum64 (buf: number[], pos: number, ah: number, al: number): void {
|
|
442
504
|
const bh = buf[pos]
|
|
443
505
|
const bl = buf[pos + 1]
|
|
444
506
|
|
|
@@ -448,18 +510,27 @@ function sum64 (buf, pos, ah, al) {
|
|
|
448
510
|
buf[pos + 1] = lo
|
|
449
511
|
}
|
|
450
512
|
|
|
451
|
-
function
|
|
513
|
+
function sum64HI (ah: number, al: number, bh: number, bl: number): number {
|
|
452
514
|
const lo = (al + bl) >>> 0
|
|
453
515
|
const hi = (lo < al ? 1 : 0) + ah + bh
|
|
454
516
|
return hi >>> 0
|
|
455
517
|
}
|
|
456
518
|
|
|
457
|
-
function
|
|
519
|
+
function sum64LO (ah: number, al: number, bh: number, bl: number): number {
|
|
458
520
|
const lo = al + bl
|
|
459
521
|
return lo >>> 0
|
|
460
522
|
}
|
|
461
523
|
|
|
462
|
-
function
|
|
524
|
+
function sum64and4HI (
|
|
525
|
+
ah: number,
|
|
526
|
+
al: number,
|
|
527
|
+
bh: number,
|
|
528
|
+
bl: number,
|
|
529
|
+
ch: number,
|
|
530
|
+
cl: number,
|
|
531
|
+
dh: number,
|
|
532
|
+
dl: number
|
|
533
|
+
): number {
|
|
463
534
|
let carry = 0
|
|
464
535
|
let lo = al
|
|
465
536
|
lo = (lo + bl) >>> 0
|
|
@@ -473,12 +544,32 @@ function sum64_4_hi (ah, al, bh, bl, ch, cl, dh, dl) {
|
|
|
473
544
|
return hi >>> 0
|
|
474
545
|
}
|
|
475
546
|
|
|
476
|
-
function
|
|
547
|
+
function sum64and4LO (
|
|
548
|
+
ah: number,
|
|
549
|
+
al: number,
|
|
550
|
+
bh: number,
|
|
551
|
+
bl: number,
|
|
552
|
+
ch: number,
|
|
553
|
+
cl: number,
|
|
554
|
+
dh: number,
|
|
555
|
+
dl: number
|
|
556
|
+
): number {
|
|
477
557
|
const lo = al + bl + cl + dl
|
|
478
558
|
return lo >>> 0
|
|
479
559
|
}
|
|
480
560
|
|
|
481
|
-
function
|
|
561
|
+
function sum64and5HI (
|
|
562
|
+
ah: number,
|
|
563
|
+
al: number,
|
|
564
|
+
bh: number,
|
|
565
|
+
bl: number,
|
|
566
|
+
ch: number,
|
|
567
|
+
cl: number,
|
|
568
|
+
dh: number,
|
|
569
|
+
dl: number,
|
|
570
|
+
eh: number,
|
|
571
|
+
el: number
|
|
572
|
+
): number {
|
|
482
573
|
let carry = 0
|
|
483
574
|
let lo = al
|
|
484
575
|
lo = (lo + bl) >>> 0
|
|
@@ -494,27 +585,37 @@ function sum64_5_hi (ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
|
|
|
494
585
|
return hi >>> 0
|
|
495
586
|
}
|
|
496
587
|
|
|
497
|
-
function
|
|
588
|
+
function sum64and5LO (
|
|
589
|
+
ah: number,
|
|
590
|
+
al: number,
|
|
591
|
+
bh: number,
|
|
592
|
+
bl: number,
|
|
593
|
+
ch: number,
|
|
594
|
+
cl: number,
|
|
595
|
+
dh: number,
|
|
596
|
+
dl: number,
|
|
597
|
+
eh: number,
|
|
598
|
+
el: number
|
|
599
|
+
): number {
|
|
498
600
|
const lo = al + bl + cl + dl + el
|
|
499
|
-
|
|
500
601
|
return lo >>> 0
|
|
501
602
|
}
|
|
502
603
|
|
|
503
|
-
function
|
|
604
|
+
function rotr64HI (ah: number, al: number, num: number): number {
|
|
504
605
|
const r = (al << (32 - num)) | (ah >>> num)
|
|
505
606
|
return r >>> 0
|
|
506
607
|
}
|
|
507
608
|
|
|
508
|
-
function
|
|
609
|
+
function rotr64LO (ah: number, al: number, num: number): number {
|
|
509
610
|
const r = (ah << (32 - num)) | (al >>> num)
|
|
510
611
|
return r >>> 0
|
|
511
612
|
}
|
|
512
613
|
|
|
513
|
-
function
|
|
614
|
+
function shr64HI (ah: number, al: number, num: number): number {
|
|
514
615
|
return ah >>> num
|
|
515
616
|
}
|
|
516
617
|
|
|
517
|
-
function
|
|
618
|
+
function shr64LO (ah: number, al: number, num: number): number {
|
|
518
619
|
const r = (ah << (32 - num)) | (al >>> num)
|
|
519
620
|
return r >>> 0
|
|
520
621
|
}
|
|
@@ -561,10 +662,9 @@ export class RIPEMD160 extends BaseHash {
|
|
|
561
662
|
let T
|
|
562
663
|
for (let j = 0; j < 80; j++) {
|
|
563
664
|
T = sum32(
|
|
564
|
-
rotl32(
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
E)
|
|
665
|
+
rotl32(SUM32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)), s[j]),
|
|
666
|
+
E
|
|
667
|
+
)
|
|
568
668
|
A = E
|
|
569
669
|
E = D
|
|
570
670
|
D = rotl32(C, 10)
|
|
@@ -573,8 +673,10 @@ export class RIPEMD160 extends BaseHash {
|
|
|
573
673
|
T = sum32(
|
|
574
674
|
rotl32(
|
|
575
675
|
SUM32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
|
|
576
|
-
sh[j]
|
|
577
|
-
|
|
676
|
+
sh[j]
|
|
677
|
+
),
|
|
678
|
+
Eh
|
|
679
|
+
)
|
|
578
680
|
Ah = Eh
|
|
579
681
|
Eh = Dh
|
|
580
682
|
Dh = rotl32(Ch, 10)
|
|
@@ -625,25 +727,20 @@ export class SHA256 extends BaseHash {
|
|
|
625
727
|
constructor () {
|
|
626
728
|
super(512, 256, 192, 64)
|
|
627
729
|
this.h = [
|
|
628
|
-
0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
|
|
629
|
-
|
|
730
|
+
0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c,
|
|
731
|
+
0x1f83d9ab, 0x5be0cd19
|
|
630
732
|
]
|
|
631
733
|
this.k = [
|
|
632
|
-
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
|
|
643
|
-
0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
|
|
644
|
-
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
|
|
645
|
-
0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
|
|
646
|
-
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
|
|
734
|
+
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1,
|
|
735
|
+
0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
|
|
736
|
+
0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786,
|
|
737
|
+
0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
|
|
738
|
+
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,
|
|
739
|
+
0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
|
|
740
|
+
0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b,
|
|
741
|
+
0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
|
|
742
|
+
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a,
|
|
743
|
+
0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
|
|
647
744
|
0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
|
|
648
745
|
]
|
|
649
746
|
this.W = new Array(64)
|
|
@@ -652,6 +749,11 @@ export class SHA256 extends BaseHash {
|
|
|
652
749
|
_update (msg: number[], start?: number): void {
|
|
653
750
|
const W = this.W
|
|
654
751
|
|
|
752
|
+
// Default start to 0
|
|
753
|
+
if (start === undefined) {
|
|
754
|
+
start = 0
|
|
755
|
+
}
|
|
756
|
+
|
|
655
757
|
let i: number
|
|
656
758
|
for (i = 0; i < 16; i++) {
|
|
657
759
|
W[i] = msg[start + i]
|
|
@@ -691,7 +793,7 @@ export class SHA256 extends BaseHash {
|
|
|
691
793
|
this.h[5] = sum32(this.h[5], f)
|
|
692
794
|
this.h[6] = sum32(this.h[6], g)
|
|
693
795
|
this.h[7] = sum32(this.h[7], h)
|
|
694
|
-
}
|
|
796
|
+
}
|
|
695
797
|
|
|
696
798
|
_digest (): number[] {
|
|
697
799
|
return split32(this.h, 'big')
|
|
@@ -728,21 +830,23 @@ export class SHA1 extends BaseHash {
|
|
|
728
830
|
|
|
729
831
|
constructor () {
|
|
730
832
|
super(512, 160, 80, 64)
|
|
731
|
-
this.k = [
|
|
732
|
-
|
|
733
|
-
0x8F1BBCDC, 0xCA62C1D6
|
|
734
|
-
]
|
|
735
|
-
this.h = [
|
|
736
|
-
0x67452301, 0xefcdab89, 0x98badcfe,
|
|
737
|
-
0x10325476, 0xc3d2e1f0]
|
|
833
|
+
this.k = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6]
|
|
834
|
+
this.h = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]
|
|
738
835
|
this.W = new Array(80)
|
|
739
836
|
}
|
|
740
837
|
|
|
741
838
|
_update (msg: number[], start?: number): void {
|
|
742
839
|
const W = this.W
|
|
743
840
|
|
|
841
|
+
// Default start to 0
|
|
842
|
+
if (start === undefined) {
|
|
843
|
+
start = 0
|
|
844
|
+
}
|
|
845
|
+
|
|
744
846
|
let i: number
|
|
745
|
-
for (i = 0; i < 16; i++) {
|
|
847
|
+
for (i = 0; i < 16; i++) {
|
|
848
|
+
W[i] = msg[start + i]
|
|
849
|
+
}
|
|
746
850
|
|
|
747
851
|
for (; i < W.length; i++) {
|
|
748
852
|
W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1)
|
|
@@ -807,289 +911,312 @@ export class SHA512 extends BaseHash {
|
|
|
807
911
|
constructor () {
|
|
808
912
|
super(1024, 512, 192, 128)
|
|
809
913
|
this.h = [
|
|
810
|
-
0x6a09e667, 0xf3bcc908,
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
0x510e527f, 0xade682d1,
|
|
815
|
-
0x9b05688c, 0x2b3e6c1f,
|
|
816
|
-
0x1f83d9ab, 0xfb41bd6b,
|
|
817
|
-
0x5be0cd19, 0x137e2179]
|
|
914
|
+
0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b,
|
|
915
|
+
0xa54ff53a, 0x5f1d36f1, 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f,
|
|
916
|
+
0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179
|
|
917
|
+
]
|
|
818
918
|
this.k = [
|
|
819
|
-
0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
|
|
846
|
-
0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
|
|
847
|
-
0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
|
|
848
|
-
0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
|
|
849
|
-
0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
|
|
850
|
-
0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
|
|
851
|
-
0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
|
|
852
|
-
0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
|
|
853
|
-
0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
|
|
854
|
-
0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
|
|
855
|
-
0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
|
|
856
|
-
0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
|
|
857
|
-
0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
|
|
919
|
+
0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f,
|
|
920
|
+
0xe9b5dba5, 0x8189dbbc, 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
|
|
921
|
+
0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, 0xd807aa98, 0xa3030242,
|
|
922
|
+
0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
|
|
923
|
+
0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235,
|
|
924
|
+
0xc19bf174, 0xcf692694, 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
|
|
925
|
+
0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, 0x2de92c6f, 0x592b0275,
|
|
926
|
+
0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
|
|
927
|
+
0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f,
|
|
928
|
+
0xbf597fc7, 0xbeef0ee4, 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
|
|
929
|
+
0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, 0x27b70a85, 0x46d22ffc,
|
|
930
|
+
0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
|
|
931
|
+
0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6,
|
|
932
|
+
0x92722c85, 0x1482353b, 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
|
|
933
|
+
0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, 0xd192e819, 0xd6ef5218,
|
|
934
|
+
0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
|
|
935
|
+
0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99,
|
|
936
|
+
0x34b0bcb5, 0xe19b48a8, 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
|
|
937
|
+
0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, 0x748f82ee, 0x5defb2fc,
|
|
938
|
+
0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
|
|
939
|
+
0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915,
|
|
940
|
+
0xc67178f2, 0xe372532b, 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
|
|
941
|
+
0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, 0x06f067aa, 0x72176fba,
|
|
942
|
+
0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
|
|
943
|
+
0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc,
|
|
944
|
+
0x431d67c4, 0x9c100d4c, 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
|
|
858
945
|
0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
|
|
859
946
|
]
|
|
860
947
|
this.W = new Array(160)
|
|
861
948
|
}
|
|
862
949
|
|
|
863
|
-
_prepareBlock (msg, start) {
|
|
950
|
+
_prepareBlock (msg: number[], start: number): void {
|
|
864
951
|
const W = this.W
|
|
865
952
|
|
|
866
953
|
// 32 x 32bit words
|
|
867
|
-
let i
|
|
868
|
-
for (i = 0; i < 32; i++) {
|
|
954
|
+
let i: number
|
|
955
|
+
for (i = 0; i < 32; i++) {
|
|
956
|
+
W[i] = msg[start + i]
|
|
957
|
+
}
|
|
869
958
|
for (; i < W.length; i += 2) {
|
|
870
|
-
const
|
|
871
|
-
const
|
|
872
|
-
const
|
|
873
|
-
const
|
|
874
|
-
const
|
|
875
|
-
const
|
|
876
|
-
const
|
|
877
|
-
const
|
|
878
|
-
|
|
879
|
-
W[i] =
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
959
|
+
const c0Hi = g1_512_hi(W[i - 4], W[i - 3]) // i - 2
|
|
960
|
+
const c0Lo = g1_512_lo(W[i - 4], W[i - 3])
|
|
961
|
+
const c1Hi = W[i - 14] // i - 7
|
|
962
|
+
const c1Lo = W[i - 13]
|
|
963
|
+
const c2Hi = g0_512_hi(W[i - 30], W[i - 29]) // i - 15
|
|
964
|
+
const c2Lo = g0_512_lo(W[i - 30], W[i - 29])
|
|
965
|
+
const c3Hi = W[i - 32] // i - 16
|
|
966
|
+
const c3Lo = W[i - 31]
|
|
967
|
+
|
|
968
|
+
W[i] = sum64and4HI(c0Hi, c0Lo, c1Hi, c1Lo, c2Hi, c2Lo, c3Hi, c3Lo)
|
|
969
|
+
W[i + 1] = sum64and4LO(
|
|
970
|
+
c0Hi,
|
|
971
|
+
c0Lo,
|
|
972
|
+
c1Hi,
|
|
973
|
+
c1Lo,
|
|
974
|
+
c2Hi,
|
|
975
|
+
c2Lo,
|
|
976
|
+
c3Hi,
|
|
977
|
+
c3Lo
|
|
978
|
+
)
|
|
889
979
|
}
|
|
890
980
|
}
|
|
891
981
|
|
|
892
|
-
_update (msg, start) {
|
|
982
|
+
_update (msg: any, start: number): void {
|
|
893
983
|
this._prepareBlock(msg, start)
|
|
894
984
|
|
|
895
985
|
const W = this.W
|
|
896
986
|
|
|
897
|
-
let
|
|
898
|
-
let
|
|
899
|
-
let
|
|
900
|
-
let
|
|
901
|
-
let
|
|
902
|
-
let
|
|
903
|
-
let
|
|
904
|
-
let
|
|
905
|
-
let
|
|
906
|
-
let
|
|
907
|
-
let
|
|
908
|
-
let
|
|
909
|
-
let
|
|
910
|
-
let
|
|
911
|
-
let
|
|
912
|
-
let
|
|
987
|
+
let aHigh = this.h[0]
|
|
988
|
+
let aLow = this.h[1]
|
|
989
|
+
let bHigh = this.h[2]
|
|
990
|
+
let bLow = this.h[3]
|
|
991
|
+
let cHigh = this.h[4]
|
|
992
|
+
let cLow = this.h[5]
|
|
993
|
+
let dHigh = this.h[6]
|
|
994
|
+
let dLow = this.h[7]
|
|
995
|
+
let eHigh = this.h[8]
|
|
996
|
+
let eLow = this.h[9]
|
|
997
|
+
let fHigh = this.h[10]
|
|
998
|
+
let fLow = this.h[11]
|
|
999
|
+
let gHigh = this.h[12]
|
|
1000
|
+
let gLow = this.h[13]
|
|
1001
|
+
let hHigh = this.h[14]
|
|
1002
|
+
let hLow = this.h[15]
|
|
913
1003
|
|
|
914
1004
|
assert(this.k.length === W.length)
|
|
1005
|
+
|
|
915
1006
|
for (let i = 0; i < W.length; i += 2) {
|
|
916
|
-
let
|
|
917
|
-
let
|
|
918
|
-
let
|
|
919
|
-
let
|
|
920
|
-
const
|
|
921
|
-
const
|
|
922
|
-
const
|
|
923
|
-
const
|
|
924
|
-
const
|
|
925
|
-
const
|
|
926
|
-
|
|
927
|
-
const
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
1007
|
+
let temp0High = hHigh
|
|
1008
|
+
let temp0Low = hLow
|
|
1009
|
+
let temp1High = s1_512_hi(eHigh, eLow)
|
|
1010
|
+
let temp1Low = s1_512_lo(eHigh, eLow)
|
|
1011
|
+
const temp2High = ch64_hi(eHigh, eLow, fHigh, fLow, gHigh, gLow)
|
|
1012
|
+
const temp2Low = ch64_lo(eHigh, eLow, fHigh, fLow, gHigh, gLow)
|
|
1013
|
+
const temp3High = this.k[i]
|
|
1014
|
+
const temp3Low = this.k[i + 1]
|
|
1015
|
+
const temp4High = W[i]
|
|
1016
|
+
const temp4Low = W[i + 1]
|
|
1017
|
+
|
|
1018
|
+
const t1High = sum64and5HI(
|
|
1019
|
+
temp0High,
|
|
1020
|
+
temp0Low,
|
|
1021
|
+
temp1High,
|
|
1022
|
+
temp1Low,
|
|
1023
|
+
temp2High,
|
|
1024
|
+
temp2Low,
|
|
1025
|
+
temp3High,
|
|
1026
|
+
temp3Low,
|
|
1027
|
+
temp4High,
|
|
1028
|
+
temp4Low
|
|
1029
|
+
)
|
|
1030
|
+
const t1Low = sum64and5LO(
|
|
1031
|
+
temp0High,
|
|
1032
|
+
temp0Low,
|
|
1033
|
+
temp1High,
|
|
1034
|
+
temp1Low,
|
|
1035
|
+
temp2High,
|
|
1036
|
+
temp2Low,
|
|
1037
|
+
temp3High,
|
|
1038
|
+
temp3Low,
|
|
1039
|
+
temp4High,
|
|
1040
|
+
temp4Low
|
|
1041
|
+
)
|
|
1042
|
+
|
|
1043
|
+
temp0High = s0_512_hi(aHigh, aLow)
|
|
1044
|
+
temp0Low = s0_512_lo(aHigh, aLow)
|
|
1045
|
+
temp1High = maj64_hi(aHigh, aLow, bHigh, bLow, cHigh, cLow)
|
|
1046
|
+
temp1Low = maj64_lo(aHigh, aLow, bHigh, bLow, cHigh, cLow)
|
|
1047
|
+
|
|
1048
|
+
const t2High = sum64HI(temp0High, temp0Low, temp1High, temp1Low)
|
|
1049
|
+
const t2Low = sum64LO(temp0High, temp0Low, temp1High, temp1Low)
|
|
1050
|
+
|
|
1051
|
+
hHigh = gHigh
|
|
1052
|
+
hLow = gLow
|
|
1053
|
+
|
|
1054
|
+
gHigh = fHigh
|
|
1055
|
+
gLow = fLow
|
|
1056
|
+
|
|
1057
|
+
fHigh = eHigh
|
|
1058
|
+
fLow = eLow
|
|
1059
|
+
|
|
1060
|
+
eHigh = sum64HI(dHigh, dLow, t1High, t1Low)
|
|
1061
|
+
eLow = sum64LO(dLow, dLow, t1High, t1Low)
|
|
1062
|
+
|
|
1063
|
+
dHigh = cHigh
|
|
1064
|
+
dLow = cLow
|
|
1065
|
+
|
|
1066
|
+
cHigh = bHigh
|
|
1067
|
+
cLow = bLow
|
|
1068
|
+
|
|
1069
|
+
bHigh = aHigh
|
|
1070
|
+
bLow = aLow
|
|
1071
|
+
|
|
1072
|
+
aHigh = sum64HI(t1High, t1Low, t2High, t2Low)
|
|
1073
|
+
aLow = sum64LO(t1High, t1Low, t2High, t2Low)
|
|
971
1074
|
}
|
|
972
1075
|
|
|
973
|
-
sum64(this.h, 0,
|
|
974
|
-
sum64(this.h, 2,
|
|
975
|
-
sum64(this.h, 4,
|
|
976
|
-
sum64(this.h, 6,
|
|
977
|
-
sum64(this.h, 8,
|
|
978
|
-
sum64(this.h, 10,
|
|
979
|
-
sum64(this.h, 12,
|
|
980
|
-
sum64(this.h, 14,
|
|
1076
|
+
sum64(this.h, 0, aHigh, aLow)
|
|
1077
|
+
sum64(this.h, 2, bHigh, bLow)
|
|
1078
|
+
sum64(this.h, 4, cHigh, cLow)
|
|
1079
|
+
sum64(this.h, 6, dHigh, dLow)
|
|
1080
|
+
sum64(this.h, 8, eHigh, eLow)
|
|
1081
|
+
sum64(this.h, 10, fHigh, fLow)
|
|
1082
|
+
sum64(this.h, 12, gHigh, gLow)
|
|
1083
|
+
sum64(this.h, 14, hHigh, hLow)
|
|
981
1084
|
}
|
|
982
1085
|
|
|
983
|
-
_digest () {
|
|
1086
|
+
_digest (): number[] {
|
|
984
1087
|
return split32(this.h, 'big')
|
|
985
1088
|
}
|
|
986
1089
|
|
|
987
|
-
_digestHex () {
|
|
1090
|
+
_digestHex (): number[] {
|
|
988
1091
|
return toHex32(this.h, 'big')
|
|
989
1092
|
}
|
|
990
1093
|
}
|
|
991
1094
|
|
|
992
|
-
function ch64_hi (xh, xl, yh, yl, zh, zl) {
|
|
993
|
-
let r = (xh & yh) ^ (
|
|
994
|
-
if (r < 0) {
|
|
1095
|
+
function ch64_hi (xh: number, xl: number, yh: number, yl: number, zh: number, zl: number): number {
|
|
1096
|
+
let r: number = (xh & yh) ^ (~xh & zh)
|
|
1097
|
+
if (r < 0) {
|
|
1098
|
+
r += 0x100000000
|
|
1099
|
+
}
|
|
995
1100
|
return r
|
|
996
1101
|
}
|
|
997
1102
|
|
|
998
|
-
function ch64_lo (xh, xl, yh, yl, zh, zl) {
|
|
999
|
-
let r = (xl & yl) ^ (
|
|
1000
|
-
if (r < 0) {
|
|
1103
|
+
function ch64_lo (xh: number, xl: number, yh: number, yl: number, zh: number, zl: number): number {
|
|
1104
|
+
let r: number = (xl & yl) ^ (~xl & zl)
|
|
1105
|
+
if (r < 0) {
|
|
1106
|
+
r += 0x100000000
|
|
1107
|
+
}
|
|
1001
1108
|
return r
|
|
1002
1109
|
}
|
|
1003
1110
|
|
|
1004
|
-
function maj64_hi (xh, xl, yh, yl, zh, zl) {
|
|
1005
|
-
let r = (xh & yh) ^ (xh & zh) ^ (yh & zh)
|
|
1006
|
-
if (r < 0) {
|
|
1111
|
+
function maj64_hi (xh: number, xl: number, yh: number, yl: number, zh: number, zl: number): number {
|
|
1112
|
+
let r: number = (xh & yh) ^ (xh & zh) ^ (yh & zh)
|
|
1113
|
+
if (r < 0) {
|
|
1114
|
+
r += 0x100000000
|
|
1115
|
+
}
|
|
1007
1116
|
return r
|
|
1008
1117
|
}
|
|
1009
1118
|
|
|
1010
|
-
function maj64_lo (xh, xl, yh, yl, zh, zl) {
|
|
1011
|
-
let r = (xl & yl) ^ (xl & zl) ^ (yl & zl)
|
|
1012
|
-
if (r < 0) {
|
|
1119
|
+
function maj64_lo (xh: number, xl: number, yh: number, yl: number, zh: number, zl: number): number {
|
|
1120
|
+
let r: number = (xl & yl) ^ (xl & zl) ^ (yl & zl)
|
|
1121
|
+
if (r < 0) {
|
|
1122
|
+
r += 0x100000000
|
|
1123
|
+
}
|
|
1013
1124
|
return r
|
|
1014
1125
|
}
|
|
1015
1126
|
|
|
1016
|
-
function s0_512_hi (xh, xl) {
|
|
1017
|
-
const c0_hi =
|
|
1018
|
-
const c1_hi =
|
|
1019
|
-
const c2_hi =
|
|
1127
|
+
function s0_512_hi (xh: number, xl: number): number {
|
|
1128
|
+
const c0_hi: number = rotr64HI(xh, xl, 28)
|
|
1129
|
+
const c1_hi: number = rotr64HI(xl, xh, 2) // 34
|
|
1130
|
+
const c2_hi: number = rotr64HI(xl, xh, 7) // 39
|
|
1020
1131
|
|
|
1021
|
-
let r = c0_hi ^ c1_hi ^ c2_hi
|
|
1022
|
-
if (r < 0) {
|
|
1132
|
+
let r: number = c0_hi ^ c1_hi ^ c2_hi
|
|
1133
|
+
if (r < 0) {
|
|
1134
|
+
r += 0x100000000
|
|
1135
|
+
}
|
|
1023
1136
|
return r
|
|
1024
1137
|
}
|
|
1025
1138
|
|
|
1026
|
-
function s0_512_lo (xh, xl) {
|
|
1027
|
-
const c0_lo =
|
|
1028
|
-
const c1_lo =
|
|
1029
|
-
const c2_lo =
|
|
1139
|
+
function s0_512_lo (xh: number, xl: number): number {
|
|
1140
|
+
const c0_lo: number = rotr64LO(xh, xl, 28)
|
|
1141
|
+
const c1_lo: number = rotr64LO(xl, xh, 2) // 34
|
|
1142
|
+
const c2_lo: number = rotr64LO(xl, xh, 7) // 39
|
|
1030
1143
|
|
|
1031
|
-
let r = c0_lo ^ c1_lo ^ c2_lo
|
|
1032
|
-
if (r < 0) {
|
|
1144
|
+
let r: number = c0_lo ^ c1_lo ^ c2_lo
|
|
1145
|
+
if (r < 0) {
|
|
1146
|
+
r += 0x100000000
|
|
1147
|
+
}
|
|
1033
1148
|
return r
|
|
1034
1149
|
}
|
|
1035
1150
|
|
|
1036
|
-
function s1_512_hi (xh, xl) {
|
|
1037
|
-
const c0_hi =
|
|
1038
|
-
const c1_hi =
|
|
1039
|
-
const c2_hi =
|
|
1151
|
+
function s1_512_hi (xh: number, xl: number): number {
|
|
1152
|
+
const c0_hi: number = rotr64HI(xh, xl, 14)
|
|
1153
|
+
const c1_hi: number = rotr64HI(xh, xl, 18)
|
|
1154
|
+
const c2_hi: number = rotr64HI(xl, xh, 9) // 41
|
|
1040
1155
|
|
|
1041
|
-
let r = c0_hi ^ c1_hi ^ c2_hi
|
|
1042
|
-
if (r < 0) {
|
|
1156
|
+
let r: number = c0_hi ^ c1_hi ^ c2_hi
|
|
1157
|
+
if (r < 0) {
|
|
1158
|
+
r += 0x100000000
|
|
1159
|
+
}
|
|
1043
1160
|
return r
|
|
1044
1161
|
}
|
|
1045
1162
|
|
|
1046
|
-
function s1_512_lo (xh, xl) {
|
|
1047
|
-
const c0_lo =
|
|
1048
|
-
const c1_lo =
|
|
1049
|
-
const c2_lo =
|
|
1163
|
+
function s1_512_lo (xh: number, xl: number): number {
|
|
1164
|
+
const c0_lo: number = rotr64LO(xh, xl, 14)
|
|
1165
|
+
const c1_lo: number = rotr64LO(xh, xl, 18)
|
|
1166
|
+
const c2_lo: number = rotr64LO(xl, xh, 9) // 41
|
|
1050
1167
|
|
|
1051
|
-
let r = c0_lo ^ c1_lo ^ c2_lo
|
|
1052
|
-
if (r < 0) {
|
|
1168
|
+
let r: number = c0_lo ^ c1_lo ^ c2_lo
|
|
1169
|
+
if (r < 0) {
|
|
1170
|
+
r += 0x100000000
|
|
1171
|
+
}
|
|
1053
1172
|
return r
|
|
1054
1173
|
}
|
|
1055
1174
|
|
|
1056
|
-
function g0_512_hi (xh, xl) {
|
|
1057
|
-
const c0_hi =
|
|
1058
|
-
const c1_hi =
|
|
1059
|
-
const c2_hi =
|
|
1175
|
+
function g0_512_hi (xh: number, xl: number): number {
|
|
1176
|
+
const c0_hi: number = rotr64HI(xh, xl, 1)
|
|
1177
|
+
const c1_hi: number = rotr64HI(xh, xl, 8)
|
|
1178
|
+
const c2_hi: number = shr64HI(xh, xl, 7)
|
|
1060
1179
|
|
|
1061
|
-
let r = c0_hi ^ c1_hi ^ c2_hi
|
|
1062
|
-
if (r < 0) {
|
|
1180
|
+
let r: number = c0_hi ^ c1_hi ^ c2_hi
|
|
1181
|
+
if (r < 0) {
|
|
1182
|
+
r += 0x100000000
|
|
1183
|
+
}
|
|
1063
1184
|
return r
|
|
1064
1185
|
}
|
|
1065
1186
|
|
|
1066
|
-
function g0_512_lo (xh, xl) {
|
|
1067
|
-
const c0_lo =
|
|
1068
|
-
const c1_lo =
|
|
1069
|
-
const c2_lo =
|
|
1187
|
+
function g0_512_lo (xh: number, xl: number): number {
|
|
1188
|
+
const c0_lo: number = rotr64LO(xh, xl, 1)
|
|
1189
|
+
const c1_lo: number = rotr64LO(xh, xl, 8)
|
|
1190
|
+
const c2_lo: number = shr64LO(xh, xl, 7)
|
|
1070
1191
|
|
|
1071
|
-
let r = c0_lo ^ c1_lo ^ c2_lo
|
|
1072
|
-
if (r < 0) {
|
|
1192
|
+
let r: number = c0_lo ^ c1_lo ^ c2_lo
|
|
1193
|
+
if (r < 0) {
|
|
1194
|
+
r += 0x100000000
|
|
1195
|
+
}
|
|
1073
1196
|
return r
|
|
1074
1197
|
}
|
|
1075
1198
|
|
|
1076
|
-
function g1_512_hi (xh, xl) {
|
|
1077
|
-
const c0_hi =
|
|
1078
|
-
const c1_hi =
|
|
1079
|
-
const c2_hi =
|
|
1199
|
+
function g1_512_hi (xh: number, xl: number): number {
|
|
1200
|
+
const c0_hi: number = rotr64HI(xh, xl, 19)
|
|
1201
|
+
const c1_hi: number = rotr64HI(xl, xh, 29) // 61
|
|
1202
|
+
const c2_hi: number = shr64HI(xh, xl, 6)
|
|
1080
1203
|
|
|
1081
|
-
let r = c0_hi ^ c1_hi ^ c2_hi
|
|
1082
|
-
if (r < 0) {
|
|
1204
|
+
let r: number = c0_hi ^ c1_hi ^ c2_hi
|
|
1205
|
+
if (r < 0) {
|
|
1206
|
+
r += 0x100000000
|
|
1207
|
+
}
|
|
1083
1208
|
return r
|
|
1084
1209
|
}
|
|
1085
1210
|
|
|
1086
|
-
function g1_512_lo (xh, xl) {
|
|
1087
|
-
const c0_lo =
|
|
1088
|
-
const c1_lo =
|
|
1089
|
-
const c2_lo =
|
|
1211
|
+
function g1_512_lo (xh: number, xl: number): number {
|
|
1212
|
+
const c0_lo: number = rotr64LO(xh, xl, 19)
|
|
1213
|
+
const c1_lo: number = rotr64LO(xl, xh, 29) // 61
|
|
1214
|
+
const c2_lo: number = shr64LO(xh, xl, 6)
|
|
1090
1215
|
|
|
1091
|
-
let r = c0_lo ^ c1_lo ^ c2_lo
|
|
1092
|
-
if (r < 0) {
|
|
1216
|
+
let r: number = c0_lo ^ c1_lo ^ c2_lo
|
|
1217
|
+
if (r < 0) {
|
|
1218
|
+
r += 0x100000000
|
|
1219
|
+
}
|
|
1093
1220
|
return r
|
|
1094
1221
|
}
|
|
1095
1222
|
|
|
@@ -1134,13 +1261,19 @@ export class SHA256HMAC {
|
|
|
1134
1261
|
|
|
1135
1262
|
// Add padding to key
|
|
1136
1263
|
let i
|
|
1137
|
-
for (i = key.length; i < this.blockSize; i++) {
|
|
1264
|
+
for (i = key.length; i < this.blockSize; i++) {
|
|
1265
|
+
key.push(0)
|
|
1266
|
+
}
|
|
1138
1267
|
|
|
1139
|
-
for (i = 0; i < key.length; i++) {
|
|
1268
|
+
for (i = 0; i < key.length; i++) {
|
|
1269
|
+
key[i] ^= 0x36
|
|
1270
|
+
}
|
|
1140
1271
|
this.inner = new SHA256().update(key)
|
|
1141
1272
|
|
|
1142
1273
|
// 0x36 ^ 0x5c = 0x6a
|
|
1143
|
-
for (i = 0; i < key.length; i++) {
|
|
1274
|
+
for (i = 0; i < key.length; i++) {
|
|
1275
|
+
key[i] ^= 0x6a
|
|
1276
|
+
}
|
|
1144
1277
|
this.outer = new SHA256().update(key)
|
|
1145
1278
|
}
|
|
1146
1279
|
|
|
@@ -1276,13 +1409,19 @@ export class SHA512HMAC {
|
|
|
1276
1409
|
|
|
1277
1410
|
// Add padding to key
|
|
1278
1411
|
let i
|
|
1279
|
-
for (i = key.length; i < this.blockSize; i++) {
|
|
1412
|
+
for (i = key.length; i < this.blockSize; i++) {
|
|
1413
|
+
key.push(0)
|
|
1414
|
+
}
|
|
1280
1415
|
|
|
1281
|
-
for (i = 0; i < key.length; i++) {
|
|
1416
|
+
for (i = 0; i < key.length; i++) {
|
|
1417
|
+
key[i] ^= 0x36
|
|
1418
|
+
}
|
|
1282
1419
|
this.inner = new SHA512().update(key)
|
|
1283
1420
|
|
|
1284
1421
|
// 0x36 ^ 0x5c = 0x6a
|
|
1285
|
-
for (i = 0; i < key.length; i++) {
|
|
1422
|
+
for (i = 0; i < key.length; i++) {
|
|
1423
|
+
key[i] ^= 0x6a
|
|
1424
|
+
}
|
|
1286
1425
|
this.outer = new SHA512().update(key)
|
|
1287
1426
|
}
|
|
1288
1427
|
|
|
@@ -1342,7 +1481,10 @@ export class SHA512HMAC {
|
|
|
1342
1481
|
* @example
|
|
1343
1482
|
* const digest = ripemd160('Hello, world!');
|
|
1344
1483
|
*/
|
|
1345
|
-
export const ripemd160 = (
|
|
1484
|
+
export const ripemd160 = (
|
|
1485
|
+
msg: number[] | string,
|
|
1486
|
+
enc?: 'hex' | 'utf8'
|
|
1487
|
+
): number[] => {
|
|
1346
1488
|
return new RIPEMD160().update(msg, enc).digest()
|
|
1347
1489
|
}
|
|
1348
1490
|
|
|
@@ -1357,7 +1499,10 @@ export const ripemd160 = (msg: number[] | string, enc?: 'hex' | 'utf8'): number[
|
|
|
1357
1499
|
* @example
|
|
1358
1500
|
* const digest = sha1('Hello, world!');
|
|
1359
1501
|
*/
|
|
1360
|
-
export const sha1 = (
|
|
1502
|
+
export const sha1 = (
|
|
1503
|
+
msg: number[] | string,
|
|
1504
|
+
enc?: 'hex' | 'utf8'
|
|
1505
|
+
): number[] => {
|
|
1361
1506
|
return new SHA1().update(msg, enc).digest()
|
|
1362
1507
|
}
|
|
1363
1508
|
|
|
@@ -1372,7 +1517,10 @@ export const sha1 = (msg: number[] | string, enc?: 'hex' | 'utf8'): number[] =>
|
|
|
1372
1517
|
* @example
|
|
1373
1518
|
* const digest = sha256('Hello, world!');
|
|
1374
1519
|
*/
|
|
1375
|
-
export const sha256 = (
|
|
1520
|
+
export const sha256 = (
|
|
1521
|
+
msg: number[] | string,
|
|
1522
|
+
enc?: 'hex' | 'utf8'
|
|
1523
|
+
): number[] => {
|
|
1376
1524
|
return new SHA256().update(msg, enc).digest()
|
|
1377
1525
|
}
|
|
1378
1526
|
|
|
@@ -1387,7 +1535,10 @@ export const sha256 = (msg: number[] | string, enc?: 'hex' | 'utf8'): number[] =
|
|
|
1387
1535
|
* @example
|
|
1388
1536
|
* const digest = sha512('Hello, world!');
|
|
1389
1537
|
*/
|
|
1390
|
-
export const sha512 = (
|
|
1538
|
+
export const sha512 = (
|
|
1539
|
+
msg: number[] | string,
|
|
1540
|
+
enc?: 'hex' | 'utf8'
|
|
1541
|
+
): number[] => {
|
|
1391
1542
|
return new SHA512().update(msg, enc).digest()
|
|
1392
1543
|
}
|
|
1393
1544
|
|
|
@@ -1404,7 +1555,10 @@ export const sha512 = (msg: number[] | string, enc?: 'hex' | 'utf8'): number[] =
|
|
|
1404
1555
|
* @example
|
|
1405
1556
|
* const doubleHash = hash256('Hello, world!');
|
|
1406
1557
|
*/
|
|
1407
|
-
export const hash256 = (
|
|
1558
|
+
export const hash256 = (
|
|
1559
|
+
msg: number[] | string,
|
|
1560
|
+
enc?: 'hex' | 'utf8'
|
|
1561
|
+
): number[] => {
|
|
1408
1562
|
const first = new SHA256().update(msg, enc).digest()
|
|
1409
1563
|
return new SHA256().update(first).digest()
|
|
1410
1564
|
}
|
|
@@ -1421,7 +1575,10 @@ export const hash256 = (msg: number[] | string, enc?: 'hex' | 'utf8'): number[]
|
|
|
1421
1575
|
* @example
|
|
1422
1576
|
* const hash = hash160('Hello, world!');
|
|
1423
1577
|
*/
|
|
1424
|
-
export const hash160 = (
|
|
1578
|
+
export const hash160 = (
|
|
1579
|
+
msg: number[] | string,
|
|
1580
|
+
enc?: 'hex' | 'utf8'
|
|
1581
|
+
): number[] => {
|
|
1425
1582
|
const first = new SHA256().update(msg, enc).digest()
|
|
1426
1583
|
return new RIPEMD160().update(first).digest()
|
|
1427
1584
|
}
|
|
@@ -1438,7 +1595,11 @@ export const hash160 = (msg: number[] | string, enc?: 'hex' | 'utf8'): number[]
|
|
|
1438
1595
|
* @example
|
|
1439
1596
|
* const digest = sha256hmac('deadbeef', 'ffff001d');
|
|
1440
1597
|
*/
|
|
1441
|
-
export const sha256hmac = (
|
|
1598
|
+
export const sha256hmac = (
|
|
1599
|
+
key: number[] | string,
|
|
1600
|
+
msg: number[] | string,
|
|
1601
|
+
enc?: 'hex'
|
|
1602
|
+
): number[] => {
|
|
1442
1603
|
return new SHA256HMAC(key).update(msg, enc).digest()
|
|
1443
1604
|
}
|
|
1444
1605
|
|
|
@@ -1454,7 +1615,11 @@ export const sha256hmac = (key: number[] | string, msg: number[] | string, enc?:
|
|
|
1454
1615
|
* @example
|
|
1455
1616
|
* const digest = sha512hmac('deadbeef', 'ffff001d');
|
|
1456
1617
|
*/
|
|
1457
|
-
export const sha512hmac = (
|
|
1618
|
+
export const sha512hmac = (
|
|
1619
|
+
key: number[] | string,
|
|
1620
|
+
msg: number[] | string,
|
|
1621
|
+
enc?: 'hex'
|
|
1622
|
+
): number[] => {
|
|
1458
1623
|
return new SHA512HMAC(key).update(msg, enc).digest()
|
|
1459
1624
|
}
|
|
1460
1625
|
|
|
@@ -1469,7 +1634,13 @@ export const sha512hmac = (key: number[] | string, msg: number[] | string, enc?:
|
|
|
1469
1634
|
*
|
|
1470
1635
|
* @returns The computed key
|
|
1471
1636
|
*/
|
|
1472
|
-
export function pbkdf2 (
|
|
1637
|
+
export function pbkdf2 (
|
|
1638
|
+
password: number[],
|
|
1639
|
+
salt: number[],
|
|
1640
|
+
iterations: number,
|
|
1641
|
+
keylen: number,
|
|
1642
|
+
digest = 'sha512'
|
|
1643
|
+
): number[] {
|
|
1473
1644
|
if (digest !== 'sha512') {
|
|
1474
1645
|
throw new Error('Only sha512 is supported in this PBKDF2 implementation')
|
|
1475
1646
|
}
|
|
@@ -1481,10 +1652,10 @@ export function pbkdf2 (password: number[], salt: number[], iterations: number,
|
|
|
1481
1652
|
const l = Math.ceil(keylen / hLen)
|
|
1482
1653
|
|
|
1483
1654
|
for (let i = 1; i <= l; i++) {
|
|
1484
|
-
block1[salt.length] = (i >> 24) &
|
|
1485
|
-
block1[salt.length + 1] = (i >> 16) &
|
|
1486
|
-
block1[salt.length + 2] = (i >> 8) &
|
|
1487
|
-
block1[salt.length + 3] = i &
|
|
1655
|
+
block1[salt.length] = (i >> 24) & 0xff // MSB
|
|
1656
|
+
block1[salt.length + 1] = (i >> 16) & 0xff
|
|
1657
|
+
block1[salt.length + 2] = (i >> 8) & 0xff
|
|
1658
|
+
block1[salt.length + 3] = i & 0xff // LSB
|
|
1488
1659
|
|
|
1489
1660
|
const T = sha512hmac(password, block1)
|
|
1490
1661
|
let U = T
|