@bsv/sdk 1.0.29 → 1.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/mod.js +25 -0
- package/dist/cjs/mod.js.map +1 -0
- package/dist/cjs/package.json +49 -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 +512 -0
- package/dist/cjs/src/compat/ECIES.js.map +1 -0
- package/dist/cjs/src/compat/HD.js +344 -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 +4272 -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 +1387 -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 +246 -0
- package/dist/cjs/src/primitives/PrivateKey.js.map +1 -0
- package/dist/cjs/src/primitives/PublicKey.js +168 -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 +357 -0
- package/dist/cjs/src/primitives/Signature.js.map +1 -0
- package/dist/cjs/src/primitives/SymmetricKey.js +82 -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 +51 -0
- package/dist/cjs/src/primitives/index.js.map +1 -0
- package/dist/cjs/src/primitives/utils.js +624 -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 +207 -0
- package/dist/cjs/src/script/OP.js.map +1 -0
- package/dist/cjs/src/script/Script.js +435 -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 +120 -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 +616 -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 +112 -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/BSM.js +45 -0
- package/dist/esm/src/compat/BSM.js.map +1 -0
- package/dist/esm/src/compat/ECIES.js +483 -0
- package/dist/esm/src/compat/ECIES.js.map +1 -0
- package/dist/esm/src/compat/HD.js +322 -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 +4307 -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 +1391 -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 +240 -0
- package/dist/esm/src/primitives/PrivateKey.js.map +1 -0
- package/dist/esm/src/primitives/PublicKey.js +162 -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 +360 -0
- package/dist/esm/src/primitives/Signature.js.map +1 -0
- package/dist/esm/src/primitives/SymmetricKey.js +76 -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 +13 -0
- package/dist/esm/src/primitives/index.js.map +1 -0
- package/dist/esm/src/primitives/utils.js +609 -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 +205 -0
- package/dist/esm/src/script/OP.js.map +1 -0
- package/dist/esm/src/script/Script.js +430 -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 +113 -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 +617 -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 +111 -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/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 +131 -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 +450 -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 +174 -0
- package/dist/types/src/primitives/PrivateKey.d.ts.map +1 -0
- package/dist/types/src/primitives/PublicKey.d.ts +120 -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 +162 -0
- package/dist/types/src/primitives/Signature.d.ts.map +1 -0
- package/dist/types/src/primitives/SymmetricKey.d.ts +55 -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 +13 -0
- package/dist/types/src/primitives/index.d.ts.map +1 -0
- package/dist/types/src/primitives/utils.d.ts +124 -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 +40 -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 +215 -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/package.json +1 -1
|
@@ -0,0 +1,357 @@
|
|
|
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 PublicKey_js_1 = __importDefault(require("./PublicKey.js"));
|
|
8
|
+
const ECDSA_js_1 = require("./ECDSA.js");
|
|
9
|
+
const Hash_js_1 = require("./Hash.js");
|
|
10
|
+
const utils_js_1 = require("./utils.js");
|
|
11
|
+
const Point_js_1 = __importDefault(require("./Point.js"));
|
|
12
|
+
const Curve_js_1 = __importDefault(require("./Curve.js"));
|
|
13
|
+
/**
|
|
14
|
+
* Represents a digital signature.
|
|
15
|
+
*
|
|
16
|
+
* A digital signature is a mathematical scheme for verifying the authenticity of
|
|
17
|
+
* digital messages or documents. In many scenarios, it is equivalent to a handwritten signature or stamped seal.
|
|
18
|
+
* The signature pair (R, S) corresponds to the raw ECDSA ([Elliptic Curve Digital Signature Algorithm](https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm)) signature.
|
|
19
|
+
* Signatures are often serialized into a format known as '[DER encoding](https://en.wikipedia.org/wiki/X.690#DER_encoding)' for transmission.
|
|
20
|
+
*
|
|
21
|
+
* @class Signature
|
|
22
|
+
*/
|
|
23
|
+
class Signature {
|
|
24
|
+
/**
|
|
25
|
+
* Takes an array of numbers or a string and returns a new Signature instance.
|
|
26
|
+
* This method will throw an error if the DER encoding is invalid.
|
|
27
|
+
* If a string is provided, it is assumed to represent a hexadecimal sequence.
|
|
28
|
+
*
|
|
29
|
+
* @static
|
|
30
|
+
* @method fromDER
|
|
31
|
+
* @param data - The sequence to decode from DER encoding.
|
|
32
|
+
* @param enc - The encoding of the data string.
|
|
33
|
+
* @returns The decoded data in the form of Signature instance.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* const signature = Signature.fromDER('30440220018c1f5502f8...', 'hex');
|
|
37
|
+
*/
|
|
38
|
+
static fromDER(data, enc) {
|
|
39
|
+
const getLength = (buf, p) => {
|
|
40
|
+
const initial = buf[p.place++];
|
|
41
|
+
if ((initial & 0x80) === 0) {
|
|
42
|
+
return initial;
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
throw new Error('Invalid DER entity length');
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
class Position {
|
|
49
|
+
constructor() {
|
|
50
|
+
this.place = 0;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
data = (0, utils_js_1.toArray)(data, enc);
|
|
54
|
+
const p = new Position();
|
|
55
|
+
if (data[p.place++] !== 0x30) {
|
|
56
|
+
throw new Error('Signature DER must start with 0x30');
|
|
57
|
+
}
|
|
58
|
+
const len = getLength(data, p);
|
|
59
|
+
if ((len + p.place) !== data.length) {
|
|
60
|
+
throw new Error('Signature DER invalid');
|
|
61
|
+
}
|
|
62
|
+
if (data[p.place++] !== 0x02) {
|
|
63
|
+
throw new Error('Signature DER invalid');
|
|
64
|
+
}
|
|
65
|
+
const rlen = getLength(data, p);
|
|
66
|
+
let r = data.slice(p.place, rlen + p.place);
|
|
67
|
+
p.place += rlen;
|
|
68
|
+
if (data[p.place++] !== 0x02) {
|
|
69
|
+
throw new Error('Signature DER invalid');
|
|
70
|
+
}
|
|
71
|
+
const slen = getLength(data, p);
|
|
72
|
+
if (data.length !== slen + p.place) {
|
|
73
|
+
throw new Error('Invalid R-length in signature DER');
|
|
74
|
+
}
|
|
75
|
+
let s = data.slice(p.place, slen + p.place);
|
|
76
|
+
if (r[0] === 0) {
|
|
77
|
+
if ((r[1] & 0x80) !== 0) {
|
|
78
|
+
r = r.slice(1);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
throw new Error('Invalid R-value in signature DER');
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (s[0] === 0) {
|
|
85
|
+
if ((s[1] & 0x80) !== 0) {
|
|
86
|
+
s = s.slice(1);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
throw new Error('Invalid S-value in signature DER');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return new Signature(new BigNumber_js_1.default(r), new BigNumber_js_1.default(s));
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Takes an array of numbers or a string and returns a new Signature instance.
|
|
96
|
+
* This method will throw an error if the Compact encoding is invalid.
|
|
97
|
+
* If a string is provided, it is assumed to represent a hexadecimal sequence.
|
|
98
|
+
* compactByte value 27-31 means compressed public key.
|
|
99
|
+
* 32-35 means uncompressed public key.
|
|
100
|
+
* The range represents the recovery param which can be 0,1,2,3,4.
|
|
101
|
+
* We could support recovery functions in future if there's demand.
|
|
102
|
+
*
|
|
103
|
+
* @static
|
|
104
|
+
* @method fromCompact
|
|
105
|
+
* @param data - The sequence to decode from Compact encoding.
|
|
106
|
+
* @param enc - The encoding of the data string.
|
|
107
|
+
* @returns The decoded data in the form of Signature instance.
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* const signature = Signature.fromCompact('1b18c1f5502f8...', 'hex');
|
|
111
|
+
*/
|
|
112
|
+
static fromCompact(data, enc) {
|
|
113
|
+
data = (0, utils_js_1.toArray)(data, enc);
|
|
114
|
+
if (data.length !== 65) {
|
|
115
|
+
throw new Error('Invalid Compact Signature');
|
|
116
|
+
}
|
|
117
|
+
const compactByte = data[0];
|
|
118
|
+
if (compactByte < 27 || compactByte >= 35) {
|
|
119
|
+
throw new Error('Invalid Compact Byte');
|
|
120
|
+
}
|
|
121
|
+
return new Signature(new BigNumber_js_1.default(data.slice(1, 33)), new BigNumber_js_1.default(data.slice(33, 65)));
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Creates an instance of the Signature class.
|
|
125
|
+
*
|
|
126
|
+
* @constructor
|
|
127
|
+
* @param r - The R component of the signature.
|
|
128
|
+
* @param s - The S component of the signature.
|
|
129
|
+
*
|
|
130
|
+
* @example
|
|
131
|
+
* const r = new BigNumber('208755674028...');
|
|
132
|
+
* const s = new BigNumber('564745627577...');
|
|
133
|
+
* const signature = new Signature(r, s);
|
|
134
|
+
*/
|
|
135
|
+
constructor(r, s) {
|
|
136
|
+
this.r = r;
|
|
137
|
+
this.s = s;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Verifies a digital signature.
|
|
141
|
+
*
|
|
142
|
+
* This method will return true if the signature, key, and message hash match.
|
|
143
|
+
* If the data or key do not match the signature, the function returns false.
|
|
144
|
+
*
|
|
145
|
+
* @method verify
|
|
146
|
+
* @param msg - The message to verify.
|
|
147
|
+
* @param key - The public key used to sign the original message.
|
|
148
|
+
* @param enc - The encoding of the msg string.
|
|
149
|
+
* @returns A boolean representing whether the signature is valid.
|
|
150
|
+
*
|
|
151
|
+
* @example
|
|
152
|
+
* const msg = 'The quick brown fox jumps over the lazy dog';
|
|
153
|
+
* const publicKey = PublicKey.fromString('04188ca1050...');
|
|
154
|
+
* const isVerified = signature.verify(msg, publicKey);
|
|
155
|
+
*/
|
|
156
|
+
verify(msg, key, enc) {
|
|
157
|
+
const msgHash = new BigNumber_js_1.default((0, Hash_js_1.sha256)(msg, enc), 16);
|
|
158
|
+
return (0, ECDSA_js_1.verify)(msgHash, this, key);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Converts an instance of Signature into DER encoding.
|
|
162
|
+
* An alias for the toDER method.
|
|
163
|
+
*
|
|
164
|
+
* If the encoding parameter is set to 'hex', the function will return a hex string.
|
|
165
|
+
* If 'base64', it will return a base64 string.
|
|
166
|
+
* Otherwise, it will return an array of numbers.
|
|
167
|
+
*
|
|
168
|
+
* @method toDER
|
|
169
|
+
* @param enc - The encoding to use for the output.
|
|
170
|
+
* @returns The current instance in DER encoding.
|
|
171
|
+
*
|
|
172
|
+
* @example
|
|
173
|
+
* const der = signature.toString('base64');
|
|
174
|
+
*/
|
|
175
|
+
toString(enc) {
|
|
176
|
+
return this.toDER(enc);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Converts an instance of Signature into DER encoding.
|
|
180
|
+
*
|
|
181
|
+
* If the encoding parameter is set to 'hex', the function will return a hex string.
|
|
182
|
+
* If 'base64', it will return a base64 string.
|
|
183
|
+
* Otherwise, it will return an array of numbers.
|
|
184
|
+
*
|
|
185
|
+
* @method toDER
|
|
186
|
+
* @param enc - The encoding to use for the output.
|
|
187
|
+
* @returns The current instance in DER encoding.
|
|
188
|
+
*
|
|
189
|
+
* @example
|
|
190
|
+
* const der = signature.toDER('hex');
|
|
191
|
+
*/
|
|
192
|
+
toDER(enc) {
|
|
193
|
+
const constructLength = (arr, len) => {
|
|
194
|
+
if (len < 0x80) {
|
|
195
|
+
arr.push(len);
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
throw new Error('len must be < 0x80');
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
const rmPadding = (buf) => {
|
|
202
|
+
let i = 0;
|
|
203
|
+
const len = buf.length - 1;
|
|
204
|
+
while ((buf[i] === 0) && ((buf[i + 1] & 0x80) === 0) && i < len) {
|
|
205
|
+
i++;
|
|
206
|
+
}
|
|
207
|
+
if (i === 0) {
|
|
208
|
+
return buf;
|
|
209
|
+
}
|
|
210
|
+
return buf.slice(i);
|
|
211
|
+
};
|
|
212
|
+
let r = this.r.toArray();
|
|
213
|
+
let s = this.s.toArray();
|
|
214
|
+
// Pad values
|
|
215
|
+
if ((r[0] & 0x80) !== 0) {
|
|
216
|
+
r = [0].concat(r);
|
|
217
|
+
}
|
|
218
|
+
// Pad values
|
|
219
|
+
if ((s[0] & 0x80) !== 0) {
|
|
220
|
+
s = [0].concat(s);
|
|
221
|
+
}
|
|
222
|
+
r = rmPadding(r);
|
|
223
|
+
s = rmPadding(s);
|
|
224
|
+
while ((s[0] === 0) && (s[1] & 0x80) === 0) {
|
|
225
|
+
s = s.slice(1);
|
|
226
|
+
}
|
|
227
|
+
let arr = [0x02];
|
|
228
|
+
constructLength(arr, r.length);
|
|
229
|
+
arr = arr.concat(r);
|
|
230
|
+
arr.push(0x02);
|
|
231
|
+
constructLength(arr, s.length);
|
|
232
|
+
const backHalf = arr.concat(s);
|
|
233
|
+
let res = [0x30];
|
|
234
|
+
constructLength(res, backHalf.length);
|
|
235
|
+
res = res.concat(backHalf);
|
|
236
|
+
if (enc === 'hex') {
|
|
237
|
+
return (0, utils_js_1.toHex)(res);
|
|
238
|
+
}
|
|
239
|
+
else if (enc === 'base64') {
|
|
240
|
+
return (0, utils_js_1.toBase64)(res);
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
return res;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Converts an instance of Signature into Compact encoding.
|
|
248
|
+
*
|
|
249
|
+
* If the encoding parameter is set to 'hex', the function will return a hex string.
|
|
250
|
+
* If 'base64', it will return a base64 string.
|
|
251
|
+
* Otherwise, it will return an array of numbers.
|
|
252
|
+
*
|
|
253
|
+
* @method toCompact
|
|
254
|
+
* @param enc - The encoding to use for the output.
|
|
255
|
+
* @returns The current instance in DER encoding.
|
|
256
|
+
*
|
|
257
|
+
* @example
|
|
258
|
+
* const compact = signature.toCompact(3, true, 'base64');
|
|
259
|
+
*/
|
|
260
|
+
toCompact(recovery, compressed, enc) {
|
|
261
|
+
if (recovery < 0 || recovery > 3)
|
|
262
|
+
throw new Error('Invalid recovery param');
|
|
263
|
+
if (typeof compressed !== 'boolean')
|
|
264
|
+
throw new Error('Invalid compressed param');
|
|
265
|
+
let compactByte = 27 + recovery;
|
|
266
|
+
if (compressed) {
|
|
267
|
+
compactByte += 4;
|
|
268
|
+
}
|
|
269
|
+
let arr = [compactByte];
|
|
270
|
+
arr = arr.concat(this.r.toArray('be', 32));
|
|
271
|
+
arr = arr.concat(this.s.toArray('be', 32));
|
|
272
|
+
if (enc === 'hex') {
|
|
273
|
+
return (0, utils_js_1.toHex)(arr);
|
|
274
|
+
}
|
|
275
|
+
else if (enc === 'base64') {
|
|
276
|
+
return (0, utils_js_1.toBase64)(arr);
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
return arr;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Recovers the public key from a signature.
|
|
284
|
+
* This method will return the public key if it finds a valid public key.
|
|
285
|
+
* If it does not find a valid public key, it will throw an error.
|
|
286
|
+
* The recovery factor is a number between 0 and 3.
|
|
287
|
+
* @method RecoverPublicKey
|
|
288
|
+
* @param recovery - The recovery factor.
|
|
289
|
+
* @param e - The message hash.
|
|
290
|
+
* @returns The public key associated with the signature.
|
|
291
|
+
*
|
|
292
|
+
* @example
|
|
293
|
+
* const publicKey = signature.RecoverPublicKey(0, msgHash);
|
|
294
|
+
*/
|
|
295
|
+
RecoverPublicKey(recovery, e) {
|
|
296
|
+
const r = this.r;
|
|
297
|
+
const s = this.s;
|
|
298
|
+
// A set LSB signifies that the y-coordinate is odd
|
|
299
|
+
const isYOdd = !!(recovery & 1);
|
|
300
|
+
// The more significant bit specifies whether we should use the
|
|
301
|
+
// first or second candidate key.
|
|
302
|
+
const isSecondKey = recovery >> 1;
|
|
303
|
+
const curve = new Curve_js_1.default();
|
|
304
|
+
const n = curve.n;
|
|
305
|
+
const G = curve.g;
|
|
306
|
+
// 1.1 LEt x = r + jn
|
|
307
|
+
const x = isSecondKey ? r.add(n) : r;
|
|
308
|
+
const R = Point_js_1.default.fromX(x, isYOdd);
|
|
309
|
+
// 1.4 Check that nR is at infinity
|
|
310
|
+
const nR = R.mul(n);
|
|
311
|
+
if (!nR.isInfinity()) {
|
|
312
|
+
throw new Error('nR is not at infinity');
|
|
313
|
+
}
|
|
314
|
+
// Compute -e from e
|
|
315
|
+
const eNeg = e.neg().umod(n);
|
|
316
|
+
// 1.6.1 Compute Q = r^-1 (sR - eG)
|
|
317
|
+
// Q = r^-1 (sR + -eG)
|
|
318
|
+
const rInv = r.invm(n);
|
|
319
|
+
// const Q = R.multiplyTwo(s, G, eNeg).mul(rInv)
|
|
320
|
+
const Q = R.mul(s)
|
|
321
|
+
.add(G.mul(eNeg))
|
|
322
|
+
.mul(rInv);
|
|
323
|
+
const pubKey = new PublicKey_js_1.default(Q);
|
|
324
|
+
pubKey.validate();
|
|
325
|
+
return pubKey;
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Calculates the recovery factor which will work for a particular public key and message hash.
|
|
329
|
+
* This method will return the recovery factor if it finds a valid recovery factor.
|
|
330
|
+
* If it does not find a valid recovery factor, it will throw an error.
|
|
331
|
+
* The recovery factor is a number between 0 and 3.
|
|
332
|
+
*
|
|
333
|
+
* @method CalculateRecoveryFactor
|
|
334
|
+
* @param msgHash - The message hash.
|
|
335
|
+
* @returns the recovery factor: number
|
|
336
|
+
* /
|
|
337
|
+
* @example
|
|
338
|
+
* const recovery = signature.CalculateRecoveryFactor(publicKey, msgHash);
|
|
339
|
+
*/
|
|
340
|
+
CalculateRecoveryFactor(pubkey, msgHash) {
|
|
341
|
+
for (let recovery = 0; recovery < 4; recovery++) {
|
|
342
|
+
let Qprime;
|
|
343
|
+
try {
|
|
344
|
+
Qprime = this.RecoverPublicKey(recovery, msgHash);
|
|
345
|
+
}
|
|
346
|
+
catch (e) {
|
|
347
|
+
continue;
|
|
348
|
+
}
|
|
349
|
+
if (pubkey.eq(Qprime)) {
|
|
350
|
+
return recovery;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
throw new Error('Unable to find valid recovery factor');
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
exports.default = Signature;
|
|
357
|
+
//# sourceMappingURL=Signature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Signature.js","sourceRoot":"","sources":["../../../../src/primitives/Signature.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
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 AESGCM_js_1 = require("./AESGCM.js");
|
|
8
|
+
const Random_js_1 = __importDefault(require("./Random.js"));
|
|
9
|
+
const utils_js_1 = require("./utils.js");
|
|
10
|
+
/**
|
|
11
|
+
* `SymmetricKey` is a class that extends the `BigNumber` class and implements symmetric encryption and decryption methods.
|
|
12
|
+
* Symmetric-Key encryption is a form of encryption where the same key is used to encrypt and decrypt the message.
|
|
13
|
+
* It leverages the Advanced Encryption Standard Galois/Counter Mode (AES-GCM) for encryption and decryption of messages.
|
|
14
|
+
*
|
|
15
|
+
* @class SymmetricKey
|
|
16
|
+
* @extends {BigNumber}
|
|
17
|
+
*/
|
|
18
|
+
class SymmetricKey extends BigNumber_js_1.default {
|
|
19
|
+
/**
|
|
20
|
+
* Generates a symmetric key randomly.
|
|
21
|
+
*
|
|
22
|
+
* @method fromRandom
|
|
23
|
+
* @static
|
|
24
|
+
* @returns The newly generated Symmetric Key.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* const symmetricKey = SymmetricKey.fromRandom();
|
|
28
|
+
*/
|
|
29
|
+
static fromRandom() {
|
|
30
|
+
return new SymmetricKey((0, Random_js_1.default)(32));
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Encrypts a given message using AES-GCM encryption.
|
|
34
|
+
* The generated Initialization Vector (IV) is attached to the encrypted message for decryption purposes.
|
|
35
|
+
* The OpenSSL format of |IV|encryptedContent|authTag| is used.
|
|
36
|
+
*
|
|
37
|
+
* @method encrypt
|
|
38
|
+
* @param msg - The message to be encrypted. It can be a string or an array of numbers.
|
|
39
|
+
* @param enc - optional. The encoding of the message. If hex, the string is assumed to be hex, UTF-8 otherwise.
|
|
40
|
+
* @returns Returns the encrypted message as a string or an array of numbers, depending on `enc` argument.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* const key = new SymmetricKey(1234);
|
|
44
|
+
* const encryptedMessage = key.encrypt('plainText', 'utf8');
|
|
45
|
+
*/
|
|
46
|
+
encrypt(msg, enc) {
|
|
47
|
+
const iv = (0, Random_js_1.default)(32);
|
|
48
|
+
msg = (0, utils_js_1.toArray)(msg, enc);
|
|
49
|
+
const { result, authenticationTag } = (0, AESGCM_js_1.AESGCM)(msg, [], iv, this.toArray('be', 32));
|
|
50
|
+
return (0, utils_js_1.encode)([...iv, ...result, ...authenticationTag], enc);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Decrypts a given AES-GCM encrypted message using the same key that was used for encryption.
|
|
54
|
+
* The method extracts the IV and the authentication tag from the encrypted message, then attempts to decrypt it.
|
|
55
|
+
* If the decryption fails (e.g., due to message tampering), an error is thrown.
|
|
56
|
+
*
|
|
57
|
+
* @method decrypt
|
|
58
|
+
* @param msg - The encrypted message to be decrypted. It can be a string or an array of numbers.
|
|
59
|
+
* @param enc - optional. The encoding of the message (if no encoding is provided, uses utf8 for strings, unless specified as hex).
|
|
60
|
+
* @returns Returns the decrypted message as a string or an array of numbers, depending on `enc` argument. If absent, an array of numbers is returned.
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* const key = new SymmetricKey(1234);
|
|
64
|
+
* const decryptedMessage = key.decrypt(encryptedMessage, 'utf8');
|
|
65
|
+
*
|
|
66
|
+
* @throws {Error} Will throw an error if the decryption fails, likely due to message tampering or incorrect decryption key.
|
|
67
|
+
*/
|
|
68
|
+
decrypt(msg, enc) {
|
|
69
|
+
msg = (0, utils_js_1.toArray)(msg, enc);
|
|
70
|
+
const iv = msg.slice(0, 32);
|
|
71
|
+
const ciphertextWithTag = msg.slice(32);
|
|
72
|
+
const messageTag = ciphertextWithTag.slice(-16);
|
|
73
|
+
const ciphertext = ciphertextWithTag.slice(0, -16);
|
|
74
|
+
const result = (0, AESGCM_js_1.AESGCMDecrypt)(ciphertext, [], iv, messageTag, this.toArray());
|
|
75
|
+
if (result === null) {
|
|
76
|
+
throw new Error('Decryption failed!');
|
|
77
|
+
}
|
|
78
|
+
return (0, utils_js_1.encode)(result, enc);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.default = SymmetricKey;
|
|
82
|
+
//# sourceMappingURL=SymmetricKey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SymmetricKey.js","sourceRoot":"","sources":["../../../../src/primitives/SymmetricKey.ts"],"names":[],"mappings":";;;;;AAAA,kEAAsC;AACtC,2CAAmD;AACnD,4DAAgC;AAChC,yCAA4C;AAE5C;;;;;;;GAOG;AACH,MAAqB,YAAa,SAAQ,sBAAS;IACjD;;;;;;;;;OASG;IACH,MAAM,CAAC,UAAU;QACf,OAAO,IAAI,YAAY,CAAC,IAAA,mBAAM,EAAC,EAAE,CAAC,CAAC,CAAA;IACrC,CAAC;IAED;;;;;;;;;;;;;MAaE;IACF,OAAO,CAAE,GAAsB,EAAE,GAAW;QAC1C,MAAM,EAAE,GAAG,IAAA,mBAAM,EAAC,EAAE,CAAC,CAAA;QACrB,GAAG,GAAG,IAAA,kBAAO,EAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QACvB,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,IAAA,kBAAM,EAC1C,GAAG,EACH,EAAE,EACF,EAAE,EACF,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CACvB,CAAA;QACD,OAAO,IAAA,iBAAM,EAAC,CAAC,GAAG,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,iBAAiB,CAAC,EAAE,GAAG,CAAC,CAAA;IAC9D,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAE,GAAsB,EAAE,GAAoB;QACnD,GAAG,GAAG,IAAA,kBAAO,EAAC,GAAG,EAAE,GAAG,CAAa,CAAA;QACnC,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QAC3B,MAAM,iBAAiB,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACvC,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAA;QAC/C,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QAClD,MAAM,MAAM,GAAG,IAAA,yBAAa,EAC1B,UAAU,EACV,EAAE,EACF,EAAE,EACF,UAAU,EACV,IAAI,CAAC,OAAO,EAAE,CACf,CAAA;QACD,IAAI,MAAM,KAAK,IAAI,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;SACtC;QACD,OAAO,IAAA,iBAAM,EAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC5B,CAAC;CACF;AA3ED,+BA2EC"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
const Signature_js_1 = __importDefault(require("./Signature.js"));
|
|
30
|
+
const BigNumber_js_1 = __importDefault(require("./BigNumber.js"));
|
|
31
|
+
const Hash = __importStar(require("./Hash.js"));
|
|
32
|
+
const utils_js_1 = require("./utils.js");
|
|
33
|
+
class TransactionSignature extends Signature_js_1.default {
|
|
34
|
+
static format(params) {
|
|
35
|
+
const currentInput = {
|
|
36
|
+
sourceTXID: params.sourceTXID,
|
|
37
|
+
sourceOutputIndex: params.sourceOutputIndex,
|
|
38
|
+
sequence: params.inputSequence
|
|
39
|
+
};
|
|
40
|
+
const inputs = [...params.otherInputs];
|
|
41
|
+
inputs.splice(params.inputIndex, 0, currentInput);
|
|
42
|
+
const getPrevoutHash = () => {
|
|
43
|
+
const writer = new utils_js_1.Writer();
|
|
44
|
+
for (const input of inputs) {
|
|
45
|
+
if (typeof input.sourceTransaction === 'undefined') {
|
|
46
|
+
writer.writeReverse((0, utils_js_1.toArray)(input.sourceTXID, 'hex'));
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
writer.writeReverse(input.sourceTransaction.id());
|
|
50
|
+
}
|
|
51
|
+
writer.writeUInt32LE(input.sourceOutputIndex);
|
|
52
|
+
}
|
|
53
|
+
const buf = writer.toArray();
|
|
54
|
+
const ret = Hash.hash256(buf);
|
|
55
|
+
return ret;
|
|
56
|
+
};
|
|
57
|
+
const getSequenceHash = () => {
|
|
58
|
+
const writer = new utils_js_1.Writer();
|
|
59
|
+
for (const input of inputs) {
|
|
60
|
+
writer.writeUInt32LE(input.sequence);
|
|
61
|
+
}
|
|
62
|
+
const buf = writer.toArray();
|
|
63
|
+
const ret = Hash.hash256(buf);
|
|
64
|
+
return ret;
|
|
65
|
+
};
|
|
66
|
+
function getOutputsHash(outputIndex) {
|
|
67
|
+
const writer = new utils_js_1.Writer();
|
|
68
|
+
if (typeof outputIndex === 'undefined') {
|
|
69
|
+
let script;
|
|
70
|
+
for (const output of params.outputs) {
|
|
71
|
+
writer.writeUInt64LE(output.satoshis);
|
|
72
|
+
script = output.lockingScript.toBinary();
|
|
73
|
+
writer.writeVarIntNum(script.length);
|
|
74
|
+
writer.write(script);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
const output = params.outputs[outputIndex];
|
|
79
|
+
writer.writeUInt64LE(output.satoshis);
|
|
80
|
+
const script = output.lockingScript.toBinary();
|
|
81
|
+
writer.writeVarIntNum(script.length);
|
|
82
|
+
writer.write(script);
|
|
83
|
+
}
|
|
84
|
+
const buf = writer.toArray();
|
|
85
|
+
const ret = Hash.hash256(buf);
|
|
86
|
+
return ret;
|
|
87
|
+
}
|
|
88
|
+
let hashPrevouts = new Array(32).fill(0);
|
|
89
|
+
let hashSequence = new Array(32).fill(0);
|
|
90
|
+
let hashOutputs = new Array(32).fill(0);
|
|
91
|
+
if ((params.scope & TransactionSignature.SIGHASH_ANYONECANPAY) === 0) {
|
|
92
|
+
hashPrevouts = getPrevoutHash();
|
|
93
|
+
}
|
|
94
|
+
if ((params.scope & TransactionSignature.SIGHASH_ANYONECANPAY) === 0 &&
|
|
95
|
+
(params.scope & 31) !== TransactionSignature.SIGHASH_SINGLE &&
|
|
96
|
+
(params.scope & 31) !== TransactionSignature.SIGHASH_NONE) {
|
|
97
|
+
hashSequence = getSequenceHash();
|
|
98
|
+
}
|
|
99
|
+
if ((params.scope & 31) !== TransactionSignature.SIGHASH_SINGLE && (params.scope & 31) !== TransactionSignature.SIGHASH_NONE) {
|
|
100
|
+
hashOutputs = getOutputsHash();
|
|
101
|
+
}
|
|
102
|
+
else if ((params.scope & 31) === TransactionSignature.SIGHASH_SINGLE && params.inputIndex < params.outputs.length) {
|
|
103
|
+
hashOutputs = getOutputsHash(params.inputIndex);
|
|
104
|
+
}
|
|
105
|
+
const writer = new utils_js_1.Writer();
|
|
106
|
+
// Version
|
|
107
|
+
writer.writeInt32LE(params.transactionVersion);
|
|
108
|
+
// Input prevouts/nSequence (none/all, depending on flags)
|
|
109
|
+
writer.write(hashPrevouts);
|
|
110
|
+
writer.write(hashSequence);
|
|
111
|
+
// outpoint (32-byte hash + 4-byte little endian)
|
|
112
|
+
writer.writeReverse((0, utils_js_1.toArray)(params.sourceTXID, 'hex'));
|
|
113
|
+
writer.writeUInt32LE(params.sourceOutputIndex);
|
|
114
|
+
// scriptCode of the input (serialized as scripts inside CTxOuts)
|
|
115
|
+
writer.writeVarIntNum(params.subscript.toBinary().length);
|
|
116
|
+
writer.write(params.subscript.toBinary());
|
|
117
|
+
// value of the output spent by this input (8-byte little endian)
|
|
118
|
+
writer.writeUInt64LE(params.sourceSatoshis);
|
|
119
|
+
// nSequence of the input (4-byte little endian)
|
|
120
|
+
const sequenceNumber = currentInput.sequence;
|
|
121
|
+
writer.writeUInt32LE(sequenceNumber);
|
|
122
|
+
// Outputs (none/one/all, depending on flags)
|
|
123
|
+
writer.write(hashOutputs);
|
|
124
|
+
// Locktime
|
|
125
|
+
writer.writeUInt32LE(params.lockTime);
|
|
126
|
+
// sighashType
|
|
127
|
+
writer.writeUInt32LE(params.scope >>> 0);
|
|
128
|
+
const buf = writer.toArray();
|
|
129
|
+
return buf;
|
|
130
|
+
}
|
|
131
|
+
// The format used in a tx
|
|
132
|
+
static fromChecksigFormat(buf) {
|
|
133
|
+
if (buf.length === 0) {
|
|
134
|
+
// allow setting a "blank" signature
|
|
135
|
+
const r = new BigNumber_js_1.default(1);
|
|
136
|
+
const s = new BigNumber_js_1.default(1);
|
|
137
|
+
const scope = 1;
|
|
138
|
+
return new TransactionSignature(r, s, scope);
|
|
139
|
+
}
|
|
140
|
+
const scope = buf[buf.length - 1];
|
|
141
|
+
const derbuf = buf.slice(0, buf.length - 1);
|
|
142
|
+
const tempSig = Signature_js_1.default.fromDER(derbuf);
|
|
143
|
+
return new TransactionSignature(tempSig.r, tempSig.s, scope);
|
|
144
|
+
}
|
|
145
|
+
constructor(r, s, scope) {
|
|
146
|
+
super(r, s);
|
|
147
|
+
this.scope = scope;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Compares to bitcoind's IsLowDERSignature
|
|
151
|
+
* See also Ecdsa signature algorithm which enforces this.
|
|
152
|
+
* See also Bip 62, "low S values in signatures"
|
|
153
|
+
*/
|
|
154
|
+
hasLowS() {
|
|
155
|
+
if (this.s.ltn(1) ||
|
|
156
|
+
this.s.gt(new BigNumber_js_1.default('7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0', 'hex'))) {
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
return true;
|
|
160
|
+
}
|
|
161
|
+
toChecksigFormat() {
|
|
162
|
+
const derbuf = this.toDER();
|
|
163
|
+
return [...derbuf, this.scope];
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
TransactionSignature.SIGHASH_ALL = 0x00000001;
|
|
167
|
+
TransactionSignature.SIGHASH_NONE = 0x00000002;
|
|
168
|
+
TransactionSignature.SIGHASH_SINGLE = 0x00000003;
|
|
169
|
+
TransactionSignature.SIGHASH_FORKID = 0x00000040;
|
|
170
|
+
TransactionSignature.SIGHASH_ANYONECANPAY = 0x00000080;
|
|
171
|
+
exports.default = TransactionSignature;
|
|
172
|
+
//# sourceMappingURL=TransactionSignature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransactionSignature.js","sourceRoot":"","sources":["../../../../src/primitives/TransactionSignature.ts"],"names":[],"mappings":"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"}
|