@bsv/sdk 1.0.0
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/.github/ISSUE_TEMPLATE/bug_report.md +40 -0
- package/.github/ISSUE_TEMPLATE/discussion.md +24 -0
- package/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +23 -0
- package/CHANGELOG.md +72 -0
- package/CONTRIBUTING.md +85 -0
- package/LICENSE.txt +28 -0
- package/README.md +87 -0
- package/ROADMAP.md +3 -0
- package/dist/cjs/mod.js +25 -0
- package/dist/cjs/mod.js.map +1 -0
- package/dist/cjs/package.json +42 -0
- package/dist/cjs/src/compat/BIP39.js +272 -0
- package/dist/cjs/src/compat/BIP39.js.map +1 -0
- package/dist/cjs/src/compat/BSM.js +77 -0
- package/dist/cjs/src/compat/BSM.js.map +1 -0
- package/dist/cjs/src/compat/ECIES.js +483 -0
- package/dist/cjs/src/compat/ECIES.js.map +1 -0
- package/dist/cjs/src/compat/HD.js +326 -0
- package/dist/cjs/src/compat/HD.js.map +1 -0
- package/dist/cjs/src/compat/Mnemonic.js +298 -0
- package/dist/cjs/src/compat/Mnemonic.js.map +1 -0
- package/dist/cjs/src/compat/bip-39-wordlist-en.js +2057 -0
- package/dist/cjs/src/compat/bip-39-wordlist-en.js.map +1 -0
- package/dist/cjs/src/compat/index.js +37 -0
- package/dist/cjs/src/compat/index.js.map +1 -0
- package/dist/cjs/src/messages/EncryptedMessage.js +69 -0
- package/dist/cjs/src/messages/EncryptedMessage.js.map +1 -0
- package/dist/cjs/src/messages/SignedMessage.js +85 -0
- package/dist/cjs/src/messages/SignedMessage.js.map +1 -0
- package/dist/cjs/src/messages/index.js +29 -0
- package/dist/cjs/src/messages/index.js.map +1 -0
- package/dist/cjs/src/primitives/AESGCM.js +384 -0
- package/dist/cjs/src/primitives/AESGCM.js.map +1 -0
- package/dist/cjs/src/primitives/BasePoint.js +19 -0
- package/dist/cjs/src/primitives/BasePoint.js.map +1 -0
- package/dist/cjs/src/primitives/BigNumber.js +4269 -0
- package/dist/cjs/src/primitives/BigNumber.js.map +1 -0
- package/dist/cjs/src/primitives/Curve.js +1126 -0
- package/dist/cjs/src/primitives/Curve.js.map +1 -0
- package/dist/cjs/src/primitives/DRBG.js +99 -0
- package/dist/cjs/src/primitives/DRBG.js.map +1 -0
- package/dist/cjs/src/primitives/ECDSA.js +169 -0
- package/dist/cjs/src/primitives/ECDSA.js.map +1 -0
- package/dist/cjs/src/primitives/Hash.js +1332 -0
- package/dist/cjs/src/primitives/Hash.js.map +1 -0
- package/dist/cjs/src/primitives/JacobianPoint.js +400 -0
- package/dist/cjs/src/primitives/JacobianPoint.js.map +1 -0
- package/dist/cjs/src/primitives/K256.js +111 -0
- package/dist/cjs/src/primitives/K256.js.map +1 -0
- package/dist/cjs/src/primitives/Mersenne.js +118 -0
- package/dist/cjs/src/primitives/Mersenne.js.map +1 -0
- package/dist/cjs/src/primitives/MontgomoryMethod.js +150 -0
- package/dist/cjs/src/primitives/MontgomoryMethod.js.map +1 -0
- package/dist/cjs/src/primitives/Point.js +819 -0
- package/dist/cjs/src/primitives/Point.js.map +1 -0
- package/dist/cjs/src/primitives/PrivateKey.js +190 -0
- package/dist/cjs/src/primitives/PrivateKey.js.map +1 -0
- package/dist/cjs/src/primitives/PublicKey.js +151 -0
- package/dist/cjs/src/primitives/PublicKey.js.map +1 -0
- package/dist/cjs/src/primitives/Random.js +57 -0
- package/dist/cjs/src/primitives/Random.js.map +1 -0
- package/dist/cjs/src/primitives/ReductionContext.js +490 -0
- package/dist/cjs/src/primitives/ReductionContext.js.map +1 -0
- package/dist/cjs/src/primitives/Signature.js +220 -0
- package/dist/cjs/src/primitives/Signature.js.map +1 -0
- package/dist/cjs/src/primitives/SymmetricKey.js +69 -0
- package/dist/cjs/src/primitives/SymmetricKey.js.map +1 -0
- package/dist/cjs/src/primitives/TransactionSignature.js +172 -0
- package/dist/cjs/src/primitives/TransactionSignature.js.map +1 -0
- package/dist/cjs/src/primitives/index.js +45 -0
- package/dist/cjs/src/primitives/index.js.map +1 -0
- package/dist/cjs/src/primitives/utils.js +615 -0
- package/dist/cjs/src/primitives/utils.js.map +1 -0
- package/dist/cjs/src/script/LockingScript.js +35 -0
- package/dist/cjs/src/script/LockingScript.js.map +1 -0
- package/dist/cjs/src/script/OP.js +208 -0
- package/dist/cjs/src/script/OP.js.map +1 -0
- package/dist/cjs/src/script/Script.js +429 -0
- package/dist/cjs/src/script/Script.js.map +1 -0
- package/dist/cjs/src/script/ScriptChunk.js +3 -0
- package/dist/cjs/src/script/ScriptChunk.js.map +1 -0
- package/dist/cjs/src/script/ScriptTemplate.js +3 -0
- package/dist/cjs/src/script/ScriptTemplate.js.map +1 -0
- package/dist/cjs/src/script/Spend.js +1252 -0
- package/dist/cjs/src/script/Spend.js.map +1 -0
- package/dist/cjs/src/script/UnlockingScript.js +35 -0
- package/dist/cjs/src/script/UnlockingScript.js.map +1 -0
- package/dist/cjs/src/script/index.js +32 -0
- package/dist/cjs/src/script/index.js.map +1 -0
- package/dist/cjs/src/script/templates/P2PKH.js +98 -0
- package/dist/cjs/src/script/templates/P2PKH.js.map +1 -0
- package/dist/cjs/src/script/templates/RPuzzle.js +125 -0
- package/dist/cjs/src/script/templates/RPuzzle.js.map +1 -0
- package/dist/cjs/src/script/templates/index.js +11 -0
- package/dist/cjs/src/script/templates/index.js.map +1 -0
- package/dist/cjs/src/transaction/Broadcaster.js +3 -0
- package/dist/cjs/src/transaction/Broadcaster.js.map +1 -0
- package/dist/cjs/src/transaction/ChainTracker.js +3 -0
- package/dist/cjs/src/transaction/ChainTracker.js.map +1 -0
- package/dist/cjs/src/transaction/FeeModel.js +3 -0
- package/dist/cjs/src/transaction/FeeModel.js.map +1 -0
- package/dist/cjs/src/transaction/MerklePath.js +239 -0
- package/dist/cjs/src/transaction/MerklePath.js.map +1 -0
- package/dist/cjs/src/transaction/Transaction.js +557 -0
- package/dist/cjs/src/transaction/Transaction.js.map +1 -0
- package/dist/cjs/src/transaction/TransactionInput.js +3 -0
- package/dist/cjs/src/transaction/TransactionInput.js.map +1 -0
- package/dist/cjs/src/transaction/TransactionOutput.js +3 -0
- package/dist/cjs/src/transaction/TransactionOutput.js.map +1 -0
- package/dist/cjs/src/transaction/broadcasters/ARC.js +101 -0
- package/dist/cjs/src/transaction/broadcasters/ARC.js.map +1 -0
- package/dist/cjs/src/transaction/broadcasters/index.js +9 -0
- package/dist/cjs/src/transaction/broadcasters/index.js.map +1 -0
- package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js +69 -0
- package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -0
- package/dist/cjs/src/transaction/fee-models/index.js +9 -0
- package/dist/cjs/src/transaction/fee-models/index.js.map +1 -0
- package/dist/cjs/src/transaction/index.js +11 -0
- package/dist/cjs/src/transaction/index.js.map +1 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/esm/mod.js +9 -0
- package/dist/esm/mod.js.map +1 -0
- package/dist/esm/src/compat/BIP39.js +272 -0
- package/dist/esm/src/compat/BIP39.js.map +1 -0
- package/dist/esm/src/compat/BSM.js +45 -0
- package/dist/esm/src/compat/BSM.js.map +1 -0
- package/dist/esm/src/compat/ECIES.js +454 -0
- package/dist/esm/src/compat/ECIES.js.map +1 -0
- package/dist/esm/src/compat/HD.js +304 -0
- package/dist/esm/src/compat/HD.js.map +1 -0
- package/dist/esm/src/compat/Mnemonic.js +272 -0
- package/dist/esm/src/compat/Mnemonic.js.map +1 -0
- package/dist/esm/src/compat/bip-39-wordlist-en.js +2054 -0
- package/dist/esm/src/compat/bip-39-wordlist-en.js.map +1 -0
- package/dist/esm/src/compat/index.js +5 -0
- package/dist/esm/src/compat/index.js.map +1 -0
- package/dist/esm/src/messages/EncryptedMessage.js +61 -0
- package/dist/esm/src/messages/EncryptedMessage.js.map +1 -0
- package/dist/esm/src/messages/SignedMessage.js +77 -0
- package/dist/esm/src/messages/SignedMessage.js.map +1 -0
- package/dist/esm/src/messages/index.js +3 -0
- package/dist/esm/src/messages/index.js.map +1 -0
- package/dist/esm/src/primitives/AESGCM.js +371 -0
- package/dist/esm/src/primitives/AESGCM.js.map +1 -0
- package/dist/esm/src/primitives/BasePoint.js +16 -0
- package/dist/esm/src/primitives/BasePoint.js.map +1 -0
- package/dist/esm/src/primitives/BigNumber.js +4304 -0
- package/dist/esm/src/primitives/BigNumber.js.map +1 -0
- package/dist/esm/src/primitives/Curve.js +1141 -0
- package/dist/esm/src/primitives/Curve.js.map +1 -0
- package/dist/esm/src/primitives/DRBG.js +98 -0
- package/dist/esm/src/primitives/DRBG.js.map +1 -0
- package/dist/esm/src/primitives/ECDSA.js +161 -0
- package/dist/esm/src/primitives/ECDSA.js.map +1 -0
- package/dist/esm/src/primitives/Hash.js +1336 -0
- package/dist/esm/src/primitives/Hash.js.map +1 -0
- package/dist/esm/src/primitives/JacobianPoint.js +398 -0
- package/dist/esm/src/primitives/JacobianPoint.js.map +1 -0
- package/dist/esm/src/primitives/K256.js +105 -0
- package/dist/esm/src/primitives/K256.js.map +1 -0
- package/dist/esm/src/primitives/Mersenne.js +117 -0
- package/dist/esm/src/primitives/Mersenne.js.map +1 -0
- package/dist/esm/src/primitives/MontgomoryMethod.js +149 -0
- package/dist/esm/src/primitives/MontgomoryMethod.js.map +1 -0
- package/dist/esm/src/primitives/Point.js +816 -0
- package/dist/esm/src/primitives/Point.js.map +1 -0
- package/dist/esm/src/primitives/PrivateKey.js +184 -0
- package/dist/esm/src/primitives/PrivateKey.js.map +1 -0
- package/dist/esm/src/primitives/PublicKey.js +145 -0
- package/dist/esm/src/primitives/PublicKey.js.map +1 -0
- package/dist/esm/src/primitives/Random.js +56 -0
- package/dist/esm/src/primitives/Random.js.map +1 -0
- package/dist/esm/src/primitives/ReductionContext.js +486 -0
- package/dist/esm/src/primitives/ReductionContext.js.map +1 -0
- package/dist/esm/src/primitives/Signature.js +223 -0
- package/dist/esm/src/primitives/Signature.js.map +1 -0
- package/dist/esm/src/primitives/SymmetricKey.js +63 -0
- package/dist/esm/src/primitives/SymmetricKey.js.map +1 -0
- package/dist/esm/src/primitives/TransactionSignature.js +144 -0
- package/dist/esm/src/primitives/TransactionSignature.js.map +1 -0
- package/dist/esm/src/primitives/index.js +9 -0
- package/dist/esm/src/primitives/index.js.map +1 -0
- package/dist/esm/src/primitives/utils.js +601 -0
- package/dist/esm/src/primitives/utils.js.map +1 -0
- package/dist/esm/src/script/LockingScript.js +29 -0
- package/dist/esm/src/script/LockingScript.js.map +1 -0
- package/dist/esm/src/script/OP.js +206 -0
- package/dist/esm/src/script/OP.js.map +1 -0
- package/dist/esm/src/script/Script.js +424 -0
- package/dist/esm/src/script/Script.js.map +1 -0
- package/dist/esm/src/script/ScriptChunk.js +2 -0
- package/dist/esm/src/script/ScriptChunk.js.map +1 -0
- package/dist/esm/src/script/ScriptTemplate.js +2 -0
- package/dist/esm/src/script/ScriptTemplate.js.map +1 -0
- package/dist/esm/src/script/Spend.js +1240 -0
- package/dist/esm/src/script/Spend.js.map +1 -0
- package/dist/esm/src/script/UnlockingScript.js +29 -0
- package/dist/esm/src/script/UnlockingScript.js.map +1 -0
- package/dist/esm/src/script/index.js +7 -0
- package/dist/esm/src/script/index.js.map +1 -0
- package/dist/esm/src/script/templates/P2PKH.js +92 -0
- package/dist/esm/src/script/templates/P2PKH.js.map +1 -0
- package/dist/esm/src/script/templates/RPuzzle.js +119 -0
- package/dist/esm/src/script/templates/RPuzzle.js.map +1 -0
- package/dist/esm/src/script/templates/index.js +3 -0
- package/dist/esm/src/script/templates/index.js.map +1 -0
- package/dist/esm/src/transaction/Broadcaster.js +2 -0
- package/dist/esm/src/transaction/Broadcaster.js.map +1 -0
- package/dist/esm/src/transaction/ChainTracker.js +2 -0
- package/dist/esm/src/transaction/ChainTracker.js.map +1 -0
- package/dist/esm/src/transaction/FeeModel.js +2 -0
- package/dist/esm/src/transaction/FeeModel.js.map +1 -0
- package/dist/esm/src/transaction/MerklePath.js +237 -0
- package/dist/esm/src/transaction/MerklePath.js.map +1 -0
- package/dist/esm/src/transaction/Transaction.js +557 -0
- package/dist/esm/src/transaction/Transaction.js.map +1 -0
- package/dist/esm/src/transaction/TransactionInput.js +2 -0
- package/dist/esm/src/transaction/TransactionInput.js.map +1 -0
- package/dist/esm/src/transaction/TransactionOutput.js +2 -0
- package/dist/esm/src/transaction/TransactionOutput.js.map +1 -0
- package/dist/esm/src/transaction/broadcasters/ARC.js +100 -0
- package/dist/esm/src/transaction/broadcasters/ARC.js.map +1 -0
- package/dist/esm/src/transaction/broadcasters/index.js +2 -0
- package/dist/esm/src/transaction/broadcasters/index.js.map +1 -0
- package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js +71 -0
- package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -0
- package/dist/esm/src/transaction/fee-models/index.js +2 -0
- package/dist/esm/src/transaction/fee-models/index.js.map +1 -0
- package/dist/esm/src/transaction/index.js +3 -0
- package/dist/esm/src/transaction/index.js.map +1 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
- package/dist/types/mod.d.ts +9 -0
- package/dist/types/mod.d.ts.map +1 -0
- package/dist/types/src/compat/BIP39.d.ts +132 -0
- package/dist/types/src/compat/BIP39.d.ts.map +1 -0
- package/dist/types/src/compat/BSM.d.ts +28 -0
- package/dist/types/src/compat/BSM.d.ts.map +1 -0
- package/dist/types/src/compat/ECIES.d.ts +62 -0
- package/dist/types/src/compat/ECIES.d.ts.map +1 -0
- package/dist/types/src/compat/HD.d.ts +117 -0
- package/dist/types/src/compat/HD.d.ts.map +1 -0
- package/dist/types/src/compat/Mnemonic.d.ts +132 -0
- package/dist/types/src/compat/Mnemonic.d.ts.map +1 -0
- package/dist/types/src/compat/bip-39-wordlist-en.d.ts +5 -0
- package/dist/types/src/compat/bip-39-wordlist-en.d.ts.map +1 -0
- package/dist/types/src/compat/index.d.ts +5 -0
- package/dist/types/src/compat/index.d.ts.map +1 -0
- package/dist/types/src/messages/EncryptedMessage.d.ts +20 -0
- package/dist/types/src/messages/EncryptedMessage.d.ts.map +1 -0
- package/dist/types/src/messages/SignedMessage.d.ts +21 -0
- package/dist/types/src/messages/SignedMessage.d.ts.map +1 -0
- package/dist/types/src/messages/index.d.ts +3 -0
- package/dist/types/src/messages/index.d.ts.map +1 -0
- package/dist/types/src/primitives/AESGCM.d.ts +14 -0
- package/dist/types/src/primitives/AESGCM.d.ts.map +1 -0
- package/dist/types/src/primitives/BasePoint.d.ts +22 -0
- package/dist/types/src/primitives/BasePoint.d.ts.map +1 -0
- package/dist/types/src/primitives/BigNumber.d.ts +1895 -0
- package/dist/types/src/primitives/BigNumber.d.ts.map +1 -0
- package/dist/types/src/primitives/Curve.d.ts +55 -0
- package/dist/types/src/primitives/Curve.d.ts.map +1 -0
- package/dist/types/src/primitives/DRBG.d.ts +54 -0
- package/dist/types/src/primitives/DRBG.d.ts.map +1 -0
- package/dist/types/src/primitives/ECDSA.d.ts +39 -0
- package/dist/types/src/primitives/ECDSA.d.ts.map +1 -0
- package/dist/types/src/primitives/Hash.d.ts +411 -0
- package/dist/types/src/primitives/Hash.d.ts.map +1 -0
- package/dist/types/src/primitives/JacobianPoint.d.ts +164 -0
- package/dist/types/src/primitives/JacobianPoint.d.ts.map +1 -0
- package/dist/types/src/primitives/K256.d.ts +53 -0
- package/dist/types/src/primitives/K256.d.ts.map +1 -0
- package/dist/types/src/primitives/Mersenne.d.ts +72 -0
- package/dist/types/src/primitives/Mersenne.d.ts.map +1 -0
- package/dist/types/src/primitives/MontgomoryMethod.d.ts +96 -0
- package/dist/types/src/primitives/MontgomoryMethod.d.ts.map +1 -0
- package/dist/types/src/primitives/Point.d.ts +303 -0
- package/dist/types/src/primitives/Point.d.ts.map +1 -0
- package/dist/types/src/primitives/PrivateKey.d.ts +143 -0
- package/dist/types/src/primitives/PrivateKey.d.ts.map +1 -0
- package/dist/types/src/primitives/PublicKey.d.ts +108 -0
- package/dist/types/src/primitives/PublicKey.d.ts.map +1 -0
- package/dist/types/src/primitives/Random.d.ts +14 -0
- package/dist/types/src/primitives/Random.d.ts.map +1 -0
- package/dist/types/src/primitives/ReductionContext.d.ts +308 -0
- package/dist/types/src/primitives/ReductionContext.d.ts.map +1 -0
- package/dist/types/src/primitives/Signature.d.ts +100 -0
- package/dist/types/src/primitives/Signature.d.ts.map +1 -0
- package/dist/types/src/primitives/SymmetricKey.d.ts +44 -0
- package/dist/types/src/primitives/SymmetricKey.d.ts.map +1 -0
- package/dist/types/src/primitives/TransactionSignature.d.ts +36 -0
- package/dist/types/src/primitives/TransactionSignature.d.ts.map +1 -0
- package/dist/types/src/primitives/index.d.ts +9 -0
- package/dist/types/src/primitives/index.d.ts.map +1 -0
- package/dist/types/src/primitives/utils.d.ts +118 -0
- package/dist/types/src/primitives/utils.d.ts.map +1 -0
- package/dist/types/src/script/LockingScript.d.ts +25 -0
- package/dist/types/src/script/LockingScript.d.ts.map +1 -0
- package/dist/types/src/script/OP.d.ts +193 -0
- package/dist/types/src/script/OP.d.ts.map +1 -0
- package/dist/types/src/script/Script.d.ts +148 -0
- package/dist/types/src/script/Script.d.ts.map +1 -0
- package/dist/types/src/script/ScriptChunk.d.ts +8 -0
- package/dist/types/src/script/ScriptChunk.d.ts.map +1 -0
- package/dist/types/src/script/ScriptTemplate.d.ts +33 -0
- package/dist/types/src/script/ScriptTemplate.d.ts.map +1 -0
- package/dist/types/src/script/Spend.d.ts +103 -0
- package/dist/types/src/script/Spend.d.ts.map +1 -0
- package/dist/types/src/script/UnlockingScript.d.ts +25 -0
- package/dist/types/src/script/UnlockingScript.d.ts.map +1 -0
- package/dist/types/src/script/index.d.ts +8 -0
- package/dist/types/src/script/index.d.ts.map +1 -0
- package/dist/types/src/script/templates/P2PKH.d.ts +37 -0
- package/dist/types/src/script/templates/P2PKH.d.ts.map +1 -0
- package/dist/types/src/script/templates/RPuzzle.d.ts +47 -0
- package/dist/types/src/script/templates/RPuzzle.d.ts.map +1 -0
- package/dist/types/src/script/templates/index.d.ts +3 -0
- package/dist/types/src/script/templates/index.d.ts.map +1 -0
- package/dist/types/src/transaction/Broadcaster.d.ts +39 -0
- package/dist/types/src/transaction/Broadcaster.d.ts.map +1 -0
- package/dist/types/src/transaction/ChainTracker.d.ts +23 -0
- package/dist/types/src/transaction/ChainTracker.d.ts.map +1 -0
- package/dist/types/src/transaction/FeeModel.d.ts +12 -0
- package/dist/types/src/transaction/FeeModel.d.ts.map +1 -0
- package/dist/types/src/transaction/MerklePath.d.ts +91 -0
- package/dist/types/src/transaction/MerklePath.d.ts.map +1 -0
- package/dist/types/src/transaction/Transaction.d.ts +181 -0
- package/dist/types/src/transaction/Transaction.d.ts.map +1 -0
- package/dist/types/src/transaction/TransactionInput.d.ts +63 -0
- package/dist/types/src/transaction/TransactionInput.d.ts.map +1 -0
- package/dist/types/src/transaction/TransactionOutput.d.ts +36 -0
- package/dist/types/src/transaction/TransactionOutput.d.ts.map +1 -0
- package/dist/types/src/transaction/broadcasters/ARC.d.ts +28 -0
- package/dist/types/src/transaction/broadcasters/ARC.d.ts.map +1 -0
- package/dist/types/src/transaction/broadcasters/index.d.ts +2 -0
- package/dist/types/src/transaction/broadcasters/index.d.ts.map +1 -0
- package/dist/types/src/transaction/fee-models/SatoshisPerKilobyte.d.ts +26 -0
- package/dist/types/src/transaction/fee-models/SatoshisPerKilobyte.d.ts.map +1 -0
- package/dist/types/src/transaction/fee-models/index.d.ts +2 -0
- package/dist/types/src/transaction/fee-models/index.d.ts.map +1 -0
- package/dist/types/src/transaction/index.d.ts +7 -0
- package/dist/types/src/transaction/index.d.ts.map +1 -0
- package/dist/types/tsconfig.types.tsbuildinfo +1 -0
- package/docs/README.md +9 -0
- package/docs/compat.md +2856 -0
- package/docs/getting-started/COMMONJS.md +94 -0
- package/docs/getting-started/REACT-TS.md +131 -0
- package/docs/getting-started/TS-NODE.md +106 -0
- package/docs/getting-started/VUE.md +103 -0
- package/docs/messages.md +146 -0
- package/docs/primitives.md +7440 -0
- package/docs/script.md +766 -0
- package/docs/transaction.md +741 -0
- package/jest.config.js +6 -0
- package/mod.ts +8 -0
- package/package.json +137 -0
- package/src/compat/BSM.ts +51 -0
- package/src/compat/ECIES.ts +557 -0
- package/src/compat/HD.ts +348 -0
- package/src/compat/Mnemonic.ts +295 -0
- package/src/compat/__tests/BSM.test.ts +38 -0
- package/src/compat/__tests/ECIES.test.ts +90 -0
- package/src/compat/__tests/HD.test.ts +405 -0
- package/src/compat/__tests/Mnemonic.test.ts +177 -0
- package/src/compat/__tests/Mnemonic.vectors.ts +172 -0
- package/src/compat/bip-39-wordlist-en.ts +2053 -0
- package/src/compat/index.ts +4 -0
- package/src/messages/EncryptedMessage.ts +70 -0
- package/src/messages/SignedMessage.ts +87 -0
- package/src/messages/__tests/EncryptedMessage.test.ts +36 -0
- package/src/messages/__tests/SignedMessage.test.ts +53 -0
- package/src/messages/index.ts +2 -0
- package/src/primitives/AESGCM.ts +479 -0
- package/src/primitives/BasePoint.ts +21 -0
- package/src/primitives/BigNumber.ts +4619 -0
- package/src/primitives/Curve.ts +1163 -0
- package/src/primitives/DRBG.ts +102 -0
- package/src/primitives/ECDSA.ts +164 -0
- package/src/primitives/Hash.ts +1420 -0
- package/src/primitives/JacobianPoint.ts +410 -0
- package/src/primitives/K256.ts +116 -0
- package/src/primitives/Mersenne.ts +123 -0
- package/src/primitives/MontgomoryMethod.ts +160 -0
- package/src/primitives/Point.ts +852 -0
- package/src/primitives/PrivateKey.ts +195 -0
- package/src/primitives/PublicKey.ts +154 -0
- package/src/primitives/Random.ts +55 -0
- package/src/primitives/ReductionContext.ts +528 -0
- package/src/primitives/Signature.ts +235 -0
- package/src/primitives/SymmetricKey.ts +75 -0
- package/src/primitives/TransactionSignature.ts +189 -0
- package/src/primitives/__tests/AESGCM.test.ts +338 -0
- package/src/primitives/__tests/BRC42.private.vectors.ts +33 -0
- package/src/primitives/__tests/BRC42.public.vectors.ts +33 -0
- package/src/primitives/__tests/BigNumber.arithmatic.test.ts +572 -0
- package/src/primitives/__tests/BigNumber.binary.test.ts +203 -0
- package/src/primitives/__tests/BigNumber.constructor.test.ts +176 -0
- package/src/primitives/__tests/BigNumber.dhGroup.test.ts +18 -0
- package/src/primitives/__tests/BigNumber.fixtures.ts +264 -0
- package/src/primitives/__tests/BigNumber.serializers.test.ts +157 -0
- package/src/primitives/__tests/BigNumber.utils.test.ts +347 -0
- package/src/primitives/__tests/Curve.unit.test.ts +192 -0
- package/src/primitives/__tests/DRBG.test.ts +18 -0
- package/src/primitives/__tests/DRBG.vectors.ts +167 -0
- package/src/primitives/__tests/ECDH.test.ts +31 -0
- package/src/primitives/__tests/ECDSA.test.ts +58 -0
- package/src/primitives/__tests/HMAC.test.ts +59 -0
- package/src/primitives/__tests/Hash.test.ts +121 -0
- package/src/primitives/__tests/PBKDF2.vectors.ts +119 -0
- package/src/primitives/__tests/PrivateKey.test.ts +17 -0
- package/src/primitives/__tests/PublicKey.test.ts +66 -0
- package/src/primitives/__tests/Random.test.ts +14 -0
- package/src/primitives/__tests/Reader.test.ts +296 -0
- package/src/primitives/__tests/ReductionContext.test.ts +279 -0
- package/src/primitives/__tests/SymmetricKey.test.ts +58 -0
- package/src/primitives/__tests/SymmetricKey.vectors.ts +40 -0
- package/src/primitives/__tests/Writer.test.ts +198 -0
- package/src/primitives/__tests/sighash.vectors.ts +3503 -0
- package/src/primitives/__tests/utils.test.ts +108 -0
- package/src/primitives/index.ts +8 -0
- package/src/primitives/utils.ts +665 -0
- package/src/script/LockingScript.ts +30 -0
- package/src/script/OP.ts +219 -0
- package/src/script/Script.ts +426 -0
- package/src/script/ScriptChunk.ts +7 -0
- package/src/script/ScriptTemplate.ts +36 -0
- package/src/script/Spend.ts +1379 -0
- package/src/script/UnlockingScript.ts +30 -0
- package/src/script/__tests/Script.test.ts +369 -0
- package/src/script/__tests/Spend.test.ts +248 -0
- package/src/script/__tests/script.invalid.vectors.ts +925 -0
- package/src/script/__tests/script.valid.vectors.ts +1120 -0
- package/src/script/__tests/scriptFromVector.ts +42 -0
- package/src/script/__tests/spend.valid.vectors.ts +2288 -0
- package/src/script/index.ts +7 -0
- package/src/script/templates/P2PKH.ts +109 -0
- package/src/script/templates/RPuzzle.ts +140 -0
- package/src/script/templates/index.ts +2 -0
- package/src/transaction/Broadcaster.ts +42 -0
- package/src/transaction/ChainTracker.ts +22 -0
- package/src/transaction/FeeModel.ts +13 -0
- package/src/transaction/MerklePath.ts +259 -0
- package/src/transaction/Transaction.ts +602 -0
- package/src/transaction/TransactionInput.ts +63 -0
- package/src/transaction/TransactionOutput.ts +37 -0
- package/src/transaction/__tests/MerklePath.test.ts +181 -0
- package/src/transaction/__tests/Transaction.test.ts +413 -0
- package/src/transaction/__tests/bigtx.vectors.ts +4 -0
- package/src/transaction/__tests/bump.invalid.vectors.ts +8 -0
- package/src/transaction/__tests/bump.valid.vectors.ts +4 -0
- package/src/transaction/__tests/tx.invalid.vectors.ts +281 -0
- package/src/transaction/__tests/tx.valid.vectors.ts +364 -0
- package/src/transaction/broadcasters/ARC.ts +106 -0
- package/src/transaction/broadcasters/__tests/ARC.test.ts +115 -0
- package/src/transaction/broadcasters/index.ts +1 -0
- package/src/transaction/fee-models/SatoshisPerKilobyte.ts +71 -0
- package/src/transaction/fee-models/index.ts +1 -0
- package/src/transaction/index.ts +6 -0
- package/ts2md.json +5 -0
- package/tsconfig.base.json +26 -0
- package/tsconfig.cjs.json +11 -0
- package/tsconfig.eslint.json +12 -0
- package/tsconfig.esm.json +9 -0
- package/tsconfig.json +17 -0
- package/tsconfig.types.json +11 -0
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/* eslint-env jest */
|
|
2
|
+
import Curve from '../../../dist/cjs/src/primitives/Curve.js'
|
|
3
|
+
import Point from '../../../dist/cjs/src/primitives/Point'
|
|
4
|
+
import JPoint from '../../../dist/cjs/src/primitives/JacobianPoint'
|
|
5
|
+
import BigNumber from '../../../dist/cjs/src/primitives/BigNumber'
|
|
6
|
+
|
|
7
|
+
describe('Curve', () => {
|
|
8
|
+
it('should work with secp256k1', () => {
|
|
9
|
+
const curve = new Curve()
|
|
10
|
+
|
|
11
|
+
const p = new Point(
|
|
12
|
+
'79be667e f9dcbbac 55a06295 ce870b07 029bfcdb 2dce28d9 59f2815b 16f81798',
|
|
13
|
+
'483ada77 26a3c465 5da4fbfc 0e1108a8 fd17b448 a6855419 9c47d08f fb10d4b8'
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
expect(p.validate()).toBe(true)
|
|
17
|
+
expect(p.dbl().validate()).toBe(true)
|
|
18
|
+
expect(p.toJ().dbl().toP().validate()).toBe(true)
|
|
19
|
+
expect(p.mul(new BigNumber('79be667e f9dcbbac 55a06295 ce870b07', 16)).validate()).toBe(true)
|
|
20
|
+
|
|
21
|
+
// Endomorphism test
|
|
22
|
+
expect(curve.endo).toBeDefined()
|
|
23
|
+
expect(
|
|
24
|
+
curve.endo.beta.fromRed().toString(16)
|
|
25
|
+
).toEqual('7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee')
|
|
26
|
+
expect(
|
|
27
|
+
curve.endo.lambda.toString(16)
|
|
28
|
+
).toEqual('5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72')
|
|
29
|
+
|
|
30
|
+
const k = new BigNumber('1234567890123456789012345678901234', 16)
|
|
31
|
+
const split = curve._endoSplit(k)
|
|
32
|
+
const testK = split.k1.add(split.k2.mul(curve.endo.lambda)).umod(curve.n)
|
|
33
|
+
|
|
34
|
+
expect(testK.toString(16)).toEqual(k.toString(16))
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
it('should compute this problematic secp256k1 multiplication', () => {
|
|
38
|
+
const curve = new Curve()
|
|
39
|
+
const g1 = curve.g // precomputed g
|
|
40
|
+
expect(g1.precomputed).toBeDefined()
|
|
41
|
+
const g2 = new Point(g1.getX(), g1.getY()) // not precomputed g
|
|
42
|
+
expect(g2.precomputed).toBeNull()
|
|
43
|
+
|
|
44
|
+
const a = new BigNumber('6d1229a6b24c2e775c062870ad26bc261051e0198c67203167273c7c62538846', 16)
|
|
45
|
+
const p1 = g1.mul(a)
|
|
46
|
+
const p2 = g2.mul(a)
|
|
47
|
+
|
|
48
|
+
expect(p1.eq(p2)).toBe(true)
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
it('should not use fixed NAF when k is too large', () => {
|
|
52
|
+
const curve = new Curve()
|
|
53
|
+
const g1 = curve.g // precomputed g
|
|
54
|
+
expect(g1.precomputed).toBeDefined()
|
|
55
|
+
const g2 = new Point(g1.getX(), g1.getY()) // not precomputed g
|
|
56
|
+
expect(g2.precomputed).toBeNull()
|
|
57
|
+
|
|
58
|
+
const a = new BigNumber(
|
|
59
|
+
'6d1229a6b24c2e775c062870ad26bc26' +
|
|
60
|
+
'1051e0198c67203167273c7c6253884612345678',
|
|
61
|
+
16)
|
|
62
|
+
const p1 = g1.mul(a)
|
|
63
|
+
const p2 = g2.mul(a)
|
|
64
|
+
|
|
65
|
+
expect(p1.eq(p2)).toBe(true)
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
it('should not fail on secp256k1 regression', () => {
|
|
69
|
+
const curve = new Curve()
|
|
70
|
+
const k1 = new BigNumber('32efeba414cd0c830aed727749e816a01c471831536fd2fce28c56b54f5a3bb1', 16)
|
|
71
|
+
const k2 = new BigNumber('5f2e49b5d64e53f9811545434706cde4de528af97bfd49fde1f6cf792ee37a8c', 16)
|
|
72
|
+
|
|
73
|
+
let p1 = curve.g.mul(k1)
|
|
74
|
+
let p2 = curve.g.mul(k2)
|
|
75
|
+
|
|
76
|
+
// 2 + 2 + 1 = 2 + 1 + 2
|
|
77
|
+
const two = p2.dbl()
|
|
78
|
+
const five = two.dbl().add(p2)
|
|
79
|
+
const three = two.add(p2)
|
|
80
|
+
const maybeFive = three.add(two)
|
|
81
|
+
|
|
82
|
+
expect(maybeFive.eq(five)).toBe(true)
|
|
83
|
+
|
|
84
|
+
p1 = p1.mul(k2)
|
|
85
|
+
p2 = p2.mul(k1)
|
|
86
|
+
|
|
87
|
+
expect(p1.validate()).toBe(true)
|
|
88
|
+
expect(p2.validate()).toBe(true)
|
|
89
|
+
expect(p1.eq(p2)).toBe(true)
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
test('should correctly double the affine point on secp256k1', () => {
|
|
93
|
+
let bad: any = {
|
|
94
|
+
x: '026a2073b1ef6fab47ace18e60e728a05180a82755bbcec9a0abc08ad9f7a3d4',
|
|
95
|
+
y: '9cd8cb48c3281596139f147c1364a3ede88d3f310fdb0eb98c924e599ca1b3c9',
|
|
96
|
+
z: 'd78587ad45e4102f48b54b5d85598296e069ce6085002e169c6bad78ddc6d9bd'
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
let good: any = {
|
|
100
|
+
x: 'e7789226739ac2eb3c7ccb2a9a910066beeed86cdb4e0f8a7fee8eeb29dc7016',
|
|
101
|
+
y: '4b76b191fd6d47d07828ea965e275b76d0e3e0196cd5056d38384fbb819f9fcb',
|
|
102
|
+
z: 'cbf8d99056618ba132d6145b904eee1ce566e0feedb9595139c45f84e90cfa7d'
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// const curve = new Curve()
|
|
106
|
+
bad = new JPoint(bad.x, bad.y, bad.z)
|
|
107
|
+
good = new JPoint(good.x, good.y, good.z)
|
|
108
|
+
|
|
109
|
+
// They are the same points
|
|
110
|
+
expect(bad.add(good.neg()).isInfinity()).toBe(true)
|
|
111
|
+
|
|
112
|
+
// But doubling borks them out
|
|
113
|
+
expect(bad.dbl().add(good.dbl().neg()).isInfinity()).toBe(true)
|
|
114
|
+
})
|
|
115
|
+
|
|
116
|
+
test('should correctly handle scalar multiplication of zero', () => {
|
|
117
|
+
const curve = new Curve()
|
|
118
|
+
const p1 = curve.g.mul('0')
|
|
119
|
+
const p2 = p1.mul('2')
|
|
120
|
+
expect(p1.eq(p2)).toBe(true)
|
|
121
|
+
})
|
|
122
|
+
})
|
|
123
|
+
|
|
124
|
+
describe('Point codec', () => {
|
|
125
|
+
const makeShortTest = (definition: any): any => {
|
|
126
|
+
const curve = new Curve()
|
|
127
|
+
|
|
128
|
+
return () => {
|
|
129
|
+
const co = definition.coordinates
|
|
130
|
+
const p = new Point(co.x, co.y)
|
|
131
|
+
|
|
132
|
+
// Encodes as expected
|
|
133
|
+
expect(p.encode(false, 'hex')).toBe(definition.encoded)
|
|
134
|
+
expect(p.encode(true, 'hex')).toBe(definition.compactEncoded)
|
|
135
|
+
|
|
136
|
+
// Decodes as expected
|
|
137
|
+
expect(Point.fromString(definition.encoded).eq(p)).toBe(true)
|
|
138
|
+
expect(Point.fromString(definition.compactEncoded).eq(p)).toBe(true)
|
|
139
|
+
expect(Point.fromString(definition.hybrid).eq(p)).toBe(true)
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
const shortPointEvenY = {
|
|
144
|
+
coordinates: {
|
|
145
|
+
x: '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
|
|
146
|
+
y: '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8'
|
|
147
|
+
},
|
|
148
|
+
compactEncoded:
|
|
149
|
+
'02' +
|
|
150
|
+
'79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
|
|
151
|
+
encoded:
|
|
152
|
+
'04' +
|
|
153
|
+
'79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798' +
|
|
154
|
+
'483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
|
|
155
|
+
hybrid:
|
|
156
|
+
'06' +
|
|
157
|
+
'79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798' +
|
|
158
|
+
'483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8'
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const shortPointOddY = {
|
|
162
|
+
coordinates: {
|
|
163
|
+
x: 'fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556',
|
|
164
|
+
y: 'ae12777aacfbb620f3be96017f45c560de80f0f6518fe4a03c870c36b075f297'
|
|
165
|
+
},
|
|
166
|
+
compactEncoded:
|
|
167
|
+
'03' +
|
|
168
|
+
'fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556',
|
|
169
|
+
encoded:
|
|
170
|
+
'04' +
|
|
171
|
+
'fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556' +
|
|
172
|
+
'ae12777aacfbb620f3be96017f45c560de80f0f6518fe4a03c870c36b075f297',
|
|
173
|
+
hybrid:
|
|
174
|
+
'07' +
|
|
175
|
+
'fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556' +
|
|
176
|
+
'ae12777aacfbb620f3be96017f45c560de80f0f6518fe4a03c870c36b075f297'
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
it('should throw when trying to decode random bytes', () => {
|
|
180
|
+
expect(() => {
|
|
181
|
+
Point.fromString(
|
|
182
|
+
'05' +
|
|
183
|
+
'79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798')
|
|
184
|
+
}).toThrow()
|
|
185
|
+
})
|
|
186
|
+
|
|
187
|
+
it('should be able to encode/decode a short curve point with even Y',
|
|
188
|
+
makeShortTest(shortPointEvenY))
|
|
189
|
+
|
|
190
|
+
it('should be able to encode/decode a short curve point with odd Y',
|
|
191
|
+
makeShortTest(shortPointOddY))
|
|
192
|
+
})
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import DRBG from '../../../dist/cjs/src/primitives/DRBG'
|
|
2
|
+
import DRBGVectors from './DRBG.vectors'
|
|
3
|
+
|
|
4
|
+
describe('Hmac_DRBG', () => {
|
|
5
|
+
describe('NIST vector', function () {
|
|
6
|
+
DRBGVectors.forEach(function (opt) {
|
|
7
|
+
it('should not fail at ' + opt.name, function () {
|
|
8
|
+
const drbg = new DRBG(opt.entropy, opt.nonce)
|
|
9
|
+
|
|
10
|
+
let last
|
|
11
|
+
for (let i = 0; i < opt.add.length; i++) {
|
|
12
|
+
last = drbg.generate(opt.expected.length / 2)
|
|
13
|
+
}
|
|
14
|
+
expect(last).toEqual(opt.expected)
|
|
15
|
+
})
|
|
16
|
+
})
|
|
17
|
+
})
|
|
18
|
+
})
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
export default [
|
|
2
|
+
{
|
|
3
|
+
name: '0',
|
|
4
|
+
entropy: 'ca851911349384bffe89de1cbdc46e6831e44d34a4fb935ee285dd14b71a7488',
|
|
5
|
+
nonce: '659ba96c601dc69fc902940805ec0ca8',
|
|
6
|
+
pers: null,
|
|
7
|
+
add: [
|
|
8
|
+
null,
|
|
9
|
+
null
|
|
10
|
+
],
|
|
11
|
+
expected: 'e528e9abf2dece54d47c7e75e5fe302149f817ea9fb4bee6f4199697d04d5b89d54fbb978a15b5c443c9ec21036d2460b6f73ebad0dc2aba6e624abf07745bc107694bb7547bb0995f70de25d6b29e2d3011bb19d27676c07162c8b5ccde0668961df86803482cb37ed6d5c0bb8d50cf1f50d476aa0458bdaba806f48be9dcb8'
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
name: '1',
|
|
15
|
+
entropy: '79737479ba4e7642a221fcfd1b820b134e9e3540a35bb48ffae29c20f5418ea3',
|
|
16
|
+
nonce: '3593259c092bef4129bc2c6c9e19f343',
|
|
17
|
+
pers: null,
|
|
18
|
+
add: [
|
|
19
|
+
null,
|
|
20
|
+
null
|
|
21
|
+
],
|
|
22
|
+
expected: 'cf5ad5984f9e43917aa9087380dac46e410ddc8a7731859c84e9d0f31bd43655b924159413e2293b17610f211e09f770f172b8fb693a35b85d3b9e5e63b1dc252ac0e115002e9bedfb4b5b6fd43f33b8e0eafb2d072e1a6fee1f159df9b51e6c8da737e60d5032dd30544ec51558c6f080bdbdab1de8a939e961e06b5f1aca37'
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
name: '2',
|
|
26
|
+
entropy: 'b340907445b97a8b589264de4a17c0bea11bb53ad72f9f33297f05d2879d898d',
|
|
27
|
+
nonce: '65cb27735d83c0708f72684ea58f7ee5',
|
|
28
|
+
pers: null,
|
|
29
|
+
add: [
|
|
30
|
+
null,
|
|
31
|
+
null
|
|
32
|
+
],
|
|
33
|
+
expected: '75183aaaf3574bc68003352ad655d0e9ce9dd17552723b47fab0e84ef903694a32987eeddbdc48efd24195dbdac8a46ba2d972f5808f23a869e71343140361f58b243e62722088fe10a98e43372d252b144e00c89c215a76a121734bdc485486f65c0b16b8963524a3a70e6f38f169c12f6cbdd169dd48fe4421a235847a23ff'
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: '3',
|
|
37
|
+
entropy: '8e159f60060a7d6a7e6fe7c9f769c30b98acb1240b25e7ee33f1da834c0858e7',
|
|
38
|
+
nonce: 'c39d35052201bdcce4e127a04f04d644',
|
|
39
|
+
pers: null,
|
|
40
|
+
add: [
|
|
41
|
+
null,
|
|
42
|
+
null
|
|
43
|
+
],
|
|
44
|
+
expected: '62910a77213967ea93d6457e255af51fc79d49629af2fccd81840cdfbb4910991f50a477cbd29edd8a47c4fec9d141f50dfde7c4d8fcab473eff3cc2ee9e7cc90871f180777a97841597b0dd7e779eff9784b9cc33689fd7d48c0dcd341515ac8fecf5c55a6327aea8d58f97220b7462373e84e3b7417a57e80ce946d6120db5'
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: '4',
|
|
48
|
+
entropy: '74755f196305f7fb6689b2fe6835dc1d81484fc481a6b8087f649a1952f4df6a',
|
|
49
|
+
nonce: 'c36387a544a5f2b78007651a7b74b749',
|
|
50
|
+
pers: null,
|
|
51
|
+
add: [
|
|
52
|
+
null,
|
|
53
|
+
null
|
|
54
|
+
],
|
|
55
|
+
expected: 'b2896f3af4375dab67e8062d82c1a005ef4ed119d13a9f18371b1b873774418684805fd659bfd69964f83a5cfe08667ddad672cafd16befffa9faed49865214f703951b443e6dca22edb636f3308380144b9333de4bcb0735710e4d9266786342fc53babe7bdbe3c01a3addb7f23c63ce2834729fabbd419b47beceb4a460236'
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: '5',
|
|
59
|
+
entropy: '4b222718f56a3260b3c2625a4cf80950b7d6c1250f170bd5c28b118abdf23b2f',
|
|
60
|
+
nonce: '7aed52d0016fcaef0b6492bc40bbe0e9',
|
|
61
|
+
pers: null,
|
|
62
|
+
add: [
|
|
63
|
+
null,
|
|
64
|
+
null
|
|
65
|
+
],
|
|
66
|
+
expected: 'a6da029b3665cd39fd50a54c553f99fed3626f4902ffe322dc51f0670dfe8742ed48415cf04bbad5ed3b23b18b7892d170a7dcf3ef8052d5717cb0c1a8b3010d9a9ea5de70ae5356249c0e098946030c46d9d3d209864539444374d8fbcae068e1d6548fa59e6562e6b2d1acbda8da0318c23752ebc9be0c1c1c5b3cf66dd967'
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: '6',
|
|
70
|
+
entropy: 'b512633f27fb182a076917e39888ba3ff35d23c3742eb8f3c635a044163768e0',
|
|
71
|
+
nonce: 'e2c39b84629a3de5c301db5643af1c21',
|
|
72
|
+
pers: null,
|
|
73
|
+
add: [
|
|
74
|
+
null,
|
|
75
|
+
null
|
|
76
|
+
],
|
|
77
|
+
expected: 'fb931d0d0194a97b48d5d4c231fdad5c61aedf1c3a55ac24983ecbf38487b1c93396c6b86ff3920cfa8c77e0146de835ea5809676e702dee6a78100da9aa43d8ec0bf5720befa71f82193205ac2ea403e8d7e0e6270b366dc4200be26afd9f63b7e79286a35c688c57cbff55ac747d4c28bb80a2b2097b3b62ea439950d75dff'
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
name: '7',
|
|
81
|
+
entropy: 'aae3ffc8605a975befefcea0a7a286642bc3b95fb37bd0eb0585a4cabf8b3d1e',
|
|
82
|
+
nonce: '9504c3c0c4310c1c0746a036c91d9034',
|
|
83
|
+
pers: null,
|
|
84
|
+
add: [
|
|
85
|
+
null,
|
|
86
|
+
null
|
|
87
|
+
],
|
|
88
|
+
expected: '2819bd3b0d216dad59ddd6c354c4518153a2b04374b07c49e64a8e4d055575dfbc9a8fcde68bd257ff1ba5c6000564b46d6dd7ecd9c5d684fd757df62d85211575d3562d7814008ab5c8bc00e7b5a649eae2318665b55d762de36eba00c2906c0e0ec8706edb493e51ca5eb4b9f015dc932f262f52a86b11c41e9a6d5b3bd431'
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
name: '8',
|
|
92
|
+
entropy: 'b9475210b79b87180e746df704b3cbc7bf8424750e416a7fbb5ce3ef25a82cc6',
|
|
93
|
+
nonce: '24baf03599c10df6ef44065d715a93f7',
|
|
94
|
+
pers: null,
|
|
95
|
+
add: [
|
|
96
|
+
null,
|
|
97
|
+
null
|
|
98
|
+
],
|
|
99
|
+
expected: 'ae12d784f796183c50db5a1a283aa35ed9a2b685dacea97c596ff8c294906d1b1305ba1f80254eb062b874a8dfffa3378c809ab2869aa51a4e6a489692284a25038908a347342175c38401193b8afc498077e10522bec5c70882b7f760ea5946870bd9fc72961eedbe8bff4fd58c7cc1589bb4f369ed0d3bf26c5bbc62e0b2b2'
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
name: '9',
|
|
103
|
+
entropy: '27838eb44ceccb4e36210703ebf38f659bc39dd3277cd76b7a9bcd6bc964b628',
|
|
104
|
+
nonce: '39cfe0210db2e7b0eb52a387476e7ea1',
|
|
105
|
+
pers: null,
|
|
106
|
+
add: [
|
|
107
|
+
null,
|
|
108
|
+
null
|
|
109
|
+
],
|
|
110
|
+
expected: 'e5e72a53605d2aaa67832f97536445ab774dd9bff7f13a0d11fd27bf6593bfb52309f2d4f09d147192199ea584503181de87002f4ee085c7dc18bf32ce5315647a3708e6f404d6588c92b2dda599c131aa350d18c747b33dc8eda15cf40e95263d1231e1b4b68f8d829f86054d49cfdb1b8d96ab0465110569c8583a424a099a'
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
name: '10',
|
|
114
|
+
entropy: 'd7129e4f47008ad60c9b5d081ff4ca8eb821a6e4deb91608bf4e2647835373a5',
|
|
115
|
+
nonce: 'a72882773f78c2fc4878295840a53012',
|
|
116
|
+
pers: null,
|
|
117
|
+
add: [
|
|
118
|
+
null,
|
|
119
|
+
null
|
|
120
|
+
],
|
|
121
|
+
expected: '0cbf48585c5de9183b7ff76557f8fc9ebcfdfde07e588a8641156f61b7952725bbee954f87e9b937513b16bba0f2e523d095114658e00f0f3772175acfcb3240a01de631c19c5a834c94cc58d04a6837f0d2782fa53d2f9f65178ee9c837222494c799e64c60406069bd319549b889fa00a0032dd7ba5b1cc9edbf58de82bfcd'
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
name: '11',
|
|
125
|
+
entropy: '67fe5e300c513371976c80de4b20d4473889c9f1214bce718bc32d1da3ab7532',
|
|
126
|
+
nonce: 'e256d88497738a33923aa003a8d7845c',
|
|
127
|
+
pers: null,
|
|
128
|
+
add: [
|
|
129
|
+
null,
|
|
130
|
+
null
|
|
131
|
+
],
|
|
132
|
+
expected: 'b44660d64ef7bcebc7a1ab71f8407a02285c7592d755ae6766059e894f694373ed9c776c0cfc8594413eefb400ed427e158d687e28da3ecc205e0f7370fb089676bbb0fa591ec8d916c3d5f18a3eb4a417120705f3e2198154cd60648dbfcfc901242e15711cacd501b2c2826abe870ba32da785ed6f1fdc68f203d1ab43a64f'
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
name: '12',
|
|
136
|
+
entropy: 'de8142541255c46d66efc6173b0fe3ffaf5936c897a3ce2e9d5835616aafa2cb',
|
|
137
|
+
nonce: 'd01f9002c407127bc3297a561d89b81d',
|
|
138
|
+
pers: null,
|
|
139
|
+
add: [
|
|
140
|
+
null,
|
|
141
|
+
null
|
|
142
|
+
],
|
|
143
|
+
expected: '64d1020929d74716446d8a4e17205d0756b5264867811aa24d0d0da8644db25d5cde474143c57d12482f6bf0f31d10af9d1da4eb6d701bdd605a8db74fb4e77f79aaa9e450afda50b18d19fae68f03db1d7b5f1738d2fdce9ad3ee9461b58ee242daf7a1d72c45c9213eca34e14810a9fca5208d5c56d8066bab1586f1513de7'
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
name: '13',
|
|
147
|
+
entropy: '4a8e0bd90bdb12f7748ad5f147b115d7385bb1b06aee7d8b76136a25d779bcb7',
|
|
148
|
+
nonce: '7f3cce4af8c8ce3c45bdf23c6b181a00',
|
|
149
|
+
pers: null,
|
|
150
|
+
add: [
|
|
151
|
+
null,
|
|
152
|
+
null
|
|
153
|
+
],
|
|
154
|
+
expected: '320c7ca4bbeb7af977bc054f604b5086a3f237aa5501658112f3e7a33d2231f5536d2c85c1dad9d9b0bf7f619c81be4854661626839c8c10ae7fdc0c0b571be34b58d66da553676167b00e7d8e49f416aacb2926c6eb2c66ec98bffae20864cf92496db15e3b09e530b7b9648be8d3916b3c20a3a779bec7d66da63396849aaf'
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
name: '14',
|
|
158
|
+
entropy: '451ed024bc4b95f1025b14ec3616f5e42e80824541dc795a2f07500f92adc665',
|
|
159
|
+
nonce: '2f28e6ee8de5879db1eccd58c994e5f0',
|
|
160
|
+
pers: null,
|
|
161
|
+
add: [
|
|
162
|
+
null,
|
|
163
|
+
null
|
|
164
|
+
],
|
|
165
|
+
expected: '3fb637085ab75f4e95655faae95885166a5fbb423bb03dbf0543be063bcd48799c4f05d4e522634d9275fe02e1edd920e26d9accd43709cb0d8f6e50aa54a5f3bdd618be23cf73ef736ed0ef7524b0d14d5bef8c8aec1cf1ed3e1c38a808b35e61a44078127c7cb3a8fd7addfa50fcf3ff3bc6d6bc355d5436fe9b71eb44f7fd'
|
|
166
|
+
}
|
|
167
|
+
]
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/* eslint-env jest */
|
|
2
|
+
import PublicKey from '../../../dist/cjs/src/primitives/PublicKey'
|
|
3
|
+
import PrivateKey from '../../../dist/cjs/src/primitives/PrivateKey'
|
|
4
|
+
import BigNumber from '../../../dist/cjs/src/primitives/BigNumber'
|
|
5
|
+
|
|
6
|
+
describe('ECDH', function () {
|
|
7
|
+
it('should work with secp256k1', function () {
|
|
8
|
+
const s1 = PrivateKey.fromRandom()
|
|
9
|
+
const s2 = PrivateKey.fromRandom()
|
|
10
|
+
let sh1 = s1.deriveSharedSecret(s2.toPublicKey())
|
|
11
|
+
let sh2 = s2.deriveSharedSecret(s1.toPublicKey())
|
|
12
|
+
expect(sh1.toString()).toEqual(sh2.toString())
|
|
13
|
+
sh1 = s1.deriveSharedSecret(PublicKey.fromString(s2.toPublicKey().toDER()))
|
|
14
|
+
sh2 = s2.deriveSharedSecret(PublicKey.fromString(s1.toPublicKey().toDER()))
|
|
15
|
+
expect(sh1.toString()).toEqual(sh2.toString())
|
|
16
|
+
sh1 = s1.deriveSharedSecret(PublicKey.fromPrivateKey(s2))
|
|
17
|
+
sh2 = s2.deriveSharedSecret(PublicKey.fromPrivateKey(s1))
|
|
18
|
+
expect(sh1.toString()).toEqual(sh2.toString())
|
|
19
|
+
})
|
|
20
|
+
it('should be able to prevent a twist attack for secp256k1', () => {
|
|
21
|
+
const bob = PrivateKey.fromRandom()
|
|
22
|
+
// This is a bad point that shouldn't be able to be passed to derive.
|
|
23
|
+
// If a bad point can be passed it's possible to perform a twist attack.
|
|
24
|
+
const mallory = new PublicKey(new BigNumber(14), new BigNumber(16))
|
|
25
|
+
expect(() => {
|
|
26
|
+
bob.deriveSharedSecret(mallory)
|
|
27
|
+
}).toThrow(new Error(
|
|
28
|
+
'Public key not valid for ECDH secret derivation'
|
|
29
|
+
))
|
|
30
|
+
})
|
|
31
|
+
})
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import * as ECDSA from '../../../dist/cjs/src/primitives/ECDSA'
|
|
2
|
+
import BigNumber from '../../../dist/cjs/src/primitives/BigNumber'
|
|
3
|
+
import Curve from '../../../dist/cjs/src/primitives/Curve'
|
|
4
|
+
import Signature from '../../../dist/cjs/src/primitives/Signature'
|
|
5
|
+
|
|
6
|
+
const msg = new BigNumber('deadbeef', 16)
|
|
7
|
+
const key = new BigNumber('1e5edd45de6d22deebef4596b80444ffcc29143839c1dce18db470e25b4be7b5', 16)
|
|
8
|
+
const curve = new Curve()
|
|
9
|
+
const pub = curve.g.mul(key)
|
|
10
|
+
const wrongPub = curve.g.mul(new BigNumber(33))
|
|
11
|
+
|
|
12
|
+
describe('ECDSA', () => {
|
|
13
|
+
it('should sign and verify', () => {
|
|
14
|
+
const signature = ECDSA.sign(msg, key)
|
|
15
|
+
expect(ECDSA.verify(msg, signature, pub)).toBeTruthy()
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
it('should encode and decode with DER', () => {
|
|
19
|
+
const signature = ECDSA.sign(msg, key)
|
|
20
|
+
const encoded = signature.toDER()
|
|
21
|
+
expect(encoded.length).toBe(71)
|
|
22
|
+
const decoded = Signature.fromDER(encoded)
|
|
23
|
+
expect(decoded.r.toString(16)).toEqual(signature.r.toString(16))
|
|
24
|
+
expect(decoded.s.toString(16)).toEqual(signature.s.toString(16))
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
it('should encode and decode with hex DER', () => {
|
|
28
|
+
const signature = ECDSA.sign(msg, key)
|
|
29
|
+
const encoded = signature.toDER('hex')
|
|
30
|
+
expect(encoded.length).toBe(142)
|
|
31
|
+
const decoded = Signature.fromDER(encoded, 'hex')
|
|
32
|
+
expect(decoded.r.toString(16)).toEqual(signature.r.toString(16))
|
|
33
|
+
expect(decoded.s.toString(16)).toEqual(signature.s.toString(16))
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
it('should have `signature.s <= keys.ec.nh`', () => {
|
|
37
|
+
// key.sign(msg, options)
|
|
38
|
+
const sign = ECDSA.sign(msg, key, true)
|
|
39
|
+
expect(sign.s.cmp(curve.n.ushrn(1)) <= 0).toBeTruthy()
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
it('should support `options.k`', () => {
|
|
43
|
+
const sign = ECDSA.sign(msg, key, undefined, new BigNumber(1358))
|
|
44
|
+
expect(ECDSA.verify(msg, sign, pub)).toBeTruthy()
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
it('should not verify an incorrectly signed message', () => {
|
|
48
|
+
const wrongMessage = new BigNumber('BA5AABBE1AA9B6EC1E2ADB2DF99699344345678901234567890ABCDEFABCDEF02', 16)
|
|
49
|
+
const signature = ECDSA.sign(msg, key)
|
|
50
|
+
const result = ECDSA.verify(wrongMessage, signature, pub)
|
|
51
|
+
expect(result).toBe(false)
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
it('should not verify signature with wrong public key', () => {
|
|
55
|
+
const signature = ECDSA.sign(msg, key)
|
|
56
|
+
expect(ECDSA.verify(msg, signature, wrongPub)).toBeFalsy()
|
|
57
|
+
})
|
|
58
|
+
})
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/* eslint-env jest */
|
|
2
|
+
import { SHA256HMAC } from '../../../dist/cjs/src/primitives/Hash'
|
|
3
|
+
|
|
4
|
+
describe('HMAC', function () {
|
|
5
|
+
describe('mixed test vector', function () {
|
|
6
|
+
test({
|
|
7
|
+
name: 'nist 1',
|
|
8
|
+
key: '00010203 04050607 08090A0B 0C0D0E0F' +
|
|
9
|
+
'10111213 14151617 18191A1B 1C1D1E1F 20212223 24252627' +
|
|
10
|
+
'28292A2B 2C2D2E2F 30313233 34353637 38393A3B 3C3D3E3F',
|
|
11
|
+
msg: 'Sample message for keylen=blocklen',
|
|
12
|
+
res: '8bb9a1db9806f20df7f77b82138c7914d174d59e13dc4d0169c9057b133e1d62'
|
|
13
|
+
})
|
|
14
|
+
test({
|
|
15
|
+
name: 'nist 2',
|
|
16
|
+
key: '00010203 04050607' +
|
|
17
|
+
'08090A0B 0C0D0E0F 10111213 14151617 18191A1B 1C1D1E1F',
|
|
18
|
+
msg: 'Sample message for keylen<blocklen',
|
|
19
|
+
res: 'a28cf43130ee696a98f14a37678b56bcfcbdd9e5cf69717fecf5480f0ebdf790'
|
|
20
|
+
})
|
|
21
|
+
test({
|
|
22
|
+
name: 'nist 3',
|
|
23
|
+
key: '00010203' +
|
|
24
|
+
'04050607 08090A0B 0C0D0E0F 10111213 14151617 18191A1B' +
|
|
25
|
+
'1C1D1E1F 20212223 24252627 28292A2B 2C2D2E2F 30313233' +
|
|
26
|
+
'34353637 38393A3B 3C3D3E3F 40414243 44454647 48494A4B' +
|
|
27
|
+
'4C4D4E4F 50515253 54555657 58595A5B 5C5D5E5F 60616263',
|
|
28
|
+
msg: 'Sample message for keylen=blocklen',
|
|
29
|
+
res: 'bdccb6c72ddeadb500ae768386cb38cc41c63dbb0878ddb9c7a38a431b78378d'
|
|
30
|
+
})
|
|
31
|
+
test({
|
|
32
|
+
name: 'nist 4',
|
|
33
|
+
key: '00' +
|
|
34
|
+
'01020304 05060708 090A0B0C 0D0E0F10 11121314 15161718' +
|
|
35
|
+
'191A1B1C 1D1E1F20 21222324 25262728 292A2B2C 2D2E2F30',
|
|
36
|
+
msg: 'Sample message for keylen<blocklen, with truncated tag',
|
|
37
|
+
res: '27a8b157839efeac98df070b331d593618ddb985d403c0c786d23b5d132e57c7'
|
|
38
|
+
})
|
|
39
|
+
test({
|
|
40
|
+
name: 'regression 1',
|
|
41
|
+
key: '48f38d0c6a344959cc94502b7b5e8dffb6a5f41795d9066fc9a649557167ee2f',
|
|
42
|
+
msg: '1d495eef7761b65dccd0a983d2d7204fea28b5c81f1758046e062eb043755ea1',
|
|
43
|
+
msgEnc: 'hex',
|
|
44
|
+
res: 'cf5ad5984f9e43917aa9087380dac46e410ddc8a7731859c84e9d0f31bd43655'
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
function test (opt): void {
|
|
48
|
+
it(`should not fail at ${opt.name as string}`, function (): void {
|
|
49
|
+
let h = new SHA256HMAC(opt.key)
|
|
50
|
+
expect(h.update(opt.msg, opt.msgEnc).digest('hex')).toEqual(opt.res)
|
|
51
|
+
h = h = new SHA256HMAC(opt.key)
|
|
52
|
+
expect(h
|
|
53
|
+
.update(opt.msg.slice(0, 10), opt.msgEnc)
|
|
54
|
+
.update(opt.msg.slice(10), opt.msgEnc)
|
|
55
|
+
.digest('hex')).toEqual(opt.res)
|
|
56
|
+
})
|
|
57
|
+
}
|
|
58
|
+
})
|
|
59
|
+
})
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/* eslint-env jest */
|
|
2
|
+
import * as hash from '../../../dist/cjs/src/primitives/Hash'
|
|
3
|
+
import * as crypto from 'crypto'
|
|
4
|
+
import PBKDF2Vectors from './PBKDF2.vectors'
|
|
5
|
+
import { toArray, toHex } from '../../../dist/cjs/src/primitives/utils'
|
|
6
|
+
|
|
7
|
+
describe('Hash', function () {
|
|
8
|
+
function test(Hash, cases): void {
|
|
9
|
+
for (let i = 0; i < cases.length; i++) {
|
|
10
|
+
const msg = cases[i][0]
|
|
11
|
+
const res = cases[i][1]
|
|
12
|
+
const enc = cases[i][2]
|
|
13
|
+
|
|
14
|
+
let dgst = new Hash().update(msg, enc).digest('hex')
|
|
15
|
+
expect(dgst).toEqual(res)
|
|
16
|
+
|
|
17
|
+
// Split message
|
|
18
|
+
dgst = new Hash().update(msg.slice(0, 2), enc)
|
|
19
|
+
.update(msg.slice(2), enc)
|
|
20
|
+
.digest('hex')
|
|
21
|
+
expect(dgst).toEqual(res)
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
it('should support sha256', function () {
|
|
26
|
+
test(hash.SHA256, [
|
|
27
|
+
['abc',
|
|
28
|
+
'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad'],
|
|
29
|
+
['abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq',
|
|
30
|
+
'248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1'],
|
|
31
|
+
['deadbeef',
|
|
32
|
+
'5f78c33274e43fa9de5659265c1d917e25c03722dcb0b8d27db8d5feaa813953',
|
|
33
|
+
'hex']
|
|
34
|
+
])
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
it('should support ripemd160', function () {
|
|
38
|
+
test(hash.RIPEMD160, [
|
|
39
|
+
['', '9c1185a5c5e9fc54612808977ee8f548b2258d31'],
|
|
40
|
+
['abc',
|
|
41
|
+
'8eb208f7e05d987a9b044a8e98c6b087f15a0bfc'],
|
|
42
|
+
['message digest',
|
|
43
|
+
'5d0689ef49d2fae572b881b123a85ffa21595f36'],
|
|
44
|
+
['abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq',
|
|
45
|
+
'12a053384a9c0c88e405a06c27dcf49ada62eb2b'],
|
|
46
|
+
['ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
|
|
47
|
+
'b0e20b6e3116640286ed3a87a5713079b21f5189']
|
|
48
|
+
])
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
it('should support sha1', function () {
|
|
52
|
+
test(hash.SHA1, [
|
|
53
|
+
['',
|
|
54
|
+
'da39a3ee5e6b4b0d3255bfef95601890afd80709'],
|
|
55
|
+
['abc',
|
|
56
|
+
'a9993e364706816aba3e25717850c26c9cd0d89d'],
|
|
57
|
+
['abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq',
|
|
58
|
+
'84983e441c3bd26ebaae4aa1f95129e5e54670f1'],
|
|
59
|
+
['deadbeef',
|
|
60
|
+
'd78f8bb992a56a597f6c7a1fb918bb78271367eb',
|
|
61
|
+
'hex']
|
|
62
|
+
])
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
it('should support sha512', function () {
|
|
66
|
+
test(hash.SHA512, [
|
|
67
|
+
['abc',
|
|
68
|
+
'ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a' +
|
|
69
|
+
'2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f'
|
|
70
|
+
],
|
|
71
|
+
[
|
|
72
|
+
'abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn' +
|
|
73
|
+
'hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu',
|
|
74
|
+
'8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018' +
|
|
75
|
+
'501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909'
|
|
76
|
+
]
|
|
77
|
+
])
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
it('handles utf8 in strings just like crypto', function () {
|
|
81
|
+
test(hash.SHA256, [
|
|
82
|
+
'hello', // one byte per character
|
|
83
|
+
'привет', // two bytes per character
|
|
84
|
+
'您好', // three bytes per character
|
|
85
|
+
'👋', // four bytes per character
|
|
86
|
+
'hello привет 您好 👋!!!' // mixed character lengths
|
|
87
|
+
].map(str => [str, crypto
|
|
88
|
+
.createHash('sha256')
|
|
89
|
+
.update(str)
|
|
90
|
+
.digest('hex')]))
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
describe('PBKDF2 vectors', () => {
|
|
94
|
+
for (let i = 0; i < PBKDF2Vectors.length; i++) {
|
|
95
|
+
let v = PBKDF2Vectors[i]
|
|
96
|
+
let key, salt
|
|
97
|
+
if (v.keyUint8Array) {
|
|
98
|
+
key = v.keyUint8Array
|
|
99
|
+
}
|
|
100
|
+
if (v.key) {
|
|
101
|
+
key = toArray(v.key, 'utf8')
|
|
102
|
+
}
|
|
103
|
+
if (v.keyHex) {
|
|
104
|
+
key = toArray(v.keyHex, 'hex')
|
|
105
|
+
}
|
|
106
|
+
if (v.saltUint8Array) {
|
|
107
|
+
salt = v.saltUint8Array
|
|
108
|
+
}
|
|
109
|
+
if (v.salt) {
|
|
110
|
+
salt = toArray(v.salt, 'utf8')
|
|
111
|
+
}
|
|
112
|
+
if (v.saltHex) {
|
|
113
|
+
salt = toArray(v.saltHex, 'hex')
|
|
114
|
+
}
|
|
115
|
+
it(`Passes PBKDF2 vector ${i}`, () => {
|
|
116
|
+
const output = hash.pbkdf2(key, salt, v.iterations, v.dkLen)
|
|
117
|
+
expect(toHex(output)).toEqual(v.results.sha512)
|
|
118
|
+
})
|
|
119
|
+
}
|
|
120
|
+
})
|
|
121
|
+
})
|