@bitgo-beta/abstract-utxo 1.6.1-alpha.425 → 1.6.1-alpha.426

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 (130) hide show
  1. package/dist/cjs/src/abstractUtxoCoin.d.ts +21 -5
  2. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
  3. package/dist/cjs/src/abstractUtxoCoin.js +52 -26
  4. package/dist/cjs/src/index.d.ts +2 -2
  5. package/dist/cjs/src/index.d.ts.map +1 -1
  6. package/dist/cjs/src/index.js +3 -3
  7. package/dist/cjs/src/recovery/backupKeyRecovery.js +4 -4
  8. package/dist/cjs/src/recovery/crossChainRecovery.d.ts +10 -0
  9. package/dist/cjs/src/recovery/crossChainRecovery.d.ts.map +1 -1
  10. package/dist/cjs/src/recovery/crossChainRecovery.js +48 -4
  11. package/dist/cjs/src/transaction/decode.d.ts +11 -0
  12. package/dist/cjs/src/transaction/decode.d.ts.map +1 -0
  13. package/dist/cjs/src/transaction/decode.js +81 -0
  14. package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  15. package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +3 -2
  16. package/dist/cjs/src/transaction/explainTransaction.js +3 -3
  17. package/dist/cjs/src/transaction/fixedScript/SigningError.d.ts +24 -0
  18. package/dist/cjs/src/transaction/fixedScript/SigningError.d.ts.map +1 -0
  19. package/dist/cjs/src/transaction/fixedScript/SigningError.js +26 -0
  20. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts +1 -1
  21. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -1
  22. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.js +1 -1
  23. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
  24. package/dist/cjs/src/transaction/fixedScript/explainTransaction.js +2 -2
  25. package/dist/cjs/src/transaction/fixedScript/index.d.ts +3 -0
  26. package/dist/cjs/src/transaction/fixedScript/index.d.ts.map +1 -1
  27. package/dist/cjs/src/transaction/fixedScript/index.js +18 -1
  28. package/dist/cjs/src/transaction/fixedScript/musig2.d.ts +4 -0
  29. package/dist/cjs/src/transaction/fixedScript/musig2.d.ts.map +1 -0
  30. package/dist/cjs/src/transaction/fixedScript/musig2.js +3 -0
  31. package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts +7 -0
  32. package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts.map +1 -0
  33. package/dist/cjs/src/transaction/fixedScript/replayProtection.js +78 -0
  34. package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts +30 -0
  35. package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -0
  36. package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.js +152 -0
  37. package/dist/cjs/src/transaction/fixedScript/signPsbt.d.ts +30 -0
  38. package/dist/cjs/src/transaction/fixedScript/signPsbt.d.ts.map +1 -0
  39. package/dist/cjs/src/transaction/fixedScript/signPsbt.js +174 -0
  40. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts +22 -0
  41. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -0
  42. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.js +129 -0
  43. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +5 -6
  44. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  45. package/dist/cjs/src/transaction/fixedScript/signTransaction.js +28 -79
  46. package/dist/cjs/src/transaction/fixedScript/verifyTransaction.d.ts.map +1 -1
  47. package/dist/cjs/src/transaction/fixedScript/verifyTransaction.js +3 -2
  48. package/dist/cjs/src/transaction/signTransaction.d.ts.map +1 -1
  49. package/dist/cjs/src/transaction/signTransaction.js +5 -2
  50. package/dist/cjs/src/transaction/types.d.ts +5 -0
  51. package/dist/cjs/src/transaction/types.d.ts.map +1 -1
  52. package/dist/cjs/src/transaction/types.js +5 -1
  53. package/dist/cjs/test/unit/recovery/crossChainRecovery.js +24 -1
  54. package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.js +3 -3
  55. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.js +2 -2
  56. package/dist/cjs/test/unit/transaction/fixedScript/replayProtection.d.ts +2 -0
  57. package/dist/cjs/test/unit/transaction/fixedScript/replayProtection.d.ts.map +1 -0
  58. package/dist/cjs/test/unit/transaction/fixedScript/replayProtection.js +59 -0
  59. package/dist/cjs/test/unit/transaction/fixedScript/signPsbt.d.ts +2 -0
  60. package/dist/cjs/test/unit/transaction/fixedScript/signPsbt.d.ts.map +1 -0
  61. package/dist/cjs/test/unit/transaction/fixedScript/signPsbt.js +157 -0
  62. package/dist/cjs/test/unit/transaction/fixedScript/util.d.ts.map +1 -1
  63. package/dist/cjs/test/unit/transaction/fixedScript/util.js +2 -1
  64. package/dist/cjs/test/unit/transaction.js +65 -42
  65. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  66. package/dist/esm/abstractUtxoCoin.d.ts +21 -5
  67. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
  68. package/dist/esm/abstractUtxoCoin.js +53 -27
  69. package/dist/esm/index.d.ts +2 -2
  70. package/dist/esm/index.d.ts.map +1 -1
  71. package/dist/esm/index.js +3 -3
  72. package/dist/esm/recovery/backupKeyRecovery.js +2 -2
  73. package/dist/esm/recovery/crossChainRecovery.d.ts +10 -0
  74. package/dist/esm/recovery/crossChainRecovery.d.ts.map +1 -1
  75. package/dist/esm/recovery/crossChainRecovery.js +46 -3
  76. package/dist/esm/transaction/decode.d.ts +11 -0
  77. package/dist/esm/transaction/decode.d.ts.map +1 -0
  78. package/dist/esm/transaction/decode.js +43 -0
  79. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  80. package/dist/esm/transaction/descriptor/verifyTransaction.js +3 -2
  81. package/dist/esm/transaction/explainTransaction.js +3 -3
  82. package/dist/esm/transaction/fixedScript/SigningError.d.ts +24 -0
  83. package/dist/esm/transaction/fixedScript/SigningError.d.ts.map +1 -0
  84. package/dist/esm/transaction/fixedScript/SigningError.js +21 -0
  85. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts +1 -1
  86. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -1
  87. package/dist/esm/transaction/fixedScript/explainPsbtWasm.js +1 -1
  88. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
  89. package/dist/esm/transaction/fixedScript/explainTransaction.js +2 -2
  90. package/dist/esm/transaction/fixedScript/index.d.ts +3 -0
  91. package/dist/esm/transaction/fixedScript/index.d.ts.map +1 -1
  92. package/dist/esm/transaction/fixedScript/index.js +4 -1
  93. package/dist/esm/transaction/fixedScript/musig2.d.ts +4 -0
  94. package/dist/esm/transaction/fixedScript/musig2.d.ts.map +1 -0
  95. package/dist/esm/transaction/fixedScript/musig2.js +2 -0
  96. package/dist/esm/transaction/fixedScript/replayProtection.d.ts +7 -0
  97. package/dist/esm/transaction/fixedScript/replayProtection.d.ts.map +1 -0
  98. package/dist/esm/transaction/fixedScript/replayProtection.js +39 -0
  99. package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts +30 -0
  100. package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -0
  101. package/dist/esm/transaction/fixedScript/signLegacyTransaction.js +112 -0
  102. package/dist/esm/transaction/fixedScript/signPsbt.d.ts +30 -0
  103. package/dist/esm/transaction/fixedScript/signPsbt.d.ts.map +1 -0
  104. package/dist/esm/transaction/fixedScript/signPsbt.js +134 -0
  105. package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts +22 -0
  106. package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -0
  107. package/dist/esm/transaction/fixedScript/signPsbtWasm.js +122 -0
  108. package/dist/esm/transaction/fixedScript/signTransaction.d.ts +5 -6
  109. package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  110. package/dist/esm/transaction/fixedScript/signTransaction.js +28 -79
  111. package/dist/esm/transaction/fixedScript/verifyTransaction.d.ts.map +1 -1
  112. package/dist/esm/transaction/fixedScript/verifyTransaction.js +3 -2
  113. package/dist/esm/transaction/signTransaction.d.ts.map +1 -1
  114. package/dist/esm/transaction/signTransaction.js +5 -2
  115. package/dist/esm/transaction/types.d.ts +5 -0
  116. package/dist/esm/transaction/types.d.ts.map +1 -1
  117. package/dist/esm/transaction/types.js +4 -2
  118. package/package.json +13 -13
  119. package/dist/cjs/src/replayProtection.d.ts +0 -5
  120. package/dist/cjs/src/replayProtection.d.ts.map +0 -1
  121. package/dist/cjs/src/replayProtection.js +0 -58
  122. package/dist/cjs/src/sign.d.ts +0 -54
  123. package/dist/cjs/src/sign.d.ts.map +0 -1
  124. package/dist/cjs/src/sign.js +0 -205
  125. package/dist/esm/replayProtection.d.ts +0 -5
  126. package/dist/esm/replayProtection.d.ts.map +0 -1
  127. package/dist/esm/replayProtection.js +0 -20
  128. package/dist/esm/sign.d.ts +0 -54
  129. package/dist/esm/sign.d.ts.map +0 -1
  130. package/dist/esm/sign.js +0 -162
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replayProtection.d.ts","sourceRoot":"","sources":["../../../../../src/transaction/fixedScript/replayProtection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAGhD,eAAO,MAAM,UAAU,qBAA2F,CAAC;AAEnH,eAAO,MAAM,aAAa,qBAA2F,CAAC;AAEtH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,MAAM,EAAE,CAU7E;AAWD,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,MAAM,GAAE,SAAS,GAAG,UAAsB,GACzC,MAAM,EAAE,CAWV;AAED,wBAAgB,yBAAyB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACvE,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EACjC,OAAO,EAAE,OAAO,CAAC,OAAO,GACvB,OAAO,CAET"}
@@ -0,0 +1,78 @@
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.pubkeyTestnet = exports.pubkeyProd = void 0;
37
+ exports.getReplayProtectionPubkeys = getReplayProtectionPubkeys;
38
+ exports.getReplayProtectionAddresses = getReplayProtectionAddresses;
39
+ exports.isReplayProtectionUnspent = isReplayProtectionUnspent;
40
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
41
+ const wasm_utxo_1 = require("@bitgo/wasm-utxo");
42
+ exports.pubkeyProd = Buffer.from('0255b9f71ac2c78fffd83e3e37b9e17ae70d5437b7f56d0ed2e93b7de08015aa59', 'hex');
43
+ exports.pubkeyTestnet = Buffer.from('0219da48412c2268865fe8c126327d1b12eee350a3b69eb09e3323cc9a11828945', 'hex');
44
+ function getReplayProtectionPubkeys(network) {
45
+ switch (network) {
46
+ case utxolib.networks.bitcoincash:
47
+ case utxolib.networks.bitcoinsv:
48
+ return [exports.pubkeyProd];
49
+ case utxolib.networks.bitcoinsvTestnet:
50
+ case utxolib.networks.bitcoincashTestnet:
51
+ return [exports.pubkeyTestnet];
52
+ }
53
+ return [];
54
+ }
55
+ // sh(pk(pubkeyProd))
56
+ // 33p1q7mTGyeM5UnZERGiMcVUkY12SCsatA
57
+ // bitcoincash:pqt5x9w0m6z0f3znjkkx79wl3l7ywrszesemp8xgpf
58
+ const replayProtectionScriptsProd = [Buffer.from('a914174315cfde84f4c45395ac6f15df8ffc470e02cc87', 'hex')];
59
+ // sh(pk(pubkeyTestnet))
60
+ // 2MuMnPoSDgWEpNWH28X2nLtYMXQJCyT61eY
61
+ // bchtest:pqtjmnzwqffkrk2349g3cecfwwjwxusvnq87n07cal
62
+ const replayProtectionScriptsTestnet = [Buffer.from('a914172dcc4e025361d951a9511c670973a4e3720c9887', 'hex')];
63
+ function getReplayProtectionAddresses(network, format = 'default') {
64
+ switch (network) {
65
+ case utxolib.networks.bitcoincash:
66
+ case utxolib.networks.bitcoinsv:
67
+ return replayProtectionScriptsProd.map((script) => wasm_utxo_1.utxolibCompat.fromOutputScript(script, network, format));
68
+ case utxolib.networks.bitcoinsvTestnet:
69
+ case utxolib.networks.bitcoincashTestnet:
70
+ return replayProtectionScriptsTestnet.map((script) => wasm_utxo_1.utxolibCompat.fromOutputScript(script, network, format));
71
+ default:
72
+ return [];
73
+ }
74
+ }
75
+ function isReplayProtectionUnspent(u, network) {
76
+ return getReplayProtectionAddresses(network).includes(u.address);
77
+ }
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGF5UHJvdGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9yZXBsYXlQcm90ZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU9BLGdFQVVDO0FBV0Qsb0VBY0M7QUFFRCw4REFLQztBQWpERCw4REFBZ0Q7QUFDaEQsZ0RBQWlEO0FBRXBDLFFBQUEsVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0VBQW9FLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFFdEcsUUFBQSxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxvRUFBb0UsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUV0SCxTQUFnQiwwQkFBMEIsQ0FBQyxPQUF3QjtJQUNqRSxRQUFRLE9BQU8sRUFBRSxDQUFDO1FBQ2hCLEtBQUssT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7UUFDbEMsS0FBSyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVM7WUFDN0IsT0FBTyxDQUFDLGtCQUFVLENBQUMsQ0FBQztRQUN0QixLQUFLLE9BQU8sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7UUFDdkMsS0FBSyxPQUFPLENBQUMsUUFBUSxDQUFDLGtCQUFrQjtZQUN0QyxPQUFPLENBQUMscUJBQWEsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFDRCxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFFRCxxQkFBcUI7QUFDckIscUNBQXFDO0FBQ3JDLHlEQUF5RDtBQUN6RCxNQUFNLDJCQUEyQixHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnREFBZ0QsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzNHLHdCQUF3QjtBQUN4QixzQ0FBc0M7QUFDdEMscURBQXFEO0FBQ3JELE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdEQUFnRCxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFFOUcsU0FBZ0IsNEJBQTRCLENBQzFDLE9BQXdCLEVBQ3hCLFNBQWlDLFNBQVM7SUFFMUMsUUFBUSxPQUFPLEVBQUUsQ0FBQztRQUNoQixLQUFLLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQ2xDLEtBQUssT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTO1lBQzdCLE9BQU8sMkJBQTJCLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyx5QkFBYSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM5RyxLQUFLLE9BQU8sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7UUFDdkMsS0FBSyxPQUFPLENBQUMsUUFBUSxDQUFDLGtCQUFrQjtZQUN0QyxPQUFPLDhCQUE4QixDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMseUJBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDakg7WUFDRSxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBZ0IseUJBQXlCLENBQ3ZDLENBQWlDLEVBQ2pDLE9BQXdCO0lBRXhCLE9BQU8sNEJBQTRCLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNuRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyB1dHhvbGliQ29tcGF0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbmV4cG9ydCBjb25zdCBwdWJrZXlQcm9kID0gQnVmZmVyLmZyb20oJzAyNTViOWY3MWFjMmM3OGZmZmQ4M2UzZTM3YjllMTdhZTcwZDU0MzdiN2Y1NmQwZWQyZTkzYjdkZTA4MDE1YWE1OScsICdoZXgnKTtcblxuZXhwb3J0IGNvbnN0IHB1YmtleVRlc3RuZXQgPSBCdWZmZXIuZnJvbSgnMDIxOWRhNDg0MTJjMjI2ODg2NWZlOGMxMjYzMjdkMWIxMmVlZTM1MGEzYjY5ZWIwOWUzMzIzY2M5YTExODI4OTQ1JywgJ2hleCcpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmtleXMobmV0d29yazogdXR4b2xpYi5OZXR3b3JrKTogQnVmZmVyW10ge1xuICBzd2l0Y2ggKG5ldHdvcmspIHtcbiAgICBjYXNlIHV0eG9saWIubmV0d29ya3MuYml0Y29pbmNhc2g6XG4gICAgY2FzZSB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW5zdjpcbiAgICAgIHJldHVybiBbcHVia2V5UHJvZF07XG4gICAgY2FzZSB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW5zdlRlc3RuZXQ6XG4gICAgY2FzZSB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW5jYXNoVGVzdG5ldDpcbiAgICAgIHJldHVybiBbcHVia2V5VGVzdG5ldF07XG4gIH1cbiAgcmV0dXJuIFtdO1xufVxuXG4vLyBzaChwayhwdWJrZXlQcm9kKSlcbi8vIDMzcDFxN21UR3llTTVVblpFUkdpTWNWVWtZMTJTQ3NhdEFcbi8vIGJpdGNvaW5jYXNoOnBxdDV4OXcwbTZ6MGYzem5qa2t4Nzl3bDNsN3l3cnN6ZXNlbXA4eGdwZlxuY29uc3QgcmVwbGF5UHJvdGVjdGlvblNjcmlwdHNQcm9kID0gW0J1ZmZlci5mcm9tKCdhOTE0MTc0MzE1Y2ZkZTg0ZjRjNDUzOTVhYzZmMTVkZjhmZmM0NzBlMDJjYzg3JywgJ2hleCcpXTtcbi8vIHNoKHBrKHB1YmtleVRlc3RuZXQpKVxuLy8gMk11TW5Qb1NEZ1dFcE5XSDI4WDJuTHRZTVhRSkN5VDYxZVlcbi8vIGJjaHRlc3Q6cHF0am1uendxZmZrcmsyMzQ5ZzNjZWNmd3dqd3h1c3ZucTg3bjA3Y2FsXG5jb25zdCByZXBsYXlQcm90ZWN0aW9uU2NyaXB0c1Rlc3RuZXQgPSBbQnVmZmVyLmZyb20oJ2E5MTQxNzJkY2M0ZTAyNTM2MWQ5NTFhOTUxMWM2NzA5NzNhNGUzNzIwYzk4ODcnLCAnaGV4JyldO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVwbGF5UHJvdGVjdGlvbkFkZHJlc3NlcyhcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrLFxuICBmb3JtYXQ6ICdkZWZhdWx0JyB8ICdjYXNoYWRkcicgPSAnZGVmYXVsdCdcbik6IHN0cmluZ1tdIHtcbiAgc3dpdGNoIChuZXR3b3JrKSB7XG4gICAgY2FzZSB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW5jYXNoOlxuICAgIGNhc2UgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luc3Y6XG4gICAgICByZXR1cm4gcmVwbGF5UHJvdGVjdGlvblNjcmlwdHNQcm9kLm1hcCgoc2NyaXB0KSA9PiB1dHhvbGliQ29tcGF0LmZyb21PdXRwdXRTY3JpcHQoc2NyaXB0LCBuZXR3b3JrLCBmb3JtYXQpKTtcbiAgICBjYXNlIHV0eG9saWIubmV0d29ya3MuYml0Y29pbnN2VGVzdG5ldDpcbiAgICBjYXNlIHV0eG9saWIubmV0d29ya3MuYml0Y29pbmNhc2hUZXN0bmV0OlxuICAgICAgcmV0dXJuIHJlcGxheVByb3RlY3Rpb25TY3JpcHRzVGVzdG5ldC5tYXAoKHNjcmlwdCkgPT4gdXR4b2xpYkNvbXBhdC5mcm9tT3V0cHV0U2NyaXB0KHNjcmlwdCwgbmV0d29yaywgZm9ybWF0KSk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZXBsYXlQcm90ZWN0aW9uVW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdTogdXR4b2xpYi5iaXRnby5VbnNwZW50PFROdW1iZXI+LFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmtcbik6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2V0UmVwbGF5UHJvdGVjdGlvbkFkZHJlc3NlcyhuZXR3b3JrKS5pbmNsdWRlcyh1LmFkZHJlc3MpO1xufVxuIl19
@@ -0,0 +1,30 @@
1
+ import * as utxolib from '@bitgo-beta/utxo-lib';
2
+ import { BIP32Interface } from '@bitgo-beta/secp256k1';
3
+ type Unspent<TNumber extends number | bigint = number> = utxolib.bitgo.Unspent<TNumber>;
4
+ type RootWalletKeys = utxolib.bitgo.RootWalletKeys;
5
+ /**
6
+ * Sign all inputs of a wallet transaction and verify signatures after signing.
7
+ * Collects and logs signing errors and verification errors, throws error in the end if any of them
8
+ * failed.
9
+ *
10
+ * @param transaction - wallet transaction (builder) to be signed
11
+ * @param unspents - transaction unspents
12
+ * @param walletSigner - signing parameters
13
+ * @param isLastSignature - Returns full-signed transaction when true. Builds half-signed when false.
14
+ * @param replayProtectionAddresses - List of replay protection addresses to skip signing
15
+ */
16
+ export declare function signAndVerifyWalletTransaction<TNumber extends number | bigint>(transaction: utxolib.bitgo.UtxoTransaction<TNumber> | utxolib.bitgo.UtxoTransactionBuilder<TNumber>, unspents: Unspent<TNumber>[], walletSigner: utxolib.bitgo.WalletUnspentSigner<RootWalletKeys>, { isLastSignature, replayProtectionAddresses, }: {
17
+ isLastSignature: boolean;
18
+ replayProtectionAddresses?: string[];
19
+ }): utxolib.bitgo.UtxoTransaction<TNumber>;
20
+ export declare function signLegacyTransaction<TNumber extends number | bigint>(tx: utxolib.bitgo.UtxoTransaction<TNumber>, signerKeychain: BIP32Interface | undefined, params: {
21
+ isLastSignature: boolean;
22
+ signingStep: 'signerNonce' | 'cosignerNonce' | 'signerSignature' | undefined;
23
+ txInfo: {
24
+ unspents?: utxolib.bitgo.Unspent<TNumber>[];
25
+ } | undefined;
26
+ pubs: string[] | undefined;
27
+ cosignerPub: string | undefined;
28
+ }): utxolib.bitgo.UtxoTransaction<TNumber>;
29
+ export {};
30
+ //# sourceMappingURL=signLegacyTransaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signLegacyTransaction.d.ts","sourceRoot":"","sources":["../../../../../src/transaction/fixedScript/signLegacyTransaction.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAS,MAAM,uBAAuB,CAAC;AAY9D,KAAK,OAAO,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAExF,KAAK,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC;AAEnD;;;;;;;;;;GAUG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC5E,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,OAAO,CAAC,EACnG,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,EAC5B,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,cAAc,CAAC,EAC/D,EACE,eAAe,EACf,yBAAyB,GAC1B,EAAE;IACD,eAAe,EAAE,OAAO,CAAC;IACzB,yBAAyB,CAAC,EAAE,MAAM,EAAE,CAAC;CACtC,GACA,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAwExC;AAED,wBAAgB,qBAAqB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACnE,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,EAC1C,cAAc,EAAE,cAAc,GAAG,SAAS,EAC1C,MAAM,EAAE;IACN,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,aAAa,GAAG,eAAe,GAAG,iBAAiB,GAAG,SAAS,CAAC;IAC7E,MAAM,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAA;KAAE,GAAG,SAAS,CAAC;IACpE,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC,GACA,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CA4BxC"}
@@ -0,0 +1,152 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.signAndVerifyWalletTransaction = signAndVerifyWalletTransaction;
40
+ exports.signLegacyTransaction = signLegacyTransaction;
41
+ const assert_1 = __importDefault(require("assert"));
42
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
43
+ const secp256k1_1 = require("@bitgo-beta/secp256k1");
44
+ const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
45
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
46
+ const debug_1 = __importDefault(require("debug"));
47
+ const replayProtection_1 = require("./replayProtection");
48
+ const SigningError_1 = require("./SigningError");
49
+ const debug = (0, debug_1.default)('bitgo:v2:utxo');
50
+ const { isWalletUnspent, signInputWithUnspent, toOutput } = utxolib.bitgo;
51
+ /**
52
+ * Sign all inputs of a wallet transaction and verify signatures after signing.
53
+ * Collects and logs signing errors and verification errors, throws error in the end if any of them
54
+ * failed.
55
+ *
56
+ * @param transaction - wallet transaction (builder) to be signed
57
+ * @param unspents - transaction unspents
58
+ * @param walletSigner - signing parameters
59
+ * @param isLastSignature - Returns full-signed transaction when true. Builds half-signed when false.
60
+ * @param replayProtectionAddresses - List of replay protection addresses to skip signing
61
+ */
62
+ function signAndVerifyWalletTransaction(transaction, unspents, walletSigner, { isLastSignature, replayProtectionAddresses, }) {
63
+ const network = transaction.network;
64
+ if (replayProtectionAddresses === undefined) {
65
+ replayProtectionAddresses = (0, replayProtection_1.getReplayProtectionAddresses)(network);
66
+ }
67
+ const prevOutputs = unspents.map((u) => toOutput(u, network));
68
+ let txBuilder;
69
+ if (transaction instanceof utxolib.bitgo.UtxoTransaction) {
70
+ txBuilder = utxolib.bitgo.createTransactionBuilderFromTransaction(transaction, prevOutputs);
71
+ if (transaction.ins.length !== unspents.length) {
72
+ throw new Error(`transaction inputs must match unspents`);
73
+ }
74
+ }
75
+ else if (transaction instanceof utxolib.bitgo.UtxoTransactionBuilder) {
76
+ txBuilder = transaction;
77
+ }
78
+ else {
79
+ throw new Error(`must pass UtxoTransaction or UtxoTransactionBuilder`);
80
+ }
81
+ const signErrors = unspents
82
+ .map((unspent, inputIndex) => {
83
+ if (replayProtectionAddresses.includes(unspent.address)) {
84
+ debug('Skipping signature for input %d of %d (RP input?)', inputIndex + 1, unspents.length);
85
+ return;
86
+ }
87
+ if (!isWalletUnspent(unspent)) {
88
+ return SigningError_1.InputSigningError.expectedWalletUnspent(inputIndex, null, unspent);
89
+ }
90
+ try {
91
+ signInputWithUnspent(txBuilder, inputIndex, unspent, walletSigner);
92
+ debug('Successfully signed input %d of %d', inputIndex + 1, unspents.length);
93
+ }
94
+ catch (e) {
95
+ return new SigningError_1.InputSigningError(inputIndex, null, unspent, e);
96
+ }
97
+ })
98
+ .filter((e) => e !== undefined);
99
+ const signedTransaction = isLastSignature ? txBuilder.build() : txBuilder.buildIncomplete();
100
+ const verifyErrors = signedTransaction.ins
101
+ .map((input, inputIndex) => {
102
+ const unspent = unspents[inputIndex];
103
+ if (replayProtectionAddresses.includes(unspent.address)) {
104
+ debug('Skipping input signature %d of %d (unspent from replay protection address which is platform signed only)', inputIndex + 1, unspents.length);
105
+ return;
106
+ }
107
+ if (!isWalletUnspent(unspent)) {
108
+ return SigningError_1.InputSigningError.expectedWalletUnspent(inputIndex, null, unspent);
109
+ }
110
+ try {
111
+ const publicKey = walletSigner.deriveForChainAndIndex(unspent.chain, unspent.index).signer.publicKey;
112
+ if (!utxolib.bitgo.verifySignatureWithPublicKey(signedTransaction, inputIndex, prevOutputs, publicKey)) {
113
+ return new SigningError_1.InputSigningError(inputIndex, null, unspent, new Error(`invalid signature`));
114
+ }
115
+ }
116
+ catch (e) {
117
+ debug('Invalid signature');
118
+ return new SigningError_1.InputSigningError(inputIndex, null, unspent, e);
119
+ }
120
+ })
121
+ .filter((e) => e !== undefined);
122
+ if (signErrors.length || verifyErrors.length) {
123
+ throw new SigningError_1.TransactionSigningError(signErrors, verifyErrors);
124
+ }
125
+ return signedTransaction;
126
+ }
127
+ function signLegacyTransaction(tx, signerKeychain, params) {
128
+ switch (params.signingStep) {
129
+ case 'signerNonce':
130
+ case 'cosignerNonce':
131
+ /**
132
+ * In certain cases, the caller of this method may not know whether the txHex contains a psbt with taproot key path spend input(s).
133
+ * Instead of throwing error, no-op and return the txHex. So that the caller can call this method in the same sequence.
134
+ */
135
+ return tx;
136
+ }
137
+ if (tx.ins.length !== params.txInfo?.unspents?.length) {
138
+ throw new Error('length of unspents array should equal to the number of transaction inputs');
139
+ }
140
+ if (!params.pubs || !(0, sdk_core_1.isTriple)(params.pubs)) {
141
+ throw new Error(`must provide xpub array`);
142
+ }
143
+ const keychains = params.pubs.map((pub) => secp256k1_1.bip32.fromBase58(pub));
144
+ const cosignerPub = params.cosignerPub ?? params.pubs[2];
145
+ const cosignerKeychain = secp256k1_1.bip32.fromBase58(cosignerPub);
146
+ (0, assert_1.default)(signerKeychain);
147
+ const walletSigner = new utxo_lib_1.bitgo.WalletUnspentSigner(keychains, signerKeychain, cosignerKeychain);
148
+ return signAndVerifyWalletTransaction(tx, params.txInfo.unspents, walletSigner, {
149
+ isLastSignature: params.isLastSignature,
150
+ });
151
+ }
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbkxlZ2FjeVRyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L3NpZ25MZWdhY3lUcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQThCQSx3RUFtRkM7QUFFRCxzREFzQ0M7QUF6SkQsb0RBQTRCO0FBRTVCLDhEQUFnRDtBQUNoRCxxREFBOEQ7QUFDOUQsbURBQTZDO0FBQzdDLG1EQUF3RDtBQUN4RCxrREFBNkI7QUFFN0IseURBQWtFO0FBQ2xFLGlEQUE0RTtBQUU1RSxNQUFNLEtBQUssR0FBRyxJQUFBLGVBQVEsRUFBQyxlQUFlLENBQUMsQ0FBQztBQUV4QyxNQUFNLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFNMUU7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLDhCQUE4QixDQUM1QyxXQUFtRyxFQUNuRyxRQUE0QixFQUM1QixZQUErRCxFQUMvRCxFQUNFLGVBQWUsRUFDZix5QkFBeUIsR0FJMUI7SUFFRCxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBMEIsQ0FBQztJQUN2RCxJQUFJLHlCQUF5QixLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzVDLHlCQUF5QixHQUFHLElBQUEsK0NBQTRCLEVBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUNELE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUU5RCxJQUFJLFNBQXdELENBQUM7SUFDN0QsSUFBSSxXQUFXLFlBQVksT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN6RCxTQUFTLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBVSxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDckcsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDL0MsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBQzVELENBQUM7SUFDSCxDQUFDO1NBQU0sSUFBSSxXQUFXLFlBQVksT0FBTyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ3ZFLFNBQVMsR0FBRyxXQUFXLENBQUM7SUFDMUIsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFpQyxRQUFRO1NBQ3RELEdBQUcsQ0FBQyxDQUFDLE9BQXlCLEVBQUUsVUFBa0IsRUFBRSxFQUFFO1FBQ3JELElBQUkseUJBQXlCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3hELEtBQUssQ0FBQyxtREFBbUQsRUFBRSxVQUFVLEdBQUcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1RixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxlQUFlLENBQVUsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN2QyxPQUFPLGdDQUFpQixDQUFDLHFCQUFxQixDQUFVLFVBQVUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDckYsQ0FBQztRQUNELElBQUksQ0FBQztZQUNILG9CQUFvQixDQUFVLFNBQVMsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzVFLEtBQUssQ0FBQyxvQ0FBb0MsRUFBRSxVQUFVLEdBQUcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvRSxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sSUFBSSxnQ0FBaUIsQ0FBVSxVQUFVLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0RSxDQUFDO0lBQ0gsQ0FBQyxDQUFDO1NBQ0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFtQyxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBRW5FLE1BQU0saUJBQWlCLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUU1RixNQUFNLFlBQVksR0FBaUMsaUJBQWlCLENBQUMsR0FBRztTQUNyRSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUU7UUFDekIsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBcUIsQ0FBQztRQUN6RCxJQUFJLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN4RCxLQUFLLENBQ0gsMEdBQTBHLEVBQzFHLFVBQVUsR0FBRyxDQUFDLEVBQ2QsUUFBUSxDQUFDLE1BQU0sQ0FDaEIsQ0FBQztZQUNGLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBVSxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sZ0NBQWlCLENBQUMscUJBQXFCLENBQVUsVUFBVSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNyRixDQUFDO1FBQ0QsSUFBSSxDQUFDO1lBQ0gsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFDckcsSUFDRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQVUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFDM0csQ0FBQztnQkFDRCxPQUFPLElBQUksZ0NBQWlCLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1lBQzFGLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQzNCLE9BQU8sSUFBSSxnQ0FBaUIsQ0FBVSxVQUFVLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0RSxDQUFDO0lBQ0gsQ0FBQyxDQUFDO1NBQ0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFtQyxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBRW5FLElBQUksVUFBVSxDQUFDLE1BQU0sSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDN0MsTUFBTSxJQUFJLHNDQUF1QixDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsT0FBTyxpQkFBaUIsQ0FBQztBQUMzQixDQUFDO0FBRUQsU0FBZ0IscUJBQXFCLENBQ25DLEVBQTBDLEVBQzFDLGNBQTBDLEVBQzFDLE1BTUM7SUFFRCxRQUFRLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMzQixLQUFLLGFBQWEsQ0FBQztRQUNuQixLQUFLLGVBQWU7WUFDbEI7OztlQUdHO1lBQ0gsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUN0RCxNQUFNLElBQUksS0FBSyxDQUFDLDJFQUEyRSxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUVELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBQSxtQkFBUSxFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzNDLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGlCQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUEyQixDQUFDO0lBQzVGLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RCxNQUFNLGdCQUFnQixHQUFHLGlCQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRXZELElBQUEsZ0JBQU0sRUFBQyxjQUFjLENBQUMsQ0FBQztJQUN2QixNQUFNLFlBQVksR0FBRyxJQUFJLGdCQUFLLENBQUMsbUJBQW1CLENBQWlCLFNBQVMsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUNoSCxPQUFPLDhCQUE4QixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUU7UUFDOUUsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlO0tBQ3hDLENBQTJDLENBQUM7QUFDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyBCSVAzMkludGVyZmFjZSwgYmlwMzIgfSBmcm9tICdAYml0Z28tYmV0YS9zZWNwMjU2azEnO1xuaW1wb3J0IHsgYml0Z28gfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyBpc1RyaXBsZSwgVHJpcGxlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IGRlYnVnTGliIGZyb20gJ2RlYnVnJztcblxuaW1wb3J0IHsgZ2V0UmVwbGF5UHJvdGVjdGlvbkFkZHJlc3NlcyB9IGZyb20gJy4vcmVwbGF5UHJvdGVjdGlvbic7XG5pbXBvcnQgeyBJbnB1dFNpZ25pbmdFcnJvciwgVHJhbnNhY3Rpb25TaWduaW5nRXJyb3IgfSBmcm9tICcuL1NpZ25pbmdFcnJvcic7XG5cbmNvbnN0IGRlYnVnID0gZGVidWdMaWIoJ2JpdGdvOnYyOnV0eG8nKTtcblxuY29uc3QgeyBpc1dhbGxldFVuc3BlbnQsIHNpZ25JbnB1dFdpdGhVbnNwZW50LCB0b091dHB1dCB9ID0gdXR4b2xpYi5iaXRnbztcblxudHlwZSBVbnNwZW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+ID0gdXR4b2xpYi5iaXRnby5VbnNwZW50PFROdW1iZXI+O1xuXG50eXBlIFJvb3RXYWxsZXRLZXlzID0gdXR4b2xpYi5iaXRnby5Sb290V2FsbGV0S2V5cztcblxuLyoqXG4gKiBTaWduIGFsbCBpbnB1dHMgb2YgYSB3YWxsZXQgdHJhbnNhY3Rpb24gYW5kIHZlcmlmeSBzaWduYXR1cmVzIGFmdGVyIHNpZ25pbmcuXG4gKiBDb2xsZWN0cyBhbmQgbG9ncyBzaWduaW5nIGVycm9ycyBhbmQgdmVyaWZpY2F0aW9uIGVycm9ycywgdGhyb3dzIGVycm9yIGluIHRoZSBlbmQgaWYgYW55IG9mIHRoZW1cbiAqIGZhaWxlZC5cbiAqXG4gKiBAcGFyYW0gdHJhbnNhY3Rpb24gLSB3YWxsZXQgdHJhbnNhY3Rpb24gKGJ1aWxkZXIpIHRvIGJlIHNpZ25lZFxuICogQHBhcmFtIHVuc3BlbnRzIC0gdHJhbnNhY3Rpb24gdW5zcGVudHNcbiAqIEBwYXJhbSB3YWxsZXRTaWduZXIgLSBzaWduaW5nIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBpc0xhc3RTaWduYXR1cmUgLSBSZXR1cm5zIGZ1bGwtc2lnbmVkIHRyYW5zYWN0aW9uIHdoZW4gdHJ1ZS4gQnVpbGRzIGhhbGYtc2lnbmVkIHdoZW4gZmFsc2UuXG4gKiBAcGFyYW0gcmVwbGF5UHJvdGVjdGlvbkFkZHJlc3NlcyAtIExpc3Qgb2YgcmVwbGF5IHByb3RlY3Rpb24gYWRkcmVzc2VzIHRvIHNraXAgc2lnbmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnbkFuZFZlcmlmeVdhbGxldFRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0cmFuc2FjdGlvbjogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4gfCB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbkJ1aWxkZXI8VE51bWJlcj4sXG4gIHVuc3BlbnRzOiBVbnNwZW50PFROdW1iZXI+W10sXG4gIHdhbGxldFNpZ25lcjogdXR4b2xpYi5iaXRnby5XYWxsZXRVbnNwZW50U2lnbmVyPFJvb3RXYWxsZXRLZXlzPixcbiAge1xuICAgIGlzTGFzdFNpZ25hdHVyZSxcbiAgICByZXBsYXlQcm90ZWN0aW9uQWRkcmVzc2VzLFxuICB9OiB7XG4gICAgaXNMYXN0U2lnbmF0dXJlOiBib29sZWFuO1xuICAgIHJlcGxheVByb3RlY3Rpb25BZGRyZXNzZXM/OiBzdHJpbmdbXTtcbiAgfVxuKTogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4ge1xuICBjb25zdCBuZXR3b3JrID0gdHJhbnNhY3Rpb24ubmV0d29yayBhcyB1dHhvbGliLk5ldHdvcms7XG4gIGlmIChyZXBsYXlQcm90ZWN0aW9uQWRkcmVzc2VzID09PSB1bmRlZmluZWQpIHtcbiAgICByZXBsYXlQcm90ZWN0aW9uQWRkcmVzc2VzID0gZ2V0UmVwbGF5UHJvdGVjdGlvbkFkZHJlc3NlcyhuZXR3b3JrKTtcbiAgfVxuICBjb25zdCBwcmV2T3V0cHV0cyA9IHVuc3BlbnRzLm1hcCgodSkgPT4gdG9PdXRwdXQodSwgbmV0d29yaykpO1xuXG4gIGxldCB0eEJ1aWxkZXI6IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uQnVpbGRlcjxUTnVtYmVyPjtcbiAgaWYgKHRyYW5zYWN0aW9uIGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb24pIHtcbiAgICB0eEJ1aWxkZXIgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVRyYW5zYWN0aW9uQnVpbGRlckZyb21UcmFuc2FjdGlvbjxUTnVtYmVyPih0cmFuc2FjdGlvbiwgcHJldk91dHB1dHMpO1xuICAgIGlmICh0cmFuc2FjdGlvbi5pbnMubGVuZ3RoICE9PSB1bnNwZW50cy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdHJhbnNhY3Rpb24gaW5wdXRzIG11c3QgbWF0Y2ggdW5zcGVudHNgKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHJhbnNhY3Rpb24gaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbkJ1aWxkZXIpIHtcbiAgICB0eEJ1aWxkZXIgPSB0cmFuc2FjdGlvbjtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG11c3QgcGFzcyBVdHhvVHJhbnNhY3Rpb24gb3IgVXR4b1RyYW5zYWN0aW9uQnVpbGRlcmApO1xuICB9XG5cbiAgY29uc3Qgc2lnbkVycm9yczogSW5wdXRTaWduaW5nRXJyb3I8VE51bWJlcj5bXSA9IHVuc3BlbnRzXG4gICAgLm1hcCgodW5zcGVudDogVW5zcGVudDxUTnVtYmVyPiwgaW5wdXRJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBpZiAocmVwbGF5UHJvdGVjdGlvbkFkZHJlc3Nlcy5pbmNsdWRlcyh1bnNwZW50LmFkZHJlc3MpKSB7XG4gICAgICAgIGRlYnVnKCdTa2lwcGluZyBzaWduYXR1cmUgZm9yIGlucHV0ICVkIG9mICVkIChSUCBpbnB1dD8pJywgaW5wdXRJbmRleCArIDEsIHVuc3BlbnRzLmxlbmd0aCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghaXNXYWxsZXRVbnNwZW50PFROdW1iZXI+KHVuc3BlbnQpKSB7XG4gICAgICAgIHJldHVybiBJbnB1dFNpZ25pbmdFcnJvci5leHBlY3RlZFdhbGxldFVuc3BlbnQ8VE51bWJlcj4oaW5wdXRJbmRleCwgbnVsbCwgdW5zcGVudCk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBzaWduSW5wdXRXaXRoVW5zcGVudDxUTnVtYmVyPih0eEJ1aWxkZXIsIGlucHV0SW5kZXgsIHVuc3BlbnQsIHdhbGxldFNpZ25lcik7XG4gICAgICAgIGRlYnVnKCdTdWNjZXNzZnVsbHkgc2lnbmVkIGlucHV0ICVkIG9mICVkJywgaW5wdXRJbmRleCArIDEsIHVuc3BlbnRzLmxlbmd0aCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBuZXcgSW5wdXRTaWduaW5nRXJyb3I8VE51bWJlcj4oaW5wdXRJbmRleCwgbnVsbCwgdW5zcGVudCwgZSk7XG4gICAgICB9XG4gICAgfSlcbiAgICAuZmlsdGVyKChlKTogZSBpcyBJbnB1dFNpZ25pbmdFcnJvcjxUTnVtYmVyPiA9PiBlICE9PSB1bmRlZmluZWQpO1xuXG4gIGNvbnN0IHNpZ25lZFRyYW5zYWN0aW9uID0gaXNMYXN0U2lnbmF0dXJlID8gdHhCdWlsZGVyLmJ1aWxkKCkgOiB0eEJ1aWxkZXIuYnVpbGRJbmNvbXBsZXRlKCk7XG5cbiAgY29uc3QgdmVyaWZ5RXJyb3JzOiBJbnB1dFNpZ25pbmdFcnJvcjxUTnVtYmVyPltdID0gc2lnbmVkVHJhbnNhY3Rpb24uaW5zXG4gICAgLm1hcCgoaW5wdXQsIGlucHV0SW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHVuc3BlbnQgPSB1bnNwZW50c1tpbnB1dEluZGV4XSBhcyBVbnNwZW50PFROdW1iZXI+O1xuICAgICAgaWYgKHJlcGxheVByb3RlY3Rpb25BZGRyZXNzZXMuaW5jbHVkZXModW5zcGVudC5hZGRyZXNzKSkge1xuICAgICAgICBkZWJ1ZyhcbiAgICAgICAgICAnU2tpcHBpbmcgaW5wdXQgc2lnbmF0dXJlICVkIG9mICVkICh1bnNwZW50IGZyb20gcmVwbGF5IHByb3RlY3Rpb24gYWRkcmVzcyB3aGljaCBpcyBwbGF0Zm9ybSBzaWduZWQgb25seSknLFxuICAgICAgICAgIGlucHV0SW5kZXggKyAxLFxuICAgICAgICAgIHVuc3BlbnRzLmxlbmd0aFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIWlzV2FsbGV0VW5zcGVudDxUTnVtYmVyPih1bnNwZW50KSkge1xuICAgICAgICByZXR1cm4gSW5wdXRTaWduaW5nRXJyb3IuZXhwZWN0ZWRXYWxsZXRVbnNwZW50PFROdW1iZXI+KGlucHV0SW5kZXgsIG51bGwsIHVuc3BlbnQpO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcHVibGljS2V5ID0gd2FsbGV0U2lnbmVyLmRlcml2ZUZvckNoYWluQW5kSW5kZXgodW5zcGVudC5jaGFpbiwgdW5zcGVudC5pbmRleCkuc2lnbmVyLnB1YmxpY0tleTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICF1dHhvbGliLmJpdGdvLnZlcmlmeVNpZ25hdHVyZVdpdGhQdWJsaWNLZXk8VE51bWJlcj4oc2lnbmVkVHJhbnNhY3Rpb24sIGlucHV0SW5kZXgsIHByZXZPdXRwdXRzLCBwdWJsaWNLZXkpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBuZXcgSW5wdXRTaWduaW5nRXJyb3IoaW5wdXRJbmRleCwgbnVsbCwgdW5zcGVudCwgbmV3IEVycm9yKGBpbnZhbGlkIHNpZ25hdHVyZWApKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBkZWJ1ZygnSW52YWxpZCBzaWduYXR1cmUnKTtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnB1dFNpZ25pbmdFcnJvcjxUTnVtYmVyPihpbnB1dEluZGV4LCBudWxsLCB1bnNwZW50LCBlKTtcbiAgICAgIH1cbiAgICB9KVxuICAgIC5maWx0ZXIoKGUpOiBlIGlzIElucHV0U2lnbmluZ0Vycm9yPFROdW1iZXI+ID0+IGUgIT09IHVuZGVmaW5lZCk7XG5cbiAgaWYgKHNpZ25FcnJvcnMubGVuZ3RoIHx8IHZlcmlmeUVycm9ycy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgVHJhbnNhY3Rpb25TaWduaW5nRXJyb3Ioc2lnbkVycm9ycywgdmVyaWZ5RXJyb3JzKTtcbiAgfVxuXG4gIHJldHVybiBzaWduZWRUcmFuc2FjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25MZWdhY3lUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHg6IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+LFxuICBzaWduZXJLZXljaGFpbjogQklQMzJJbnRlcmZhY2UgfCB1bmRlZmluZWQsXG4gIHBhcmFtczoge1xuICAgIGlzTGFzdFNpZ25hdHVyZTogYm9vbGVhbjtcbiAgICBzaWduaW5nU3RlcDogJ3NpZ25lck5vbmNlJyB8ICdjb3NpZ25lck5vbmNlJyB8ICdzaWduZXJTaWduYXR1cmUnIHwgdW5kZWZpbmVkO1xuICAgIHR4SW5mbzogeyB1bnNwZW50cz86IHV0eG9saWIuYml0Z28uVW5zcGVudDxUTnVtYmVyPltdIH0gfCB1bmRlZmluZWQ7XG4gICAgcHViczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gICAgY29zaWduZXJQdWI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgfVxuKTogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4ge1xuICBzd2l0Y2ggKHBhcmFtcy5zaWduaW5nU3RlcCkge1xuICAgIGNhc2UgJ3NpZ25lck5vbmNlJzpcbiAgICBjYXNlICdjb3NpZ25lck5vbmNlJzpcbiAgICAgIC8qKlxuICAgICAgICogSW4gY2VydGFpbiBjYXNlcywgdGhlIGNhbGxlciBvZiB0aGlzIG1ldGhvZCBtYXkgbm90IGtub3cgd2hldGhlciB0aGUgdHhIZXggY29udGFpbnMgYSBwc2J0IHdpdGggdGFwcm9vdCBrZXkgcGF0aCBzcGVuZCBpbnB1dChzKS5cbiAgICAgICAqIEluc3RlYWQgb2YgdGhyb3dpbmcgZXJyb3IsIG5vLW9wIGFuZCByZXR1cm4gdGhlIHR4SGV4LiBTbyB0aGF0IHRoZSBjYWxsZXIgY2FuIGNhbGwgdGhpcyBtZXRob2QgaW4gdGhlIHNhbWUgc2VxdWVuY2UuXG4gICAgICAgKi9cbiAgICAgIHJldHVybiB0eDtcbiAgfVxuXG4gIGlmICh0eC5pbnMubGVuZ3RoICE9PSBwYXJhbXMudHhJbmZvPy51bnNwZW50cz8ubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdsZW5ndGggb2YgdW5zcGVudHMgYXJyYXkgc2hvdWxkIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb24gaW5wdXRzJyk7XG4gIH1cblxuICBpZiAoIXBhcmFtcy5wdWJzIHx8ICFpc1RyaXBsZShwYXJhbXMucHVicykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG11c3QgcHJvdmlkZSB4cHViIGFycmF5YCk7XG4gIH1cblxuICBjb25zdCBrZXljaGFpbnMgPSBwYXJhbXMucHVicy5tYXAoKHB1YikgPT4gYmlwMzIuZnJvbUJhc2U1OChwdWIpKSBhcyBUcmlwbGU8QklQMzJJbnRlcmZhY2U+O1xuICBjb25zdCBjb3NpZ25lclB1YiA9IHBhcmFtcy5jb3NpZ25lclB1YiA/PyBwYXJhbXMucHVic1syXTtcbiAgY29uc3QgY29zaWduZXJLZXljaGFpbiA9IGJpcDMyLmZyb21CYXNlNTgoY29zaWduZXJQdWIpO1xuXG4gIGFzc2VydChzaWduZXJLZXljaGFpbik7XG4gIGNvbnN0IHdhbGxldFNpZ25lciA9IG5ldyBiaXRnby5XYWxsZXRVbnNwZW50U2lnbmVyPFJvb3RXYWxsZXRLZXlzPihrZXljaGFpbnMsIHNpZ25lcktleWNoYWluLCBjb3NpZ25lcktleWNoYWluKTtcbiAgcmV0dXJuIHNpZ25BbmRWZXJpZnlXYWxsZXRUcmFuc2FjdGlvbih0eCwgcGFyYW1zLnR4SW5mby51bnNwZW50cywgd2FsbGV0U2lnbmVyLCB7XG4gICAgaXNMYXN0U2lnbmF0dXJlOiBwYXJhbXMuaXNMYXN0U2lnbmF0dXJlLFxuICB9KSBhcyB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPjtcbn1cbiJdfQ==
@@ -0,0 +1,30 @@
1
+ import * as utxolib from '@bitgo-beta/utxo-lib';
2
+ import { BIP32Interface } from '@bitgo-beta/secp256k1';
3
+ import { Musig2Participant } from './musig2';
4
+ export type PsbtParsedScriptType = 'p2sh' | 'p2wsh' | 'p2shP2wsh' | 'p2shP2pk' | 'taprootKeyPathSpend' | 'taprootScriptPathSpend' | 'p2trLegacy' | 'p2trMusig2ScriptPath' | 'p2trMusig2KeyPath';
5
+ /**
6
+ * Sign all inputs of a psbt and verify signatures after signing.
7
+ * Collects and logs signing errors and verification errors, throws error in the end if any of them
8
+ * failed.
9
+ *
10
+ * If it is the last signature, finalize and extract the transaction from the psbt.
11
+ *
12
+ * This function mirrors signAndVerifyWalletTransaction, but is used for signing PSBTs instead of
13
+ * using TransactionBuilder
14
+ *
15
+ * @param psbt
16
+ * @param signerKeychain
17
+ * @param isLastSignature
18
+ */
19
+ export declare function signAndVerifyPsbt(psbt: utxolib.bitgo.UtxoPsbt, signerKeychain: utxolib.BIP32Interface, { isLastSignature,
20
+ /** deprecated */
21
+ allowNonSegwitSigningWithoutPrevTx, }: {
22
+ isLastSignature: boolean;
23
+ allowNonSegwitSigningWithoutPrevTx?: boolean;
24
+ }): utxolib.bitgo.UtxoPsbt | utxolib.bitgo.UtxoTransaction<bigint>;
25
+ export declare function signPsbtWithMusig2Participant(coin: Musig2Participant<utxolib.bitgo.UtxoPsbt>, tx: utxolib.bitgo.UtxoPsbt, signerKeychain: BIP32Interface | undefined, params: {
26
+ isLastSignature: boolean;
27
+ signingStep: 'signerNonce' | 'cosignerNonce' | 'signerSignature' | undefined;
28
+ walletId: string | undefined;
29
+ }): Promise<utxolib.bitgo.UtxoPsbt | utxolib.bitgo.UtxoTransaction<bigint>>;
30
+ //# sourceMappingURL=signPsbt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signPsbt.d.ts","sourceRoot":"","sources":["../../../../../src/transaction/fixedScript/signPsbt.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAKvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAI7C,MAAM,MAAM,oBAAoB,GAC5B,MAAM,GACN,OAAO,GACP,WAAW,GACX,UAAU,GACV,qBAAqB,GACrB,wBAAwB,GAExB,YAAY,GACZ,sBAAsB,GACtB,mBAAmB,CAAC;AAExB;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAC5B,cAAc,EAAE,OAAO,CAAC,cAAc,EACtC,EACE,eAAe;AACf,iBAAiB;AACjB,kCAAkC,GACnC,EAAE;IAAE,eAAe,EAAE,OAAO,CAAC;IAAC,kCAAkC,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5E,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CA6DhE;AAYD,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAC/C,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAC1B,cAAc,EAAE,cAAc,GAAG,SAAS,EAC1C,MAAM,EAAE;IACN,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,aAAa,GAAG,eAAe,GAAG,iBAAiB,GAAG,SAAS,CAAC;IAC7E,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B,GACA,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAsDzE"}
@@ -0,0 +1,174 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.signAndVerifyPsbt = signAndVerifyPsbt;
40
+ exports.signPsbtWithMusig2Participant = signPsbtWithMusig2Participant;
41
+ const assert_1 = __importDefault(require("assert"));
42
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
43
+ const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
44
+ const debug_1 = __importDefault(require("debug"));
45
+ const SigningError_1 = require("./SigningError");
46
+ const debug = (0, debug_1.default)('bitgo:v2:utxo');
47
+ /**
48
+ * Sign all inputs of a psbt and verify signatures after signing.
49
+ * Collects and logs signing errors and verification errors, throws error in the end if any of them
50
+ * failed.
51
+ *
52
+ * If it is the last signature, finalize and extract the transaction from the psbt.
53
+ *
54
+ * This function mirrors signAndVerifyWalletTransaction, but is used for signing PSBTs instead of
55
+ * using TransactionBuilder
56
+ *
57
+ * @param psbt
58
+ * @param signerKeychain
59
+ * @param isLastSignature
60
+ */
61
+ function signAndVerifyPsbt(psbt, signerKeychain, { isLastSignature,
62
+ /** deprecated */
63
+ allowNonSegwitSigningWithoutPrevTx, }) {
64
+ const txInputs = psbt.txInputs;
65
+ const outputIds = [];
66
+ const scriptTypes = [];
67
+ const signErrors = psbt.data.inputs
68
+ .map((input, inputIndex) => {
69
+ const outputId = utxolib.bitgo.formatOutputId(utxolib.bitgo.getOutputIdForInput(txInputs[inputIndex]));
70
+ outputIds.push(outputId);
71
+ const { scriptType } = utxolib.bitgo.parsePsbtInput(input);
72
+ scriptTypes.push(scriptType);
73
+ if (scriptType === 'p2shP2pk') {
74
+ debug('Skipping signature for input %d of %d (RP input?)', inputIndex + 1, psbt.data.inputs.length);
75
+ return;
76
+ }
77
+ try {
78
+ psbt.signInputHD(inputIndex, signerKeychain);
79
+ debug('Successfully signed input %d of %d', inputIndex + 1, psbt.data.inputs.length);
80
+ }
81
+ catch (e) {
82
+ return new SigningError_1.InputSigningError(inputIndex, scriptType, { id: outputId }, e);
83
+ }
84
+ })
85
+ .filter((e) => e !== undefined);
86
+ const verifyErrors = psbt.data.inputs
87
+ .map((input, inputIndex) => {
88
+ const scriptType = scriptTypes[inputIndex];
89
+ if (scriptType === 'p2shP2pk') {
90
+ debug('Skipping input signature %d of %d (unspent from replay protection address which is platform signed only)', inputIndex + 1, psbt.data.inputs.length);
91
+ return;
92
+ }
93
+ const outputId = outputIds[inputIndex];
94
+ try {
95
+ if (!psbt.validateSignaturesOfInputHD(inputIndex, signerKeychain)) {
96
+ return new SigningError_1.InputSigningError(inputIndex, scriptType, { id: outputId }, new Error(`invalid signature`));
97
+ }
98
+ }
99
+ catch (e) {
100
+ debug('Invalid signature');
101
+ return new SigningError_1.InputSigningError(inputIndex, scriptType, { id: outputId }, e);
102
+ }
103
+ })
104
+ .filter((e) => e !== undefined);
105
+ if (signErrors.length || verifyErrors.length) {
106
+ throw new SigningError_1.TransactionSigningError(signErrors, verifyErrors);
107
+ }
108
+ if (isLastSignature) {
109
+ psbt.finalizeAllInputs();
110
+ return psbt.extractTransaction();
111
+ }
112
+ return psbt;
113
+ }
114
+ /**
115
+ * Key Value: Unsigned tx id => PSBT
116
+ * It is used to cache PSBTs with taproot key path (MuSig2) inputs during external express signer is activated.
117
+ * Reason: MuSig2 signer secure nonce is cached in the UtxoPsbt object. It will be required during the signing step.
118
+ * For more info, check SignTransactionOptions.signingStep
119
+ *
120
+ * TODO BTC-276: This cache may need to be done with LRU like memory safe caching if memory issues comes up.
121
+ */
122
+ const PSBT_CACHE = new Map();
123
+ async function signPsbtWithMusig2Participant(coin, tx, signerKeychain, params) {
124
+ if (utxo_lib_1.bitgo.isTransactionWithKeyPathSpendInput(tx)) {
125
+ // We can only be the first signature on a transaction with taproot key path spend inputs because
126
+ // we require the secret nonce in the cache of the first signer, which is impossible to retrieve if
127
+ // deserialized from a hex.
128
+ if (params.isLastSignature) {
129
+ throw new Error('Cannot be last signature on a transaction with key path spend inputs');
130
+ }
131
+ switch (params.signingStep) {
132
+ case 'signerNonce':
133
+ (0, assert_1.default)(signerKeychain);
134
+ tx.setAllInputsMusig2NonceHD(signerKeychain);
135
+ PSBT_CACHE.set(tx.getUnsignedTx().getId(), tx);
136
+ return tx;
137
+ case 'cosignerNonce':
138
+ (0, assert_1.default)(params.walletId, 'walletId is required for MuSig2 bitgo nonce');
139
+ return await coin.getMusig2Nonces(tx, params.walletId);
140
+ case 'signerSignature':
141
+ const txId = tx.getUnsignedTx().getId();
142
+ const psbt = PSBT_CACHE.get(txId);
143
+ (0, assert_1.default)(psbt, `Psbt is missing from txCache (cache size ${PSBT_CACHE.size}).
144
+ This may be due to the request being routed to a different BitGo-Express instance that for signing step 'signerNonce'.`);
145
+ PSBT_CACHE.delete(txId);
146
+ tx = psbt.combine(tx);
147
+ break;
148
+ default:
149
+ // this instance is not an external signer
150
+ (0, assert_1.default)(params.walletId, 'walletId is required for MuSig2 bitgo nonce');
151
+ (0, assert_1.default)(signerKeychain);
152
+ tx.setAllInputsMusig2NonceHD(signerKeychain);
153
+ const response = await coin.getMusig2Nonces(tx, params.walletId);
154
+ tx = tx.combine(response);
155
+ break;
156
+ }
157
+ }
158
+ else {
159
+ switch (params.signingStep) {
160
+ case 'signerNonce':
161
+ case 'cosignerNonce':
162
+ /**
163
+ * In certain cases, the caller of this method may not know whether the txHex contains a psbt with taproot key path spend input(s).
164
+ * Instead of throwing error, no-op and return the txHex. So that the caller can call this method in the same sequence.
165
+ */
166
+ return tx;
167
+ }
168
+ }
169
+ (0, assert_1.default)(signerKeychain);
170
+ return signAndVerifyPsbt(tx, signerKeychain, {
171
+ isLastSignature: params.isLastSignature,
172
+ });
173
+ }
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnblBzYnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvc2lnblBzYnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFzQ0EsOENBcUVDO0FBWUQsc0VBK0RDO0FBdExELG9EQUE0QjtBQUU1Qiw4REFBZ0Q7QUFFaEQsbURBQTZDO0FBQzdDLGtEQUE2QjtBQUU3QixpREFBNEU7QUFHNUUsTUFBTSxLQUFLLEdBQUcsSUFBQSxlQUFRLEVBQUMsZUFBZSxDQUFDLENBQUM7QUFjeEM7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILFNBQWdCLGlCQUFpQixDQUMvQixJQUE0QixFQUM1QixjQUFzQyxFQUN0QyxFQUNFLGVBQWU7QUFDZixpQkFBaUI7QUFDakIsa0NBQWtDLEdBQ3lDO0lBRTdFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDL0IsTUFBTSxTQUFTLEdBQWEsRUFBRSxDQUFDO0lBQy9CLE1BQU0sV0FBVyxHQUEyQixFQUFFLENBQUM7SUFFL0MsTUFBTSxVQUFVLEdBQWdDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtTQUM3RCxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsVUFBa0IsRUFBRSxFQUFFO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXpCLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzRCxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FB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QWMsQ0FBQyxDQUFDO2dCQUN2QixFQUFFLENBQUMseUJBQXlCLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQzdDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNqRSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDMUIsTUFBTTtRQUNWLENBQUM7SUFDSCxDQUFDO1NBQU0sQ0FBQztRQUNOLFFBQVEsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzNCLEtBQUssYUFBYSxDQUFDO1lBQ25CLEtBQUssZUFBZTtnQkFDbEI7OzttQkFHRztnQkFDSCxPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBQSxnQkFBTSxFQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3ZCLE9BQU8saUJBQWlCLENBQUMsRUFBRSxFQUFFLGNBQWMsRUFBRTtRQUMzQyxlQUFlLEVBQUUsTUFBTSxDQUFDLGVBQWU7S0FDeEMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyBCSVAzMkludGVyZmFjZSB9IGZyb20gJ0BiaXRnby1iZXRhL3NlY3AyNTZrMSc7XG5pbXBvcnQgeyBiaXRnbyB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCBkZWJ1Z0xpYiBmcm9tICdkZWJ1Zyc7XG5cbmltcG9ydCB7IElucHV0U2lnbmluZ0Vycm9yLCBUcmFuc2FjdGlvblNpZ25pbmdFcnJvciB9IGZyb20gJy4vU2lnbmluZ0Vycm9yJztcbmltcG9ydCB7IE11c2lnMlBhcnRpY2lwYW50IH0gZnJvbSAnLi9tdXNpZzInO1xuXG5jb25zdCBkZWJ1ZyA9IGRlYnVnTGliKCdiaXRnbzp2Mjp1dHhvJyk7XG5cbmV4cG9ydCB0eXBlIFBzYnRQYXJzZWRTY3JpcHRUeXBlID1cbiAgfCAncDJzaCdcbiAgfCAncDJ3c2gnXG4gIHwgJ3Ayc2hQMndzaCdcbiAgfCAncDJzaFAycGsnXG4gIHwgJ3RhcHJvb3RLZXlQYXRoU3BlbmQnXG4gIHwgJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnXG4gIC8vIHdhc20tdXR4byB0eXBlc1xuICB8ICdwMnRyTGVnYWN5J1xuICB8ICdwMnRyTXVzaWcyU2NyaXB0UGF0aCdcbiAgfCAncDJ0ck11c2lnMktleVBhdGgnO1xuXG4vKipcbiAqIFNpZ24gYWxsIGlucHV0cyBvZiBhIHBzYnQgYW5kIHZlcmlmeSBzaWduYXR1cmVzIGFmdGVyIHNpZ25pbmcuXG4gKiBDb2xsZWN0cyBhbmQgbG9ncyBzaWduaW5nIGVycm9ycyBhbmQgdmVyaWZpY2F0aW9uIGVycm9ycywgdGhyb3dzIGVycm9yIGluIHRoZSBlbmQgaWYgYW55IG9mIHRoZW1cbiAqIGZhaWxlZC5cbiAqXG4gKiBJZiBpdCBpcyB0aGUgbGFzdCBzaWduYXR1cmUsIGZpbmFsaXplIGFuZCBleHRyYWN0IHRoZSB0cmFuc2FjdGlvbiBmcm9tIHRoZSBwc2J0LlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gbWlycm9ycyBzaWduQW5kVmVyaWZ5V2FsbGV0VHJhbnNhY3Rpb24sIGJ1dCBpcyB1c2VkIGZvciBzaWduaW5nIFBTQlRzIGluc3RlYWQgb2ZcbiAqIHVzaW5nIFRyYW5zYWN0aW9uQnVpbGRlclxuICpcbiAqIEBwYXJhbSBwc2J0XG4gKiBAcGFyYW0gc2lnbmVyS2V5Y2hhaW5cbiAqIEBwYXJhbSBpc0xhc3RTaWduYXR1cmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpZ25BbmRWZXJpZnlQc2J0KFxuICBwc2J0OiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LFxuICBzaWduZXJLZXljaGFpbjogdXR4b2xpYi5CSVAzMkludGVyZmFjZSxcbiAge1xuICAgIGlzTGFzdFNpZ25hdHVyZSxcbiAgICAvKiogZGVwcmVjYXRlZCAqL1xuICAgIGFsbG93Tm9uU2Vnd2l0U2lnbmluZ1dpdGhvdXRQcmV2VHgsXG4gIH06IHsgaXNMYXN0U2lnbmF0dXJlOiBib29sZWFuOyBhbGxvd05vblNlZ3dpdFNpZ25pbmdXaXRob3V0UHJldlR4PzogYm9vbGVhbiB9XG4pOiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0IHwgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248YmlnaW50PiB7XG4gIGNvbnN0IHR4SW5wdXRzID0gcHNidC50eElucHV0cztcbiAgY29uc3Qgb3V0cHV0SWRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBzY3JpcHRUeXBlczogUHNidFBhcnNlZFNjcmlwdFR5cGVbXSA9IFtdO1xuXG4gIGNvbnN0IHNpZ25FcnJvcnM6IElucHV0U2lnbmluZ0Vycm9yPGJpZ2ludD5bXSA9IHBzYnQuZGF0YS5pbnB1dHNcbiAgICAubWFwKChpbnB1dCwgaW5wdXRJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBvdXRwdXRJZCA9IHV0eG9saWIuYml0Z28uZm9ybWF0T3V0cHV0SWQodXR4b2xpYi5iaXRnby5nZXRPdXRwdXRJZEZvcklucHV0KHR4SW5wdXRzW2lucHV0SW5kZXhdKSk7XG4gICAgICBvdXRwdXRJZHMucHVzaChvdXRwdXRJZCk7XG5cbiAgICAgIGNvbnN0IHsgc2NyaXB0VHlwZSB9ID0gdXR4b2xpYi5iaXRnby5wYXJzZVBzYnRJbnB1dChpbnB1dCk7XG4gICAgICBzY3JpcHRUeXBlcy5wdXNoKHNjcmlwdFR5cGUpO1xuXG4gICAgICBpZiAoc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJykge1xuICAgICAgICBkZWJ1ZygnU2tpcHBpbmcgc2lnbmF0dXJlIGZvciBpbnB1dCAlZCBvZiAlZCAoUlAgaW5wdXQ/KScsIGlucHV0SW5kZXggKyAxLCBwc2J0LmRhdGEuaW5wdXRzLmxlbmd0aCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcHNidC5zaWduSW5wdXRIRChpbnB1dEluZGV4LCBzaWduZXJLZXljaGFpbik7XG4gICAgICAgIGRlYnVnKCdTdWNjZXNzZnVsbHkgc2lnbmVkIGlucHV0ICVkIG9mICVkJywgaW5wdXRJbmRleCArIDEsIHBzYnQuZGF0YS5pbnB1dHMubGVuZ3RoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnB1dFNpZ25pbmdFcnJvcjxiaWdpbnQ+KGlucHV0SW5kZXgsIHNjcmlwdFR5cGUsIHsgaWQ6IG91dHB1dElkIH0sIGUpO1xuICAgICAgfVxuICAgIH0pXG4gICAgLmZpbHRlcigoZSk6IGUgaXMgSW5wdXRTaWduaW5nRXJyb3I8YmlnaW50PiA9PiBlICE9PSB1bmRlZmluZWQpO1xuXG4gIGNvbnN0IHZlcmlmeUVycm9yczogSW5wdXRTaWduaW5nRXJyb3I8YmlnaW50PltdID0gcHNidC5kYXRhLmlucHV0c1xuICAgIC5tYXAoKGlucHV0LCBpbnB1dEluZGV4KSA9PiB7XG4gICAgICBjb25zdCBzY3JpcHRUeXBlID0gc2NyaXB0VHlwZXNbaW5wdXRJbmRleF07XG4gICAgICBpZiAoc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJykge1xuICAgICAgICBkZWJ1ZyhcbiAgICAgICAgICAnU2tpcHBpbmcgaW5wdXQgc2lnbmF0dXJlICVkIG9mICVkICh1bnNwZW50IGZyb20gcmVwbGF5IHByb3RlY3Rpb24gYWRkcmVzcyB3aGljaCBpcyBwbGF0Zm9ybSBzaWduZWQgb25seSknLFxuICAgICAgICAgIGlucHV0SW5kZXggKyAxLFxuICAgICAgICAgIHBzYnQuZGF0YS5pbnB1dHMubGVuZ3RoXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb3V0cHV0SWQgPSBvdXRwdXRJZHNbaW5wdXRJbmRleF07XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIXBzYnQudmFsaWRhdGVTaWduYXR1cmVzT2ZJbnB1dEhEKGlucHV0SW5kZXgsIHNpZ25lcktleWNoYWluKSkge1xuICAgICAgICAgIHJldHVybiBuZXcgSW5wdXRTaWduaW5nRXJyb3IoaW5wdXRJbmRleCwgc2NyaXB0VHlwZSwgeyBpZDogb3V0cHV0SWQgfSwgbmV3IEVycm9yKGBpbnZhbGlkIHNpZ25hdHVyZWApKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBkZWJ1ZygnSW52YWxpZCBzaWduYXR1cmUnKTtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnB1dFNpZ25pbmdFcnJvcjxiaWdpbnQ+KGlucHV0SW5kZXgsIHNjcmlwdFR5cGUsIHsgaWQ6IG91dHB1dElkIH0sIGUpO1xuICAgICAgfVxuICAgIH0pXG4gICAgLmZpbHRlcigoZSk6IGUgaXMgSW5wdXRTaWduaW5nRXJyb3I8YmlnaW50PiA9PiBlICE9PSB1bmRlZmluZWQpO1xuXG4gIGlmIChzaWduRXJyb3JzLmxlbmd0aCB8fCB2ZXJpZnlFcnJvcnMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFRyYW5zYWN0aW9uU2lnbmluZ0Vycm9yKHNpZ25FcnJvcnMsIHZlcmlmeUVycm9ycyk7XG4gIH1cblxuICBpZiAoaXNMYXN0U2lnbmF0dXJlKSB7XG4gICAgcHNidC5maW5hbGl6ZUFsbElucHV0cygpO1xuICAgIHJldHVybiBwc2J0LmV4dHJhY3RUcmFuc2FjdGlvbigpO1xuICB9XG5cbiAgcmV0dXJuIHBzYnQ7XG59XG5cbi8qKlxuICogS2V5IFZhbHVlOiBVbnNpZ25lZCB0eCBpZCA9PiBQU0JUXG4gKiBJdCBpcyB1c2VkIHRvIGNhY2hlIFBTQlRzIHdpdGggdGFwcm9vdCBrZXkgcGF0aCAoTXVTaWcyKSBpbnB1dHMgZHVyaW5nIGV4dGVybmFsIGV4cHJlc3Mgc2lnbmVyIGlzIGFjdGl2YXRlZC5cbiAqIFJlYXNvbjogTXVTaWcyIHNpZ25lciBzZWN1cmUgbm9uY2UgaXMgY2FjaGVkIGluIHRoZSBVdHhvUHNidCBvYmplY3QuIEl0IHdpbGwgYmUgcmVxdWlyZWQgZHVyaW5nIHRoZSBzaWduaW5nIHN0ZXAuXG4gKiBGb3IgbW9yZSBpbmZvLCBjaGVjayBTaWduVHJhbnNhY3Rpb25PcHRpb25zLnNpZ25pbmdTdGVwXG4gKlxuICogVE9ETyBCVEMtMjc2OiBUaGlzIGNhY2hlIG1heSBuZWVkIHRvIGJlIGRvbmUgd2l0aCBMUlUgbGlrZSBtZW1vcnkgc2FmZSBjYWNoaW5nIGlmIG1lbW9yeSBpc3N1ZXMgY29tZXMgdXAuXG4gKi9cbmNvbnN0IFBTQlRfQ0FDSEUgPSBuZXcgTWFwPHN0cmluZywgdXR4b2xpYi5iaXRnby5VdHhvUHNidD4oKTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNpZ25Qc2J0V2l0aE11c2lnMlBhcnRpY2lwYW50KFxuICBjb2luOiBNdXNpZzJQYXJ0aWNpcGFudDx1dHhvbGliLmJpdGdvLlV0eG9Qc2J0PixcbiAgdHg6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQsXG4gIHNpZ25lcktleWNoYWluOiBCSVAzMkludGVyZmFjZSB8IHVuZGVmaW5lZCxcbiAgcGFyYW1zOiB7XG4gICAgaXNMYXN0U2lnbmF0dXJlOiBib29sZWFuO1xuICAgIHNpZ25pbmdTdGVwOiAnc2lnbmVyTm9uY2UnIHwgJ2Nvc2lnbmVyTm9uY2UnIHwgJ3NpZ25lclNpZ25hdHVyZScgfCB1bmRlZmluZWQ7XG4gICAgd2FsbGV0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgfVxuKTogUHJvbWlzZTx1dHhvbGliLmJpdGdvLlV0eG9Qc2J0IHwgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248YmlnaW50Pj4ge1xuICBpZiAoYml0Z28uaXNUcmFuc2FjdGlvbldpdGhLZXlQYXRoU3BlbmRJbnB1dCh0eCkpIHtcbiAgICAvLyBXZSBjYW4gb25seSBiZSB0aGUgZmlyc3Qgc2lnbmF0dXJlIG9uIGEgdHJhbnNhY3Rpb24gd2l0aCB0YXByb290IGtleSBwYXRoIHNwZW5kIGlucHV0cyBiZWNhdXNlXG4gICAgLy8gd2UgcmVxdWlyZSB0aGUgc2VjcmV0IG5vbmNlIGluIHRoZSBjYWNoZSBvZiB0aGUgZmlyc3Qgc2lnbmVyLCB3aGljaCBpcyBpbXBvc3NpYmxlIHRvIHJldHJpZXZlIGlmXG4gICAgLy8gZGVzZXJpYWxpemVkIGZyb20gYSBoZXguXG4gICAgaWYgKHBhcmFtcy5pc0xhc3RTaWduYXR1cmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGJlIGxhc3Qgc2lnbmF0dXJlIG9uIGEgdHJhbnNhY3Rpb24gd2l0aCBrZXkgcGF0aCBzcGVuZCBpbnB1dHMnKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHBhcmFtcy5zaWduaW5nU3RlcCkge1xuICAgICAgY2FzZSAnc2lnbmVyTm9uY2UnOlxuICAgICAgICBhc3NlcnQoc2lnbmVyS2V5Y2hhaW4pO1xuICAgICAgICB0eC5zZXRBbGxJbnB1dHNNdXNpZzJOb25jZUhEKHNpZ25lcktleWNoYWluKTtcbiAgICAgICAgUFNCVF9DQUNIRS5zZXQodHguZ2V0VW5zaWduZWRUeCgpLmdldElkKCksIHR4KTtcbiAgICAgICAgcmV0dXJuIHR4O1xuICAgICAgY2FzZSAnY29zaWduZXJOb25jZSc6XG4gICAgICAgIGFzc2VydChwYXJhbXMud2FsbGV0SWQsICd3YWxsZXRJZCBpcyByZXF1aXJlZCBmb3IgTXVTaWcyIGJpdGdvIG5vbmNlJyk7XG4gICAgICAgIHJldHVybiBhd2FpdCBjb2luLmdldE11c2lnMk5vbmNlcyh0eCwgcGFyYW1zLndhbGxldElkKTtcbiAgICAgIGNhc2UgJ3NpZ25lclNpZ25hdHVyZSc6XG4gICAgICAgIGNvbnN0IHR4SWQgPSB0eC5nZXRVbnNpZ25lZFR4KCkuZ2V0SWQoKTtcbiAgICAgICAgY29uc3QgcHNidCA9IFBTQlRfQ0FDSEUuZ2V0KHR4SWQpO1xuICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgcHNidCxcbiAgICAgICAgICBgUHNidCBpcyBtaXNzaW5nIGZyb20gdHhDYWNoZSAoY2FjaGUgc2l6ZSAke1BTQlRfQ0FDSEUuc2l6ZX0pLlxuICAgICAgICAgICAgVGhpcyBtYXkgYmUgZHVlIHRvIHRoZSByZXF1ZXN0IGJlaW5nIHJvdXRlZCB0byBhIGRpZmZlcmVudCBCaXRHby1FeHByZXNzIGluc3RhbmNlIHRoYXQgZm9yIHNpZ25pbmcgc3RlcCAnc2lnbmVyTm9uY2UnLmBcbiAgICAgICAgKTtcbiAgICAgICAgUFNCVF9DQUNIRS5kZWxldGUodHhJZCk7XG4gICAgICAgIHR4ID0gcHNidC5jb21iaW5lKHR4KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyB0aGlzIGluc3RhbmNlIGlzIG5vdCBhbiBleHRlcm5hbCBzaWduZXJcbiAgICAgICAgYXNzZXJ0KHBhcmFtcy53YWxsZXRJZCwgJ3dhbGxldElkIGlzIHJlcXVpcmVkIGZvciBNdVNpZzIgYml0Z28gbm9uY2UnKTtcbiAgICAgICAgYXNzZXJ0KHNpZ25lcktleWNoYWluKTtcbiAgICAgICAgdHguc2V0QWxsSW5wdXRzTXVzaWcyTm9uY2VIRChzaWduZXJLZXljaGFpbik7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY29pbi5nZXRNdXNpZzJOb25jZXModHgsIHBhcmFtcy53YWxsZXRJZCk7XG4gICAgICAgIHR4ID0gdHguY29tYmluZShyZXNwb25zZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBzd2l0Y2ggKHBhcmFtcy5zaWduaW5nU3RlcCkge1xuICAgICAgY2FzZSAnc2lnbmVyTm9uY2UnOlxuICAgICAgY2FzZSAnY29zaWduZXJOb25jZSc6XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbiBjZXJ0YWluIGNhc2VzLCB0aGUgY2FsbGVyIG9mIHRoaXMgbWV0aG9kIG1heSBub3Qga25vdyB3aGV0aGVyIHRoZSB0eEhleCBjb250YWlucyBhIHBzYnQgd2l0aCB0YXByb290IGtleSBwYXRoIHNwZW5kIGlucHV0KHMpLlxuICAgICAgICAgKiBJbnN0ZWFkIG9mIHRocm93aW5nIGVycm9yLCBuby1vcCBhbmQgcmV0dXJuIHRoZSB0eEhleC4gU28gdGhhdCB0aGUgY2FsbGVyIGNhbiBjYWxsIHRoaXMgbWV0aG9kIGluIHRoZSBzYW1lIHNlcXVlbmNlLlxuICAgICAgICAgKi9cbiAgICAgICAgcmV0dXJuIHR4O1xuICAgIH1cbiAgfVxuXG4gIGFzc2VydChzaWduZXJLZXljaGFpbik7XG4gIHJldHVybiBzaWduQW5kVmVyaWZ5UHNidCh0eCwgc2lnbmVyS2V5Y2hhaW4sIHtcbiAgICBpc0xhc3RTaWduYXR1cmU6IHBhcmFtcy5pc0xhc3RTaWduYXR1cmUsXG4gIH0pO1xufVxuIl19
@@ -0,0 +1,22 @@
1
+ import { BIP32Interface } from '@bitgo-beta/utxo-lib';
2
+ import { ECPair, fixedScriptWallet } from '@bitgo/wasm-utxo';
3
+ import { Musig2Participant } from './musig2';
4
+ export type ReplayProtectionKeys = {
5
+ publicKeys: (Uint8Array | ECPair)[];
6
+ };
7
+ /**
8
+ * Sign all inputs of a PSBT and verify signatures after signing.
9
+ * Collects and logs signing errors and verification errors, throws error in the end if any of them failed.
10
+ *
11
+ * If it is the last signature, finalize and extract the transaction from the psbt.
12
+ */
13
+ export declare function signAndVerifyPsbtWasm(tx: fixedScriptWallet.BitGoPsbt, signerKeychain: BIP32Interface, rootWalletKeys: fixedScriptWallet.RootWalletKeys, replayProtection: ReplayProtectionKeys, { isLastSignature }: {
14
+ isLastSignature: boolean;
15
+ }): fixedScriptWallet.BitGoPsbt | Buffer;
16
+ export declare function signPsbtWithMusig2ParticipantWasm(coin: Musig2Participant<fixedScriptWallet.BitGoPsbt>, tx: fixedScriptWallet.BitGoPsbt, signerKeychain: BIP32Interface | undefined, rootWalletKeys: fixedScriptWallet.RootWalletKeys, params: {
17
+ replayProtection: ReplayProtectionKeys;
18
+ isLastSignature: boolean;
19
+ signingStep: 'signerNonce' | 'cosignerNonce' | 'signerSignature' | undefined;
20
+ walletId: string | undefined;
21
+ }): Promise<fixedScriptWallet.BitGoPsbt | Buffer>;
22
+ //# sourceMappingURL=signPsbtWasm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signPsbtWasm.d.ts","sourceRoot":"","sources":["../../../../../src/transaction/fixedScript/signPsbtWasm.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAS,MAAM,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,CAAC,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC;CACrC,CAAC;AAmBF;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,iBAAiB,CAAC,SAAS,EAC/B,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,iBAAiB,CAAC,cAAc,EAChD,gBAAgB,EAAE,oBAAoB,EACtC,EAAE,eAAe,EAAE,EAAE;IAAE,eAAe,EAAE,OAAO,CAAA;CAAE,GAChD,iBAAiB,CAAC,SAAS,GAAG,MAAM,CAkDtC;AAOD,wBAAsB,iCAAiC,CACrD,IAAI,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,SAAS,CAAC,EACpD,EAAE,EAAE,iBAAiB,CAAC,SAAS,EAC/B,cAAc,EAAE,cAAc,GAAG,SAAS,EAC1C,cAAc,EAAE,iBAAiB,CAAC,cAAc,EAChD,MAAM,EAAE;IACN,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,aAAa,GAAG,eAAe,GAAG,iBAAiB,GAAG,SAAS,CAAC;IAC7E,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B,GACA,OAAO,CAAC,iBAAiB,CAAC,SAAS,GAAG,MAAM,CAAC,CA0D/C"}