@bitgo-beta/utxo-core 1.0.1-alpha.10 → 1.0.1-alpha.100

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.
Files changed (109) hide show
  1. package/dist/src/Output.d.ts +43 -0
  2. package/dist/src/Output.d.ts.map +1 -0
  3. package/dist/src/Output.js +60 -0
  4. package/dist/src/bip322/index.d.ts +4 -0
  5. package/dist/src/bip322/index.d.ts.map +1 -0
  6. package/dist/src/bip322/index.js +20 -0
  7. package/dist/src/bip322/toSign.d.ts +19 -0
  8. package/dist/src/bip322/toSign.d.ts.map +1 -0
  9. package/dist/src/bip322/toSign.js +61 -0
  10. package/dist/src/bip322/toSpend.d.ts +22 -0
  11. package/dist/src/bip322/toSpend.d.ts.map +1 -0
  12. package/dist/src/bip322/toSpend.js +76 -0
  13. package/dist/src/bip322/utils.d.ts +6 -0
  14. package/dist/src/bip322/utils.d.ts.map +1 -0
  15. package/dist/src/bip322/utils.js +71 -0
  16. package/dist/src/bip32utils.d.ts +16 -0
  17. package/dist/src/bip32utils.d.ts.map +1 -0
  18. package/dist/src/bip32utils.js +71 -0
  19. package/dist/src/bip65/index.d.ts +2 -0
  20. package/dist/src/bip65/index.d.ts.map +1 -0
  21. package/dist/src/bip65/index.js +18 -0
  22. package/dist/src/bip65/locktime.d.ts +8 -0
  23. package/dist/src/bip65/locktime.d.ts.map +1 -0
  24. package/dist/src/bip65/locktime.js +37 -0
  25. package/dist/src/descriptor/DescriptorMap.d.ts.map +1 -1
  26. package/dist/src/descriptor/DescriptorMap.js +2 -5
  27. package/dist/src/descriptor/Output.d.ts +2 -43
  28. package/dist/src/descriptor/Output.d.ts.map +1 -1
  29. package/dist/src/descriptor/Output.js +12 -66
  30. package/dist/src/descriptor/VirtualSize.d.ts +2 -0
  31. package/dist/src/descriptor/VirtualSize.d.ts.map +1 -1
  32. package/dist/src/descriptor/VirtualSize.js +14 -1
  33. package/dist/src/descriptor/address.d.ts +1 -1
  34. package/dist/src/descriptor/address.d.ts.map +1 -1
  35. package/dist/src/descriptor/address.js +2 -2
  36. package/dist/src/descriptor/derive.d.ts +13 -0
  37. package/dist/src/descriptor/derive.d.ts.map +1 -0
  38. package/dist/src/descriptor/derive.js +45 -0
  39. package/dist/src/descriptor/fromFixedScriptWallet.d.ts +16 -0
  40. package/dist/src/descriptor/fromFixedScriptWallet.d.ts.map +1 -0
  41. package/dist/src/descriptor/fromFixedScriptWallet.js +88 -0
  42. package/dist/src/descriptor/index.d.ts +10 -8
  43. package/dist/src/descriptor/index.d.ts.map +1 -1
  44. package/dist/src/descriptor/index.js +14 -36
  45. package/dist/src/descriptor/parse/PatternMatcher.d.ts +14 -0
  46. package/dist/src/descriptor/parse/PatternMatcher.d.ts.map +1 -0
  47. package/dist/src/descriptor/parse/PatternMatcher.js +60 -0
  48. package/dist/src/descriptor/psbt/createPsbt.d.ts +10 -2
  49. package/dist/src/descriptor/psbt/createPsbt.d.ts.map +1 -1
  50. package/dist/src/descriptor/psbt/createPsbt.js +35 -10
  51. package/dist/src/descriptor/psbt/findDescriptors.d.ts +6 -2
  52. package/dist/src/descriptor/psbt/findDescriptors.d.ts.map +1 -1
  53. package/dist/src/descriptor/psbt/findDescriptors.js +24 -11
  54. package/dist/src/descriptor/psbt/index.d.ts +1 -0
  55. package/dist/src/descriptor/psbt/index.d.ts.map +1 -1
  56. package/dist/src/descriptor/psbt/index.js +2 -1
  57. package/dist/src/descriptor/psbt/parse.d.ts +1 -1
  58. package/dist/src/descriptor/psbt/parse.d.ts.map +1 -1
  59. package/dist/src/descriptor/psbt/parse.js +8 -8
  60. package/dist/src/descriptor/psbt/sign.d.ts +26 -0
  61. package/dist/src/descriptor/psbt/sign.d.ts.map +1 -0
  62. package/dist/src/descriptor/psbt/sign.js +42 -0
  63. package/dist/src/dustThreshold.d.ts +4 -0
  64. package/dist/src/dustThreshold.d.ts.map +1 -0
  65. package/dist/src/dustThreshold.js +134 -0
  66. package/dist/src/index.d.ts +7 -0
  67. package/dist/src/index.d.ts.map +1 -1
  68. package/dist/src/index.js +12 -2
  69. package/dist/src/paygo/attestation.d.ts +11 -0
  70. package/dist/src/paygo/attestation.d.ts.map +1 -0
  71. package/dist/src/paygo/attestation.js +58 -0
  72. package/dist/src/paygo/index.d.ts +3 -0
  73. package/dist/src/paygo/index.d.ts.map +1 -0
  74. package/dist/src/paygo/index.js +19 -0
  75. package/dist/src/paygo/parsePayGoAttestation.d.ts +16 -0
  76. package/dist/src/paygo/parsePayGoAttestation.d.ts.map +1 -0
  77. package/dist/src/paygo/parsePayGoAttestation.js +50 -0
  78. package/dist/src/paygo/psbt/Errors.d.ts +22 -0
  79. package/dist/src/paygo/psbt/Errors.d.ts.map +1 -0
  80. package/dist/src/paygo/psbt/Errors.js +44 -0
  81. package/dist/src/paygo/psbt/index.d.ts +2 -0
  82. package/dist/src/paygo/psbt/index.d.ts.map +1 -0
  83. package/dist/src/paygo/psbt/index.js +18 -0
  84. package/dist/src/paygo/psbt/payGoAddressProof.d.ts +29 -0
  85. package/dist/src/paygo/psbt/payGoAddressProof.d.ts.map +1 -0
  86. package/dist/src/paygo/psbt/payGoAddressProof.js +124 -0
  87. package/dist/src/testutil/descriptor/descriptors.d.ts +5 -2
  88. package/dist/src/testutil/descriptor/descriptors.d.ts.map +1 -1
  89. package/dist/src/testutil/descriptor/descriptors.js +58 -7
  90. package/dist/src/testutil/descriptor/mock.utils.d.ts +6 -4
  91. package/dist/src/testutil/descriptor/mock.utils.d.ts.map +1 -1
  92. package/dist/src/testutil/descriptor/mock.utils.js +10 -5
  93. package/dist/src/testutil/descriptor/psbt.utils.d.ts.map +1 -1
  94. package/dist/src/testutil/descriptor/psbt.utils.js +9 -8
  95. package/dist/src/testutil/generatePayGoAttestationProof.utils.d.ts +12 -0
  96. package/dist/src/testutil/generatePayGoAttestationProof.utils.d.ts.map +1 -0
  97. package/dist/src/testutil/generatePayGoAttestationProof.utils.js +38 -0
  98. package/dist/src/testutil/index.d.ts +2 -0
  99. package/dist/src/testutil/index.d.ts.map +1 -1
  100. package/dist/src/testutil/index.js +3 -1
  101. package/dist/src/testutil/toPlainObject.utils.d.ts.map +1 -1
  102. package/dist/src/testutil/toPlainObject.utils.js +16 -2
  103. package/dist/src/testutil/trimMessagePrefix.d.ts +11 -0
  104. package/dist/src/testutil/trimMessagePrefix.d.ts.map +1 -0
  105. package/dist/src/testutil/trimMessagePrefix.js +60 -0
  106. package/dist/src/xOnlyPubkey.d.ts +2 -0
  107. package/dist/src/xOnlyPubkey.d.ts.map +1 -0
  108. package/dist/src/xOnlyPubkey.js +18 -0
  109. package/package.json +11 -8
@@ -0,0 +1,43 @@
1
+ export type Output<TValue = bigint> = {
2
+ script: Buffer;
3
+ value: TValue;
4
+ };
5
+ export type MaxOutput = Output<'max'>;
6
+ type ValueBigInt = {
7
+ value: bigint;
8
+ };
9
+ type ValueMax = {
10
+ value: 'max';
11
+ };
12
+ /**
13
+ * @return true if the output is a max output
14
+ */
15
+ export declare function isMaxOutput<A extends ValueBigInt, B extends ValueMax>(output: A | B): output is B;
16
+ /**
17
+ * @return the max output if there is one
18
+ * @throws if there are multiple max outputs
19
+ */
20
+ export declare function getMaxOutput<A extends ValueBigInt, B extends ValueMax>(outputs: (A | B)[]): B | undefined;
21
+ /**
22
+ * @return the sum of the outputs
23
+ */
24
+ export declare function getOutputSum(outputs: ValueBigInt[]): bigint;
25
+ /**
26
+ * @return the sum of the outputs that are not 'max'
27
+ */
28
+ export declare function getFixedOutputSum(outputs: (ValueBigInt | ValueMax)[]): bigint;
29
+ /**
30
+ * @param outputs
31
+ * @param params
32
+ * @return the outputs with the 'max' output replaced with the max amount
33
+ */
34
+ export declare function toFixedOutputs<A extends ValueBigInt, B extends ValueMax>(outputs: (A | B)[], params: {
35
+ maxAmount: bigint;
36
+ }): A[];
37
+ export type PrevOutput = {
38
+ hash: string;
39
+ index: number;
40
+ witnessUtxo: Output;
41
+ };
42
+ export {};
43
+ //# sourceMappingURL=Output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Output.d.ts","sourceRoot":"","sources":["../../src/Output.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,CAAC,MAAM,GAAG,MAAM,IAAI;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AACF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AACtC,KAAK,WAAW,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AACrC,KAAK,QAAQ,GAAG;IAAE,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAEjC;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,SAAS,QAAQ,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,CAEjG;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,SAAS,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,SAAS,CASzG;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAE3D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,CAAC,WAAW,GAAG,QAAQ,CAAC,EAAE,GAAG,MAAM,CAE7E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,SAAS,QAAQ,EACtE,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAClB,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAC5B,CAAC,EAAE,CAaL;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isMaxOutput = isMaxOutput;
4
+ exports.getMaxOutput = getMaxOutput;
5
+ exports.getOutputSum = getOutputSum;
6
+ exports.getFixedOutputSum = getFixedOutputSum;
7
+ exports.toFixedOutputs = toFixedOutputs;
8
+ /**
9
+ * @return true if the output is a max output
10
+ */
11
+ function isMaxOutput(output) {
12
+ return output.value === 'max';
13
+ }
14
+ /**
15
+ * @return the max output if there is one
16
+ * @throws if there are multiple max outputs
17
+ */
18
+ function getMaxOutput(outputs) {
19
+ const max = outputs.filter((isMaxOutput));
20
+ if (max.length === 0) {
21
+ return undefined;
22
+ }
23
+ if (max.length > 1) {
24
+ throw new Error('Multiple max outputs');
25
+ }
26
+ return max[0];
27
+ }
28
+ /**
29
+ * @return the sum of the outputs
30
+ */
31
+ function getOutputSum(outputs) {
32
+ return outputs.reduce((sum, output) => sum + output.value, 0n);
33
+ }
34
+ /**
35
+ * @return the sum of the outputs that are not 'max'
36
+ */
37
+ function getFixedOutputSum(outputs) {
38
+ return getOutputSum(outputs.filter((o) => !isMaxOutput(o)));
39
+ }
40
+ /**
41
+ * @param outputs
42
+ * @param params
43
+ * @return the outputs with the 'max' output replaced with the max amount
44
+ */
45
+ function toFixedOutputs(outputs, params) {
46
+ // assert that there is at most one max output
47
+ const maxOutput = getMaxOutput(outputs);
48
+ return outputs.map((output) => {
49
+ if (isMaxOutput(output)) {
50
+ if (output !== maxOutput) {
51
+ throw new Error('illegal state');
52
+ }
53
+ return { ...output, value: params.maxAmount };
54
+ }
55
+ else {
56
+ return output;
57
+ }
58
+ });
59
+ }
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL091dHB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVdBLGtDQUVDO0FBTUQsb0NBU0M7QUFLRCxvQ0FFQztBQUtELDhDQUVDO0FBT0Qsd0NBZ0JDO0FBekREOztHQUVHO0FBQ0gsU0FBZ0IsV0FBVyxDQUE0QyxNQUFhO0lBQ2xGLE9BQU8sTUFBTSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUM7QUFDaEMsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLFlBQVksQ0FBNEMsT0FBa0I7SUFDeEYsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBLFdBQWlCLENBQUEsQ0FBQyxDQUFDO0lBQzlDLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNyQixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLE9BQXNCO0lBQ2pELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLE9BQW1DO0lBQ25FLE9BQU8sWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQWUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLGNBQWMsQ0FDNUIsT0FBa0IsRUFDbEIsTUFBNkI7SUFFN0IsOENBQThDO0lBQzlDLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBTyxPQUFPLENBQUMsQ0FBQztJQUM5QyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUssRUFBRTtRQUMvQixJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3hCLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ25DLENBQUM7WUFDRCxPQUFPLEVBQUUsR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNoRCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBPdXRwdXQ8VFZhbHVlID0gYmlnaW50PiA9IHtcbiAgc2NyaXB0OiBCdWZmZXI7XG4gIHZhbHVlOiBUVmFsdWU7XG59O1xuZXhwb3J0IHR5cGUgTWF4T3V0cHV0ID0gT3V0cHV0PCdtYXgnPjtcbnR5cGUgVmFsdWVCaWdJbnQgPSB7IHZhbHVlOiBiaWdpbnQgfTtcbnR5cGUgVmFsdWVNYXggPSB7IHZhbHVlOiAnbWF4JyB9O1xuXG4vKipcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgb3V0cHV0IGlzIGEgbWF4IG91dHB1dFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNNYXhPdXRwdXQ8QSBleHRlbmRzIFZhbHVlQmlnSW50LCBCIGV4dGVuZHMgVmFsdWVNYXg+KG91dHB1dDogQSB8IEIpOiBvdXRwdXQgaXMgQiB7XG4gIHJldHVybiBvdXRwdXQudmFsdWUgPT09ICdtYXgnO1xufVxuXG4vKipcbiAqIEByZXR1cm4gdGhlIG1heCBvdXRwdXQgaWYgdGhlcmUgaXMgb25lXG4gKiBAdGhyb3dzIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBtYXggb3V0cHV0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWF4T3V0cHV0PEEgZXh0ZW5kcyBWYWx1ZUJpZ0ludCwgQiBleHRlbmRzIFZhbHVlTWF4PihvdXRwdXRzOiAoQSB8IEIpW10pOiBCIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWF4ID0gb3V0cHV0cy5maWx0ZXIoaXNNYXhPdXRwdXQ8QSwgQj4pO1xuICBpZiAobWF4Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKG1heC5sZW5ndGggPiAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNdWx0aXBsZSBtYXggb3V0cHV0cycpO1xuICB9XG4gIHJldHVybiBtYXhbMF07XG59XG5cbi8qKlxuICogQHJldHVybiB0aGUgc3VtIG9mIHRoZSBvdXRwdXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPdXRwdXRTdW0ob3V0cHV0czogVmFsdWVCaWdJbnRbXSk6IGJpZ2ludCB7XG4gIHJldHVybiBvdXRwdXRzLnJlZHVjZSgoc3VtLCBvdXRwdXQpID0+IHN1bSArIG91dHB1dC52YWx1ZSwgMG4pO1xufVxuXG4vKipcbiAqIEByZXR1cm4gdGhlIHN1bSBvZiB0aGUgb3V0cHV0cyB0aGF0IGFyZSBub3QgJ21heCdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpeGVkT3V0cHV0U3VtKG91dHB1dHM6IChWYWx1ZUJpZ0ludCB8IFZhbHVlTWF4KVtdKTogYmlnaW50IHtcbiAgcmV0dXJuIGdldE91dHB1dFN1bShvdXRwdXRzLmZpbHRlcigobyk6IG8gaXMgT3V0cHV0ID0+ICFpc01heE91dHB1dChvKSkpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBvdXRwdXRzXG4gKiBAcGFyYW0gcGFyYW1zXG4gKiBAcmV0dXJuIHRoZSBvdXRwdXRzIHdpdGggdGhlICdtYXgnIG91dHB1dCByZXBsYWNlZCB3aXRoIHRoZSBtYXggYW1vdW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0ZpeGVkT3V0cHV0czxBIGV4dGVuZHMgVmFsdWVCaWdJbnQsIEIgZXh0ZW5kcyBWYWx1ZU1heD4oXG4gIG91dHB1dHM6IChBIHwgQilbXSxcbiAgcGFyYW1zOiB7IG1heEFtb3VudDogYmlnaW50IH1cbik6IEFbXSB7XG4gIC8vIGFzc2VydCB0aGF0IHRoZXJlIGlzIGF0IG1vc3Qgb25lIG1heCBvdXRwdXRcbiAgY29uc3QgbWF4T3V0cHV0ID0gZ2V0TWF4T3V0cHV0PEEsIEI+KG91dHB1dHMpO1xuICByZXR1cm4gb3V0cHV0cy5tYXAoKG91dHB1dCk6IEEgPT4ge1xuICAgIGlmIChpc01heE91dHB1dChvdXRwdXQpKSB7XG4gICAgICBpZiAob3V0cHV0ICE9PSBtYXhPdXRwdXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbGxlZ2FsIHN0YXRlJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4geyAuLi5vdXRwdXQsIHZhbHVlOiBwYXJhbXMubWF4QW1vdW50IH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IHR5cGUgUHJldk91dHB1dCA9IHtcbiAgaGFzaDogc3RyaW5nO1xuICBpbmRleDogbnVtYmVyO1xuICB3aXRuZXNzVXR4bzogT3V0cHV0O1xufTtcbiJdfQ==
@@ -0,0 +1,4 @@
1
+ export * from './toSpend';
2
+ export * from './toSign';
3
+ export * from './utils';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/bip322/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC"}
@@ -0,0 +1,20 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./toSpend"), exports);
18
+ __exportStar(require("./toSign"), exports);
19
+ __exportStar(require("./utils"), exports);
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmlwMzIyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw0Q0FBMEI7QUFDMUIsMkNBQXlCO0FBQ3pCLDBDQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdG9TcGVuZCc7XG5leHBvcnQgKiBmcm9tICcuL3RvU2lnbic7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcbiJdfQ==
@@ -0,0 +1,19 @@
1
+ import { Psbt, bitgo } from '@bitgo-beta/utxo-lib';
2
+ export type AddressDetails = {
3
+ redeemScript?: Buffer;
4
+ witnessScript?: Buffer;
5
+ scriptPubKey: Buffer;
6
+ };
7
+ /**
8
+ * Construct the toSign PSBT for a BIP322 verification.
9
+ * Source implementation:
10
+ * https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki#full
11
+ *
12
+ * @param {string} message - The message that is hashed into the `to_spend` transaction.
13
+ * @param {AddressDetails} addressDetails - The details of the address, including redeemScript and/or witnessScript.
14
+ * @param {string} [tag=BIP322_TAG] - The tag to use for hashing, defaults to BIP322_TAG.
15
+ * @returns {Psbt} - The hex representation of the constructed PSBT.
16
+ */
17
+ export declare function buildToSignPsbt(message: string, addressDetails: AddressDetails, tag?: string): Psbt;
18
+ export declare function buildToSignPsbtForChainAndIndex(message: string, rootWalletKeys: bitgo.RootWalletKeys, chain: bitgo.ChainCode, index: number): Psbt;
19
+ //# sourceMappingURL=toSign.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toSign.d.ts","sourceRoot":"","sources":["../../../src/bip322/toSign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAKnD,MAAM,MAAM,cAAc,GAAG;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,SAAa,GAAG,IAAI,CAmCvG;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,KAAK,CAAC,cAAc,EACpC,KAAK,EAAE,KAAK,CAAC,SAAS,EACtB,KAAK,EAAE,MAAM,GACZ,IAAI,CAcN"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildToSignPsbt = buildToSignPsbt;
4
+ exports.buildToSignPsbtForChainAndIndex = buildToSignPsbtForChainAndIndex;
5
+ const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
6
+ const utils_1 = require("./utils");
7
+ const toSpend_1 = require("./toSpend");
8
+ /**
9
+ * Construct the toSign PSBT for a BIP322 verification.
10
+ * Source implementation:
11
+ * https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki#full
12
+ *
13
+ * @param {string} message - The message that is hashed into the `to_spend` transaction.
14
+ * @param {AddressDetails} addressDetails - The details of the address, including redeemScript and/or witnessScript.
15
+ * @param {string} [tag=BIP322_TAG] - The tag to use for hashing, defaults to BIP322_TAG.
16
+ * @returns {Psbt} - The hex representation of the constructed PSBT.
17
+ */
18
+ function buildToSignPsbt(message, addressDetails, tag = toSpend_1.BIP322_TAG) {
19
+ const toSpendTx = (0, toSpend_1.buildToSpendTransaction)(addressDetails.scriptPubKey, message, tag);
20
+ // Create PSBT object for constructing the transaction
21
+ const psbt = new utxo_lib_1.Psbt();
22
+ // Set default value for nVersion and nLockTime
23
+ psbt.setVersion(0); // nVersion = 0
24
+ psbt.setLocktime(0); // nLockTime = 0
25
+ // Set the input
26
+ psbt.addInput({
27
+ hash: toSpendTx.getId(), // vin[0].prevout.hash = to_spend.txid
28
+ index: 0, // vin[0].prevout.n = 0
29
+ sequence: 0, // vin[0].nSequence = 0
30
+ nonWitnessUtxo: toSpendTx.toBuffer(), // previous transaction for us to rebuild later to verify
31
+ });
32
+ psbt.updateInput(0, {
33
+ witnessUtxo: { value: BigInt(0), script: addressDetails.scriptPubKey },
34
+ });
35
+ if (addressDetails.redeemScript) {
36
+ psbt.updateInput(0, { redeemScript: addressDetails.redeemScript });
37
+ }
38
+ if (addressDetails.witnessScript) {
39
+ psbt.updateInput(0, { witnessScript: addressDetails.witnessScript });
40
+ }
41
+ // Add the message as a proprietary key value to the PSBT so we can verify it later
42
+ (0, utils_1.addBip322ProofMessage)(psbt, 0, Buffer.from(message));
43
+ // Set the output
44
+ psbt.addOutput({
45
+ value: BigInt(0), // vout[0].nValue = 0
46
+ script: Buffer.from([0x6a]), // vout[0].scriptPubKey = OP_RETURN
47
+ });
48
+ return psbt;
49
+ }
50
+ function buildToSignPsbtForChainAndIndex(message, rootWalletKeys, chain, index) {
51
+ if ((0, utils_1.isTaprootChain)(chain)) {
52
+ throw new Error('BIP322 is not supported for Taproot script types.');
53
+ }
54
+ const output = utxo_lib_1.bitgo.outputScripts.createOutputScript2of3(rootWalletKeys.deriveForChainAndIndex(chain, index).publicKeys, utxo_lib_1.bitgo.scriptTypeForChain(chain));
55
+ return buildToSignPsbt(message, {
56
+ scriptPubKey: output.scriptPubKey,
57
+ redeemScript: output.redeemScript,
58
+ witnessScript: output.witnessScript,
59
+ });
60
+ }
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9TaWduLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JpcDMyMi90b1NpZ24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFxQkEsMENBbUNDO0FBRUQsMEVBbUJDO0FBN0VELG1EQUFtRDtBQUVuRCxtQ0FBZ0U7QUFDaEUsdUNBQWdFO0FBUWhFOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxPQUFlLEVBQUUsY0FBOEIsRUFBRSxHQUFHLEdBQUcsb0JBQVU7SUFDL0YsTUFBTSxTQUFTLEdBQUcsSUFBQSxpQ0FBdUIsRUFBQyxjQUFjLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUVyRixzREFBc0Q7SUFDdEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxlQUFJLEVBQUUsQ0FBQztJQUN4QiwrQ0FBK0M7SUFDL0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWU7SUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtJQUNyQyxnQkFBZ0I7SUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNaLElBQUksRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsc0NBQXNDO1FBQy9ELEtBQUssRUFBRSxDQUFDLEVBQUUsdUJBQXVCO1FBQ2pDLFFBQVEsRUFBRSxDQUFDLEVBQUUsdUJBQXVCO1FBQ3BDLGNBQWMsRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFLEVBQUUseURBQXlEO0tBQ2hHLENBQUMsQ0FBQztJQUNILElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO1FBQ2xCLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLGNBQWMsQ0FBQyxZQUFZLEVBQUU7S0FDdkUsQ0FBQyxDQUFDO0lBRUgsSUFBSSxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUNELElBQUksY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLEVBQUUsYUFBYSxFQUFFLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxtRkFBbUY7SUFDbkYsSUFBQSw2QkFBcUIsRUFBQyxJQUFzQixFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFFdkUsaUJBQWlCO0lBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDYixLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLHFCQUFxQjtRQUN2QyxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsbUNBQW1DO0tBQ2pFLENBQUMsQ0FBQztJQUNILE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELFNBQWdCLCtCQUErQixDQUM3QyxPQUFlLEVBQ2YsY0FBb0MsRUFDcEMsS0FBc0IsRUFDdEIsS0FBYTtJQUViLElBQUksSUFBQSxzQkFBYyxFQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxnQkFBSyxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FDdkQsY0FBYyxDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxVQUFVLEVBQzlELGdCQUFLLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQ2hDLENBQUM7SUFFRixPQUFPLGVBQWUsQ0FBQyxPQUFPLEVBQUU7UUFDOUIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO1FBQ2pDLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTtRQUNqQyxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWE7S0FDcEMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBzYnQsIGJpdGdvIH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuXG5pbXBvcnQgeyBhZGRCaXAzMjJQcm9vZk1lc3NhZ2UsIGlzVGFwcm9vdENoYWluIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBCSVAzMjJfVEFHLCBidWlsZFRvU3BlbmRUcmFuc2FjdGlvbiB9IGZyb20gJy4vdG9TcGVuZCc7XG5cbmV4cG9ydCB0eXBlIEFkZHJlc3NEZXRhaWxzID0ge1xuICByZWRlZW1TY3JpcHQ/OiBCdWZmZXI7XG4gIHdpdG5lc3NTY3JpcHQ/OiBCdWZmZXI7XG4gIHNjcmlwdFB1YktleTogQnVmZmVyO1xufTtcblxuLyoqXG4gKiBDb25zdHJ1Y3QgdGhlIHRvU2lnbiBQU0JUIGZvciBhIEJJUDMyMiB2ZXJpZmljYXRpb24uXG4gKiBTb3VyY2UgaW1wbGVtZW50YXRpb246XG4gKiBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbi9iaXBzL2Jsb2IvbWFzdGVyL2JpcC0wMzIyLm1lZGlhd2lraSNmdWxsXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0aGF0IGlzIGhhc2hlZCBpbnRvIHRoZSBgdG9fc3BlbmRgIHRyYW5zYWN0aW9uLlxuICogQHBhcmFtIHtBZGRyZXNzRGV0YWlsc30gYWRkcmVzc0RldGFpbHMgLSBUaGUgZGV0YWlscyBvZiB0aGUgYWRkcmVzcywgaW5jbHVkaW5nIHJlZGVlbVNjcmlwdCBhbmQvb3Igd2l0bmVzc1NjcmlwdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbdGFnPUJJUDMyMl9UQUddIC0gVGhlIHRhZyB0byB1c2UgZm9yIGhhc2hpbmcsIGRlZmF1bHRzIHRvIEJJUDMyMl9UQUcuXG4gKiBAcmV0dXJucyB7UHNidH0gLSBUaGUgaGV4IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb25zdHJ1Y3RlZCBQU0JULlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRUb1NpZ25Qc2J0KG1lc3NhZ2U6IHN0cmluZywgYWRkcmVzc0RldGFpbHM6IEFkZHJlc3NEZXRhaWxzLCB0YWcgPSBCSVAzMjJfVEFHKTogUHNidCB7XG4gIGNvbnN0IHRvU3BlbmRUeCA9IGJ1aWxkVG9TcGVuZFRyYW5zYWN0aW9uKGFkZHJlc3NEZXRhaWxzLnNjcmlwdFB1YktleSwgbWVzc2FnZSwgdGFnKTtcblxuICAvLyBDcmVhdGUgUFNCVCBvYmplY3QgZm9yIGNvbnN0cnVjdGluZyB0aGUgdHJhbnNhY3Rpb25cbiAgY29uc3QgcHNidCA9IG5ldyBQc2J0KCk7XG4gIC8vIFNldCBkZWZhdWx0IHZhbHVlIGZvciBuVmVyc2lvbiBhbmQgbkxvY2tUaW1lXG4gIHBzYnQuc2V0VmVyc2lvbigwKTsgLy8gblZlcnNpb24gPSAwXG4gIHBzYnQuc2V0TG9ja3RpbWUoMCk7IC8vIG5Mb2NrVGltZSA9IDBcbiAgLy8gU2V0IHRoZSBpbnB1dFxuICBwc2J0LmFkZElucHV0KHtcbiAgICBoYXNoOiB0b1NwZW5kVHguZ2V0SWQoKSwgLy8gdmluWzBdLnByZXZvdXQuaGFzaCA9IHRvX3NwZW5kLnR4aWRcbiAgICBpbmRleDogMCwgLy8gdmluWzBdLnByZXZvdXQubiA9IDBcbiAgICBzZXF1ZW5jZTogMCwgLy8gdmluWzBdLm5TZXF1ZW5jZSA9IDBcbiAgICBub25XaXRuZXNzVXR4bzogdG9TcGVuZFR4LnRvQnVmZmVyKCksIC8vIHByZXZpb3VzIHRyYW5zYWN0aW9uIGZvciB1cyB0byByZWJ1aWxkIGxhdGVyIHRvIHZlcmlmeVxuICB9KTtcbiAgcHNidC51cGRhdGVJbnB1dCgwLCB7XG4gICAgd2l0bmVzc1V0eG86IHsgdmFsdWU6IEJpZ0ludCgwKSwgc2NyaXB0OiBhZGRyZXNzRGV0YWlscy5zY3JpcHRQdWJLZXkgfSxcbiAgfSk7XG5cbiAgaWYgKGFkZHJlc3NEZXRhaWxzLnJlZGVlbVNjcmlwdCkge1xuICAgIHBzYnQudXBkYXRlSW5wdXQoMCwgeyByZWRlZW1TY3JpcHQ6IGFkZHJlc3NEZXRhaWxzLnJlZGVlbVNjcmlwdCB9KTtcbiAgfVxuICBpZiAoYWRkcmVzc0RldGFpbHMud2l0bmVzc1NjcmlwdCkge1xuICAgIHBzYnQudXBkYXRlSW5wdXQoMCwgeyB3aXRuZXNzU2NyaXB0OiBhZGRyZXNzRGV0YWlscy53aXRuZXNzU2NyaXB0IH0pO1xuICB9XG5cbiAgLy8gQWRkIHRoZSBtZXNzYWdlIGFzIGEgcHJvcHJpZXRhcnkga2V5IHZhbHVlIHRvIHRoZSBQU0JUIHNvIHdlIGNhbiB2ZXJpZnkgaXQgbGF0ZXJcbiAgYWRkQmlwMzIyUHJvb2ZNZXNzYWdlKHBzYnQgYXMgYml0Z28uVXR4b1BzYnQsIDAsIEJ1ZmZlci5mcm9tKG1lc3NhZ2UpKTtcblxuICAvLyBTZXQgdGhlIG91dHB1dFxuICBwc2J0LmFkZE91dHB1dCh7XG4gICAgdmFsdWU6IEJpZ0ludCgwKSwgLy8gdm91dFswXS5uVmFsdWUgPSAwXG4gICAgc2NyaXB0OiBCdWZmZXIuZnJvbShbMHg2YV0pLCAvLyB2b3V0WzBdLnNjcmlwdFB1YktleSA9IE9QX1JFVFVSTlxuICB9KTtcbiAgcmV0dXJuIHBzYnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFRvU2lnblBzYnRGb3JDaGFpbkFuZEluZGV4KFxuICBtZXNzYWdlOiBzdHJpbmcsXG4gIHJvb3RXYWxsZXRLZXlzOiBiaXRnby5Sb290V2FsbGV0S2V5cyxcbiAgY2hhaW46IGJpdGdvLkNoYWluQ29kZSxcbiAgaW5kZXg6IG51bWJlclxuKTogUHNidCB7XG4gIGlmIChpc1RhcHJvb3RDaGFpbihjaGFpbikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0JJUDMyMiBpcyBub3Qgc3VwcG9ydGVkIGZvciBUYXByb290IHNjcmlwdCB0eXBlcy4nKTtcbiAgfVxuICBjb25zdCBvdXRwdXQgPSBiaXRnby5vdXRwdXRTY3JpcHRzLmNyZWF0ZU91dHB1dFNjcmlwdDJvZjMoXG4gICAgcm9vdFdhbGxldEtleXMuZGVyaXZlRm9yQ2hhaW5BbmRJbmRleChjaGFpbiwgaW5kZXgpLnB1YmxpY0tleXMsXG4gICAgYml0Z28uc2NyaXB0VHlwZUZvckNoYWluKGNoYWluKVxuICApO1xuXG4gIHJldHVybiBidWlsZFRvU2lnblBzYnQobWVzc2FnZSwge1xuICAgIHNjcmlwdFB1YktleTogb3V0cHV0LnNjcmlwdFB1YktleSxcbiAgICByZWRlZW1TY3JpcHQ6IG91dHB1dC5yZWRlZW1TY3JpcHQsXG4gICAgd2l0bmVzc1NjcmlwdDogb3V0cHV0LndpdG5lc3NTY3JpcHQsXG4gIH0pO1xufVxuIl19
@@ -0,0 +1,22 @@
1
+ import { Transaction, bitgo } from '@bitgo-beta/utxo-lib';
2
+ export declare const BIP322_TAG = "BIP0322-signed-message";
3
+ /**
4
+ * Perform a tagged hash
5
+ *
6
+ * @param {string | Buffer} message - The message to hash as a Buffer or utf-8 string
7
+ * @param {Buffer} [tag=BIP322_TAG] - The tag to use for hashing, defaults to BIP322_TAG.
8
+ * @returns {Buffer} - The resulting hash of the message with the tag.
9
+ */
10
+ export declare function hashMessageWithTag(message: string | Buffer, tag?: string): Buffer;
11
+ /**
12
+ * Build a BIP322 "to spend" transaction
13
+ * Source: https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki#full
14
+ *
15
+ * @param {Buffer} scriptPubKey - The scriptPubKey to use for the output
16
+ * @param {string | Buffer} message - The message to include in the transaction
17
+ * @param {Buffer} [tag=BIP322_TAG] - The tag to use for hashing, defaults to BIP322_TAG.
18
+ * @returns {Transaction} - The constructed transaction
19
+ */
20
+ export declare function buildToSpendTransaction(scriptPubKey: Buffer, message: string | Buffer, tag?: string): Transaction<bigint>;
21
+ export declare function buildToSpendTransactionFromChainAndIndex(rootWalletKeys: bitgo.RootWalletKeys, chain: bitgo.ChainCode, index: number, message: string | Buffer, tag?: string): Transaction<bigint>;
22
+ //# sourceMappingURL=toSpend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toSpend.d.ts","sourceRoot":"","sources":["../../../src/bip322/toSpend.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,WAAW,EAAE,KAAK,EAAY,MAAM,sBAAsB,CAAC;AAI1E,eAAO,MAAM,UAAU,2BAA2B,CAAC;AAEnD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAa,GAAG,MAAM,CAYrF;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,GAAG,SAAa,GACf,WAAW,CAAC,MAAM,CAAC,CA4BrB;AAED,wBAAgB,wCAAwC,CACtD,cAAc,EAAE,KAAK,CAAC,cAAc,EACpC,KAAK,EAAE,KAAK,CAAC,SAAS,EACtB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,GAAG,SAAa,GACf,WAAW,CAAC,MAAM,CAAC,CAWrB"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BIP322_TAG = void 0;
4
+ exports.hashMessageWithTag = hashMessageWithTag;
5
+ exports.buildToSpendTransaction = buildToSpendTransaction;
6
+ exports.buildToSpendTransactionFromChainAndIndex = buildToSpendTransactionFromChainAndIndex;
7
+ const fast_sha256_1 = require("fast-sha256");
8
+ const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
9
+ const utils_1 = require("./utils");
10
+ exports.BIP322_TAG = 'BIP0322-signed-message';
11
+ /**
12
+ * Perform a tagged hash
13
+ *
14
+ * @param {string | Buffer} message - The message to hash as a Buffer or utf-8 string
15
+ * @param {Buffer} [tag=BIP322_TAG] - The tag to use for hashing, defaults to BIP322_TAG.
16
+ * @returns {Buffer} - The resulting hash of the message with the tag.
17
+ */
18
+ function hashMessageWithTag(message, tag = exports.BIP322_TAG) {
19
+ // Compute the message hash - SHA256(SHA256(tag) || SHA256(tag) || message)
20
+ // Reference: https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki#full
21
+ const tagHasher = new fast_sha256_1.Hash();
22
+ tagHasher.update(Buffer.from(exports.BIP322_TAG));
23
+ const tagHash = tagHasher.digest();
24
+ const messageHasher = new fast_sha256_1.Hash();
25
+ messageHasher.update(tagHash);
26
+ messageHasher.update(tagHash);
27
+ messageHasher.update(Buffer.from(message));
28
+ const messageHash = messageHasher.digest();
29
+ return Buffer.from(messageHash);
30
+ }
31
+ /**
32
+ * Build a BIP322 "to spend" transaction
33
+ * Source: https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki#full
34
+ *
35
+ * @param {Buffer} scriptPubKey - The scriptPubKey to use for the output
36
+ * @param {string | Buffer} message - The message to include in the transaction
37
+ * @param {Buffer} [tag=BIP322_TAG] - The tag to use for hashing, defaults to BIP322_TAG.
38
+ * @returns {Transaction} - The constructed transaction
39
+ */
40
+ function buildToSpendTransaction(scriptPubKey, message, tag = exports.BIP322_TAG) {
41
+ // Create PSBT object for constructing the transaction
42
+ const psbt = new utxo_lib_1.Psbt();
43
+ // Set default value for nVersion and nLockTime
44
+ psbt.setVersion(0); // nVersion = 0
45
+ psbt.setLocktime(0); // nLockTime = 0
46
+ // Compute the message hash - SHA256(SHA256(tag) || SHA256(tag) || message)
47
+ const messageHash = hashMessageWithTag(message, tag);
48
+ // Construct the scriptSig - OP_0 PUSH32[ message_hash ]
49
+ const scriptSigPartOne = new Uint8Array([0x00, 0x20]); // OP_0 PUSH32
50
+ const scriptSig = new Uint8Array(scriptSigPartOne.length + messageHash.length);
51
+ scriptSig.set(scriptSigPartOne);
52
+ scriptSig.set(messageHash, scriptSigPartOne.length);
53
+ // Set the input
54
+ psbt.addInput({
55
+ hash: '0'.repeat(64), // vin[0].prevout.hash = 0000...000
56
+ index: 0xffffffff, // vin[0].prevout.n = 0xFFFFFFFF
57
+ sequence: 0, // vin[0].nSequence = 0
58
+ finalScriptSig: Buffer.from(scriptSig), // vin[0].scriptSig = OP_0 PUSH32[ message_hash ]
59
+ witnessScript: Buffer.from([]), // vin[0].scriptWitness = []
60
+ });
61
+ // Set the output
62
+ psbt.addOutput({
63
+ value: BigInt(0), // vout[0].nValue = 0
64
+ script: scriptPubKey, // vout[0].scriptPubKey = message_challenge
65
+ });
66
+ // Return transaction
67
+ return psbt.extractTransaction();
68
+ }
69
+ function buildToSpendTransactionFromChainAndIndex(rootWalletKeys, chain, index, message, tag = exports.BIP322_TAG) {
70
+ if ((0, utils_1.isTaprootChain)(chain)) {
71
+ throw new Error('BIP322 is not supported for Taproot script types.');
72
+ }
73
+ const outputScript = utxo_lib_1.bitgo.outputScripts.createOutputScript2of3(rootWalletKeys.deriveForChainAndIndex(chain, index).publicKeys, utxo_lib_1.bitgo.scriptTypeForChain(chain), utxo_lib_1.networks.bitcoin);
74
+ return buildToSpendTransaction(outputScript.scriptPubKey, message, tag);
75
+ }
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9TcGVuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iaXAzMjIvdG9TcGVuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFjQSxnREFZQztBQVdELDBEQWdDQztBQUVELDRGQWlCQztBQXhGRCw2Q0FBbUM7QUFDbkMsbURBQTBFO0FBRTFFLG1DQUF5QztBQUU1QixRQUFBLFVBQVUsR0FBRyx3QkFBd0IsQ0FBQztBQUVuRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxPQUF3QixFQUFFLEdBQUcsR0FBRyxrQkFBVTtJQUMzRSwyRUFBMkU7SUFDM0UsaUZBQWlGO0lBQ2pGLE1BQU0sU0FBUyxHQUFHLElBQUksa0JBQUksRUFBRSxDQUFDO0lBQzdCLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBVSxDQUFDLENBQUMsQ0FBQztJQUMxQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbkMsTUFBTSxhQUFhLEdBQUcsSUFBSSxrQkFBSSxFQUFFLENBQUM7SUFDakMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QixhQUFhLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMzQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0IsdUJBQXVCLENBQ3JDLFlBQW9CLEVBQ3BCLE9BQXdCLEVBQ3hCLEdBQUcsR0FBRyxrQkFBVTtJQUVoQixzREFBc0Q7SUFDdEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxlQUFJLEVBQUUsQ0FBQztJQUN4QiwrQ0FBK0M7SUFDL0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWU7SUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtJQUNyQywyRUFBMkU7SUFDM0UsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JELHdEQUF3RDtJQUN4RCxNQUFNLGdCQUFnQixHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjO0lBQ3JFLE1BQU0sU0FBUyxHQUFHLElBQUksVUFBVSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0UsU0FBUyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hDLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELGdCQUFnQjtJQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ1osSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsbUNBQW1DO1FBQ3pELEtBQUssRUFBRSxVQUFVLEVBQUUsZ0NBQWdDO1FBQ25ELFFBQVEsRUFBRSxDQUFDLEVBQUUsdUJBQXVCO1FBQ3BDLGNBQWMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGlEQUFpRDtRQUN6RixhQUFhLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSw0QkFBNEI7S0FDN0QsQ0FBQyxDQUFDO0lBQ0gsaUJBQWlCO0lBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDYixLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLHFCQUFxQjtRQUN2QyxNQUFNLEVBQUUsWUFBWSxFQUFFLDJDQUEyQztLQUNsRSxDQUFDLENBQUM7SUFDSCxxQkFBcUI7SUFDckIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUNuQyxDQUFDO0FBRUQsU0FBZ0Isd0NBQXdDLENBQ3RELGNBQW9DLEVBQ3BDLEtBQXNCLEVBQ3RCLEtBQWEsRUFDYixPQUF3QixFQUN4QixHQUFHLEdBQUcsa0JBQVU7SUFFaEIsSUFBSSxJQUFBLHNCQUFjLEVBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLGdCQUFLLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUM3RCxjQUFjLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLFVBQVUsRUFDOUQsZ0JBQUssQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFDL0IsbUJBQVEsQ0FBQyxPQUFPLENBQ2pCLENBQUM7SUFDRixPQUFPLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIYXNoIH0gZnJvbSAnZmFzdC1zaGEyNTYnO1xuaW1wb3J0IHsgUHNidCwgVHJhbnNhY3Rpb24sIGJpdGdvLCBuZXR3b3JrcyB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcblxuaW1wb3J0IHsgaXNUYXByb290Q2hhaW4gfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IEJJUDMyMl9UQUcgPSAnQklQMDMyMi1zaWduZWQtbWVzc2FnZSc7XG5cbi8qKlxuICogUGVyZm9ybSBhIHRhZ2dlZCBoYXNoXG4gKlxuICogQHBhcmFtIHtzdHJpbmcgfCBCdWZmZXJ9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBoYXNoIGFzIGEgQnVmZmVyIG9yIHV0Zi04IHN0cmluZ1xuICogQHBhcmFtIHtCdWZmZXJ9IFt0YWc9QklQMzIyX1RBR10gLSBUaGUgdGFnIHRvIHVzZSBmb3IgaGFzaGluZywgZGVmYXVsdHMgdG8gQklQMzIyX1RBRy5cbiAqIEByZXR1cm5zIHtCdWZmZXJ9IC0gVGhlIHJlc3VsdGluZyBoYXNoIG9mIHRoZSBtZXNzYWdlIHdpdGggdGhlIHRhZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hNZXNzYWdlV2l0aFRhZyhtZXNzYWdlOiBzdHJpbmcgfCBCdWZmZXIsIHRhZyA9IEJJUDMyMl9UQUcpOiBCdWZmZXIge1xuICAvLyBDb21wdXRlIHRoZSBtZXNzYWdlIGhhc2ggLSBTSEEyNTYoU0hBMjU2KHRhZykgfHwgU0hBMjU2KHRhZykgfHwgbWVzc2FnZSlcbiAgLy8gUmVmZXJlbmNlOiBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbi9iaXBzL2Jsb2IvbWFzdGVyL2JpcC0wMzIyLm1lZGlhd2lraSNmdWxsXG4gIGNvbnN0IHRhZ0hhc2hlciA9IG5ldyBIYXNoKCk7XG4gIHRhZ0hhc2hlci51cGRhdGUoQnVmZmVyLmZyb20oQklQMzIyX1RBRykpO1xuICBjb25zdCB0YWdIYXNoID0gdGFnSGFzaGVyLmRpZ2VzdCgpO1xuICBjb25zdCBtZXNzYWdlSGFzaGVyID0gbmV3IEhhc2goKTtcbiAgbWVzc2FnZUhhc2hlci51cGRhdGUodGFnSGFzaCk7XG4gIG1lc3NhZ2VIYXNoZXIudXBkYXRlKHRhZ0hhc2gpO1xuICBtZXNzYWdlSGFzaGVyLnVwZGF0ZShCdWZmZXIuZnJvbShtZXNzYWdlKSk7XG4gIGNvbnN0IG1lc3NhZ2VIYXNoID0gbWVzc2FnZUhhc2hlci5kaWdlc3QoKTtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKG1lc3NhZ2VIYXNoKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIEJJUDMyMiBcInRvIHNwZW5kXCIgdHJhbnNhY3Rpb25cbiAqIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4vYmlwcy9ibG9iL21hc3Rlci9iaXAtMDMyMi5tZWRpYXdpa2kjZnVsbFxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBzY3JpcHRQdWJLZXkgLSBUaGUgc2NyaXB0UHViS2V5IHRvIHVzZSBmb3IgdGhlIG91dHB1dFxuICogQHBhcmFtIHtzdHJpbmcgfCBCdWZmZXJ9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBpbmNsdWRlIGluIHRoZSB0cmFuc2FjdGlvblxuICogQHBhcmFtIHtCdWZmZXJ9IFt0YWc9QklQMzIyX1RBR10gLSBUaGUgdGFnIHRvIHVzZSBmb3IgaGFzaGluZywgZGVmYXVsdHMgdG8gQklQMzIyX1RBRy5cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbn0gLSBUaGUgY29uc3RydWN0ZWQgdHJhbnNhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVG9TcGVuZFRyYW5zYWN0aW9uKFxuICBzY3JpcHRQdWJLZXk6IEJ1ZmZlcixcbiAgbWVzc2FnZTogc3RyaW5nIHwgQnVmZmVyLFxuICB0YWcgPSBCSVAzMjJfVEFHXG4pOiBUcmFuc2FjdGlvbjxiaWdpbnQ+IHtcbiAgLy8gQ3JlYXRlIFBTQlQgb2JqZWN0IGZvciBjb25zdHJ1Y3RpbmcgdGhlIHRyYW5zYWN0aW9uXG4gIGNvbnN0IHBzYnQgPSBuZXcgUHNidCgpO1xuICAvLyBTZXQgZGVmYXVsdCB2YWx1ZSBmb3IgblZlcnNpb24gYW5kIG5Mb2NrVGltZVxuICBwc2J0LnNldFZlcnNpb24oMCk7IC8vIG5WZXJzaW9uID0gMFxuICBwc2J0LnNldExvY2t0aW1lKDApOyAvLyBuTG9ja1RpbWUgPSAwXG4gIC8vIENvbXB1dGUgdGhlIG1lc3NhZ2UgaGFzaCAtIFNIQTI1NihTSEEyNTYodGFnKSB8fCBTSEEyNTYodGFnKSB8fCBtZXNzYWdlKVxuICBjb25zdCBtZXNzYWdlSGFzaCA9IGhhc2hNZXNzYWdlV2l0aFRhZyhtZXNzYWdlLCB0YWcpO1xuICAvLyBDb25zdHJ1Y3QgdGhlIHNjcmlwdFNpZyAtIE9QXzAgUFVTSDMyWyBtZXNzYWdlX2hhc2ggXVxuICBjb25zdCBzY3JpcHRTaWdQYXJ0T25lID0gbmV3IFVpbnQ4QXJyYXkoWzB4MDAsIDB4MjBdKTsgLy8gT1BfMCBQVVNIMzJcbiAgY29uc3Qgc2NyaXB0U2lnID0gbmV3IFVpbnQ4QXJyYXkoc2NyaXB0U2lnUGFydE9uZS5sZW5ndGggKyBtZXNzYWdlSGFzaC5sZW5ndGgpO1xuICBzY3JpcHRTaWcuc2V0KHNjcmlwdFNpZ1BhcnRPbmUpO1xuICBzY3JpcHRTaWcuc2V0KG1lc3NhZ2VIYXNoLCBzY3JpcHRTaWdQYXJ0T25lLmxlbmd0aCk7XG4gIC8vIFNldCB0aGUgaW5wdXRcbiAgcHNidC5hZGRJbnB1dCh7XG4gICAgaGFzaDogJzAnLnJlcGVhdCg2NCksIC8vIHZpblswXS5wcmV2b3V0Lmhhc2ggPSAwMDAwLi4uMDAwXG4gICAgaW5kZXg6IDB4ZmZmZmZmZmYsIC8vIHZpblswXS5wcmV2b3V0Lm4gPSAweEZGRkZGRkZGXG4gICAgc2VxdWVuY2U6IDAsIC8vIHZpblswXS5uU2VxdWVuY2UgPSAwXG4gICAgZmluYWxTY3JpcHRTaWc6IEJ1ZmZlci5mcm9tKHNjcmlwdFNpZyksIC8vIHZpblswXS5zY3JpcHRTaWcgPSBPUF8wIFBVU0gzMlsgbWVzc2FnZV9oYXNoIF1cbiAgICB3aXRuZXNzU2NyaXB0OiBCdWZmZXIuZnJvbShbXSksIC8vIHZpblswXS5zY3JpcHRXaXRuZXNzID0gW11cbiAgfSk7XG4gIC8vIFNldCB0aGUgb3V0cHV0XG4gIHBzYnQuYWRkT3V0cHV0KHtcbiAgICB2YWx1ZTogQmlnSW50KDApLCAvLyB2b3V0WzBdLm5WYWx1ZSA9IDBcbiAgICBzY3JpcHQ6IHNjcmlwdFB1YktleSwgLy8gdm91dFswXS5zY3JpcHRQdWJLZXkgPSBtZXNzYWdlX2NoYWxsZW5nZVxuICB9KTtcbiAgLy8gUmV0dXJuIHRyYW5zYWN0aW9uXG4gIHJldHVybiBwc2J0LmV4dHJhY3RUcmFuc2FjdGlvbigpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRUb1NwZW5kVHJhbnNhY3Rpb25Gcm9tQ2hhaW5BbmRJbmRleChcbiAgcm9vdFdhbGxldEtleXM6IGJpdGdvLlJvb3RXYWxsZXRLZXlzLFxuICBjaGFpbjogYml0Z28uQ2hhaW5Db2RlLFxuICBpbmRleDogbnVtYmVyLFxuICBtZXNzYWdlOiBzdHJpbmcgfCBCdWZmZXIsXG4gIHRhZyA9IEJJUDMyMl9UQUdcbik6IFRyYW5zYWN0aW9uPGJpZ2ludD4ge1xuICBpZiAoaXNUYXByb290Q2hhaW4oY2hhaW4pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdCSVAzMjIgaXMgbm90IHN1cHBvcnRlZCBmb3IgVGFwcm9vdCBzY3JpcHQgdHlwZXMuJyk7XG4gIH1cblxuICBjb25zdCBvdXRwdXRTY3JpcHQgPSBiaXRnby5vdXRwdXRTY3JpcHRzLmNyZWF0ZU91dHB1dFNjcmlwdDJvZjMoXG4gICAgcm9vdFdhbGxldEtleXMuZGVyaXZlRm9yQ2hhaW5BbmRJbmRleChjaGFpbiwgaW5kZXgpLnB1YmxpY0tleXMsXG4gICAgYml0Z28uc2NyaXB0VHlwZUZvckNoYWluKGNoYWluKSxcbiAgICBuZXR3b3Jrcy5iaXRjb2luXG4gICk7XG4gIHJldHVybiBidWlsZFRvU3BlbmRUcmFuc2FjdGlvbihvdXRwdXRTY3JpcHQuc2NyaXB0UHViS2V5LCBtZXNzYWdlLCB0YWcpO1xufVxuIl19
@@ -0,0 +1,6 @@
1
+ import * as utxolib from '@bitgo-beta/utxo-lib';
2
+ export declare function addBip322ProofMessage(psbt: utxolib.bitgo.UtxoPsbt, inputIndex: number, message: Buffer): void;
3
+ export declare function getBip322ProofInputIndex(psbt: utxolib.Psbt): number | undefined;
4
+ export declare function psbtIsBip322Proof(psbt: utxolib.Psbt): boolean;
5
+ export declare function isTaprootChain(chain: utxolib.bitgo.ChainCode): boolean;
6
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/bip322/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAEhD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAS7G;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,MAAM,GAAG,SAAS,CAY/E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,OAAO,CAE7D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,OAAO,CAGtE"}
@@ -0,0 +1,71 @@
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
+ exports.addBip322ProofMessage = addBip322ProofMessage;
37
+ exports.getBip322ProofInputIndex = getBip322ProofInputIndex;
38
+ exports.psbtIsBip322Proof = psbtIsBip322Proof;
39
+ exports.isTaprootChain = isTaprootChain;
40
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
41
+ function addBip322ProofMessage(psbt, inputIndex, message) {
42
+ utxolib.bitgo.addProprietaryKeyValuesFromUnknownKeyValues(psbt, 'input', inputIndex, {
43
+ key: {
44
+ identifier: utxolib.bitgo.PSBT_PROPRIETARY_IDENTIFIER,
45
+ subtype: utxolib.bitgo.ProprietaryKeySubtype.BIP322_MESSAGE,
46
+ keydata: Buffer.alloc(0),
47
+ },
48
+ value: message,
49
+ });
50
+ }
51
+ function getBip322ProofInputIndex(psbt) {
52
+ const res = psbt.data.inputs.flatMap((input, inputIndex) => {
53
+ const proprietaryKeyVals = utxolib.bitgo.getPsbtInputProprietaryKeyVals(input, {
54
+ identifier: utxolib.bitgo.PSBT_PROPRIETARY_IDENTIFIER,
55
+ subtype: utxolib.bitgo.ProprietaryKeySubtype.BIP322_MESSAGE,
56
+ });
57
+ if (proprietaryKeyVals.length > 1) {
58
+ throw new Error(`Multiple BIP322 messages found at input index ${inputIndex}`);
59
+ }
60
+ return proprietaryKeyVals.length === 0 ? [] : [inputIndex];
61
+ });
62
+ return res.length === 0 ? undefined : res[0];
63
+ }
64
+ function psbtIsBip322Proof(psbt) {
65
+ return getBip322ProofInputIndex(psbt) !== undefined;
66
+ }
67
+ function isTaprootChain(chain) {
68
+ const taprootChains = [...utxolib.bitgo.chainCodesP2tr, ...utxolib.bitgo.chainCodesP2trMusig2];
69
+ return taprootChains.some((tc) => tc === chain);
70
+ }
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmlwMzIyL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsc0RBU0M7QUFFRCw0REFZQztBQUVELDhDQUVDO0FBRUQsd0NBR0M7QUFsQ0QsOERBQWdEO0FBRWhELFNBQWdCLHFCQUFxQixDQUFDLElBQTRCLEVBQUUsVUFBa0IsRUFBRSxPQUFlO0lBQ3JHLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkNBQTJDLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUU7UUFDbkYsR0FBRyxFQUFFO1lBQ0gsVUFBVSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkJBQTJCO1lBQ3JELE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLGNBQWM7WUFDM0QsT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ3pCO1FBQ0QsS0FBSyxFQUFFLE9BQU87S0FDZixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBZ0Isd0JBQXdCLENBQUMsSUFBa0I7SUFDekQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFO1FBQ3pELE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxLQUFLLEVBQUU7WUFDN0UsVUFBVSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkJBQTJCO1lBQ3JELE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLGNBQWM7U0FDNUQsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNqRixDQUFDO1FBQ0QsT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0QsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQUMsSUFBa0I7SUFDbEQsT0FBTyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLENBQUM7QUFDdEQsQ0FBQztBQUVELFNBQWdCLGNBQWMsQ0FBQyxLQUE4QjtJQUMzRCxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDL0YsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDbEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkQmlwMzIyUHJvb2ZNZXNzYWdlKHBzYnQ6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQsIGlucHV0SW5kZXg6IG51bWJlciwgbWVzc2FnZTogQnVmZmVyKTogdm9pZCB7XG4gIHV0eG9saWIuYml0Z28uYWRkUHJvcHJpZXRhcnlLZXlWYWx1ZXNGcm9tVW5rbm93bktleVZhbHVlcyhwc2J0LCAnaW5wdXQnLCBpbnB1dEluZGV4LCB7XG4gICAga2V5OiB7XG4gICAgICBpZGVudGlmaWVyOiB1dHhvbGliLmJpdGdvLlBTQlRfUFJPUFJJRVRBUllfSURFTlRJRklFUixcbiAgICAgIHN1YnR5cGU6IHV0eG9saWIuYml0Z28uUHJvcHJpZXRhcnlLZXlTdWJ0eXBlLkJJUDMyMl9NRVNTQUdFLFxuICAgICAga2V5ZGF0YTogQnVmZmVyLmFsbG9jKDApLFxuICAgIH0sXG4gICAgdmFsdWU6IG1lc3NhZ2UsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmlwMzIyUHJvb2ZJbnB1dEluZGV4KHBzYnQ6IHV0eG9saWIuUHNidCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHJlcyA9IHBzYnQuZGF0YS5pbnB1dHMuZmxhdE1hcCgoaW5wdXQsIGlucHV0SW5kZXgpID0+IHtcbiAgICBjb25zdCBwcm9wcmlldGFyeUtleVZhbHMgPSB1dHhvbGliLmJpdGdvLmdldFBzYnRJbnB1dFByb3ByaWV0YXJ5S2V5VmFscyhpbnB1dCwge1xuICAgICAgaWRlbnRpZmllcjogdXR4b2xpYi5iaXRnby5QU0JUX1BST1BSSUVUQVJZX0lERU5USUZJRVIsXG4gICAgICBzdWJ0eXBlOiB1dHhvbGliLmJpdGdvLlByb3ByaWV0YXJ5S2V5U3VidHlwZS5CSVAzMjJfTUVTU0FHRSxcbiAgICB9KTtcbiAgICBpZiAocHJvcHJpZXRhcnlLZXlWYWxzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTXVsdGlwbGUgQklQMzIyIG1lc3NhZ2VzIGZvdW5kIGF0IGlucHV0IGluZGV4ICR7aW5wdXRJbmRleH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHByb3ByaWV0YXJ5S2V5VmFscy5sZW5ndGggPT09IDAgPyBbXSA6IFtpbnB1dEluZGV4XTtcbiAgfSk7XG4gIHJldHVybiByZXMubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogcmVzWzBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHNidElzQmlwMzIyUHJvb2YocHNidDogdXR4b2xpYi5Qc2J0KTogYm9vbGVhbiB7XG4gIHJldHVybiBnZXRCaXAzMjJQcm9vZklucHV0SW5kZXgocHNidCkgIT09IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGFwcm9vdENoYWluKGNoYWluOiB1dHhvbGliLmJpdGdvLkNoYWluQ29kZSk6IGJvb2xlYW4ge1xuICBjb25zdCB0YXByb290Q2hhaW5zID0gWy4uLnV0eG9saWIuYml0Z28uY2hhaW5Db2Rlc1AydHIsIC4uLnV0eG9saWIuYml0Z28uY2hhaW5Db2Rlc1AydHJNdXNpZzJdO1xuICByZXR1cm4gdGFwcm9vdENoYWlucy5zb21lKCh0YykgPT4gdGMgPT09IGNoYWluKTtcbn1cbiJdfQ==
@@ -0,0 +1,16 @@
1
+ import { BIP32Interface } from '@bitgo-beta/utxo-lib';
2
+ /**
3
+ * bip32-aware wrapper around bitcoin-message package
4
+ * @see {bitcoinMessage.sign}
5
+ */
6
+ export declare function signMessage(message: string | Buffer, privateKey: BIP32Interface | Buffer, network: {
7
+ messagePrefix: string;
8
+ }): Buffer;
9
+ /**
10
+ * bip32-aware wrapper around bitcoin-message package
11
+ * @see {bitcoinMessage.verify}
12
+ */
13
+ export declare function verifyMessage(message: string | Buffer, publicKey: BIP32Interface | Buffer, signature: Buffer, network: {
14
+ messagePrefix: string;
15
+ }): boolean;
16
+ //# sourceMappingURL=bip32utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bip32utils.d.ts","sourceRoot":"","sources":["../../src/bip32utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD;;;GAGG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,UAAU,EAAE,cAAc,GAAG,MAAM,EACnC,OAAO,EAAE;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,GACjC,MAAM,CAYR;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,SAAS,EAAE,cAAc,GAAG,MAAM,EAClC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,GACjC,OAAO,CAcT"}
@@ -0,0 +1,71 @@
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
+ exports.signMessage = signMessage;
37
+ exports.verifyMessage = verifyMessage;
38
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
39
+ const bitcoinMessage = __importStar(require("bitcoinjs-message"));
40
+ /**
41
+ * bip32-aware wrapper around bitcoin-message package
42
+ * @see {bitcoinMessage.sign}
43
+ */
44
+ function signMessage(message, privateKey, network) {
45
+ if (!Buffer.isBuffer(privateKey)) {
46
+ privateKey = privateKey.privateKey;
47
+ if (!privateKey) {
48
+ throw new Error(`must provide privateKey`);
49
+ }
50
+ }
51
+ if (network === null || typeof network !== 'object' || typeof network.messagePrefix !== 'string') {
52
+ throw new Error(`invalid argument 'network'`);
53
+ }
54
+ const compressed = true;
55
+ return bitcoinMessage.sign(message, privateKey, compressed, network.messagePrefix);
56
+ }
57
+ /**
58
+ * bip32-aware wrapper around bitcoin-message package
59
+ * @see {bitcoinMessage.verify}
60
+ */
61
+ function verifyMessage(message, publicKey, signature, network) {
62
+ if (!Buffer.isBuffer(publicKey)) {
63
+ publicKey = publicKey.publicKey;
64
+ }
65
+ if (network === null || typeof network !== 'object' || typeof network.messagePrefix !== 'string') {
66
+ throw new Error(`invalid argument 'network'`);
67
+ }
68
+ const address = utxolib.address.toBase58Check(utxolib.crypto.hash160(publicKey), utxolib.networks.bitcoin.pubKeyHash, utxolib.networks.bitcoin);
69
+ return bitcoinMessage.verify(message, address, signature, network.messagePrefix);
70
+ }
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlwMzJ1dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaXAzMnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT0Esa0NBZ0JDO0FBTUQsc0NBbUJDO0FBaERELDhEQUFnRDtBQUNoRCxrRUFBb0Q7QUFFcEQ7OztHQUdHO0FBQ0gsU0FBZ0IsV0FBVyxDQUN6QixPQUF3QixFQUN4QixVQUFtQyxFQUNuQyxPQUFrQztJQUVsQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ2pDLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBb0IsQ0FBQztRQUM3QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdDLENBQUM7SUFDSCxDQUFDO0lBQ0QsSUFBSSxPQUFPLEtBQUssSUFBSSxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLE9BQU8sQ0FBQyxhQUFhLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDakcsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDeEIsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNyRixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsYUFBYSxDQUMzQixPQUF3QixFQUN4QixTQUFrQyxFQUNsQyxTQUFpQixFQUNqQixPQUFrQztJQUVsQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ2hDLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxJQUFJLE9BQU8sS0FBSyxJQUFJLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxJQUFJLE9BQU8sT0FBTyxDQUFDLGFBQWEsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNqRyxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUMzQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFDakMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUNuQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FDekIsQ0FBQztJQUNGLE9BQU8sY0FBYyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDbkYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0ICogYXMgYml0Y29pbk1lc3NhZ2UgZnJvbSAnYml0Y29pbmpzLW1lc3NhZ2UnO1xuaW1wb3J0IHsgQklQMzJJbnRlcmZhY2UgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG4vKipcbiAqIGJpcDMyLWF3YXJlIHdyYXBwZXIgYXJvdW5kIGJpdGNvaW4tbWVzc2FnZSBwYWNrYWdlXG4gKiBAc2VlIHtiaXRjb2luTWVzc2FnZS5zaWdufVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnbk1lc3NhZ2UoXG4gIG1lc3NhZ2U6IHN0cmluZyB8IEJ1ZmZlcixcbiAgcHJpdmF0ZUtleTogQklQMzJJbnRlcmZhY2UgfCBCdWZmZXIsXG4gIG5ldHdvcms6IHsgbWVzc2FnZVByZWZpeDogc3RyaW5nIH1cbik6IEJ1ZmZlciB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHByaXZhdGVLZXkpKSB7XG4gICAgcHJpdmF0ZUtleSA9IHByaXZhdGVLZXkucHJpdmF0ZUtleSBhcyBCdWZmZXI7XG4gICAgaWYgKCFwcml2YXRlS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG11c3QgcHJvdmlkZSBwcml2YXRlS2V5YCk7XG4gICAgfVxuICB9XG4gIGlmIChuZXR3b3JrID09PSBudWxsIHx8IHR5cGVvZiBuZXR3b3JrICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgbmV0d29yay5tZXNzYWdlUHJlZml4ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBhcmd1bWVudCAnbmV0d29yaydgKTtcbiAgfVxuICBjb25zdCBjb21wcmVzc2VkID0gdHJ1ZTtcbiAgcmV0dXJuIGJpdGNvaW5NZXNzYWdlLnNpZ24obWVzc2FnZSwgcHJpdmF0ZUtleSwgY29tcHJlc3NlZCwgbmV0d29yay5tZXNzYWdlUHJlZml4KTtcbn1cblxuLyoqXG4gKiBiaXAzMi1hd2FyZSB3cmFwcGVyIGFyb3VuZCBiaXRjb2luLW1lc3NhZ2UgcGFja2FnZVxuICogQHNlZSB7Yml0Y29pbk1lc3NhZ2UudmVyaWZ5fVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5TWVzc2FnZShcbiAgbWVzc2FnZTogc3RyaW5nIHwgQnVmZmVyLFxuICBwdWJsaWNLZXk6IEJJUDMySW50ZXJmYWNlIHwgQnVmZmVyLFxuICBzaWduYXR1cmU6IEJ1ZmZlcixcbiAgbmV0d29yazogeyBtZXNzYWdlUHJlZml4OiBzdHJpbmcgfVxuKTogYm9vbGVhbiB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHB1YmxpY0tleSkpIHtcbiAgICBwdWJsaWNLZXkgPSBwdWJsaWNLZXkucHVibGljS2V5O1xuICB9XG4gIGlmIChuZXR3b3JrID09PSBudWxsIHx8IHR5cGVvZiBuZXR3b3JrICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgbmV0d29yay5tZXNzYWdlUHJlZml4ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBhcmd1bWVudCAnbmV0d29yaydgKTtcbiAgfVxuXG4gIGNvbnN0IGFkZHJlc3MgPSB1dHhvbGliLmFkZHJlc3MudG9CYXNlNThDaGVjayhcbiAgICB1dHhvbGliLmNyeXB0by5oYXNoMTYwKHB1YmxpY0tleSksXG4gICAgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luLnB1YktleUhhc2gsXG4gICAgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luXG4gICk7XG4gIHJldHVybiBiaXRjb2luTWVzc2FnZS52ZXJpZnkobWVzc2FnZSwgYWRkcmVzcywgc2lnbmF0dXJlLCBuZXR3b3JrLm1lc3NhZ2VQcmVmaXgpO1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export * from './locktime';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/bip65/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
@@ -0,0 +1,18 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./locktime"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmlwNjUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbG9ja3RpbWUnO1xuIl19
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @param obj
3
+ * @return number
4
+ */
5
+ export declare function encodeLocktime(obj: Date | {
6
+ blocks: number;
7
+ }): number;
8
+ //# sourceMappingURL=locktime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locktime.d.ts","sourceRoot":"","sources":["../../../src/bip65/locktime.ts"],"names":[],"mappings":"AAWA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,IAAI,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAwBrE"}