@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,490 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const BigNumber_js_1 = __importDefault(require("./BigNumber.js"));
|
|
7
|
+
const K256_js_1 = __importDefault(require("./K256.js"));
|
|
8
|
+
/**
|
|
9
|
+
* A base reduction engine that provides several arithmetic operations over
|
|
10
|
+
* big numbers under a modulus context. It's particularly suitable for
|
|
11
|
+
* calculations required in cryptography algorithms and encoding schemas.
|
|
12
|
+
*
|
|
13
|
+
* @class ReductionContext
|
|
14
|
+
*
|
|
15
|
+
* @property prime - The prime number utilised in the reduction context, typically an instance of Mersenne class.
|
|
16
|
+
* @property m - The modulus used for reduction operations.
|
|
17
|
+
*/
|
|
18
|
+
class ReductionContext {
|
|
19
|
+
/**
|
|
20
|
+
* Constructs a new ReductionContext.
|
|
21
|
+
*
|
|
22
|
+
* @constructor
|
|
23
|
+
* @param m - A BigNumber representing the modulus, or 'k256' to create a context for Koblitz curve.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* new ReductionContext(new BigNumber(11));
|
|
27
|
+
* new ReductionContext('k256');
|
|
28
|
+
*/
|
|
29
|
+
constructor(m) {
|
|
30
|
+
if (m === 'k256') {
|
|
31
|
+
const prime = new K256_js_1.default();
|
|
32
|
+
this.m = prime.p;
|
|
33
|
+
this.prime = prime;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
this.assert(m.gtn(1), 'modulus must be greater than 1');
|
|
37
|
+
this.m = m;
|
|
38
|
+
this.prime = null;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Asserts that given value is truthy. Throws an Error with a provided message
|
|
43
|
+
* if the value is falsy.
|
|
44
|
+
*
|
|
45
|
+
* @private
|
|
46
|
+
* @param val - The value to be checked.
|
|
47
|
+
* @param msg - The error message to be thrown if the value is falsy.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* this.assert(1 < 2, '1 is not less than 2');
|
|
51
|
+
* this.assert(2 < 1, '2 is less than 1'); // throws an Error with message '2 is less than 1'
|
|
52
|
+
*/
|
|
53
|
+
assert(val, msg = 'Assertion failed') {
|
|
54
|
+
if (!val)
|
|
55
|
+
throw new Error(msg);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Verifies that a BigNumber is positive and red. Throws an error if these
|
|
59
|
+
* conditions are not met.
|
|
60
|
+
*
|
|
61
|
+
* @param a - The BigNumber to be verified.
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* this.verify1(new BigNumber(10).toRed());
|
|
65
|
+
* this.verify1(new BigNumber(-10).toRed()); //throws an Error
|
|
66
|
+
* this.verify1(new BigNumber(10)); //throws an Error
|
|
67
|
+
*/
|
|
68
|
+
verify1(a) {
|
|
69
|
+
this.assert(a.negative === 0, 'red works only with positives');
|
|
70
|
+
this.assert(a.red, 'red works only with red numbers');
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Verifies that two BigNumbers are both positive and red. Also checks
|
|
74
|
+
* that they have the same reduction context. Throws an error if these
|
|
75
|
+
* conditions are not met.
|
|
76
|
+
*
|
|
77
|
+
* @param a - The first BigNumber to be verified.
|
|
78
|
+
* @param b - The second BigNumber to be verified.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* this.verify2(new BigNumber(10).toRed(this), new BigNumber(20).toRed(this));
|
|
82
|
+
* this.verify2(new BigNumber(-10).toRed(this), new BigNumber(20).toRed(this)); //throws an Error
|
|
83
|
+
* this.verify2(new BigNumber(10).toRed(this), new BigNumber(20)); //throws an Error
|
|
84
|
+
*/
|
|
85
|
+
verify2(a, b) {
|
|
86
|
+
this.assert((a.negative | b.negative) === 0, 'red works only with positives');
|
|
87
|
+
this.assert((a.red != null) && a.red === b.red, 'red works only with red numbers');
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Performs an in-place reduction of the given BigNumber by the modulus of the reduction context, 'm'.
|
|
91
|
+
*
|
|
92
|
+
* @method imod
|
|
93
|
+
*
|
|
94
|
+
* @param a - BigNumber to be reduced.
|
|
95
|
+
*
|
|
96
|
+
* @returns Returns the reduced result.
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* const context = new ReductionContext(new BigNumber(7));
|
|
100
|
+
* context.imod(new BigNumber(19)); // Returns 5
|
|
101
|
+
*/
|
|
102
|
+
imod(a) {
|
|
103
|
+
if (this.prime != null)
|
|
104
|
+
return this.prime.ireduce(a).forceRed(this);
|
|
105
|
+
BigNumber_js_1.default.move(a, a.umod(this.m).forceRed(this));
|
|
106
|
+
return a;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Negates a BigNumber in the context of the modulus.
|
|
110
|
+
*
|
|
111
|
+
* @method neg
|
|
112
|
+
*
|
|
113
|
+
* @param a - BigNumber to negate.
|
|
114
|
+
*
|
|
115
|
+
* @returns Returns the negation of 'a' in the reduction context.
|
|
116
|
+
*
|
|
117
|
+
* @example
|
|
118
|
+
* const context = new ReductionContext(new BigNumber(7));
|
|
119
|
+
* context.neg(new BigNumber(3)); // Returns 4
|
|
120
|
+
*/
|
|
121
|
+
neg(a) {
|
|
122
|
+
if (a.isZero()) {
|
|
123
|
+
return a.clone();
|
|
124
|
+
}
|
|
125
|
+
return this.m.sub(a).forceRed(this);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Performs the addition operation on two BigNumbers in the reduction context.
|
|
129
|
+
*
|
|
130
|
+
* @method add
|
|
131
|
+
*
|
|
132
|
+
* @param a - First BigNumber to add.
|
|
133
|
+
* @param b - Second BigNumber to add.
|
|
134
|
+
*
|
|
135
|
+
* @returns Returns the result of 'a + b' in the reduction context.
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* const context = new ReductionContext(new BigNumber(5));
|
|
139
|
+
* context.add(new BigNumber(2), new BigNumber(4)); // Returns 1
|
|
140
|
+
*/
|
|
141
|
+
add(a, b) {
|
|
142
|
+
this.verify2(a, b);
|
|
143
|
+
const res = a.add(b);
|
|
144
|
+
if (res.cmp(this.m) >= 0) {
|
|
145
|
+
res.isub(this.m);
|
|
146
|
+
}
|
|
147
|
+
return res.forceRed(this);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Performs an in-place addition operation on two BigNumbers in the reduction context
|
|
151
|
+
* in order to avoid creating a new BigNumber, it modifies the first one with the result.
|
|
152
|
+
*
|
|
153
|
+
* @method iadd
|
|
154
|
+
*
|
|
155
|
+
* @param a - First BigNumber to add.
|
|
156
|
+
* @param b - Second BigNumber to add.
|
|
157
|
+
*
|
|
158
|
+
* @returns Returns the modified 'a' after addition with 'b' in the reduction context.
|
|
159
|
+
*
|
|
160
|
+
* @example
|
|
161
|
+
* const context = new ReductionContext(new BigNumber(5));
|
|
162
|
+
* const a = new BigNumber(2);
|
|
163
|
+
* context.iadd(a, new BigNumber(4)); // Modifies 'a' to be 1
|
|
164
|
+
*/
|
|
165
|
+
iadd(a, b) {
|
|
166
|
+
this.verify2(a, b);
|
|
167
|
+
const res = a.iadd(b);
|
|
168
|
+
if (res.cmp(this.m) >= 0) {
|
|
169
|
+
res.isub(this.m);
|
|
170
|
+
}
|
|
171
|
+
return res;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Subtracts one BigNumber from another BigNumber in the reduction context.
|
|
175
|
+
*
|
|
176
|
+
* @method sub
|
|
177
|
+
*
|
|
178
|
+
* @param a - BigNumber to be subtracted from.
|
|
179
|
+
* @param b - BigNumber to subtract.
|
|
180
|
+
*
|
|
181
|
+
* @returns Returns the result of 'a - b' in the reduction context.
|
|
182
|
+
*
|
|
183
|
+
* @example
|
|
184
|
+
* const context = new ReductionContext(new BigNumber(7));
|
|
185
|
+
* context.sub(new BigNumber(3), new BigNumber(2)); // Returns 1
|
|
186
|
+
*/
|
|
187
|
+
sub(a, b) {
|
|
188
|
+
this.verify2(a, b);
|
|
189
|
+
const res = a.sub(b);
|
|
190
|
+
if (res.cmpn(0) < 0) {
|
|
191
|
+
res.iadd(this.m);
|
|
192
|
+
}
|
|
193
|
+
return res.forceRed(this);
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Performs in-place subtraction of one BigNumber from another in the reduction context,
|
|
197
|
+
* it modifies the first BigNumber with the result.
|
|
198
|
+
*
|
|
199
|
+
* @method isub
|
|
200
|
+
*
|
|
201
|
+
* @param a - BigNumber to be subtracted from.
|
|
202
|
+
* @param b - BigNumber to subtract.
|
|
203
|
+
*
|
|
204
|
+
* @returns Returns the modified 'a' after subtraction of 'b' in the reduction context.
|
|
205
|
+
*
|
|
206
|
+
* @example
|
|
207
|
+
* const context = new ReductionContext(new BigNumber(5));
|
|
208
|
+
* const a = new BigNumber(4);
|
|
209
|
+
* context.isub(a, new BigNumber(2)); // Modifies 'a' to be 2
|
|
210
|
+
*/
|
|
211
|
+
isub(a, b) {
|
|
212
|
+
this.verify2(a, b);
|
|
213
|
+
const res = a.isub(b);
|
|
214
|
+
if (res.cmpn(0) < 0) {
|
|
215
|
+
res.iadd(this.m);
|
|
216
|
+
}
|
|
217
|
+
return res;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Performs bitwise shift left operation on a BigNumber in the reduction context.
|
|
221
|
+
*
|
|
222
|
+
* @method shl
|
|
223
|
+
*
|
|
224
|
+
* @param a - BigNumber to perform shift on.
|
|
225
|
+
* @param num - The number of positions to shift.
|
|
226
|
+
*
|
|
227
|
+
* @returns Returns the result of shifting 'a' left by 'num' positions in the reduction context.
|
|
228
|
+
*
|
|
229
|
+
* @example
|
|
230
|
+
* const context = new ReductionContext(new BigNumber(32));
|
|
231
|
+
* context.shl(new BigNumber(4), 2); // Returns 16
|
|
232
|
+
*/
|
|
233
|
+
shl(a, num) {
|
|
234
|
+
this.verify1(a);
|
|
235
|
+
return this.imod(a.ushln(num));
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Performs in-place multiplication of two BigNumbers in the reduction context,
|
|
239
|
+
* modifying the first BigNumber with the result.
|
|
240
|
+
*
|
|
241
|
+
* @method imul
|
|
242
|
+
*
|
|
243
|
+
* @param a - First BigNumber to multiply.
|
|
244
|
+
* @param b - Second BigNumber to multiply.
|
|
245
|
+
*
|
|
246
|
+
* @returns Returns the modified 'a' after multiplication with 'b' in the reduction context.
|
|
247
|
+
*
|
|
248
|
+
* @example
|
|
249
|
+
* const context = new ReductionContext(new BigNumber(7));
|
|
250
|
+
* const a = new BigNumber(3);
|
|
251
|
+
* context.imul(a, new BigNumber(2)); // Modifies 'a' to be 6
|
|
252
|
+
*/
|
|
253
|
+
imul(a, b) {
|
|
254
|
+
this.verify2(a, b);
|
|
255
|
+
return this.imod(a.imul(b));
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Multiplies two BigNumbers in the reduction context.
|
|
259
|
+
*
|
|
260
|
+
* @method mul
|
|
261
|
+
*
|
|
262
|
+
* @param a - First BigNumber to multiply.
|
|
263
|
+
* @param b - Second BigNumber to multiply.
|
|
264
|
+
*
|
|
265
|
+
* @returns Returns the result of 'a * b' in the reduction context.
|
|
266
|
+
*
|
|
267
|
+
* @example
|
|
268
|
+
* const context = new ReductionContext(new BigNumber(7));
|
|
269
|
+
* context.mul(new BigNumber(3), new BigNumber(2)); // Returns 6
|
|
270
|
+
*/
|
|
271
|
+
mul(a, b) {
|
|
272
|
+
this.verify2(a, b);
|
|
273
|
+
return this.imod(a.mul(b));
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Calculates the square of a BigNumber in the reduction context,
|
|
277
|
+
* modifying the original BigNumber with the result.
|
|
278
|
+
*
|
|
279
|
+
* @method isqr
|
|
280
|
+
*
|
|
281
|
+
* @param a - BigNumber to be squared.
|
|
282
|
+
*
|
|
283
|
+
* @returns Returns the squared 'a' in the reduction context.
|
|
284
|
+
*
|
|
285
|
+
* @example
|
|
286
|
+
* const context = new ReductionContext(new BigNumber(7));
|
|
287
|
+
* const a = new BigNumber(3);
|
|
288
|
+
* context.isqr(a); // Modifies 'a' to be 2 (9 % 7 = 2)
|
|
289
|
+
*/
|
|
290
|
+
isqr(a) {
|
|
291
|
+
return this.imul(a, a.clone());
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Calculates the square of a BigNumber in the reduction context.
|
|
295
|
+
*
|
|
296
|
+
* @method sqr
|
|
297
|
+
*
|
|
298
|
+
* @param a - BigNumber to be squared.
|
|
299
|
+
*
|
|
300
|
+
* @returns Returns the result of 'a^2' in the reduction context.
|
|
301
|
+
*
|
|
302
|
+
* @example
|
|
303
|
+
* const context = new ReductionContext(new BigNumber(7));
|
|
304
|
+
* context.sqr(new BigNumber(3)); // Returns 2 (9 % 7 = 2)
|
|
305
|
+
*/
|
|
306
|
+
sqr(a) {
|
|
307
|
+
return this.mul(a, a);
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Calculates the square root of a BigNumber in the reduction context.
|
|
311
|
+
*
|
|
312
|
+
* @method sqrt
|
|
313
|
+
*
|
|
314
|
+
* @param a - The BigNumber to calculate the square root of.
|
|
315
|
+
*
|
|
316
|
+
* @returns Returns the square root of 'a' in the reduction context.
|
|
317
|
+
*
|
|
318
|
+
* @example
|
|
319
|
+
* const context = new ReductionContext(new BigNumber(9));
|
|
320
|
+
* context.sqrt(new BigNumber(4)); // Returns 2
|
|
321
|
+
*/
|
|
322
|
+
sqrt(a) {
|
|
323
|
+
if (a.isZero())
|
|
324
|
+
return a.clone();
|
|
325
|
+
const mod3 = this.m.andln(3);
|
|
326
|
+
this.assert(mod3 % 2 === 1);
|
|
327
|
+
// Fast case
|
|
328
|
+
if (mod3 === 3) {
|
|
329
|
+
const pow = this.m.add(new BigNumber_js_1.default(1)).iushrn(2);
|
|
330
|
+
return this.pow(a, pow);
|
|
331
|
+
}
|
|
332
|
+
// Tonelli-Shanks algorithm (Totally unoptimized and slow)
|
|
333
|
+
//
|
|
334
|
+
// Find Q and S, that Q * 2 ^ S = (P - 1)
|
|
335
|
+
const q = this.m.subn(1);
|
|
336
|
+
let s = 0;
|
|
337
|
+
while (!q.isZero() && q.andln(1) === 0) {
|
|
338
|
+
s++;
|
|
339
|
+
q.iushrn(1);
|
|
340
|
+
}
|
|
341
|
+
this.assert(!q.isZero());
|
|
342
|
+
const one = new BigNumber_js_1.default(1).toRed(this);
|
|
343
|
+
const nOne = one.redNeg();
|
|
344
|
+
// Find quadratic non-residue
|
|
345
|
+
// NOTE: Max is such because of generalized Riemann hypothesis.
|
|
346
|
+
const lpow = this.m.subn(1).iushrn(1);
|
|
347
|
+
const zl = this.m.bitLength();
|
|
348
|
+
const z = new BigNumber_js_1.default(2 * zl * zl).toRed(this);
|
|
349
|
+
while (this.pow(z, lpow).cmp(nOne) !== 0) {
|
|
350
|
+
z.redIAdd(nOne);
|
|
351
|
+
}
|
|
352
|
+
let c = this.pow(z, q);
|
|
353
|
+
let r = this.pow(a, q.addn(1).iushrn(1));
|
|
354
|
+
let t = this.pow(a, q);
|
|
355
|
+
let m = s;
|
|
356
|
+
while (t.cmp(one) !== 0) {
|
|
357
|
+
let tmp = t;
|
|
358
|
+
let i = 0;
|
|
359
|
+
for (; tmp.cmp(one) !== 0; i++) {
|
|
360
|
+
tmp = tmp.redSqr();
|
|
361
|
+
}
|
|
362
|
+
this.assert(i < m);
|
|
363
|
+
const b = this.pow(c, new BigNumber_js_1.default(1).iushln(m - i - 1));
|
|
364
|
+
r = r.redMul(b);
|
|
365
|
+
c = b.redSqr();
|
|
366
|
+
t = t.redMul(c);
|
|
367
|
+
m = i;
|
|
368
|
+
}
|
|
369
|
+
return r;
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Calculates the multiplicative inverse of a BigNumber in the reduction context.
|
|
373
|
+
*
|
|
374
|
+
* @method invm
|
|
375
|
+
*
|
|
376
|
+
* @param a - The BigNumber to find the multiplicative inverse of.
|
|
377
|
+
*
|
|
378
|
+
* @returns Returns the multiplicative inverse of 'a' in the reduction context.
|
|
379
|
+
*
|
|
380
|
+
* @example
|
|
381
|
+
* const context = new ReductionContext(new BigNumber(11));
|
|
382
|
+
* context.invm(new BigNumber(3)); // Returns 4 (3*4 mod 11 = 1)
|
|
383
|
+
*/
|
|
384
|
+
invm(a) {
|
|
385
|
+
const inv = a._invmp(this.m);
|
|
386
|
+
if (inv.negative !== 0) {
|
|
387
|
+
inv.negative = 0;
|
|
388
|
+
return this.imod(inv).redNeg();
|
|
389
|
+
}
|
|
390
|
+
else {
|
|
391
|
+
return this.imod(inv);
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Raises a BigNumber to a power in the reduction context.
|
|
396
|
+
*
|
|
397
|
+
* @method pow
|
|
398
|
+
*
|
|
399
|
+
* @param a - The BigNumber to be raised to a power.
|
|
400
|
+
* @param num - The power to raise the BigNumber to.
|
|
401
|
+
*
|
|
402
|
+
* @returns Returns the result of 'a' raised to the power of 'num' in the reduction context.
|
|
403
|
+
*
|
|
404
|
+
* @example
|
|
405
|
+
* const context = new ReductionContext(new BigNumber(7));
|
|
406
|
+
* context.pow(new BigNumber(3), new BigNumber(2)); // Returns 2 (3^2 % 7)
|
|
407
|
+
*/
|
|
408
|
+
pow(a, num) {
|
|
409
|
+
if (num.isZero())
|
|
410
|
+
return new BigNumber_js_1.default(1).toRed(this);
|
|
411
|
+
if (num.cmpn(1) === 0)
|
|
412
|
+
return a.clone();
|
|
413
|
+
const windowSize = 4;
|
|
414
|
+
const wnd = new Array(1 << windowSize);
|
|
415
|
+
wnd[0] = new BigNumber_js_1.default(1).toRed(this);
|
|
416
|
+
wnd[1] = a;
|
|
417
|
+
let i = 2;
|
|
418
|
+
for (; i < wnd.length; i++) {
|
|
419
|
+
wnd[i] = this.mul(wnd[i - 1], a);
|
|
420
|
+
}
|
|
421
|
+
let res = wnd[0];
|
|
422
|
+
let current = 0;
|
|
423
|
+
let currentLen = 0;
|
|
424
|
+
let start = num.bitLength() % 26;
|
|
425
|
+
if (start === 0) {
|
|
426
|
+
start = 26;
|
|
427
|
+
}
|
|
428
|
+
for (i = num.length - 1; i >= 0; i--) {
|
|
429
|
+
const word = num.words[i];
|
|
430
|
+
for (let j = start - 1; j >= 0; j--) {
|
|
431
|
+
const bit = (word >> j) & 1;
|
|
432
|
+
if (res !== wnd[0]) {
|
|
433
|
+
res = this.sqr(res);
|
|
434
|
+
}
|
|
435
|
+
if (bit === 0 && current === 0) {
|
|
436
|
+
currentLen = 0;
|
|
437
|
+
continue;
|
|
438
|
+
}
|
|
439
|
+
current <<= 1;
|
|
440
|
+
current |= bit;
|
|
441
|
+
currentLen++;
|
|
442
|
+
if (currentLen !== windowSize && (i !== 0 || j !== 0))
|
|
443
|
+
continue;
|
|
444
|
+
res = this.mul(res, wnd[current]);
|
|
445
|
+
currentLen = 0;
|
|
446
|
+
current = 0;
|
|
447
|
+
}
|
|
448
|
+
start = 26;
|
|
449
|
+
}
|
|
450
|
+
return res;
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* Converts a BigNumber to its equivalent in the reduction context.
|
|
454
|
+
*
|
|
455
|
+
* @method convertTo
|
|
456
|
+
*
|
|
457
|
+
* @param num - The BigNumber to convert to the reduction context.
|
|
458
|
+
*
|
|
459
|
+
* @returns Returns the converted BigNumber compatible with the reduction context.
|
|
460
|
+
*
|
|
461
|
+
* @example
|
|
462
|
+
* const context = new ReductionContext(new BigNumber(7));
|
|
463
|
+
* context.convertTo(new BigNumber(8)); // Returns 1 (8 % 7)
|
|
464
|
+
*/
|
|
465
|
+
convertTo(num) {
|
|
466
|
+
const r = num.umod(this.m);
|
|
467
|
+
return r === num ? r.clone() : r;
|
|
468
|
+
}
|
|
469
|
+
/**
|
|
470
|
+
* Converts a BigNumber from reduction context to its regular form.
|
|
471
|
+
*
|
|
472
|
+
* @method convertFrom
|
|
473
|
+
*
|
|
474
|
+
* @param num - The BigNumber to convert from the reduction context.
|
|
475
|
+
*
|
|
476
|
+
* @returns Returns the converted BigNumber in its regular form.
|
|
477
|
+
*
|
|
478
|
+
* @example
|
|
479
|
+
* const context = new ReductionContext(new BigNumber(7));
|
|
480
|
+
* const a = context.convertTo(new BigNumber(8)); // 'a' is now 1 in the reduction context
|
|
481
|
+
* context.convertFrom(a); // Returns 1
|
|
482
|
+
*/
|
|
483
|
+
convertFrom(num) {
|
|
484
|
+
const res = num.clone();
|
|
485
|
+
res.red = null;
|
|
486
|
+
return res;
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
exports.default = ReductionContext;
|
|
490
|
+
//# sourceMappingURL=ReductionContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReductionContext.js","sourceRoot":"","sources":["../../../../src/primitives/ReductionContext.ts"],"names":[],"mappings":"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"}
|