@bitgo-beta/utxo-core 1.8.1-beta.60 → 1.8.1-beta.601
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/src/Output.d.ts.map +1 -0
- package/dist/cjs/src/Output.js +60 -0
- package/dist/cjs/src/bip322/index.d.ts +5 -0
- package/dist/cjs/src/bip322/index.d.ts.map +1 -0
- package/dist/cjs/src/bip322/index.js +21 -0
- package/dist/cjs/src/bip322/toSign.d.ts +25 -0
- package/dist/cjs/src/bip322/toSign.d.ts.map +1 -0
- package/dist/cjs/src/bip322/toSign.js +126 -0
- package/dist/cjs/src/bip322/toSpend.d.ts +22 -0
- package/dist/cjs/src/bip322/toSpend.d.ts.map +1 -0
- package/dist/cjs/src/bip322/toSpend.js +72 -0
- package/dist/cjs/src/bip322/utils.d.ts +18 -0
- package/dist/cjs/src/bip322/utils.d.ts.map +1 -0
- package/dist/cjs/src/bip322/utils.js +115 -0
- package/dist/cjs/src/bip322/verify.d.ts +12 -0
- package/dist/cjs/src/bip322/verify.d.ts.map +1 -0
- package/dist/cjs/src/bip322/verify.js +115 -0
- package/dist/cjs/src/bip32utils.d.ts +16 -0
- package/dist/cjs/src/bip32utils.d.ts.map +1 -0
- package/dist/cjs/src/bip32utils.js +71 -0
- package/dist/cjs/src/bip65/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/bip65/index.js +1 -1
- package/dist/cjs/src/bip65/locktime.d.ts.map +1 -0
- package/dist/cjs/src/bip65/locktime.js +37 -0
- package/dist/{src → cjs/src}/descriptor/DescriptorMap.d.ts +1 -1
- package/dist/cjs/src/descriptor/DescriptorMap.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/DescriptorMap.js +9 -0
- package/dist/{src → cjs/src}/descriptor/Output.d.ts +1 -1
- package/dist/cjs/src/descriptor/Output.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/Output.js +41 -0
- package/dist/{src → cjs/src}/descriptor/VirtualSize.d.ts +1 -1
- package/dist/cjs/src/descriptor/VirtualSize.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/VirtualSize.js +100 -0
- package/dist/{src → cjs/src}/descriptor/address.d.ts +1 -1
- package/dist/cjs/src/descriptor/address.d.ts.map +1 -0
- package/dist/{src → cjs/src}/descriptor/address.js +1 -1
- package/dist/{src → cjs/src}/descriptor/derive.d.ts +1 -1
- package/dist/cjs/src/descriptor/derive.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/derive.js +45 -0
- package/dist/{src → cjs/src}/descriptor/fromFixedScriptWallet.d.ts +1 -1
- package/dist/cjs/src/descriptor/fromFixedScriptWallet.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/fromFixedScriptWallet.js +88 -0
- package/dist/{src → cjs/src}/descriptor/index.d.ts +1 -0
- package/dist/cjs/src/descriptor/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/descriptor/index.js +2 -1
- package/dist/cjs/src/descriptor/parse/PatternMatcher.d.ts +14 -0
- package/dist/cjs/src/descriptor/parse/PatternMatcher.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/parse/PatternMatcher.js +60 -0
- package/dist/{src → cjs/src}/descriptor/psbt/assertSatisfiable.d.ts +1 -1
- package/dist/cjs/src/descriptor/psbt/assertSatisfiable.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/psbt/assertSatisfiable.js +74 -0
- package/dist/{src → cjs/src}/descriptor/psbt/createPsbt.d.ts +4 -0
- package/dist/cjs/src/descriptor/psbt/createPsbt.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/psbt/createPsbt.js +107 -0
- package/dist/{src → cjs/src}/descriptor/psbt/findDescriptors.d.ts +1 -1
- package/dist/cjs/src/descriptor/psbt/findDescriptors.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/psbt/findDescriptors.js +98 -0
- package/dist/cjs/src/descriptor/psbt/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/descriptor/psbt/index.js +1 -1
- package/dist/{src → cjs/src}/descriptor/psbt/parse.d.ts +1 -1
- package/dist/cjs/src/descriptor/psbt/parse.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/psbt/parse.js +87 -0
- package/dist/{src → cjs/src}/descriptor/psbt/sign.d.ts +4 -4
- package/dist/cjs/src/descriptor/psbt/sign.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/psbt/sign.js +42 -0
- package/dist/{src → cjs/src}/descriptor/psbt/wrap.d.ts +1 -1
- package/dist/cjs/src/descriptor/psbt/wrap.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/psbt/wrap.js +76 -0
- package/dist/cjs/src/dustThreshold.d.ts.map +1 -0
- package/dist/cjs/src/dustThreshold.js +134 -0
- package/dist/{src → cjs/src}/index.d.ts +1 -0
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/index.js +3 -2
- package/dist/cjs/src/paygo/attestation.d.ts +11 -0
- package/dist/cjs/src/paygo/attestation.d.ts.map +1 -0
- package/dist/cjs/src/paygo/attestation.js +58 -0
- package/dist/cjs/src/paygo/index.d.ts +3 -0
- package/dist/cjs/src/paygo/index.d.ts.map +1 -0
- package/dist/cjs/src/paygo/index.js +19 -0
- package/dist/{src/paygo/ExtractAddressPayGoAttestation.d.ts → cjs/src/paygo/parsePayGoAttestation.d.ts} +8 -3
- package/dist/cjs/src/paygo/parsePayGoAttestation.d.ts.map +1 -0
- package/dist/cjs/src/paygo/parsePayGoAttestation.js +50 -0
- package/dist/cjs/src/paygo/psbt/Errors.d.ts +22 -0
- package/dist/cjs/src/paygo/psbt/Errors.d.ts.map +1 -0
- package/dist/cjs/src/paygo/psbt/Errors.js +44 -0
- package/dist/cjs/src/paygo/psbt/index.d.ts +2 -0
- package/dist/cjs/src/paygo/psbt/index.d.ts.map +1 -0
- package/dist/{src/paygo → cjs/src/paygo/psbt}/index.js +2 -2
- package/dist/cjs/src/paygo/psbt/payGoAddressProof.d.ts +29 -0
- package/dist/cjs/src/paygo/psbt/payGoAddressProof.d.ts.map +1 -0
- package/dist/cjs/src/paygo/psbt/payGoAddressProof.js +124 -0
- package/dist/{src → cjs/src}/testutil/descriptor/descriptors.d.ts +4 -1
- package/dist/cjs/src/testutil/descriptor/descriptors.d.ts.map +1 -0
- package/dist/cjs/src/testutil/descriptor/descriptors.js +162 -0
- package/dist/cjs/src/testutil/descriptor/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/testutil/descriptor/index.js +1 -1
- package/dist/{src → cjs/src}/testutil/descriptor/mock.utils.d.ts +3 -1
- package/dist/cjs/src/testutil/descriptor/mock.utils.d.ts.map +1 -0
- package/dist/cjs/src/testutil/descriptor/mock.utils.js +92 -0
- package/dist/cjs/src/testutil/descriptor/psbt.utils.d.ts.map +1 -0
- package/dist/cjs/src/testutil/descriptor/psbt.utils.js +21 -0
- package/dist/cjs/src/testutil/fixtures.utils.d.ts.map +1 -0
- package/dist/cjs/src/testutil/fixtures.utils.js +127 -0
- package/dist/{src → cjs/src}/testutil/generatePayGoAttestationProof.utils.d.ts +1 -1
- package/dist/cjs/src/testutil/generatePayGoAttestationProof.utils.d.ts.map +1 -0
- package/dist/cjs/src/testutil/generatePayGoAttestationProof.utils.js +38 -0
- package/dist/{src → cjs/src}/testutil/index.d.ts +1 -0
- package/dist/cjs/src/testutil/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/testutil/index.js +2 -1
- package/dist/{src → cjs/src}/testutil/key.utils.d.ts +1 -1
- package/dist/cjs/src/testutil/key.utils.d.ts.map +1 -0
- package/dist/cjs/src/testutil/key.utils.js +60 -0
- package/dist/cjs/src/testutil/toPlainObject.utils.d.ts.map +1 -0
- package/dist/cjs/src/testutil/toPlainObject.utils.js +89 -0
- package/dist/cjs/src/testutil/trimMessagePrefix.d.ts +11 -0
- package/dist/cjs/src/testutil/trimMessagePrefix.d.ts.map +1 -0
- package/dist/cjs/src/testutil/trimMessagePrefix.js +60 -0
- package/dist/cjs/src/xOnlyPubkey.d.ts.map +1 -0
- package/dist/cjs/src/xOnlyPubkey.js +18 -0
- package/dist/cjs/test/Output.d.ts +2 -0
- package/dist/cjs/test/Output.d.ts.map +1 -0
- package/dist/cjs/test/Output.js +70 -0
- package/dist/cjs/test/bip322/bip322.utils.d.ts +7 -0
- package/dist/cjs/test/bip322/bip322.utils.d.ts.map +1 -0
- package/dist/cjs/test/bip322/bip322.utils.js +16 -0
- package/dist/cjs/test/bip322/toSign.d.ts +2 -0
- package/dist/cjs/test/bip322/toSign.d.ts.map +1 -0
- package/dist/cjs/test/bip322/toSign.js +133 -0
- package/dist/cjs/test/bip322/toSpend.d.ts +2 -0
- package/dist/cjs/test/bip322/toSpend.d.ts.map +1 -0
- package/dist/cjs/test/bip322/toSpend.js +70 -0
- package/dist/cjs/test/bip322/utils.d.ts +2 -0
- package/dist/cjs/test/bip322/utils.d.ts.map +1 -0
- package/dist/cjs/test/bip322/utils.js +79 -0
- package/dist/cjs/test/bip322/verify.d.ts +2 -0
- package/dist/cjs/test/bip322/verify.d.ts.map +1 -0
- package/dist/cjs/test/bip322/verify.js +293 -0
- package/dist/cjs/test/bip32utils.d.ts +2 -0
- package/dist/cjs/test/bip32utils.d.ts.map +1 -0
- package/dist/cjs/test/bip32utils.js +62 -0
- package/dist/cjs/test/bip65/locktime.d.ts +2 -0
- package/dist/cjs/test/bip65/locktime.d.ts.map +1 -0
- package/dist/cjs/test/bip65/locktime.js +22 -0
- package/dist/cjs/test/descriptor/Output.d.ts +2 -0
- package/dist/cjs/test/descriptor/Output.d.ts.map +1 -0
- package/dist/cjs/test/descriptor/Output.js +44 -0
- package/dist/cjs/test/descriptor/derive.d.ts +2 -0
- package/dist/cjs/test/descriptor/derive.d.ts.map +1 -0
- package/dist/cjs/test/descriptor/derive.js +27 -0
- package/dist/cjs/test/descriptor/fromFixedScriptWallet.d.ts +2 -0
- package/dist/cjs/test/descriptor/fromFixedScriptWallet.d.ts.map +1 -0
- package/dist/cjs/test/descriptor/fromFixedScriptWallet.js +145 -0
- package/dist/cjs/test/descriptor/parse/PatternMatcher.d.ts +2 -0
- package/dist/cjs/test/descriptor/parse/PatternMatcher.d.ts.map +1 -0
- package/dist/cjs/test/descriptor/parse/PatternMatcher.js +120 -0
- package/dist/cjs/test/descriptor/psbt/VirtualSize.d.ts +2 -0
- package/dist/cjs/test/descriptor/psbt/VirtualSize.d.ts.map +1 -0
- package/dist/cjs/test/descriptor/psbt/VirtualSize.js +71 -0
- package/dist/cjs/test/descriptor/psbt/assertSatisfiable.d.ts +2 -0
- package/dist/cjs/test/descriptor/psbt/assertSatisfiable.d.ts.map +1 -0
- package/dist/cjs/test/descriptor/psbt/assertSatisfiable.js +56 -0
- package/dist/cjs/test/descriptor/psbt/findDescriptors.d.ts +2 -0
- package/dist/cjs/test/descriptor/psbt/findDescriptors.d.ts.map +1 -0
- package/dist/cjs/test/descriptor/psbt/findDescriptors.js +70 -0
- package/dist/cjs/test/descriptor/psbt/psbt.d.ts +2 -0
- package/dist/cjs/test/descriptor/psbt/psbt.d.ts.map +1 -0
- package/dist/cjs/test/descriptor/psbt/psbt.js +211 -0
- package/dist/cjs/test/dustThreshold.d.ts +2 -0
- package/dist/cjs/test/dustThreshold.d.ts.map +1 -0
- package/dist/cjs/test/dustThreshold.js +110 -0
- package/dist/cjs/test/paygo/attestation.d.ts +2 -0
- package/dist/cjs/test/paygo/attestation.d.ts.map +1 -0
- package/dist/cjs/test/paygo/attestation.js +23 -0
- package/dist/cjs/test/paygo/parsePayGoAttestation.d.ts +2 -0
- package/dist/cjs/test/paygo/parsePayGoAttestation.d.ts.map +1 -0
- package/dist/cjs/test/paygo/parsePayGoAttestation.js +75 -0
- package/dist/cjs/test/paygo/psbt/payGoAddressProof.d.ts +9 -0
- package/dist/cjs/test/paygo/psbt/payGoAddressProof.d.ts.map +1 -0
- package/dist/cjs/test/paygo/psbt/payGoAddressProof.js +163 -0
- package/dist/cjs/test/xOnlyPubkey.d.ts +2 -0
- package/dist/cjs/test/xOnlyPubkey.d.ts.map +1 -0
- package/dist/cjs/test/xOnlyPubkey.js +18 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/Output.d.ts +43 -0
- package/dist/esm/Output.js +53 -0
- package/dist/esm/bip322/index.d.ts +5 -0
- package/dist/esm/bip322/index.d.ts.map +1 -0
- package/dist/esm/bip322/index.js +5 -0
- package/dist/esm/bip322/toSign.d.ts +25 -0
- package/dist/esm/bip322/toSign.d.ts.map +1 -0
- package/dist/esm/bip322/toSign.js +120 -0
- package/dist/esm/bip322/toSpend.d.ts +22 -0
- package/dist/esm/bip322/toSpend.d.ts.map +1 -0
- package/dist/esm/bip322/toSpend.js +66 -0
- package/dist/esm/bip322/utils.d.ts +18 -0
- package/dist/esm/bip322/utils.d.ts.map +1 -0
- package/dist/esm/bip322/utils.js +77 -0
- package/dist/esm/bip322/verify.d.ts +12 -0
- package/dist/esm/bip322/verify.d.ts.map +1 -0
- package/dist/esm/bip322/verify.js +76 -0
- package/dist/esm/bip32utils.d.ts +16 -0
- package/dist/esm/bip32utils.d.ts.map +1 -0
- package/dist/esm/bip32utils.js +34 -0
- package/dist/esm/bip65/index.d.ts +2 -0
- package/dist/esm/bip65/index.js +2 -0
- package/dist/esm/bip65/locktime.d.ts +8 -0
- package/dist/esm/bip65/locktime.js +34 -0
- package/dist/esm/descriptor/DescriptorMap.d.ts +9 -0
- package/dist/{src → esm}/descriptor/DescriptorMap.d.ts.map +1 -1
- package/dist/esm/descriptor/DescriptorMap.js +6 -0
- package/dist/esm/descriptor/Output.d.ts +23 -0
- package/dist/{src → esm}/descriptor/Output.d.ts.map +1 -1
- package/dist/esm/descriptor/Output.js +32 -0
- package/dist/esm/descriptor/VirtualSize.d.ts +23 -0
- package/dist/{src → esm}/descriptor/VirtualSize.d.ts.map +1 -1
- package/dist/esm/descriptor/VirtualSize.js +94 -0
- package/dist/esm/descriptor/address.d.ts +5 -0
- package/dist/{src → esm}/descriptor/address.d.ts.map +1 -1
- package/dist/esm/descriptor/address.js +11 -0
- package/dist/esm/descriptor/derive.d.ts +13 -0
- package/dist/{src → esm}/descriptor/derive.d.ts.map +1 -1
- package/dist/esm/descriptor/derive.js +38 -0
- package/dist/esm/descriptor/fromFixedScriptWallet.d.ts +16 -0
- package/dist/{src → esm}/descriptor/fromFixedScriptWallet.d.ts.map +1 -1
- package/dist/esm/descriptor/fromFixedScriptWallet.js +51 -0
- package/dist/esm/descriptor/index.d.ts +11 -0
- package/dist/{src → esm}/descriptor/index.d.ts.map +1 -1
- package/dist/esm/descriptor/index.js +11 -0
- package/dist/esm/descriptor/parse/PatternMatcher.d.ts +14 -0
- package/dist/esm/descriptor/parse/PatternMatcher.d.ts.map +1 -0
- package/dist/esm/descriptor/parse/PatternMatcher.js +56 -0
- package/dist/esm/descriptor/psbt/assertSatisfiable.d.ts +20 -0
- package/dist/{src → esm}/descriptor/psbt/assertSatisfiable.d.ts.map +1 -1
- package/dist/esm/descriptor/psbt/assertSatisfiable.js +69 -0
- package/dist/esm/descriptor/psbt/createPsbt.d.ts +23 -0
- package/dist/esm/descriptor/psbt/createPsbt.d.ts.map +1 -0
- package/dist/esm/descriptor/psbt/createPsbt.js +69 -0
- package/dist/esm/descriptor/psbt/findDescriptors.d.ts +26 -0
- package/dist/{src → esm}/descriptor/psbt/findDescriptors.d.ts.map +1 -1
- package/dist/esm/descriptor/psbt/findDescriptors.js +94 -0
- package/dist/esm/descriptor/psbt/index.d.ts +7 -0
- package/dist/esm/descriptor/psbt/index.js +7 -0
- package/dist/esm/descriptor/psbt/parse.d.ts +27 -0
- package/dist/{src → esm}/descriptor/psbt/parse.d.ts.map +1 -1
- package/dist/esm/descriptor/psbt/parse.js +51 -0
- package/dist/esm/descriptor/psbt/sign.d.ts +26 -0
- package/dist/esm/descriptor/psbt/sign.d.ts.map +1 -0
- package/dist/esm/descriptor/psbt/sign.js +34 -0
- package/dist/esm/descriptor/psbt/wrap.d.ts +12 -0
- package/dist/{src → esm}/descriptor/psbt/wrap.d.ts.map +1 -1
- package/dist/esm/descriptor/psbt/wrap.js +38 -0
- package/dist/esm/dustThreshold.d.ts +4 -0
- package/dist/esm/dustThreshold.js +97 -0
- package/dist/esm/index.d.ts +10 -0
- package/dist/{src → esm}/index.d.ts.map +1 -1
- package/dist/esm/index.js +10 -0
- package/dist/esm/paygo/attestation.d.ts +11 -0
- package/dist/esm/paygo/attestation.d.ts.map +1 -0
- package/dist/esm/paygo/attestation.js +18 -0
- package/dist/esm/paygo/index.d.ts +3 -0
- package/dist/esm/paygo/index.d.ts.map +1 -0
- package/dist/esm/paygo/index.js +3 -0
- package/dist/esm/paygo/parsePayGoAttestation.d.ts +16 -0
- package/dist/esm/paygo/parsePayGoAttestation.d.ts.map +1 -0
- package/dist/esm/paygo/parsePayGoAttestation.js +43 -0
- package/dist/esm/paygo/psbt/Errors.d.ts +22 -0
- package/dist/esm/paygo/psbt/Errors.d.ts.map +1 -0
- package/dist/esm/paygo/psbt/Errors.js +35 -0
- package/dist/esm/paygo/psbt/index.d.ts +2 -0
- package/dist/esm/paygo/psbt/index.d.ts.map +1 -0
- package/dist/esm/paygo/psbt/index.js +2 -0
- package/dist/esm/paygo/psbt/payGoAddressProof.d.ts +29 -0
- package/dist/esm/paygo/psbt/payGoAddressProof.d.ts.map +1 -0
- package/dist/esm/paygo/psbt/payGoAddressProof.js +85 -0
- package/dist/esm/testutil/descriptor/descriptors.d.ts +13 -0
- package/dist/esm/testutil/descriptor/descriptors.d.ts.map +1 -0
- package/dist/esm/testutil/descriptor/descriptors.js +150 -0
- package/dist/esm/testutil/descriptor/index.d.ts +4 -0
- package/dist/esm/testutil/descriptor/index.js +4 -0
- package/dist/esm/testutil/descriptor/mock.utils.d.ts +36 -0
- package/dist/esm/testutil/descriptor/mock.utils.d.ts.map +1 -0
- package/dist/esm/testutil/descriptor/mock.utils.js +53 -0
- package/dist/esm/testutil/descriptor/psbt.utils.d.ts +4 -0
- package/dist/{src → esm}/testutil/descriptor/psbt.utils.d.ts.map +1 -1
- package/dist/esm/testutil/descriptor/psbt.utils.js +17 -0
- package/dist/esm/testutil/fixtures.utils.d.ts +15 -0
- package/dist/{src → esm}/testutil/fixtures.utils.js +5 -42
- package/dist/esm/testutil/generatePayGoAttestationProof.utils.d.ts +12 -0
- package/dist/esm/testutil/generatePayGoAttestationProof.utils.d.ts.map +1 -0
- package/dist/esm/testutil/generatePayGoAttestationProof.utils.js +32 -0
- package/dist/esm/testutil/index.d.ts +6 -0
- package/dist/{src → esm}/testutil/index.d.ts.map +1 -1
- package/dist/esm/testutil/index.js +6 -0
- package/dist/esm/testutil/key.utils.d.ts +16 -0
- package/dist/{src → esm}/testutil/key.utils.d.ts.map +1 -1
- package/dist/esm/testutil/key.utils.js +22 -0
- package/dist/esm/testutil/toPlainObject.utils.d.ts +11 -0
- package/dist/{src → esm}/testutil/toPlainObject.utils.d.ts.map +1 -1
- package/dist/esm/testutil/toPlainObject.utils.js +85 -0
- package/dist/esm/testutil/trimMessagePrefix.d.ts +11 -0
- package/dist/esm/testutil/trimMessagePrefix.d.ts.map +1 -0
- package/dist/esm/testutil/trimMessagePrefix.js +24 -0
- package/dist/esm/xOnlyPubkey.d.ts +2 -0
- package/dist/esm/xOnlyPubkey.js +15 -0
- package/package.json +50 -25
- package/dist/src/Output.js +0 -60
- package/dist/src/bip32utils.d.ts +0 -16
- package/dist/src/bip32utils.d.ts.map +0 -1
- package/dist/src/bip32utils.js +0 -72
- package/dist/src/bip65/locktime.js +0 -37
- package/dist/src/descriptor/DescriptorMap.js +0 -9
- package/dist/src/descriptor/Output.js +0 -41
- package/dist/src/descriptor/VirtualSize.js +0 -100
- package/dist/src/descriptor/derive.js +0 -45
- package/dist/src/descriptor/fromFixedScriptWallet.js +0 -88
- package/dist/src/descriptor/psbt/assertSatisfiable.js +0 -74
- package/dist/src/descriptor/psbt/createPsbt.d.ts.map +0 -1
- package/dist/src/descriptor/psbt/createPsbt.js +0 -82
- package/dist/src/descriptor/psbt/findDescriptors.js +0 -98
- package/dist/src/descriptor/psbt/parse.js +0 -87
- package/dist/src/descriptor/psbt/sign.d.ts.map +0 -1
- package/dist/src/descriptor/psbt/sign.js +0 -42
- package/dist/src/descriptor/psbt/wrap.js +0 -76
- package/dist/src/dustThreshold.js +0 -134
- package/dist/src/paygo/ExtractAddressPayGoAttestation.d.ts.map +0 -1
- package/dist/src/paygo/ExtractAddressPayGoAttestation.js +0 -44
- package/dist/src/paygo/index.d.ts +0 -2
- package/dist/src/paygo/index.d.ts.map +0 -1
- package/dist/src/testutil/descriptor/descriptors.d.ts.map +0 -1
- package/dist/src/testutil/descriptor/descriptors.js +0 -125
- package/dist/src/testutil/descriptor/mock.utils.d.ts.map +0 -1
- package/dist/src/testutil/descriptor/mock.utils.js +0 -91
- package/dist/src/testutil/descriptor/psbt.utils.js +0 -20
- package/dist/src/testutil/generatePayGoAttestationProof.utils.d.ts.map +0 -1
- package/dist/src/testutil/generatePayGoAttestationProof.utils.js +0 -43
- package/dist/src/testutil/key.utils.js +0 -59
- package/dist/src/testutil/toPlainObject.utils.js +0 -75
- package/dist/src/xOnlyPubkey.js +0 -18
- /package/dist/{src → cjs/src}/Output.d.ts +0 -0
- /package/dist/{src → cjs/src}/bip65/index.d.ts +0 -0
- /package/dist/{src → cjs/src}/bip65/locktime.d.ts +0 -0
- /package/dist/{src → cjs/src}/descriptor/psbt/index.d.ts +0 -0
- /package/dist/{src → cjs/src}/dustThreshold.d.ts +0 -0
- /package/dist/{src → cjs/src}/testutil/descriptor/index.d.ts +0 -0
- /package/dist/{src → cjs/src}/testutil/descriptor/psbt.utils.d.ts +0 -0
- /package/dist/{src → cjs/src}/testutil/fixtures.utils.d.ts +0 -0
- /package/dist/{src → cjs/src}/testutil/toPlainObject.utils.d.ts +0 -0
- /package/dist/{src → cjs/src}/xOnlyPubkey.d.ts +0 -0
- /package/dist/{src → esm}/Output.d.ts.map +0 -0
- /package/dist/{src → esm}/bip65/index.d.ts.map +0 -0
- /package/dist/{src → esm}/bip65/locktime.d.ts.map +0 -0
- /package/dist/{src → esm}/descriptor/psbt/index.d.ts.map +0 -0
- /package/dist/{src → esm}/dustThreshold.d.ts.map +0 -0
- /package/dist/{src → esm}/testutil/descriptor/index.d.ts.map +0 -0
- /package/dist/{src → esm}/testutil/fixtures.utils.d.ts.map +0 -0
- /package/dist/{src → esm}/xOnlyPubkey.d.ts.map +0 -0
|
@@ -0,0 +1,293 @@
|
|
|
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 () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const assert = __importStar(require("assert"));
|
|
37
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
38
|
+
const bip322 = __importStar(require("../../src/bip322"));
|
|
39
|
+
const testutils = __importStar(require("./bip322.utils"));
|
|
40
|
+
const opReturnOutput = { value: 0n, script: Buffer.from('6a', 'hex') };
|
|
41
|
+
describe('Verify BIP322 proofs', function () {
|
|
42
|
+
describe('assertBaseTx', function () {
|
|
43
|
+
it('should pass for a valid bip322 transaction', function () {
|
|
44
|
+
assert.doesNotThrow(() => bip322.assertBaseTx(testutils.BIP322_FIXTURE_HELLO_WORLD_TOSIGN_PSBT.getUnsignedTx()));
|
|
45
|
+
});
|
|
46
|
+
it('should reject if the outputs are not conformed correctly', function () {
|
|
47
|
+
let psbt = utxolib.bitgo.createPsbtForNetwork({
|
|
48
|
+
network: utxolib.networks.bitcoin,
|
|
49
|
+
});
|
|
50
|
+
psbt.addOutput(opReturnOutput);
|
|
51
|
+
psbt.addOutput({ value: 1n, script: Buffer.from('6a', 'hex') });
|
|
52
|
+
psbt.setVersion(0);
|
|
53
|
+
psbt.setLocktime(0);
|
|
54
|
+
assert.throws(() => bip322.assertBaseTx(psbt.getUnsignedTx()), /Transaction must have exactly 1 output./);
|
|
55
|
+
psbt = utxolib.bitgo.createPsbtForNetwork({
|
|
56
|
+
network: utxolib.networks.bitcoin,
|
|
57
|
+
});
|
|
58
|
+
psbt.setVersion(0);
|
|
59
|
+
psbt.setLocktime(0);
|
|
60
|
+
psbt.addOutput({ value: 1n, script: Buffer.from('6a', 'hex') });
|
|
61
|
+
assert.throws(() => bip322.assertBaseTx(psbt.getUnsignedTx()), /Transaction output value must be 0./);
|
|
62
|
+
psbt = utxolib.bitgo.createPsbtForNetwork({
|
|
63
|
+
network: utxolib.networks.bitcoin,
|
|
64
|
+
});
|
|
65
|
+
psbt.setVersion(0);
|
|
66
|
+
psbt.setLocktime(0);
|
|
67
|
+
psbt.addOutput({
|
|
68
|
+
value: 0n,
|
|
69
|
+
script: utxolib.bitgo.outputScripts.createOutputScript2of3(utxolib.testutil.getDefaultWalletKeys().deriveForChainAndIndex(0, 0).publicKeys, 'p2wsh', utxolib.networks.bitcoin).scriptPubKey,
|
|
70
|
+
});
|
|
71
|
+
assert.throws(() => bip322.assertBaseTx(psbt.getUnsignedTx()), /Transaction output script must be OP_RETURN./);
|
|
72
|
+
});
|
|
73
|
+
it('should reject if version is not 0', function () {
|
|
74
|
+
const psbt = utxolib.bitgo.createPsbtForNetwork({
|
|
75
|
+
network: utxolib.networks.bitcoin,
|
|
76
|
+
});
|
|
77
|
+
psbt.addOutput({ value: 1n, script: Buffer.from('6a', 'hex') });
|
|
78
|
+
psbt.setVersion(1);
|
|
79
|
+
assert.throws(() => bip322.assertBaseTx(psbt.getUnsignedTx()), /Transaction version must be 0./);
|
|
80
|
+
});
|
|
81
|
+
it('should reject if locktime is not 0', function () {
|
|
82
|
+
const psbt = utxolib.bitgo.createPsbtForNetwork({
|
|
83
|
+
network: utxolib.networks.bitcoin,
|
|
84
|
+
});
|
|
85
|
+
psbt.setVersion(0);
|
|
86
|
+
psbt.addOutput({ value: 1n, script: Buffer.from('6a', 'hex') });
|
|
87
|
+
psbt.setLocktime(1);
|
|
88
|
+
assert.throws(() => bip322.assertBaseTx(psbt.getUnsignedTx()), /Transaction locktime must be 0./);
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
describe('assertTxInput', function () {
|
|
92
|
+
it('should fail if input index is out of range', function () {
|
|
93
|
+
const tx = utxolib.bitgo.createPsbtForNetwork({ network: utxolib.networks.bitcoin }).getUnsignedTx();
|
|
94
|
+
assert.throws(() => bip322.assertTxInput(tx, 1, [], { address: '', message: '', pubkeys: [], scriptType: 'p2wsh' }, false), /inputIndex 1 is out of range for tx with 0 inputs./);
|
|
95
|
+
});
|
|
96
|
+
it('should fail if txInput index is not 0', function () {
|
|
97
|
+
const psbt = utxolib.bitgo.createPsbtForNetwork({
|
|
98
|
+
network: utxolib.networks.bitcoin,
|
|
99
|
+
});
|
|
100
|
+
psbt.setVersion(0);
|
|
101
|
+
psbt.setLocktime(0);
|
|
102
|
+
psbt.addOutput(opReturnOutput);
|
|
103
|
+
psbt.addInput({
|
|
104
|
+
index: 1,
|
|
105
|
+
hash: Buffer.alloc(32),
|
|
106
|
+
});
|
|
107
|
+
assert.throws(() => bip322.assertTxInput(psbt.getUnsignedTx(), 0, [], { address: '', message: '', pubkeys: [], scriptType: 'p2wsh' }, false), /transaction input 0 must have index=0./);
|
|
108
|
+
});
|
|
109
|
+
it('should fail if txInput sequence is not 0', function () {
|
|
110
|
+
const psbt = utxolib.bitgo.createPsbtForNetwork({
|
|
111
|
+
network: utxolib.networks.bitcoin,
|
|
112
|
+
});
|
|
113
|
+
psbt.setVersion(0);
|
|
114
|
+
psbt.setLocktime(0);
|
|
115
|
+
psbt.addOutput(opReturnOutput);
|
|
116
|
+
psbt.addInput({
|
|
117
|
+
index: 0,
|
|
118
|
+
hash: Buffer.alloc(32),
|
|
119
|
+
sequence: 1,
|
|
120
|
+
});
|
|
121
|
+
assert.throws(() => bip322.assertTxInput(psbt.getUnsignedTx(), 0, [], { address: '', message: '', pubkeys: [], scriptType: 'p2wsh' }, false), /transaction input 0 sequence must be 0./);
|
|
122
|
+
});
|
|
123
|
+
it('should fail if the scriptPubKey created by the public keys does not match the address provided in the messageInfo', function () {
|
|
124
|
+
const rootWalletKeys = utxolib.testutil.getDefaultWalletKeys();
|
|
125
|
+
const psbt = bip322.createBaseToSignPsbt(rootWalletKeys);
|
|
126
|
+
const message = 'to be or not to be';
|
|
127
|
+
bip322.addBip322InputWithChainAndIndex(psbt, message, rootWalletKeys, {
|
|
128
|
+
chain: 20,
|
|
129
|
+
index: 0,
|
|
130
|
+
});
|
|
131
|
+
assert.ok(psbt.data.inputs[0]?.witnessUtxo?.script);
|
|
132
|
+
const address = utxolib.address.fromOutputScript(psbt.data.inputs[0].witnessUtxo.script, utxolib.networks.bitcoin);
|
|
133
|
+
const wrongPublicKeys = rootWalletKeys.deriveForChainAndIndex(20, 1).publicKeys.map((p) => p.toString('hex'));
|
|
134
|
+
assert.throws(() => bip322.assertTxInput(psbt.getUnsignedTx(), 0, [], { address, message, pubkeys: wrongPublicKeys, scriptType: 'p2wsh' }, false), /Address does not match derived scriptPubKey for input 0./);
|
|
135
|
+
});
|
|
136
|
+
it('should fail if the txid of the input does not match the derived to_spend transaction', function () {
|
|
137
|
+
const rootWalletKeys = utxolib.testutil.getDefaultWalletKeys();
|
|
138
|
+
const psbt = bip322.createBaseToSignPsbt(rootWalletKeys);
|
|
139
|
+
const message = 'to be or not to be';
|
|
140
|
+
const output = utxolib.bitgo.outputScripts.createOutputScript2of3(rootWalletKeys.deriveForChainAndIndex(20, 0).publicKeys, 'p2wsh', psbt.network);
|
|
141
|
+
bip322.addBip322Input(psbt, message, output);
|
|
142
|
+
assert.ok(psbt.data.inputs[0]?.witnessUtxo?.script);
|
|
143
|
+
const address = utxolib.address.fromOutputScript(output.scriptPubKey, utxolib.networks.bitcoin);
|
|
144
|
+
const pubkeys = rootWalletKeys.deriveForChainAndIndex(20, 0).publicKeys.map((p) => p.toString('hex'));
|
|
145
|
+
assert.throws(() => bip322.assertTxInput(psbt.getUnsignedTx(), 0, [], {
|
|
146
|
+
address,
|
|
147
|
+
message: 'that is the question',
|
|
148
|
+
pubkeys,
|
|
149
|
+
scriptType: 'p2wsh',
|
|
150
|
+
}, false));
|
|
151
|
+
});
|
|
152
|
+
describe('checkSignature=true', function () {
|
|
153
|
+
it('should fail if the scriptType is not a 2of3 script', function () {
|
|
154
|
+
const rootWalletKeys = utxolib.testutil.getDefaultWalletKeys();
|
|
155
|
+
const psbt = bip322.createBaseToSignPsbt(rootWalletKeys);
|
|
156
|
+
const message = 'to be or not to be';
|
|
157
|
+
const derivedWalletKeys = rootWalletKeys.deriveForChainAndIndex(20, 0).publicKeys;
|
|
158
|
+
const output = utxolib.payments.p2pkh({
|
|
159
|
+
pubkey: rootWalletKeys.publicKeys[0],
|
|
160
|
+
network: psbt.network,
|
|
161
|
+
}).output;
|
|
162
|
+
assert.ok(output);
|
|
163
|
+
bip322.addBip322Input(psbt, message, {
|
|
164
|
+
scriptPubKey: Buffer.from(output),
|
|
165
|
+
});
|
|
166
|
+
psbt.signAllInputs(rootWalletKeys.user);
|
|
167
|
+
assert.throws(() => bip322.assertTxInput(psbt.getUnsignedTx(), 0, [], {
|
|
168
|
+
// Make the messageInfo self consistent, but not match the non-2of3 address in the PSBT
|
|
169
|
+
address: utxolib.address.fromOutputScript(utxolib.bitgo.outputScripts.createOutputScript2of3(derivedWalletKeys, 'p2wsh', psbt.network)
|
|
170
|
+
.scriptPubKey, psbt.network),
|
|
171
|
+
message,
|
|
172
|
+
pubkeys: derivedWalletKeys.map((k) => k.toString('hex')),
|
|
173
|
+
scriptType: 'p2wsh',
|
|
174
|
+
}, false));
|
|
175
|
+
});
|
|
176
|
+
utxolib.bitgo.outputScripts.scriptTypes2Of3.forEach((scriptType) => {
|
|
177
|
+
describe(scriptType + ' address', function () {
|
|
178
|
+
it('should pass with a full signed tx', function () {
|
|
179
|
+
const rootWalletKeys = utxolib.testutil.getDefaultWalletKeys();
|
|
180
|
+
const psbt = bip322.createBaseToSignPsbt(rootWalletKeys);
|
|
181
|
+
const message = 'to be or not to be';
|
|
182
|
+
const chainCode = utxolib.bitgo.getExternalChainCode(scriptType);
|
|
183
|
+
const derivedWalletKeys = rootWalletKeys.deriveForChainAndIndex(chainCode, 0).publicKeys;
|
|
184
|
+
const address = utxolib.address.fromOutputScript(utxolib.bitgo.outputScripts.createOutputScript2of3(derivedWalletKeys, scriptType, psbt.network)
|
|
185
|
+
.scriptPubKey, psbt.network);
|
|
186
|
+
bip322.addBip322InputWithChainAndIndex(psbt, message, rootWalletKeys, { chain: chainCode, index: 0 });
|
|
187
|
+
if (scriptType === 'p2trMusig2') {
|
|
188
|
+
psbt.setAllInputsMusig2NonceHD(rootWalletKeys.user);
|
|
189
|
+
psbt.setAllInputsMusig2NonceHD(rootWalletKeys.bitgo);
|
|
190
|
+
}
|
|
191
|
+
psbt.signAllInputsHD(rootWalletKeys.user);
|
|
192
|
+
psbt.signAllInputsHD(rootWalletKeys.bitgo);
|
|
193
|
+
psbt.validateSignaturesOfAllInputs();
|
|
194
|
+
psbt.finalizeAllInputs();
|
|
195
|
+
const tx = psbt.extractTransaction();
|
|
196
|
+
assert.doesNotThrow(() => bip322.assertTxInput(tx, 0, [
|
|
197
|
+
{
|
|
198
|
+
value: 0n,
|
|
199
|
+
script: utxolib.address.toOutputScript(address, psbt.network),
|
|
200
|
+
},
|
|
201
|
+
], {
|
|
202
|
+
// Make the messageInfo self consistent, but not match the non-2of3 address in the PSBT
|
|
203
|
+
address,
|
|
204
|
+
message,
|
|
205
|
+
pubkeys: derivedWalletKeys.map((k) => k.toString('hex')),
|
|
206
|
+
scriptType,
|
|
207
|
+
}, true));
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
describe('checkSignature=false', function () {
|
|
213
|
+
it('should not throw if the input is not signed', function () {
|
|
214
|
+
const rootWalletKeys = utxolib.testutil.getDefaultWalletKeys();
|
|
215
|
+
const psbt = bip322.createBaseToSignPsbt(rootWalletKeys);
|
|
216
|
+
const message = 'to be or not to be';
|
|
217
|
+
const output = utxolib.bitgo.outputScripts.createOutputScript2of3(rootWalletKeys.deriveForChainAndIndex(20, 0).publicKeys, 'p2wsh', psbt.network);
|
|
218
|
+
bip322.addBip322Input(psbt, message, output);
|
|
219
|
+
const address = utxolib.address.fromOutputScript(output.scriptPubKey, utxolib.networks.bitcoin);
|
|
220
|
+
assert.doesNotThrow(() => bip322.assertTxInput(psbt.getUnsignedTx(), 0, [], {
|
|
221
|
+
address,
|
|
222
|
+
message,
|
|
223
|
+
pubkeys: rootWalletKeys.deriveForChainAndIndex(20, 0).publicKeys.map((p) => p.toString('hex')),
|
|
224
|
+
scriptType: 'p2wsh',
|
|
225
|
+
}, false));
|
|
226
|
+
});
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
describe('assertBip322TxProof', function () {
|
|
230
|
+
const messageInfo = [];
|
|
231
|
+
let tx;
|
|
232
|
+
before(function () {
|
|
233
|
+
const rootWalletKeys = utxolib.testutil.getDefaultWalletKeys();
|
|
234
|
+
const psbt = bip322.createBaseToSignPsbt(rootWalletKeys);
|
|
235
|
+
utxolib.bitgo.outputScripts.scriptTypes2Of3.forEach((scriptType, index) => {
|
|
236
|
+
const chain = utxolib.bitgo.getExternalChainCode(scriptType);
|
|
237
|
+
const message = `message for ${scriptType}`;
|
|
238
|
+
const derivedKeys = rootWalletKeys.deriveForChainAndIndex(chain, index).publicKeys;
|
|
239
|
+
messageInfo.push({
|
|
240
|
+
address: utxolib.address.fromOutputScript(utxolib.bitgo.outputScripts.createOutputScript2of3(derivedKeys, scriptType, psbt.network).scriptPubKey, psbt.network),
|
|
241
|
+
message,
|
|
242
|
+
pubkeys: derivedKeys.map((p) => p.toString('hex')),
|
|
243
|
+
scriptType,
|
|
244
|
+
});
|
|
245
|
+
bip322.addBip322InputWithChainAndIndex(psbt, message, rootWalletKeys, { chain, index });
|
|
246
|
+
});
|
|
247
|
+
psbt.setAllInputsMusig2NonceHD(rootWalletKeys.user);
|
|
248
|
+
psbt.setAllInputsMusig2NonceHD(rootWalletKeys.bitgo);
|
|
249
|
+
psbt.signAllInputsHD(rootWalletKeys.user);
|
|
250
|
+
psbt.signAllInputsHD(rootWalletKeys.bitgo);
|
|
251
|
+
assert.ok(psbt.validateSignaturesOfAllInputs(), `All signatures on the inputs should be valid`);
|
|
252
|
+
psbt.finalizeAllInputs();
|
|
253
|
+
tx = psbt.extractTransaction();
|
|
254
|
+
});
|
|
255
|
+
it('should pass if the messageInfo matches the transaction', function () {
|
|
256
|
+
assert.doesNotThrow(() => bip322.assertBip322TxProof(tx, messageInfo));
|
|
257
|
+
});
|
|
258
|
+
it('should fail if the messageInfo does not match the transaction', function () {
|
|
259
|
+
assert.throws(() => bip322.assertBip322TxProof(tx, messageInfo.map((m) => ({ ...m, message: m.message + ' altered' }))));
|
|
260
|
+
});
|
|
261
|
+
});
|
|
262
|
+
describe('assertBip322PsbtProof', function () {
|
|
263
|
+
const messageInfo = [];
|
|
264
|
+
const rootWalletKeys = utxolib.testutil.getDefaultWalletKeys();
|
|
265
|
+
const psbt = bip322.createBaseToSignPsbt(rootWalletKeys);
|
|
266
|
+
before(function () {
|
|
267
|
+
utxolib.bitgo.outputScripts.scriptTypes2Of3.forEach((scriptType, index) => {
|
|
268
|
+
const chain = utxolib.bitgo.getExternalChainCode(scriptType);
|
|
269
|
+
const message = `message for ${scriptType}`;
|
|
270
|
+
const derivedKeys = rootWalletKeys.deriveForChainAndIndex(chain, index).publicKeys;
|
|
271
|
+
messageInfo.push({
|
|
272
|
+
address: utxolib.address.fromOutputScript(utxolib.bitgo.outputScripts.createOutputScript2of3(derivedKeys, scriptType, psbt.network).scriptPubKey, psbt.network),
|
|
273
|
+
message,
|
|
274
|
+
pubkeys: derivedKeys.map((p) => p.toString('hex')),
|
|
275
|
+
scriptType,
|
|
276
|
+
});
|
|
277
|
+
bip322.addBip322InputWithChainAndIndex(psbt, message, rootWalletKeys, { chain, index });
|
|
278
|
+
});
|
|
279
|
+
psbt.setAllInputsMusig2NonceHD(rootWalletKeys.user);
|
|
280
|
+
psbt.setAllInputsMusig2NonceHD(rootWalletKeys.bitgo);
|
|
281
|
+
psbt.signAllInputsHD(rootWalletKeys.user);
|
|
282
|
+
psbt.signAllInputsHD(rootWalletKeys.bitgo);
|
|
283
|
+
assert.ok(psbt.validateSignaturesOfAllInputs(), `All signatures on the inputs should be valid`);
|
|
284
|
+
});
|
|
285
|
+
it('should work when the message info matches what is in the PSBT', function () {
|
|
286
|
+
assert.doesNotThrow(() => bip322.assertBip322PsbtProof(psbt, messageInfo));
|
|
287
|
+
});
|
|
288
|
+
it('should fail when the message info does not match what is in the PSBT', function () {
|
|
289
|
+
assert.throws(() => bip322.assertBip322PsbtProof(psbt, messageInfo.map((m) => ({ ...m, message: m.message + ' altered' }))));
|
|
290
|
+
});
|
|
291
|
+
});
|
|
292
|
+
});
|
|
293
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC9iaXAzMjIvdmVyaWZ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQWlDO0FBRWpDLDhEQUFnRDtBQUVoRCx5REFBMkM7QUFFM0MsMERBQTRDO0FBRTVDLE1BQU0sY0FBYyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUV2RSxRQUFRLENBQUMsc0JBQXNCLEVBQUU7SUFDL0IsUUFBUSxDQUFDLGNBQWMsRUFBRTtRQUN2QixFQUFFLENBQUMsNENBQTRDLEVBQUU7WUFDL0MsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxzQ0FBc0MsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkgsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMERBQTBELEVBQUU7WUFDN0QsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQztnQkFDNUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTzthQUNsQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lB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cyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5cbmltcG9ydCAqIGFzIGJpcDMyMiBmcm9tICcuLi8uLi9zcmMvYmlwMzIyJztcblxuaW1wb3J0ICogYXMgdGVzdHV0aWxzIGZyb20gJy4vYmlwMzIyLnV0aWxzJztcblxuY29uc3Qgb3BSZXR1cm5PdXRwdXQgPSB7IHZhbHVlOiAwbiwgc2NyaXB0OiBCdWZmZXIuZnJvbSgnNmEnLCAnaGV4JykgfTtcblxuZGVzY3JpYmUoJ1ZlcmlmeSBCSVAzMjIgcHJvb2ZzJywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgnYXNzZXJ0QmFzZVR4JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcGFzcyBmb3IgYSB2YWxpZCBiaXAzMjIgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IGJpcDMyMi5hc3NlcnRCYXNlVHgodGVzdHV0aWxzLkJJUDMyMl9GSVhUVVJFX0hFTExPX1dPUkxEX1RPU0lHTl9QU0JULmdldFVuc2lnbmVkVHgoKSkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgaWYgdGhlIG91dHB1dHMgYXJlIG5vdCBjb25mb3JtZWQgY29ycmVjdGx5JywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IHBzYnQgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGb3JOZXR3b3JrKHtcbiAgICAgICAgbmV0d29yazogdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luLFxuICAgICAgfSk7XG4gICAgICBwc2J0LmFkZE91dHB1dChvcFJldHVybk91dHB1dCk7XG4gICAgICBwc2J0LmFkZE91dHB1dCh7IHZhbHVlOiAxbiwgc2NyaXB0OiBCdWZmZXIuZnJvbSgnNmEnLCAnaGV4JykgfSk7XG4gICAgICBwc2J0LnNldFZlcnNpb24oMCk7XG4gICAgICBwc2J0LnNldExvY2t0aW1lKDApO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBiaXAzMjIuYXNzZXJ0QmFzZVR4KHBzYnQuZ2V0VW5zaWduZWRUeCgpKSwgL1RyYW5zYWN0aW9uIG11c3QgaGF2ZSBleGFjdGx5IDEgb3V0cHV0Li8pO1xuXG4gICAgICBwc2J0ID0gdXR4b2xpYi5iaXRnby5jcmVhdGVQc2J0Rm9yTmV0d29yayh7XG4gICAgICAgIG5ldHdvcms6IHV0eG9saWIubmV0d29ya3MuYml0Y29pbixcbiAgICAgIH0pO1xuICAgICAgcHNidC5zZXRWZXJzaW9uKDApO1xuICAgICAgcHNidC5zZXRMb2NrdGltZSgwKTtcbiAgICAgIHBzYnQuYWRkT3V0cHV0KHsgdmFsdWU6IDFuLCBzY3JpcHQ6IEJ1ZmZlci5mcm9tKCc2YScsICdoZXgnKSB9KTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYmlwMzIyLmFzc2VydEJhc2VUeChwc2J0LmdldFVuc2lnbmVkVHgoKSksIC9UcmFuc2FjdGlvbiBvdXRwdXQgdmFsdWUgbXVzdCBiZSAwLi8pO1xuXG4gICAgICBwc2J0ID0gdXR4b2xpYi5iaXRnby5jcmVhdGVQc2J0Rm9yTmV0d29yayh7XG4gICAgICAgIG5ldHdvcms6IHV0eG9saWIubmV0d29ya3MuYml0Y29pbixcbiAgICAgIH0pO1xuICAgICAgcHNidC5zZXRWZXJzaW9uKDApO1xuICAgICAgcHNidC5zZXRMb2NrdGltZSgwKTtcbiAgICAgIHBzYnQuYWRkT3V0cHV0KHtcbiAgICAgICAgdmFsdWU6IDBuLFxuICAgICAgICBzY3JpcHQ6IHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5jcmVhdGVPdXRwdXRTY3JpcHQyb2YzKFxuICAgICAgICAgIHV0eG9saWIudGVzdHV0aWwuZ2V0RGVmYXVsdFdhbGxldEtleXMoKS5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KDAsIDApLnB1YmxpY0tleXMsXG4gICAgICAgICAgJ3Ayd3NoJyxcbiAgICAgICAgICB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW5cbiAgICAgICAgKS5zY3JpcHRQdWJLZXksXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYmlwMzIyLmFzc2VydEJhc2VUeChwc2J0LmdldFVuc2lnbmVkVHgoKSksIC9UcmFuc2FjdGlvbiBvdXRwdXQgc2NyaXB0IG11c3QgYmUgT1BfUkVUVVJOLi8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgaWYgdmVyc2lvbiBpcyBub3QgMCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBzYnQgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGb3JOZXR3b3JrKHtcbiAgICAgICAgbmV0d29yazogdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luLFxuICAgICAgfSk7XG4gICAgICBwc2J0LmFkZE91dHB1dCh7IHZhbHVlOiAxbiwgc2NyaXB0OiBCdWZmZXIuZnJvbSgnNmEnLCAnaGV4JykgfSk7XG4gICAgICBwc2J0LnNldFZlcnNpb24oMSk7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJpcDMyMi5hc3NlcnRCYXNlVHgocHNidC5nZXRVbnNpZ25lZFR4KCkpLCAvVHJhbnNhY3Rpb24gdmVyc2lvbiBtdXN0IGJlIDAuLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBpZiBsb2NrdGltZSBpcyBub3QgMCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBzYnQgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGb3JOZXR3b3JrKHtcbiAgICAgICAgbmV0d29yazogdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luLFxuICAgICAgfSk7XG4gICAgICBwc2J0LnNldFZlcnNpb24oMCk7XG4gICAgICBwc2J0LmFkZE91dHB1dCh7IHZhbHVlOiAxbiwgc2NyaXB0OiBCdWZmZXIuZnJvbSgnNmEnLCAnaGV4JykgfSk7XG4gICAgICBwc2J0LnNldExvY2t0aW1lKDEpO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBiaXAzMjIuYXNzZXJ0QmFzZVR4KHBzYnQuZ2V0VW5zaWduZWRUeCgpKSwgL1RyYW5zYWN0aW9uIGxvY2t0aW1lIG11c3QgYmUgMC4vKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Fzc2VydFR4SW5wdXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBmYWlsIGlmIGlucHV0IGluZGV4IGlzIG91dCBvZiByYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4ID0gdXR4b2xpYi5iaXRnby5jcmVhdGVQc2J0Rm9yTmV0d29yayh7IG5ldHdvcms6IHV0eG9saWIubmV0d29ya3MuYml0Y29pbiB9KS5nZXRVbnNpZ25lZFR4KCk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBiaXAzMjIuYXNzZXJ0VHhJbnB1dCh0eCwgMSwgW10sIHsgYWRkcmVzczogJycsIG1lc3NhZ2U6ICcnLCBwdWJrZXlzOiBbXSwgc2NyaXB0VHlwZTogJ3Ayd3NoJyB9LCBmYWxzZSksXG4gICAgICAgIC9pbnB1dEluZGV4IDEgaXMgb3V0IG9mIHJhbmdlIGZvciB0eCB3aXRoIDAgaW5wdXRzLi9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgaWYgdHhJbnB1dCBpbmRleCBpcyBub3QgMCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBzYnQgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGb3JOZXR3b3JrKHtcbiAgICAgICAgbmV0d29yazogdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luLFxuICAgICAgfSk7XG4gICAgICBwc2J0LnNldFZlcnNpb24oMCk7XG4gICAgICBwc2J0LnNldExvY2t0aW1lKDApO1xuICAgICAgcHNidC5hZGRPdXRwdXQob3BSZXR1cm5PdXRwdXQpO1xuICAgICAgcHNidC5hZGRJbnB1dCh7XG4gICAgICAgIGluZGV4OiAxLFxuICAgICAgICBoYXNoOiBCdWZmZXIuYWxsb2MoMzIpLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIGJpcDMyMi5hc3NlcnRUeElucHV0KFxuICAgICAgICAgICAgcHNidC5nZXRVbnNpZ25lZFR4KCksXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgW10sXG4gICAgICAgICAgICB7IGFkZHJlc3M6ICcnLCBtZXNzYWdlOiAnJywgcHVia2V5czogW10sIHNjcmlwdFR5cGU6ICdwMndzaCcgfSxcbiAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgKSxcbiAgICAgICAgL3RyYW5zYWN0aW9uIGlucHV0IDAgbXVzdCBoYXZlIGluZGV4PTAuL1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCBpZiB0eElucHV0IHNlcXVlbmNlIGlzIG5vdCAwJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcHNidCA9IHV0eG9saWIuYml0Z28uY3JlYXRlUHNidEZvck5ldHdvcmsoe1xuICAgICAgICBuZXR3b3JrOiB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4sXG4gICAgICB9KTtcbiAgICAgIHBzYnQuc2V0VmVyc2lvbigwKTtcbiAgICAgIHBzYnQuc2V0TG9ja3RpbWUoMCk7XG4gICAgICBwc2J0LmFkZE91dHB1dChvcFJldHVybk91dHB1dCk7XG4gICAgICBwc2J0LmFkZElucHV0KHtcbiAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIGhhc2g6IEJ1ZmZlci5hbGxvYygzMiksXG4gICAgICAgIHNlcXVlbmNlOiAxLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIGJpcDMyMi5hc3NlcnRUeElucHV0KFxuICAgICAgICAgICAgcHNidC5nZXRVbnNpZ25lZFR4KCksXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgW10sXG4gICAgICAgICAgICB7IGFkZHJlc3M6ICcnLCBtZXNzYWdlOiAnJywgcHVia2V5czogW10sIHNjcmlwdFR5cGU6ICdwMndzaCcgfSxcbiAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgKSxcbiAgICAgICAgL3RyYW5zYWN0aW9uIGlucHV0IDAgc2VxdWVuY2UgbXVzdCBiZSAwLi9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgaWYgdGhlIHNjcmlwdFB1YktleSBjcmVhdGVkIGJ5IHRoZSBwdWJsaWMga2V5cyBkb2VzIG5vdCBtYXRjaCB0aGUgYWRkcmVzcyBwcm92aWRlZCBpbiB0aGUgbWVzc2FnZUluZm8nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByb290V2FsbGV0S2V5cyA9IHV0eG9saWIudGVzdHV0aWwuZ2V0RGVmYXVsdFdhbGxldEtleXMoKTtcbiAgICAgIGNvbnN0IHBzYnQgPSBiaXAzMjIuY3JlYXRlQmFzZVRvU2lnblBzYnQocm9vdFdhbGxldEtleXMpO1xuICAgICAgY29uc3QgbWVzc2FnZSA9ICd0byBiZSBvciBub3QgdG8gYmUnO1xuICAgICAgYmlwMzIyLmFkZEJpcDMyMklucHV0V2l0aENoYWluQW5kSW5kZXgocHNidCwgbWVzc2FnZSwgcm9vdFdhbGxldEtleXMsIHtcbiAgICAgICAgY2hhaW46IDIwLFxuICAgICAgICBpbmRleDogMCxcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0Lm9rKHBzYnQuZGF0YS5pbnB1dHNbMF0/LndpdG5lc3NVdHhvPy5zY3JpcHQpO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KFxuICAgICAgICBwc2J0LmRhdGEuaW5wdXRzWzBdLndpdG5lc3NVdHhvLnNjcmlwdCxcbiAgICAgICAgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luXG4gICAgICApO1xuICAgICAgY29uc3Qgd3JvbmdQdWJsaWNLZXlzID0gcm9vdFdhbGxldEtleXMuZGVyaXZlRm9yQ2hhaW5BbmRJbmRleCgyMCwgMSkucHVibGljS2V5cy5tYXAoKHApID0+IHAudG9TdHJpbmcoJ2hleCcpKTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgYmlwMzIyLmFzc2VydFR4SW5wdXQoXG4gICAgICAgICAgICBwc2J0LmdldFVuc2lnbmVkVHgoKSxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBbXSxcbiAgICAgICAgICAgIHsgYWRkcmVzcywgbWVzc2FnZSwgcHVia2V5czogd3JvbmdQdWJsaWNLZXlzLCBzY3JpcHRUeXBlOiAncDJ3c2gnIH0sXG4gICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICksXG4gICAgICAgIC9BZGRyZXNzIGRvZXMgbm90IG1hdGNoIGRlcml2ZWQgc2NyaXB0UHViS2V5IGZvciBpbnB1dCAwLi9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgaWYgdGhlIHR4aWQgb2YgdGhlIGlucHV0IGRvZXMgbm90IG1hdGNoIHRoZSBkZXJpdmVkIHRvX3NwZW5kIHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgcm9vdFdhbGxldEtleXMgPSB1dHhvbGliLnRlc3R1dGlsLmdldERlZmF1bHRXYWxsZXRLZXlzKCk7XG4gICAgICBjb25zdCBwc2J0ID0gYmlwMzIyLmNyZWF0ZUJhc2VUb1NpZ25Qc2J0KHJvb3RXYWxsZXRLZXlzKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSAndG8gYmUgb3Igbm90IHRvIGJlJztcblxuICAgICAgY29uc3Qgb3V0cHV0ID0gdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLmNyZWF0ZU91dHB1dFNjcmlwdDJvZjMoXG4gICAgICAgIHJvb3RXYWxsZXRLZXlzLmRlcml2ZUZvckNoYWluQW5kSW5kZXgoMjAsIDApLnB1YmxpY0tleXMsXG4gICAgICAgICdwMndzaCcsXG4gICAgICAgIHBzYnQubmV0d29ya1xuICAgICAgKTtcbiAgICAgIGJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCBtZXNzYWdlLCBvdXRwdXQpO1xuICAgICAgYXNzZXJ0Lm9rKHBzYnQuZGF0YS5pbnB1dHNbMF0/LndpdG5lc3NVdHhvPy5zY3JpcHQpO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KG91dHB1dC5zY3JpcHRQdWJLZXksIHV0eG9saWIubmV0d29ya3MuYml0Y29pbik7XG4gICAgICBjb25zdCBwdWJrZXlzID0gcm9vdFdhbGxldEtleXMuZGVyaXZlRm9yQ2hhaW5BbmRJbmRleCgyMCwgMCkucHVibGljS2V5cy5tYXAoKHApID0+IHAudG9TdHJpbmcoJ2hleCcpKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT5cbiAgICAgICAgYmlwMzIyLmFzc2VydFR4SW5wdXQoXG4gICAgICAgICAgcHNidC5nZXRVbnNpZ25lZFR4KCksXG4gICAgICAgICAgMCxcbiAgICAgICAgICBbXSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgICAgbWVzc2FnZTogJ3RoYXQgaXMgdGhlIHF1ZXN0aW9uJyxcbiAgICAgICAgICAgIHB1YmtleXMsXG4gICAgICAgICAgICBzY3JpcHRUeXBlOiAncDJ3c2gnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmFsc2VcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjaGVja1NpZ25hdHVyZT10cnVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBmYWlsIGlmIHRoZSBzY3JpcHRUeXBlIGlzIG5vdCBhIDJvZjMgc2NyaXB0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByb290V2FsbGV0S2V5cyA9IHV0eG9saWIudGVzdHV0aWwuZ2V0RGVmYXVsdFdhbGxldEtleXMoKTtcbiAgICAgICAgY29uc3QgcHNidCA9IGJpcDMyMi5jcmVhdGVCYXNlVG9TaWduUHNidChyb290V2FsbGV0S2V5cyk7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAndG8gYmUgb3Igbm90IHRvIGJlJztcbiAgICAgICAgY29uc3QgZGVyaXZlZFdhbGxldEtleXMgPSByb290V2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KDIwLCAwKS5wdWJsaWNLZXlzO1xuXG4gICAgICAgIGNvbnN0IG91dHB1dCA9IHV0eG9saWIucGF5bWVudHMucDJwa2goe1xuICAgICAgICAgIHB1YmtleTogcm9vdFdhbGxldEtleXMucHVibGljS2V5c1swXSxcbiAgICAgICAgICBuZXR3b3JrOiBwc2J0Lm5ldHdvcmssXG4gICAgICAgIH0pLm91dHB1dDtcbiAgICAgICAgYXNzZXJ0Lm9rKG91dHB1dCk7XG4gICAgICAgIGJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCBtZXNzYWdlLCB7XG4gICAgICAgICAgc2NyaXB0UHViS2V5OiBCdWZmZXIuZnJvbShvdXRwdXQpLFxuICAgICAgICB9KTtcbiAgICAgICAgcHNidC5zaWduQWxsSW5wdXRzKHJvb3RXYWxsZXRLZXlzLnVzZXIpO1xuICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+XG4gICAgICAgICAgYmlwMzIyLmFzc2VydFR4SW5wdXQoXG4gICAgICAgICAgICBwc2J0LmdldFVuc2lnbmVkVHgoKSxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBbXSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLy8gTWFrZSB0aGUgbWVzc2FnZUluZm8gc2VsZiBjb25zaXN0ZW50LCBidXQgbm90IG1hdGNoIHRoZSBub24tMm9mMyBhZGRyZXNzIGluIHRoZSBQU0JUXG4gICAgICAgICAgICAgIGFkZHJlc3M6IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KFxuICAgICAgICAgICAgICAgIHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5jcmVhdGVPdXRwdXRTY3JpcHQyb2YzKGRlcml2ZWRXYWxsZXRLZXlzLCAncDJ3c2gnLCBwc2J0Lm5ldHdvcmspXG4gICAgICAgICAgICAgICAgICAuc2NyaXB0UHViS2V5LFxuICAgICAgICAgICAgICAgIHBzYnQubmV0d29ya1xuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgICBwdWJrZXlzOiBkZXJpdmVkV2FsbGV0S2V5cy5tYXAoKGspID0+IGsudG9TdHJpbmcoJ2hleCcpKSxcbiAgICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Ayd3NoJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWxzZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuc2NyaXB0VHlwZXMyT2YzLmZvckVhY2goKHNjcmlwdFR5cGUpID0+IHtcbiAgICAgICAgZGVzY3JpYmUoc2NyaXB0VHlwZSArICcgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpdCgnc2hvdWxkIHBhc3Mgd2l0aCBhIGZ1bGwgc2lnbmVkIHR4JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3Qgcm9vdFdhbGxldEtleXMgPSB1dHhvbGliLnRlc3R1dGlsLmdldERlZmF1bHRXYWxsZXRLZXlzKCk7XG4gICAgICAgICAgICBjb25zdCBwc2J0ID0gYmlwMzIyLmNyZWF0ZUJhc2VUb1NpZ25Qc2J0KHJvb3RXYWxsZXRLZXlzKTtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAndG8gYmUgb3Igbm90IHRvIGJlJztcbiAgICAgICAgICAgIGNvbnN0IGNoYWluQ29kZSA9IHV0eG9saWIuYml0Z28uZ2V0RXh0ZXJuYWxDaGFpbkNvZGUoc2NyaXB0VHlwZSk7XG4gICAgICAgICAgICBjb25zdCBkZXJpdmVkV2FsbGV0S2V5cyA9IHJvb3RXYWxsZXRLZXlzLmRlcml2ZUZvckNoYWluQW5kSW5kZXgoY2hhaW5Db2RlLCAwKS5wdWJsaWNLZXlzO1xuICAgICAgICAgICAgY29uc3QgYWRkcmVzcyA9IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KFxuICAgICAgICAgICAgICB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMyhkZXJpdmVkV2FsbGV0S2V5cywgc2NyaXB0VHlwZSwgcHNidC5uZXR3b3JrKVxuICAgICAgICAgICAgICAgIC5zY3JpcHRQdWJLZXksXG4gICAgICAgICAgICAgIHBzYnQubmV0d29ya1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgYmlwMzIyLmFkZEJpcDMyMklucHV0V2l0aENoYWluQW5kSW5kZXgocHNidCwgbWVzc2FnZSwgcm9vdFdhbGxldEtleXMsIHsgY2hhaW46IGNoYWluQ29kZSwgaW5kZXg6IDAgfSk7XG4gICAgICAgICAgICBpZiAoc2NyaXB0VHlwZSA9PT0gJ3AydHJNdXNpZzInKSB7XG4gICAgICAgICAgICAgIHBzYnQuc2V0QWxsSW5wdXRzTXVzaWcyTm9uY2VIRChyb290V2FsbGV0S2V5cy51c2VyKTtcbiAgICAgICAgICAgICAgcHNidC5zZXRBbGxJbnB1dHNNdXNpZzJOb25jZUhEKHJvb3RXYWxsZXRLZXlzLmJpdGdvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBzYnQuc2lnbkFsbElucHV0c0hEKHJvb3RXYWxsZXRLZXlzLnVzZXIpO1xuICAgICAgICAgICAgcHNidC5zaWduQWxsSW5wdXRzSEQocm9vdFdhbGxldEtleXMuYml0Z28pO1xuXG4gICAgICAgICAgICBwc2J0LnZhbGlkYXRlU2lnbmF0dXJlc09mQWxsSW5wdXRzKCk7XG4gICAgICAgICAgICBwc2J0LmZpbmFsaXplQWxsSW5wdXRzKCk7XG4gICAgICAgICAgICBjb25zdCB0eCA9IHBzYnQuZXh0cmFjdFRyYW5zYWN0aW9uKCk7XG5cbiAgICAgICAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT5cbiAgICAgICAgICAgICAgYmlwMzIyLmFzc2VydFR4SW5wdXQoXG4gICAgICAgICAgICAgICAgdHgsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAwbixcbiAgICAgICAgICAgICAgICAgICAgc2NyaXB0OiB1dHhvbGliLmFkZHJlc3MudG9PdXRwdXRTY3JpcHQoYWRkcmVzcywgcHNidC5uZXR3b3JrKSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAvLyBNYWtlIHRoZSBtZXNzYWdlSW5mbyBzZWxmIGNvbnNpc3RlbnQsIGJ1dCBub3QgbWF0Y2ggdGhlIG5vbi0yb2YzIGFkZHJlc3MgaW4gdGhlIFBTQlRcbiAgICAgICAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgcHVia2V5czogZGVyaXZlZFdhbGxldEtleXMubWFwKChrKSA9PiBrLnRvU3RyaW5nKCdoZXgnKSksXG4gICAgICAgICAgICAgICAgICBzY3JpcHRUeXBlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2NoZWNrU2lnbmF0dXJlPWZhbHNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBub3QgdGhyb3cgaWYgdGhlIGlucHV0IGlzIG5vdCBzaWduZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJvb3RXYWxsZXRLZXlzID0gdXR4b2xpYi50ZXN0dXRpbC5nZXREZWZhdWx0V2FsbGV0S2V5cygpO1xuICAgICAgICBjb25zdCBwc2J0ID0gYmlwMzIyLmNyZWF0ZUJhc2VUb1NpZ25Qc2J0KHJvb3RXYWxsZXRLZXlzKTtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9ICd0byBiZSBvciBub3QgdG8gYmUnO1xuXG4gICAgICAgIGNvbnN0IG91dHB1dCA9IHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5jcmVhdGVPdXRwdXRTY3JpcHQyb2YzKFxuICAgICAgICAgIHJvb3RXYWxsZXRLZXlzLmRlcml2ZUZvckNoYWluQW5kSW5kZXgoMjAsIDApLnB1YmxpY0tleXMsXG4gICAgICAgICAgJ3Ayd3NoJyxcbiAgICAgICAgICBwc2J0Lm5ldHdvcmtcbiAgICAgICAgKTtcbiAgICAgICAgYmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQsIG1lc3NhZ2UsIG91dHB1dCk7XG4gICAgICAgIGNvbnN0IGFkZHJlc3MgPSB1dHhvbGliLmFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdChvdXRwdXQuc2NyaXB0UHViS2V5LCB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4pO1xuICAgICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+XG4gICAgICAgICAgYmlwMzIyLmFzc2VydFR4SW5wdXQoXG4gICAgICAgICAgICBwc2J0LmdldFVuc2lnbmVkVHgoKSxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBbXSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgICAgcHVia2V5czogcm9vdFdhbGxldEtleXMuZGVyaXZlRm9yQ2hhaW5BbmRJbmRleCgyMCwgMCkucHVibGljS2V5cy5tYXAoKHApID0+IHAudG9TdHJpbmcoJ2hleCcpKSxcbiAgICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Ayd3NoJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWxzZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYXNzZXJ0QmlwMzIyVHhQcm9vZicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBtZXNzYWdlSW5mbzogYmlwMzIyLk1lc3NhZ2VJbmZvW10gPSBbXTtcbiAgICBsZXQgdHg6IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uPGJpZ2ludD47XG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJvb3RXYWxsZXRLZXlzID0gdXR4b2xpYi50ZXN0dXRpbC5nZXREZWZhdWx0V2FsbGV0S2V5cygpO1xuICAgICAgY29uc3QgcHNidCA9IGJpcDMyMi5jcmVhdGVCYXNlVG9TaWduUHNidChyb290V2FsbGV0S2V5cyk7XG4gICAgICB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuc2NyaXB0VHlwZXMyT2YzLmZvckVhY2goKHNjcmlwdFR5cGUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGNoYWluID0gdXR4b2xpYi5iaXRnby5nZXRFeHRlcm5hbENoYWluQ29kZShzY3JpcHRUeXBlKTtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBtZXNzYWdlIGZvciAke3NjcmlwdFR5cGV9YDtcbiAgICAgICAgY29uc3QgZGVyaXZlZEtleXMgPSByb290V2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KGNoYWluLCBpbmRleCkucHVibGljS2V5cztcbiAgICAgICAgbWVzc2FnZUluZm8ucHVzaCh7XG4gICAgICAgICAgYWRkcmVzczogdXR4b2xpYi5hZGRyZXNzLmZyb21PdXRwdXRTY3JpcHQoXG4gICAgICAgICAgICB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMyhkZXJpdmVkS2V5cywgc2NyaXB0VHlwZSwgcHNidC5uZXR3b3JrKS5zY3JpcHRQdWJLZXksXG4gICAgICAgICAgICBwc2J0Lm5ldHdvcmtcbiAgICAgICAgICApLFxuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgcHVia2V5czogZGVyaXZlZEtleXMubWFwKChwKSA9PiBwLnRvU3RyaW5nKCdoZXgnKSksXG4gICAgICAgICAgc2NyaXB0VHlwZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYmlwMzIyLmFkZEJpcDMyMklucHV0V2l0aENoYWluQW5kSW5kZXgocHNidCwgbWVzc2FnZSwgcm9vdFdhbGxldEtleXMsIHsgY2hhaW4sIGluZGV4IH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHBzYnQuc2V0QWxsSW5wdXRzTXVzaWcyTm9uY2VIRChyb290V2FsbGV0S2V5cy51c2VyKTtcbiAgICAgIHBzYnQuc2V0QWxsSW5wdXRzTXVzaWcyTm9uY2VIRChyb290V2FsbGV0S2V5cy5iaXRnbyk7XG4gICAgICBwc2J0LnNpZ25BbGxJbnB1dHNIRChyb290V2FsbGV0S2V5cy51c2VyKTtcbiAgICAgIHBzYnQuc2lnbkFsbElucHV0c0hEKHJvb3RXYWxsZXRLZXlzLmJpdGdvKTtcbiAgICAgIGFzc2VydC5vayhwc2J0LnZhbGlkYXRlU2lnbmF0dXJlc09mQWxsSW5wdXRzKCksIGBBbGwgc2lnbmF0dXJlcyBvbiB0aGUgaW5wdXRzIHNob3VsZCBiZSB2YWxpZGApO1xuICAgICAgcHNidC5maW5hbGl6ZUFsbElucHV0cygpO1xuICAgICAgdHggPSBwc2J0LmV4dHJhY3RUcmFuc2FjdGlvbigpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcGFzcyBpZiB0aGUgbWVzc2FnZUluZm8gbWF0Y2hlcyB0aGUgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IGJpcDMyMi5hc3NlcnRCaXAzMjJUeFByb29mKHR4LCBtZXNzYWdlSW5mbykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIGlmIHRoZSBtZXNzYWdlSW5mbyBkb2VzIG5vdCBtYXRjaCB0aGUgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+XG4gICAgICAgIGJpcDMyMi5hc3NlcnRCaXAzMjJUeFByb29mKFxuICAgICAgICAgIHR4LFxuICAgICAgICAgIG1lc3NhZ2VJbmZvLm1hcCgobSkgPT4gKHsgLi4ubSwgbWVzc2FnZTogbS5tZXNzYWdlICsgJyBhbHRlcmVkJyB9KSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Fzc2VydEJpcDMyMlBzYnRQcm9vZicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBtZXNzYWdlSW5mbzogYmlwMzIyLk1lc3NhZ2VJbmZvW10gPSBbXTtcbiAgICBjb25zdCByb290V2FsbGV0S2V5cyA9IHV0eG9saWIudGVzdHV0aWwuZ2V0RGVmYXVsdFdhbGxldEtleXMoKTtcbiAgICBjb25zdCBwc2J0ID0gYmlwMzIyLmNyZWF0ZUJhc2VUb1NpZ25Qc2J0KHJvb3RXYWxsZXRLZXlzKTtcbiAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLnNjcmlwdFR5cGVzMk9mMy5mb3JFYWNoKChzY3JpcHRUeXBlLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBjaGFpbiA9IHV0eG9saWIuYml0Z28uZ2V0RXh0ZXJuYWxDaGFpbkNvZGUoc2NyaXB0VHlwZSk7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgbWVzc2FnZSBmb3IgJHtzY3JpcHRUeXBlfWA7XG4gICAgICAgIGNvbnN0IGRlcml2ZWRLZXlzID0gcm9vdFdhbGxldEtleXMuZGVyaXZlRm9yQ2hhaW5BbmRJbmRleChjaGFpbiwgaW5kZXgpLnB1YmxpY0tleXM7XG4gICAgICAgIG1lc3NhZ2VJbmZvLnB1c2goe1xuICAgICAgICAgIGFkZHJlc3M6IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KFxuICAgICAgICAgICAgdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLmNyZWF0ZU91dHB1dFNjcmlwdDJvZjMoZGVyaXZlZEtleXMsIHNjcmlwdFR5cGUsIHBzYnQubmV0d29yaykuc2NyaXB0UHViS2V5LFxuICAgICAgICAgICAgcHNidC5uZXR3b3JrXG4gICAgICAgICAgKSxcbiAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgIHB1YmtleXM6IGRlcml2ZWRLZXlzLm1hcCgocCkgPT4gcC50b1N0cmluZygnaGV4JykpLFxuICAgICAgICAgIHNjcmlwdFR5cGUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGJpcDMyMi5hZGRCaXAzMjJJbnB1dFdpdGhDaGFpbkFuZEluZGV4KHBzYnQsIG1lc3NhZ2UsIHJvb3RXYWxsZXRLZXlzLCB7IGNoYWluLCBpbmRleCB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBwc2J0LnNldEFsbElucHV0c011c2lnMk5vbmNlSEQocm9vdFdhbGxldEtleXMudXNlcik7XG4gICAgICBwc2J0LnNldEFsbElucHV0c011c2lnMk5vbmNlSEQocm9vdFdhbGxldEtleXMuYml0Z28pO1xuICAgICAgcHNidC5zaWduQWxsSW5wdXRzSEQocm9vdFdhbGxldEtleXMudXNlcik7XG4gICAgICBwc2J0LnNpZ25BbGxJbnB1dHNIRChyb290V2FsbGV0S2V5cy5iaXRnbyk7XG4gICAgICBhc3NlcnQub2socHNidC52YWxpZGF0ZVNpZ25hdHVyZXNPZkFsbElucHV0cygpLCBgQWxsIHNpZ25hdHVyZXMgb24gdGhlIGlucHV0cyBzaG91bGQgYmUgdmFsaWRgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgd29yayB3aGVuIHRoZSBtZXNzYWdlIGluZm8gbWF0Y2hlcyB3aGF0IGlzIGluIHRoZSBQU0JUJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiBiaXAzMjIuYXNzZXJ0QmlwMzIyUHNidFByb29mKHBzYnQsIG1lc3NhZ2VJbmZvKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgd2hlbiB0aGUgbWVzc2FnZSBpbmZvIGRvZXMgbm90IG1hdGNoIHdoYXQgaXMgaW4gdGhlIFBTQlQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+XG4gICAgICAgIGJpcDMyMi5hc3NlcnRCaXAzMjJQc2J0UHJvb2YoXG4gICAgICAgICAgcHNidCxcbiAgICAgICAgICBtZXNzYWdlSW5mby5tYXAoKG0pID0+ICh7IC4uLm0sIG1lc3NhZ2U6IG0ubWVzc2FnZSArICcgYWx0ZXJlZCcgfSkpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bip32utils.d.ts","sourceRoot":"","sources":["../../../test/bip32utils.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,62 @@
|
|
|
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 () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const crypto = __importStar(require("crypto"));
|
|
37
|
+
const assert = __importStar(require("assert"));
|
|
38
|
+
const secp256k1_1 = require("@bitgo-beta/secp256k1");
|
|
39
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
40
|
+
const bip32utils_1 = require("../src/bip32utils");
|
|
41
|
+
describe('bip32utils', function () {
|
|
42
|
+
function getSeedBuffers(length) {
|
|
43
|
+
return Array.from({ length }).map((_, i) => crypto.createHash('sha256').update(`${i}`).digest());
|
|
44
|
+
}
|
|
45
|
+
it('signMessage/verifyMessage', function () {
|
|
46
|
+
const keys = getSeedBuffers(4).map((seed) => secp256k1_1.bip32.fromSeed(seed));
|
|
47
|
+
const messages = ['hello', 'goodbye', Buffer.from('\x01\x02\x03'), Buffer.from('')];
|
|
48
|
+
keys.forEach((key) => {
|
|
49
|
+
messages.forEach((message) => {
|
|
50
|
+
const signature = (0, bip32utils_1.signMessage)(message, key, utxolib.networks.bitcoin);
|
|
51
|
+
keys.forEach((otherKey) => {
|
|
52
|
+
messages.forEach((otherMessage) => {
|
|
53
|
+
const expectValid = message === otherMessage && key === otherKey;
|
|
54
|
+
assert.strictEqual((0, bip32utils_1.verifyMessage)(otherMessage, otherKey, signature, utxolib.networks.bitcoin), expectValid);
|
|
55
|
+
assert.strictEqual((0, bip32utils_1.verifyMessage)(Buffer.from(otherMessage), otherKey, signature, utxolib.networks.bitcoin), expectValid);
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlwMzJ1dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvYmlwMzJ1dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQywrQ0FBaUM7QUFFakMscURBQThDO0FBQzlDLDhEQUFnRDtBQUVoRCxrREFBK0Q7QUFFL0QsUUFBUSxDQUFDLFlBQVksRUFBRTtJQUNyQixTQUFTLGNBQWMsQ0FBQyxNQUFjO1FBQ3BDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQUNELEVBQUUsQ0FBQywyQkFBMkIsRUFBRTtRQUM5QixNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxpQkFBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sUUFBUSxHQUFHLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDbkIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUMzQixNQUFNLFNBQVMsR0FBRyxJQUFBLHdCQUFXLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUV0RSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7b0JBQ3hCLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRTt3QkFDaEMsTUFBTSxXQUFXLEdBQUcsT0FBTyxLQUFLLFlBQVksSUFBSSxHQUFHLEtBQUssUUFBUSxDQUFDO3dCQUNqRSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsMEJBQWEsRUFBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO3dCQUM1RyxNQUFNLENBQUMsV0FBVyxDQUNoQixJQUFBLDBCQUFhLEVBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQ3ZGLFdBQVcsQ0FDWixDQUFDO29CQUNKLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSAnY3J5cHRvJztcbmltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgeyBiaXAzMiB9IGZyb20gJ0BiaXRnby1iZXRhL3NlY3AyNTZrMSc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcblxuaW1wb3J0IHsgc2lnbk1lc3NhZ2UsIHZlcmlmeU1lc3NhZ2UgfSBmcm9tICcuLi9zcmMvYmlwMzJ1dGlscyc7XG5cbmRlc2NyaWJlKCdiaXAzMnV0aWxzJywgZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBnZXRTZWVkQnVmZmVycyhsZW5ndGg6IG51bWJlcikge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoIH0pLm1hcCgoXywgaSkgPT4gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShgJHtpfWApLmRpZ2VzdCgpKTtcbiAgfVxuICBpdCgnc2lnbk1lc3NhZ2UvdmVyaWZ5TWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBrZXlzID0gZ2V0U2VlZEJ1ZmZlcnMoNCkubWFwKChzZWVkKSA9PiBiaXAzMi5mcm9tU2VlZChzZWVkKSk7XG4gICAgY29uc3QgbWVzc2FnZXMgPSBbJ2hlbGxvJywgJ2dvb2RieWUnLCBCdWZmZXIuZnJvbSgnXFx4MDFcXHgwMlxceDAzJyksIEJ1ZmZlci5mcm9tKCcnKV07XG4gICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIG1lc3NhZ2VzLmZvckVhY2goKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gc2lnbk1lc3NhZ2UobWVzc2FnZSwga2V5LCB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4pO1xuXG4gICAgICAgIGtleXMuZm9yRWFjaCgob3RoZXJLZXkpID0+IHtcbiAgICAgICAgICBtZXNzYWdlcy5mb3JFYWNoKChvdGhlck1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdFZhbGlkID0gbWVzc2FnZSA9PT0gb3RoZXJNZXNzYWdlICYmIGtleSA9PT0gb3RoZXJLZXk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodmVyaWZ5TWVzc2FnZShvdGhlck1lc3NhZ2UsIG90aGVyS2V5LCBzaWduYXR1cmUsIHV0eG9saWIubmV0d29ya3MuYml0Y29pbiksIGV4cGVjdFZhbGlkKTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgICAgICAgICAgdmVyaWZ5TWVzc2FnZShCdWZmZXIuZnJvbShvdGhlck1lc3NhZ2UpLCBvdGhlcktleSwgc2lnbmF0dXJlLCB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4pLFxuICAgICAgICAgICAgICBleHBlY3RWYWxpZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locktime.d.ts","sourceRoot":"","sources":["../../../../test/bip65/locktime.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
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 assert_1 = __importDefault(require("assert"));
|
|
7
|
+
const locktime_1 = require("../../src/bip65/locktime");
|
|
8
|
+
describe('locktime', function () {
|
|
9
|
+
it('encodes relative and absolute locktimes', function () {
|
|
10
|
+
assert_1.default.strictEqual((0, locktime_1.encodeLocktime)({ blocks: 1 }), 1);
|
|
11
|
+
assert_1.default.strictEqual((0, locktime_1.encodeLocktime)({ blocks: 500000000 - 1 }), 500000000 - 1);
|
|
12
|
+
assert_1.default.strictEqual((0, locktime_1.encodeLocktime)(new Date('1985-11-05T00:53:20Z')), 500000000);
|
|
13
|
+
assert_1.default.strictEqual((0, locktime_1.encodeLocktime)(new Date('2033-05-18T03:33:20.000Z')), 2000000000);
|
|
14
|
+
assert_1.default.throws(() => {
|
|
15
|
+
(0, locktime_1.encodeLocktime)({ blocks: 500000000 });
|
|
16
|
+
});
|
|
17
|
+
assert_1.default.throws(() => {
|
|
18
|
+
(0, locktime_1.encodeLocktime)(new Date('1985-11-05T00:53:19Z'));
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9ja3RpbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L2JpcDY1L2xvY2t0aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBRTVCLHVEQUEwRDtBQUUxRCxRQUFRLENBQUMsVUFBVSxFQUFFO0lBQ25CLEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRTtRQUM1QyxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLHlCQUFjLEVBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNyRCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLHlCQUFjLEVBQUMsRUFBRSxNQUFNLEVBQUUsU0FBVyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2pGLGdCQUFNLENBQUMsV0FBVyxDQUFDLElBQUEseUJBQWMsRUFBQyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLEVBQUUsU0FBVyxDQUFDLENBQUM7UUFDbEYsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSx5QkFBYyxFQUFDLElBQUksSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUMsRUFBRSxVQUFhLENBQUMsQ0FBQztRQUN4RixnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDakIsSUFBQSx5QkFBYyxFQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVcsRUFBRSxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7UUFDSCxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDakIsSUFBQSx5QkFBYyxFQUFDLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7IGVuY29kZUxvY2t0aW1lIH0gZnJvbSAnLi4vLi4vc3JjL2JpcDY1L2xvY2t0aW1lJztcblxuZGVzY3JpYmUoJ2xvY2t0aW1lJywgZnVuY3Rpb24gKCkge1xuICBpdCgnZW5jb2RlcyByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgbG9ja3RpbWVzJywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChlbmNvZGVMb2NrdGltZSh7IGJsb2NrczogMSB9KSwgMSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVuY29kZUxvY2t0aW1lKHsgYmxvY2tzOiA1MDBfMDAwXzAwMCAtIDEgfSksIDUwMF8wMDBfMDAwIC0gMSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVuY29kZUxvY2t0aW1lKG5ldyBEYXRlKCcxOTg1LTExLTA1VDAwOjUzOjIwWicpKSwgNTAwXzAwMF8wMDApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChlbmNvZGVMb2NrdGltZShuZXcgRGF0ZSgnMjAzMy0wNS0xOFQwMzozMzoyMC4wMDBaJykpLCAyXzAwMF8wMDBfMDAwKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgIGVuY29kZUxvY2t0aW1lKHsgYmxvY2tzOiA1MDBfMDAwXzAwMCB9KTtcbiAgICB9KTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgIGVuY29kZUxvY2t0aW1lKG5ldyBEYXRlKCcxOTg1LTExLTA1VDAwOjUzOjE5WicpKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Output.d.ts","sourceRoot":"","sources":["../../../../test/descriptor/Output.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,44 @@
|
|
|
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 assert_1 = __importDefault(require("assert"));
|
|
7
|
+
const Output_1 = require("../../src/descriptor/Output");
|
|
8
|
+
const descriptor_1 = require("../../src/testutil/descriptor");
|
|
9
|
+
const descriptor_2 = require("../../src/descriptor");
|
|
10
|
+
describe('decscriptor.Output', function () {
|
|
11
|
+
const descriptor = (0, descriptor_1.getDescriptor)('Wsh2Of3');
|
|
12
|
+
it('isInternalOutput correctly identifies internal outputs', function () {
|
|
13
|
+
const internalOutput = { value: 1n, descriptor };
|
|
14
|
+
const externalOutput = { value: 1n };
|
|
15
|
+
assert_1.default.strictEqual((0, Output_1.isInternalOutput)(internalOutput), true);
|
|
16
|
+
assert_1.default.strictEqual((0, Output_1.isInternalOutput)(externalOutput), false);
|
|
17
|
+
});
|
|
18
|
+
it('isExternalOutput correctly identifies external outputs', function () {
|
|
19
|
+
const internalOutput = { value: 1n, descriptor };
|
|
20
|
+
const externalOutput = { value: 1n };
|
|
21
|
+
assert_1.default.strictEqual((0, Output_1.isExternalOutput)(internalOutput), false);
|
|
22
|
+
assert_1.default.strictEqual((0, Output_1.isExternalOutput)(externalOutput), true);
|
|
23
|
+
});
|
|
24
|
+
it('toDerivedDescriptorWalletOutput returns expected values', function () {
|
|
25
|
+
const derivable = descriptor;
|
|
26
|
+
const definite = derivable.atDerivationIndex(0);
|
|
27
|
+
for (const descriptor of [derivable, definite]) {
|
|
28
|
+
const descriptorIndex = descriptor === derivable ? 0 : undefined;
|
|
29
|
+
const descriptorMap = new Map([['desc', descriptor]]);
|
|
30
|
+
const descriptorWalletOutput = {
|
|
31
|
+
hash: Buffer.alloc(32).toString('hex'),
|
|
32
|
+
index: 0,
|
|
33
|
+
witnessUtxo: {
|
|
34
|
+
script: (0, descriptor_2.createScriptPubKeyFromDescriptor)(descriptor, descriptorIndex),
|
|
35
|
+
value: 1n,
|
|
36
|
+
},
|
|
37
|
+
descriptorName: 'desc',
|
|
38
|
+
descriptorIndex,
|
|
39
|
+
};
|
|
40
|
+
assert_1.default.strictEqual((0, Output_1.toDerivedDescriptorWalletOutput)(descriptorWalletOutput, descriptorMap).descriptor.toString(), definite.toString());
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC9kZXNjcmlwdG9yL091dHB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUU1Qix3REFBa0g7QUFDbEgsOERBQThEO0FBQzlELHFEQUF3RTtBQUV4RSxRQUFRLENBQUMsb0JBQW9CLEVBQUU7SUFDN0IsTUFBTSxVQUFVLEdBQUcsSUFBQSwwQkFBYSxFQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRTVDLEVBQUUsQ0FBQyx3REFBd0QsRUFBRTtRQUMzRCxNQUFNLGNBQWMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFDakQsTUFBTSxjQUFjLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFFckMsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSx5QkFBZ0IsRUFBQyxjQUFjLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzRCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLHlCQUFnQixFQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzlELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHdEQUF3RCxFQUFFO1FBQzNELE1BQU0sY0FBYyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQztRQUNqRCxNQUFNLGNBQWMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUVyQyxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLHlCQUFnQixFQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVELGdCQUFNLENBQUMsV0FBVyxDQUFDLElBQUEseUJBQWdCLEVBQUMsY0FBYyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0QsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMseURBQXlELEVBQUU7UUFDNUQsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDO1FBQzdCLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRCxLQUFLLE1BQU0sVUFBVSxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDL0MsTUFBTSxlQUFlLEdBQUcsVUFBVSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDakUsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEQsTUFBTSxzQkFBc0IsR0FBRztnQkFDN0IsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztnQkFDdEMsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsV0FBVyxFQUFFO29CQUNYLE1BQU0sRUFBRSxJQUFBLDZDQUFnQyxFQUFDLFVBQVUsRUFBRSxlQUFlLENBQUM7b0JBQ3JFLEtBQUssRUFBRSxFQUFFO2lCQUNWO2dCQUNELGNBQWMsRUFBRSxNQUFNO2dCQUN0QixlQUFlO2FBQ2hCLENBQUM7WUFDRixnQkFBTSxDQUFDLFdBQVcsQ0FDaEIsSUFBQSx3Q0FBK0IsRUFBQyxzQkFBc0IsRUFBRSxhQUFhLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEVBQzVGLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FDcEIsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgeyBpc0V4dGVybmFsT3V0cHV0LCBpc0ludGVybmFsT3V0cHV0LCB0b0Rlcml2ZWREZXNjcmlwdG9yV2FsbGV0T3V0cHV0IH0gZnJvbSAnLi4vLi4vc3JjL2Rlc2NyaXB0b3IvT3V0cHV0JztcbmltcG9ydCB7IGdldERlc2NyaXB0b3IgfSBmcm9tICcuLi8uLi9zcmMvdGVzdHV0aWwvZGVzY3JpcHRvcic7XG5pbXBvcnQgeyBjcmVhdGVTY3JpcHRQdWJLZXlGcm9tRGVzY3JpcHRvciB9IGZyb20gJy4uLy4uL3NyYy9kZXNjcmlwdG9yJztcblxuZGVzY3JpYmUoJ2RlY3NjcmlwdG9yLk91dHB1dCcsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZGVzY3JpcHRvciA9IGdldERlc2NyaXB0b3IoJ1dzaDJPZjMnKTtcblxuICBpdCgnaXNJbnRlcm5hbE91dHB1dCBjb3JyZWN0bHkgaWRlbnRpZmllcyBpbnRlcm5hbCBvdXRwdXRzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGludGVybmFsT3V0cHV0ID0geyB2YWx1ZTogMW4sIGRlc2NyaXB0b3IgfTtcbiAgICBjb25zdCBleHRlcm5hbE91dHB1dCA9IHsgdmFsdWU6IDFuIH07XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNJbnRlcm5hbE91dHB1dChpbnRlcm5hbE91dHB1dCksIHRydWUpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc0ludGVybmFsT3V0cHV0KGV4dGVybmFsT3V0cHV0KSwgZmFsc2UpO1xuICB9KTtcblxuICBpdCgnaXNFeHRlcm5hbE91dHB1dCBjb3JyZWN0bHkgaWRlbnRpZmllcyBleHRlcm5hbCBvdXRwdXRzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGludGVybmFsT3V0cHV0ID0geyB2YWx1ZTogMW4sIGRlc2NyaXB0b3IgfTtcbiAgICBjb25zdCBleHRlcm5hbE91dHB1dCA9IHsgdmFsdWU6IDFuIH07XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNFeHRlcm5hbE91dHB1dChpbnRlcm5hbE91dHB1dCksIGZhbHNlKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNFeHRlcm5hbE91dHB1dChleHRlcm5hbE91dHB1dCksIHRydWUpO1xuICB9KTtcblxuICBpdCgndG9EZXJpdmVkRGVzY3JpcHRvcldhbGxldE91dHB1dCByZXR1cm5zIGV4cGVjdGVkIHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBkZXJpdmFibGUgPSBkZXNjcmlwdG9yO1xuICAgIGNvbnN0IGRlZmluaXRlID0gZGVyaXZhYmxlLmF0RGVyaXZhdGlvbkluZGV4KDApO1xuICAgIGZvciAoY29uc3QgZGVzY3JpcHRvciBvZiBbZGVyaXZhYmxlLCBkZWZpbml0ZV0pIHtcbiAgICAgIGNvbnN0IGRlc2NyaXB0b3JJbmRleCA9IGRlc2NyaXB0b3IgPT09IGRlcml2YWJsZSA/IDAgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBkZXNjcmlwdG9yTWFwID0gbmV3IE1hcChbWydkZXNjJywgZGVzY3JpcHRvcl1dKTtcbiAgICAgIGNvbnN0IGRlc2NyaXB0b3JXYWxsZXRPdXRwdXQgPSB7XG4gICAgICAgIGhhc2g6IEJ1ZmZlci5hbGxvYygzMikudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICBpbmRleDogMCxcbiAgICAgICAgd2l0bmVzc1V0eG86IHtcbiAgICAgICAgICBzY3JpcHQ6IGNyZWF0ZVNjcmlwdFB1YktleUZyb21EZXNjcmlwdG9yKGRlc2NyaXB0b3IsIGRlc2NyaXB0b3JJbmRleCksXG4gICAgICAgICAgdmFsdWU6IDFuLFxuICAgICAgICB9LFxuICAgICAgICBkZXNjcmlwdG9yTmFtZTogJ2Rlc2MnLFxuICAgICAgICBkZXNjcmlwdG9ySW5kZXgsXG4gICAgICB9O1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgICB0b0Rlcml2ZWREZXNjcmlwdG9yV2FsbGV0T3V0cHV0KGRlc2NyaXB0b3JXYWxsZXRPdXRwdXQsIGRlc2NyaXB0b3JNYXApLmRlc2NyaXB0b3IudG9TdHJpbmcoKSxcbiAgICAgICAgZGVmaW5pdGUudG9TdHJpbmcoKVxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derive.d.ts","sourceRoot":"","sources":["../../../../test/descriptor/derive.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,27 @@
|
|
|
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 assert_1 = __importDefault(require("assert"));
|
|
7
|
+
const descriptor_1 = require("../../src/testutil/descriptor");
|
|
8
|
+
const derive_1 = require("../../src/descriptor/derive");
|
|
9
|
+
describe('derive', function () {
|
|
10
|
+
const derivable = (0, descriptor_1.getDescriptor)('Wsh2Of3');
|
|
11
|
+
const definite = derivable.atDerivationIndex(0);
|
|
12
|
+
it('getDescriptorAtIndex', function () {
|
|
13
|
+
(0, assert_1.default)(derivable.hasWildcard());
|
|
14
|
+
(0, assert_1.default)(!definite.hasWildcard());
|
|
15
|
+
assert_1.default.strictEqual((0, derive_1.getDescriptorAtIndex)(derivable, 0).toString(), definite.toString());
|
|
16
|
+
assert_1.default.strictEqual((0, derive_1.getDescriptorAtIndex)(definite, undefined).toString(), definite.toString());
|
|
17
|
+
assert_1.default.throws(() => (0, derive_1.getDescriptorAtIndex)(derivable, undefined), /Derivable descriptor requires an index/);
|
|
18
|
+
assert_1.default.throws(() => (0, derive_1.getDescriptorAtIndex)(definite, 0), /Definite descriptor cannot be derived with index/);
|
|
19
|
+
});
|
|
20
|
+
it('getDescriptorAtIndexCheckScript', function () {
|
|
21
|
+
const script0 = Buffer.from(derivable.atDerivationIndex(0).scriptPubkey());
|
|
22
|
+
const script1 = Buffer.from(derivable.atDerivationIndex(1).scriptPubkey());
|
|
23
|
+
assert_1.default.strictEqual((0, derive_1.getDescriptorAtIndexCheckScript)(derivable, 0, script0).toString(), definite.toString());
|
|
24
|
+
assert_1.default.throws(() => (0, derive_1.getDescriptorAtIndexCheckScript)(derivable, 0, script1), /Script mismatch/);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC9kZXNjcmlwdG9yL2Rlcml2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUU1Qiw4REFBOEQ7QUFDOUQsd0RBQW9HO0FBRXBHLFFBQVEsQ0FBQyxRQUFRLEVBQUU7SUFDakIsTUFBTSxTQUFTLEdBQUcsSUFBQSwwQkFBYSxFQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVoRCxFQUFFLENBQUMsc0JBQXNCLEVBQUU7UUFDekIsSUFBQSxnQkFBTSxFQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLElBQUEsZ0JBQU0sRUFBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLGdCQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsNkJBQW9CLEVBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLGdCQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsNkJBQW9CLEVBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzlGLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUEsNkJBQW9CLEVBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUFFLHdDQUF3QyxDQUFDLENBQUM7UUFDMUcsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSw2QkFBb0IsRUFBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsa0RBQWtELENBQUMsQ0FBQztJQUM3RyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxpQ0FBaUMsRUFBRTtRQUNwQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDM0UsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSx3Q0FBK0IsRUFBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzNHLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUEsd0NBQStCLEVBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2pHLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7IGdldERlc2NyaXB0b3IgfSBmcm9tICcuLi8uLi9zcmMvdGVzdHV0aWwvZGVzY3JpcHRvcic7XG5pbXBvcnQgeyBnZXREZXNjcmlwdG9yQXRJbmRleCwgZ2V0RGVzY3JpcHRvckF0SW5kZXhDaGVja1NjcmlwdCB9IGZyb20gJy4uLy4uL3NyYy9kZXNjcmlwdG9yL2Rlcml2ZSc7XG5cbmRlc2NyaWJlKCdkZXJpdmUnLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGRlcml2YWJsZSA9IGdldERlc2NyaXB0b3IoJ1dzaDJPZjMnKTtcbiAgY29uc3QgZGVmaW5pdGUgPSBkZXJpdmFibGUuYXREZXJpdmF0aW9uSW5kZXgoMCk7XG5cbiAgaXQoJ2dldERlc2NyaXB0b3JBdEluZGV4JywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydChkZXJpdmFibGUuaGFzV2lsZGNhcmQoKSk7XG4gICAgYXNzZXJ0KCFkZWZpbml0ZS5oYXNXaWxkY2FyZCgpKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZ2V0RGVzY3JpcHRvckF0SW5kZXgoZGVyaXZhYmxlLCAwKS50b1N0cmluZygpLCBkZWZpbml0ZS50b1N0cmluZygpKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZ2V0RGVzY3JpcHRvckF0SW5kZXgoZGVmaW5pdGUsIHVuZGVmaW5lZCkudG9TdHJpbmcoKSwgZGVmaW5pdGUudG9TdHJpbmcoKSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBnZXREZXNjcmlwdG9yQXRJbmRleChkZXJpdmFibGUsIHVuZGVmaW5lZCksIC9EZXJpdmFibGUgZGVzY3JpcHRvciByZXF1aXJlcyBhbiBpbmRleC8pO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZ2V0RGVzY3JpcHRvckF0SW5kZXgoZGVmaW5pdGUsIDApLCAvRGVmaW5pdGUgZGVzY3JpcHRvciBjYW5ub3QgYmUgZGVyaXZlZCB3aXRoIGluZGV4Lyk7XG4gIH0pO1xuXG4gIGl0KCdnZXREZXNjcmlwdG9yQXRJbmRleENoZWNrU2NyaXB0JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNjcmlwdDAgPSBCdWZmZXIuZnJvbShkZXJpdmFibGUuYXREZXJpdmF0aW9uSW5kZXgoMCkuc2NyaXB0UHVia2V5KCkpO1xuICAgIGNvbnN0IHNjcmlwdDEgPSBCdWZmZXIuZnJvbShkZXJpdmFibGUuYXREZXJpdmF0aW9uSW5kZXgoMSkuc2NyaXB0UHVia2V5KCkpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChnZXREZXNjcmlwdG9yQXRJbmRleENoZWNrU2NyaXB0KGRlcml2YWJsZSwgMCwgc2NyaXB0MCkudG9TdHJpbmcoKSwgZGVmaW5pdGUudG9TdHJpbmcoKSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBnZXREZXNjcmlwdG9yQXRJbmRleENoZWNrU2NyaXB0KGRlcml2YWJsZSwgMCwgc2NyaXB0MSksIC9TY3JpcHQgbWlzbWF0Y2gvKTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fromFixedScriptWallet.d.ts","sourceRoot":"","sources":["../../../../test/descriptor/fromFixedScriptWallet.ts"],"names":[],"mappings":""}
|