@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,70 @@
|
|
|
1
|
+
import PublicKey from '../primitives/PublicKey.js'
|
|
2
|
+
import PrivateKey from '../primitives/PrivateKey.js'
|
|
3
|
+
import SymmetricKey from '../primitives/SymmetricKey.js'
|
|
4
|
+
import Random from '../primitives/Random.js'
|
|
5
|
+
import { toBase64, toArray, Reader, toHex } from '../primitives/utils.js'
|
|
6
|
+
|
|
7
|
+
const VERSION = '42421033'
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Encrypts a message from one party to another using the BRC-78 message encryption protocol.
|
|
11
|
+
* @param message The message to encrypt
|
|
12
|
+
* @param sender The private key of the sender
|
|
13
|
+
* @param recipient The public key of the recipient
|
|
14
|
+
*
|
|
15
|
+
* @returns The encrypted message
|
|
16
|
+
*/
|
|
17
|
+
export const encrypt = (
|
|
18
|
+
message: number[],
|
|
19
|
+
sender: PrivateKey,
|
|
20
|
+
recipient: PublicKey
|
|
21
|
+
): number[] => {
|
|
22
|
+
const keyID = Random(32)
|
|
23
|
+
const keyIDBase64 = toBase64(keyID)
|
|
24
|
+
const invoiceNumber = `2-message encryption-${keyIDBase64}`
|
|
25
|
+
const signingPriv = sender.deriveChild(recipient, invoiceNumber)
|
|
26
|
+
const recipientPub = recipient.deriveChild(sender, invoiceNumber)
|
|
27
|
+
const sharedSecret = signingPriv.deriveSharedSecret(recipientPub)
|
|
28
|
+
const symmetricKey = new SymmetricKey(sharedSecret.encode(true).slice(1))
|
|
29
|
+
const encrypted = symmetricKey.encrypt(message) as number[]
|
|
30
|
+
const senderPublicKey = sender.toPublicKey().encode(true)
|
|
31
|
+
const version = toArray(VERSION, 'hex')
|
|
32
|
+
return [
|
|
33
|
+
...version,
|
|
34
|
+
...senderPublicKey,
|
|
35
|
+
...recipient.encode(true),
|
|
36
|
+
...keyID,
|
|
37
|
+
...encrypted
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Decrypts a message from one party to another using the BRC-78 message encryption protocol.
|
|
43
|
+
* @param message The message to decrypt
|
|
44
|
+
* @param sender The private key of the recipient
|
|
45
|
+
*
|
|
46
|
+
* @returns The decrypted message
|
|
47
|
+
*/
|
|
48
|
+
export const decrypt = (message: number[], recipient: PrivateKey): number[] => {
|
|
49
|
+
const reader = new Reader(message)
|
|
50
|
+
const messageVersion = toHex(reader.read(4))
|
|
51
|
+
if (messageVersion !== VERSION) {
|
|
52
|
+
throw new Error(
|
|
53
|
+
`Message version mismatch: Expected ${VERSION}, received ${messageVersion}`
|
|
54
|
+
)
|
|
55
|
+
}
|
|
56
|
+
const sender = PublicKey.fromString(toHex(reader.read(33)))
|
|
57
|
+
const expectedRecipientDER = toHex(reader.read(33))
|
|
58
|
+
const actualRecipientDER = recipient.toPublicKey().encode(true, 'hex') as string
|
|
59
|
+
if (expectedRecipientDER !== actualRecipientDER) {
|
|
60
|
+
throw new Error(`The encrypted message expects a recipient public key of ${expectedRecipientDER}, but the provided key is ${actualRecipientDER}`)
|
|
61
|
+
}
|
|
62
|
+
const keyID = toBase64(reader.read(32))
|
|
63
|
+
const encrypted = reader.read(reader.bin.length - reader.pos)
|
|
64
|
+
const invoiceNumber = `2-message encryption-${keyID}`
|
|
65
|
+
const signingPriv = sender.deriveChild(recipient, invoiceNumber)
|
|
66
|
+
const recipientPub = recipient.deriveChild(sender, invoiceNumber)
|
|
67
|
+
const sharedSecret = signingPriv.deriveSharedSecret(recipientPub)
|
|
68
|
+
const symmetricKey = new SymmetricKey(sharedSecret.encode(true).slice(1))
|
|
69
|
+
return symmetricKey.decrypt(encrypted) as number[]
|
|
70
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import PublicKey from '../primitives/PublicKey.js'
|
|
2
|
+
import PrivateKey from '../primitives/PrivateKey.js'
|
|
3
|
+
import Signature from '../primitives/Signature.js'
|
|
4
|
+
import Curve from '../primitives/Curve.js'
|
|
5
|
+
import Random from '../primitives/Random.js'
|
|
6
|
+
import { toBase64, toArray, Reader, toHex } from '../primitives/utils.js'
|
|
7
|
+
|
|
8
|
+
const VERSION = '42423301'
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Signs a message from one party to be verified by another, or for verification by anyone, using the BRC-77 message signing protocol.
|
|
12
|
+
* @param message The message to sign
|
|
13
|
+
* @param signer The private key of the message signer
|
|
14
|
+
* @param [verifier] The public key of the person who can verify the message. If not provided, anyone will be able to verify the message signature.
|
|
15
|
+
*
|
|
16
|
+
* @returns The message signature.
|
|
17
|
+
*/
|
|
18
|
+
export const sign = (
|
|
19
|
+
message: number[],
|
|
20
|
+
signer: PrivateKey,
|
|
21
|
+
verifier?: PublicKey
|
|
22
|
+
): number[] => {
|
|
23
|
+
const recipientAnyone = typeof verifier !== 'object'
|
|
24
|
+
if (recipientAnyone) {
|
|
25
|
+
const curve = new Curve()
|
|
26
|
+
const anyone = new PrivateKey(1)
|
|
27
|
+
const anyonePoint = curve.g.mul(anyone)
|
|
28
|
+
verifier = new PublicKey(
|
|
29
|
+
anyonePoint.x,
|
|
30
|
+
anyonePoint.y
|
|
31
|
+
)
|
|
32
|
+
}
|
|
33
|
+
const keyID = Random(32)
|
|
34
|
+
const keyIDBase64 = toBase64(keyID)
|
|
35
|
+
const invoiceNumber = `2-message signing-${keyIDBase64}`
|
|
36
|
+
const signingKey = signer.deriveChild(verifier, invoiceNumber)
|
|
37
|
+
const signature = signingKey.sign(message).toDER()
|
|
38
|
+
const senderPublicKey = signer.toPublicKey().encode(true)
|
|
39
|
+
const version = toArray(VERSION, 'hex')
|
|
40
|
+
return [
|
|
41
|
+
...version,
|
|
42
|
+
...senderPublicKey,
|
|
43
|
+
...(recipientAnyone ? [0] : verifier.encode(true)),
|
|
44
|
+
...keyID,
|
|
45
|
+
...signature
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Verifies a message using the BRC-77 message signing protocol.
|
|
51
|
+
* @param message The message to verify.
|
|
52
|
+
* @param sig The message signature to be verified.
|
|
53
|
+
* @param [recipient] The private key of the message verifier. This can be omitted if the message is verifiable by anyone.
|
|
54
|
+
*
|
|
55
|
+
* @returns True if the message is verified.
|
|
56
|
+
*/
|
|
57
|
+
export const verify = (message: number[], sig: number[], recipient?: PrivateKey): boolean => {
|
|
58
|
+
const reader = new Reader(sig)
|
|
59
|
+
const messageVersion = toHex(reader.read(4))
|
|
60
|
+
if (messageVersion !== VERSION) {
|
|
61
|
+
throw new Error(
|
|
62
|
+
`Message version mismatch: Expected ${VERSION}, received ${messageVersion}`
|
|
63
|
+
)
|
|
64
|
+
}
|
|
65
|
+
const signer = PublicKey.fromString(toHex(reader.read(33)))
|
|
66
|
+
const [verifierFirst] = reader.read(1)
|
|
67
|
+
if (verifierFirst === 0) {
|
|
68
|
+
recipient = new PrivateKey(1)
|
|
69
|
+
} else {
|
|
70
|
+
const verifierRest = reader.read(32)
|
|
71
|
+
const verifierDER = toHex([verifierFirst, ...verifierRest])
|
|
72
|
+
if (typeof recipient !== 'object') {
|
|
73
|
+
throw new Error(`This signature can only be verified with knowledge of a specific private key. The associated public key is: ${verifierDER}`)
|
|
74
|
+
}
|
|
75
|
+
const recipientDER = recipient.toPublicKey().encode(true, 'hex') as string
|
|
76
|
+
if (verifierDER !== recipientDER) {
|
|
77
|
+
throw new Error(`The recipient public key is ${recipientDER} but the signature requres the recipient to have public key ${verifierDER}`)
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const keyID = toBase64(reader.read(32))
|
|
81
|
+
const signatureDER = toHex(reader.read(reader.bin.length - reader.pos))
|
|
82
|
+
const signature = Signature.fromDER(signatureDER, 'hex')
|
|
83
|
+
const invoiceNumber = `2-message signing-${keyID}`
|
|
84
|
+
const signingKey = signer.deriveChild(recipient, invoiceNumber)
|
|
85
|
+
const verified = signingKey.verify(message, signature)
|
|
86
|
+
return verified
|
|
87
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { encrypt, decrypt } from '../../../dist/cjs/src/messages/EncryptedMessage'
|
|
2
|
+
import PrivateKey from '../../../dist/cjs/src/primitives/PrivateKey'
|
|
3
|
+
|
|
4
|
+
describe('EncryptedMessage', () => {
|
|
5
|
+
it('Encrypts a message for a recipient', () => {
|
|
6
|
+
const sender = new PrivateKey(15)
|
|
7
|
+
const recipient = new PrivateKey(21)
|
|
8
|
+
const recipientPub = recipient.toPublicKey()
|
|
9
|
+
const message = [1, 2, 4, 8, 16, 32]
|
|
10
|
+
const encrypted = encrypt(message, sender, recipientPub)
|
|
11
|
+
const decrypted = decrypt(encrypted, recipient)
|
|
12
|
+
expect(decrypted).toEqual(message)
|
|
13
|
+
})
|
|
14
|
+
it('Fails to decrypt a message with wrong version', () => {
|
|
15
|
+
const sender = new PrivateKey(15)
|
|
16
|
+
const recipient = new PrivateKey(21)
|
|
17
|
+
const recipientPub = recipient.toPublicKey()
|
|
18
|
+
const message = [1, 2, 4, 8, 16, 32]
|
|
19
|
+
const encrypted = encrypt(message, sender, recipientPub)
|
|
20
|
+
encrypted[0] = 1
|
|
21
|
+
expect(() => decrypt(encrypted, recipient)).toThrow(new Error(
|
|
22
|
+
'Message version mismatch: Expected 42421033, received 01421033'
|
|
23
|
+
))
|
|
24
|
+
})
|
|
25
|
+
it('Fails to decrypt a message with wrong recipient', () => {
|
|
26
|
+
const sender = new PrivateKey(15)
|
|
27
|
+
const recipient = new PrivateKey(21)
|
|
28
|
+
const wrongRecipient = new PrivateKey(22)
|
|
29
|
+
const recipientPub = recipient.toPublicKey()
|
|
30
|
+
const message = [1, 2, 4, 8, 16, 32]
|
|
31
|
+
const encrypted = encrypt(message, sender, recipientPub)
|
|
32
|
+
expect(() => decrypt(encrypted, wrongRecipient)).toThrow(new Error(
|
|
33
|
+
'The encrypted message expects a recipient public key of 02352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5, but the provided key is 03421f5fc9a21065445c96fdb91c0c1e2f2431741c72713b4b99ddcb316f31e9fc'
|
|
34
|
+
))
|
|
35
|
+
})
|
|
36
|
+
})
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { sign, verify } from '../../../dist/cjs/src/messages/SignedMessage'
|
|
2
|
+
import PrivateKey from '../../../dist/cjs/src/primitives/PrivateKey'
|
|
3
|
+
|
|
4
|
+
describe('SignedMessage', () => {
|
|
5
|
+
it('Signs a message for a recipient', () => {
|
|
6
|
+
const sender = new PrivateKey(15)
|
|
7
|
+
const recipient = new PrivateKey(21)
|
|
8
|
+
const recipientPub = recipient.toPublicKey()
|
|
9
|
+
const message = [1, 2, 4, 8, 16, 32]
|
|
10
|
+
const signature = sign(message, sender, recipientPub)
|
|
11
|
+
const verified = verify(message, signature, recipient)
|
|
12
|
+
expect(verified).toEqual(true)
|
|
13
|
+
})
|
|
14
|
+
it('Signs a message for anyone', () => {
|
|
15
|
+
const sender = new PrivateKey(15)
|
|
16
|
+
const message = [1, 2, 4, 8, 16, 32]
|
|
17
|
+
const signature = sign(message, sender)
|
|
18
|
+
const verified = verify(message, signature)
|
|
19
|
+
expect(verified).toEqual(true)
|
|
20
|
+
})
|
|
21
|
+
it('Fails to verify a message with a wrong version', () => {
|
|
22
|
+
const sender = new PrivateKey(15)
|
|
23
|
+
const recipient = new PrivateKey(21)
|
|
24
|
+
const recipientPub = recipient.toPublicKey()
|
|
25
|
+
const message = [1, 2, 4, 8, 16, 32]
|
|
26
|
+
const signature = sign(message, sender, recipientPub)
|
|
27
|
+
signature[0] = 1
|
|
28
|
+
expect(() => verify(message, signature, recipient)).toThrow(new Error(
|
|
29
|
+
'Message version mismatch: Expected 42423301, received 01423301'
|
|
30
|
+
))
|
|
31
|
+
})
|
|
32
|
+
it('Fails to verify a message with no verifier when required', () => {
|
|
33
|
+
const sender = new PrivateKey(15)
|
|
34
|
+
const recipient = new PrivateKey(21)
|
|
35
|
+
const recipientPub = recipient.toPublicKey()
|
|
36
|
+
const message = [1, 2, 4, 8, 16, 32]
|
|
37
|
+
const signature = sign(message, sender, recipientPub)
|
|
38
|
+
expect(() => verify(message, signature)).toThrow(new Error(
|
|
39
|
+
'This signature can only be verified with knowledge of a specific private key. The associated public key is: 02352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5'
|
|
40
|
+
))
|
|
41
|
+
})
|
|
42
|
+
it('Fails to verify a message with a wrong verifier', () => {
|
|
43
|
+
const sender = new PrivateKey(15)
|
|
44
|
+
const recipient = new PrivateKey(21)
|
|
45
|
+
const wrongRecipient = new PrivateKey(22)
|
|
46
|
+
const recipientPub = recipient.toPublicKey()
|
|
47
|
+
const message = [1, 2, 4, 8, 16, 32]
|
|
48
|
+
const signature = sign(message, sender, recipientPub)
|
|
49
|
+
expect(() => verify(message, signature, wrongRecipient)).toThrow(new Error(
|
|
50
|
+
'The recipient public key is 03421f5fc9a21065445c96fdb91c0c1e2f2431741c72713b4b99ddcb316f31e9fc but the signature requres the recipient to have public key 02352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5'
|
|
51
|
+
))
|
|
52
|
+
})
|
|
53
|
+
})
|