@ledgerhq/hw-app-btc 10.0.1 → 10.0.2-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/lib/Btc.d.ts.map +1 -1
  3. package/lib/Btc.js +72 -97
  4. package/lib/Btc.js.map +1 -1
  5. package/lib/BtcNew.js +217 -313
  6. package/lib/BtcNew.js.map +1 -1
  7. package/lib/BtcOld.js +46 -106
  8. package/lib/BtcOld.js.map +1 -1
  9. package/lib/bip32.js +12 -12
  10. package/lib/bip32.js.map +1 -1
  11. package/lib/buffertools.js +66 -69
  12. package/lib/buffertools.js.map +1 -1
  13. package/lib/compressPublicKey.js +3 -3
  14. package/lib/compressPublicKey.js.map +1 -1
  15. package/lib/constants.js +1 -1
  16. package/lib/createTransaction.d.ts +1 -1
  17. package/lib/createTransaction.d.ts.map +1 -1
  18. package/lib/createTransaction.js +285 -398
  19. package/lib/createTransaction.js.map +1 -1
  20. package/lib/debug.js +11 -13
  21. package/lib/debug.js.map +1 -1
  22. package/lib/finalizeInput.js +23 -62
  23. package/lib/finalizeInput.js.map +1 -1
  24. package/lib/getAppAndVersion.d.ts +1 -1
  25. package/lib/getAppAndVersion.d.ts.map +1 -1
  26. package/lib/getAppAndVersion.js +29 -72
  27. package/lib/getAppAndVersion.js.map +1 -1
  28. package/lib/getTrustedInput.js +108 -251
  29. package/lib/getTrustedInput.js.map +1 -1
  30. package/lib/getTrustedInputBIP143.js +9 -10
  31. package/lib/getTrustedInputBIP143.js.map +1 -1
  32. package/lib/getWalletPublicKey.d.ts +1 -1
  33. package/lib/getWalletPublicKey.d.ts.map +1 -1
  34. package/lib/getWalletPublicKey.js +27 -73
  35. package/lib/getWalletPublicKey.js.map +1 -1
  36. package/lib/hashPublicKey.js +4 -4
  37. package/lib/hashPublicKey.js.map +1 -1
  38. package/lib/index.js +3 -3
  39. package/lib/index.js.map +1 -1
  40. package/lib/newops/accounttype.d.ts +2 -2
  41. package/lib/newops/accounttype.d.ts.map +1 -1
  42. package/lib/newops/accounttype.js +85 -125
  43. package/lib/newops/accounttype.js.map +1 -1
  44. package/lib/newops/appClient.js +98 -205
  45. package/lib/newops/appClient.js.map +1 -1
  46. package/lib/newops/clientCommands.js +122 -213
  47. package/lib/newops/clientCommands.js.map +1 -1
  48. package/lib/newops/merkelizedPsbt.js +28 -75
  49. package/lib/newops/merkelizedPsbt.js.map +1 -1
  50. package/lib/newops/merkle.js +38 -67
  51. package/lib/newops/merkle.js.map +1 -1
  52. package/lib/newops/merkleMap.js +11 -12
  53. package/lib/newops/merkleMap.js.map +1 -1
  54. package/lib/newops/policy.d.ts +1 -1
  55. package/lib/newops/policy.d.ts.map +1 -1
  56. package/lib/newops/policy.js +17 -18
  57. package/lib/newops/policy.js.map +1 -1
  58. package/lib/newops/psbtExtractor.js +9 -9
  59. package/lib/newops/psbtExtractor.js.map +1 -1
  60. package/lib/newops/psbtFinalizer.js +22 -22
  61. package/lib/newops/psbtFinalizer.js.map +1 -1
  62. package/lib/newops/psbtv2.d.ts +1 -1
  63. package/lib/newops/psbtv2.d.ts.map +1 -1
  64. package/lib/newops/psbtv2.js +227 -286
  65. package/lib/newops/psbtv2.js.map +1 -1
  66. package/lib/serializeTransaction.js +13 -15
  67. package/lib/serializeTransaction.js.map +1 -1
  68. package/lib/shouldUseTrustedInputForSegwit.js +4 -5
  69. package/lib/shouldUseTrustedInputForSegwit.js.map +1 -1
  70. package/lib/signMessage.js +47 -99
  71. package/lib/signMessage.js.map +1 -1
  72. package/lib/signP2SHTransaction.d.ts +1 -1
  73. package/lib/signP2SHTransaction.d.ts.map +1 -1
  74. package/lib/signP2SHTransaction.js +91 -187
  75. package/lib/signP2SHTransaction.js.map +1 -1
  76. package/lib/signTransaction.js +8 -9
  77. package/lib/signTransaction.js.map +1 -1
  78. package/lib/splitTransaction.js +50 -54
  79. package/lib/splitTransaction.js.map +1 -1
  80. package/lib/startUntrustedHashTransactionInput.js +65 -167
  81. package/lib/startUntrustedHashTransactionInput.js.map +1 -1
  82. package/lib/types.js +1 -1
  83. package/lib/varint.js +10 -10
  84. package/lib/varint.js.map +1 -1
  85. package/lib-es/Btc.d.ts.map +1 -1
  86. package/lib-es/Btc.js +58 -84
  87. package/lib-es/Btc.js.map +1 -1
  88. package/lib-es/BtcNew.js +205 -302
  89. package/lib-es/BtcNew.js.map +1 -1
  90. package/lib-es/BtcOld.js +35 -96
  91. package/lib-es/BtcOld.js.map +1 -1
  92. package/lib-es/bip32.js +7 -7
  93. package/lib-es/bip32.js.map +1 -1
  94. package/lib-es/buffertools.js +62 -67
  95. package/lib-es/buffertools.js.map +1 -1
  96. package/lib-es/compressPublicKey.js +2 -2
  97. package/lib-es/compressPublicKey.js.map +1 -1
  98. package/lib-es/constants.js +12 -12
  99. package/lib-es/constants.js.map +1 -1
  100. package/lib-es/createTransaction.d.ts +1 -1
  101. package/lib-es/createTransaction.d.ts.map +1 -1
  102. package/lib-es/createTransaction.js +271 -384
  103. package/lib-es/createTransaction.js.map +1 -1
  104. package/lib-es/debug.js +10 -12
  105. package/lib-es/debug.js.map +1 -1
  106. package/lib-es/finalizeInput.js +20 -59
  107. package/lib-es/finalizeInput.js.map +1 -1
  108. package/lib-es/getAppAndVersion.d.ts +1 -1
  109. package/lib-es/getAppAndVersion.d.ts.map +1 -1
  110. package/lib-es/getAppAndVersion.js +27 -70
  111. package/lib-es/getAppAndVersion.js.map +1 -1
  112. package/lib-es/getTrustedInput.js +104 -247
  113. package/lib-es/getTrustedInput.js.map +1 -1
  114. package/lib-es/getTrustedInputBIP143.js +5 -6
  115. package/lib-es/getTrustedInputBIP143.js.map +1 -1
  116. package/lib-es/getWalletPublicKey.d.ts +1 -1
  117. package/lib-es/getWalletPublicKey.d.ts.map +1 -1
  118. package/lib-es/getWalletPublicKey.js +25 -71
  119. package/lib-es/getWalletPublicKey.js.map +1 -1
  120. package/lib-es/newops/accounttype.d.ts +2 -2
  121. package/lib-es/newops/accounttype.d.ts.map +1 -1
  122. package/lib-es/newops/accounttype.js +79 -123
  123. package/lib-es/newops/accounttype.js.map +1 -1
  124. package/lib-es/newops/appClient.js +92 -200
  125. package/lib-es/newops/appClient.js.map +1 -1
  126. package/lib-es/newops/clientCommands.js +117 -214
  127. package/lib-es/newops/clientCommands.js.map +1 -1
  128. package/lib-es/newops/merkelizedPsbt.js +25 -73
  129. package/lib-es/newops/merkelizedPsbt.js.map +1 -1
  130. package/lib-es/newops/merkle.js +36 -66
  131. package/lib-es/newops/merkle.js.map +1 -1
  132. package/lib-es/newops/merkleMap.js +8 -10
  133. package/lib-es/newops/merkleMap.js.map +1 -1
  134. package/lib-es/newops/policy.d.ts +1 -1
  135. package/lib-es/newops/policy.d.ts.map +1 -1
  136. package/lib-es/newops/policy.js +12 -14
  137. package/lib-es/newops/policy.js.map +1 -1
  138. package/lib-es/newops/psbtExtractor.js +7 -7
  139. package/lib-es/newops/psbtExtractor.js.map +1 -1
  140. package/lib-es/newops/psbtFinalizer.js +19 -19
  141. package/lib-es/newops/psbtFinalizer.js.map +1 -1
  142. package/lib-es/newops/psbtv2.d.ts +1 -1
  143. package/lib-es/newops/psbtv2.d.ts.map +1 -1
  144. package/lib-es/newops/psbtv2.js +225 -286
  145. package/lib-es/newops/psbtv2.js.map +1 -1
  146. package/lib-es/serializeTransaction.js +11 -13
  147. package/lib-es/serializeTransaction.js.map +1 -1
  148. package/lib-es/shouldUseTrustedInputForSegwit.js +1 -2
  149. package/lib-es/shouldUseTrustedInputForSegwit.js.map +1 -1
  150. package/lib-es/signMessage.js +44 -96
  151. package/lib-es/signMessage.js.map +1 -1
  152. package/lib-es/signP2SHTransaction.d.ts +1 -1
  153. package/lib-es/signP2SHTransaction.d.ts.map +1 -1
  154. package/lib-es/signP2SHTransaction.js +84 -180
  155. package/lib-es/signP2SHTransaction.js.map +1 -1
  156. package/lib-es/signTransaction.js +6 -7
  157. package/lib-es/signTransaction.js.map +1 -1
  158. package/lib-es/splitTransaction.js +46 -50
  159. package/lib-es/splitTransaction.js.map +1 -1
  160. package/lib-es/startUntrustedHashTransactionInput.js +62 -164
  161. package/lib-es/startUntrustedHashTransactionInput.js.map +1 -1
  162. package/lib-es/varint.js +9 -9
  163. package/lib-es/varint.js.map +1 -1
  164. package/package.json +5 -6
  165. package/src/Btc.ts +28 -5
@@ -8,53 +8,15 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
- var __values = (this && this.__values) || function(o) {
39
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
40
- if (m) return m.call(o);
41
- if (o && typeof o.length === "number") return {
42
- next: function () {
43
- if (o && i >= o.length) o = void 0;
44
- return { value: o && o[i++], done: !o };
45
- }
46
- };
47
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
48
- };
49
- exports.__esModule = true;
11
+ Object.defineProperty(exports, "__esModule", { value: true });
50
12
  exports.AppClient = void 0;
51
- var bip32_1 = require("../bip32");
52
- var merkelizedPsbt_1 = require("./merkelizedPsbt");
53
- var clientCommands_1 = require("./clientCommands");
54
- var varint_1 = require("../varint");
55
- var merkle_1 = require("./merkle");
56
- var CLA_BTC = 0xe1;
57
- var CLA_FRAMEWORK = 0xf8;
13
+ const bip32_1 = require("../bip32");
14
+ const merkelizedPsbt_1 = require("./merkelizedPsbt");
15
+ const clientCommands_1 = require("./clientCommands");
16
+ const varint_1 = require("../varint");
17
+ const merkle_1 = require("./merkle");
18
+ const CLA_BTC = 0xe1;
19
+ const CLA_FRAMEWORK = 0xf8;
58
20
  var BitcoinIns;
59
21
  (function (BitcoinIns) {
60
22
  BitcoinIns[BitcoinIns["GET_PUBKEY"] = 0] = "GET_PUBKEY";
@@ -72,172 +34,103 @@ var FrameworkIns;
72
34
  * This class encapsulates the APDU protocol documented at
73
35
  * https://github.com/LedgerHQ/app-bitcoin-new/blob/master/doc/bitcoin.md
74
36
  */
75
- var AppClient = /** @class */ (function () {
76
- function AppClient(transport) {
37
+ class AppClient {
38
+ constructor(transport) {
77
39
  this.transport = transport;
78
40
  }
79
- AppClient.prototype.makeRequest = function (ins, data, cci) {
80
- return __awaiter(this, void 0, void 0, function () {
81
- var response, hwRequest, commandResponse;
82
- return __generator(this, function (_a) {
83
- switch (_a.label) {
84
- case 0: return [4 /*yield*/, this.transport.send(CLA_BTC, ins, 0, 0, data, [0x9000, 0xe000])];
85
- case 1:
86
- response = _a.sent();
87
- _a.label = 2;
88
- case 2:
89
- if (!(response.readUInt16BE(response.length - 2) === 0xe000)) return [3 /*break*/, 4];
90
- if (!cci) {
91
- throw new Error("Unexpected SW_INTERRUPTED_EXECUTION");
92
- }
93
- hwRequest = response.slice(0, -2);
94
- commandResponse = cci.execute(hwRequest);
95
- return [4 /*yield*/, this.transport.send(CLA_FRAMEWORK, FrameworkIns.CONTINUE_INTERRUPTED, 0, 0, commandResponse, [0x9000, 0xe000])];
96
- case 3:
97
- response = _a.sent();
98
- return [3 /*break*/, 2];
99
- case 4: return [2 /*return*/, response.slice(0, -2)]; // drop the status word (can only be 0x9000 at this point)
41
+ makeRequest(ins, data, cci) {
42
+ return __awaiter(this, void 0, void 0, function* () {
43
+ let response = yield this.transport.send(CLA_BTC, ins, 0, 0, data, [0x9000, 0xe000]);
44
+ while (response.readUInt16BE(response.length - 2) === 0xe000) {
45
+ if (!cci) {
46
+ throw new Error("Unexpected SW_INTERRUPTED_EXECUTION");
100
47
  }
101
- });
48
+ const hwRequest = response.slice(0, -2);
49
+ const commandResponse = cci.execute(hwRequest);
50
+ response = yield this.transport.send(CLA_FRAMEWORK, FrameworkIns.CONTINUE_INTERRUPTED, 0, 0, commandResponse, [0x9000, 0xe000]);
51
+ }
52
+ return response.slice(0, -2); // drop the status word (can only be 0x9000 at this point)
102
53
  });
103
- };
104
- AppClient.prototype.getExtendedPubkey = function (display, pathElements) {
105
- return __awaiter(this, void 0, void 0, function () {
106
- var response;
107
- return __generator(this, function (_a) {
108
- switch (_a.label) {
109
- case 0:
110
- if (pathElements.length > 6) {
111
- throw new Error("Path too long. At most 6 levels allowed.");
112
- }
113
- return [4 /*yield*/, this.makeRequest(BitcoinIns.GET_PUBKEY, Buffer.concat([
114
- Buffer.from(display ? [1] : [0]),
115
- (0, bip32_1.pathElementsToBuffer)(pathElements),
116
- ]))];
117
- case 1:
118
- response = _a.sent();
119
- return [2 /*return*/, response.toString("ascii")];
120
- }
121
- });
54
+ }
55
+ getExtendedPubkey(display, pathElements) {
56
+ return __awaiter(this, void 0, void 0, function* () {
57
+ if (pathElements.length > 6) {
58
+ throw new Error("Path too long. At most 6 levels allowed.");
59
+ }
60
+ const response = yield this.makeRequest(BitcoinIns.GET_PUBKEY, Buffer.concat([
61
+ Buffer.from(display ? [1] : [0]),
62
+ (0, bip32_1.pathElementsToBuffer)(pathElements),
63
+ ]));
64
+ return response.toString("ascii");
122
65
  });
123
- };
124
- AppClient.prototype.getWalletAddress = function (walletPolicy, walletHMAC, change, addressIndex, display) {
125
- return __awaiter(this, void 0, void 0, function () {
126
- var clientInterpreter, addressIndexBuffer, response;
127
- return __generator(this, function (_a) {
128
- switch (_a.label) {
129
- case 0:
130
- if (change !== 0 && change !== 1)
131
- throw new Error("Change can only be 0 or 1");
132
- if (addressIndex < 0 || !Number.isInteger(addressIndex))
133
- throw new Error("Invalid address index");
134
- if (walletHMAC != null && walletHMAC.length != 32) {
135
- throw new Error("Invalid HMAC length");
136
- }
137
- clientInterpreter = new clientCommands_1.ClientCommandInterpreter(function () { });
138
- clientInterpreter.addKnownList(walletPolicy.keys.map(function (k) { return Buffer.from(k, "ascii"); }));
139
- clientInterpreter.addKnownPreimage(walletPolicy.serialize());
140
- addressIndexBuffer = Buffer.alloc(4);
141
- addressIndexBuffer.writeUInt32BE(addressIndex, 0);
142
- return [4 /*yield*/, this.makeRequest(BitcoinIns.GET_WALLET_ADDRESS, Buffer.concat([
143
- Buffer.from(display ? [1] : [0]),
144
- walletPolicy.getWalletId(),
145
- walletHMAC || Buffer.alloc(32, 0),
146
- Buffer.from([change]),
147
- addressIndexBuffer,
148
- ]), clientInterpreter)];
149
- case 1:
150
- response = _a.sent();
151
- return [2 /*return*/, response.toString("ascii")];
152
- }
153
- });
66
+ }
67
+ getWalletAddress(walletPolicy, walletHMAC, change, addressIndex, display) {
68
+ return __awaiter(this, void 0, void 0, function* () {
69
+ if (change !== 0 && change !== 1)
70
+ throw new Error("Change can only be 0 or 1");
71
+ if (addressIndex < 0 || !Number.isInteger(addressIndex))
72
+ throw new Error("Invalid address index");
73
+ if (walletHMAC != null && walletHMAC.length != 32) {
74
+ throw new Error("Invalid HMAC length");
75
+ }
76
+ const clientInterpreter = new clientCommands_1.ClientCommandInterpreter(() => { });
77
+ clientInterpreter.addKnownList(walletPolicy.keys.map((k) => Buffer.from(k, "ascii")));
78
+ clientInterpreter.addKnownPreimage(walletPolicy.serialize());
79
+ const addressIndexBuffer = Buffer.alloc(4);
80
+ addressIndexBuffer.writeUInt32BE(addressIndex, 0);
81
+ const response = yield this.makeRequest(BitcoinIns.GET_WALLET_ADDRESS, Buffer.concat([
82
+ Buffer.from(display ? [1] : [0]),
83
+ walletPolicy.getWalletId(),
84
+ walletHMAC || Buffer.alloc(32, 0),
85
+ Buffer.from([change]),
86
+ addressIndexBuffer,
87
+ ]), clientInterpreter);
88
+ return response.toString("ascii");
154
89
  });
155
- };
156
- AppClient.prototype.signPsbt = function (psbt, walletPolicy, walletHMAC, progressCallback) {
157
- return __awaiter(this, void 0, void 0, function () {
158
- var merkelizedPsbt, clientInterpreter, _a, _b, map, _c, _d, map, inputMapsRoot, outputMapsRoot, yielded, ret, yielded_1, yielded_1_1, inputAndSig;
159
- var e_1, _e, e_2, _f, e_3, _g;
160
- return __generator(this, function (_h) {
161
- switch (_h.label) {
162
- case 0:
163
- merkelizedPsbt = new merkelizedPsbt_1.MerkelizedPsbt(psbt);
164
- if (walletHMAC != null && walletHMAC.length != 32) {
165
- throw new Error("Invalid HMAC length");
166
- }
167
- clientInterpreter = new clientCommands_1.ClientCommandInterpreter(progressCallback);
168
- // prepare ClientCommandInterpreter
169
- clientInterpreter.addKnownList(walletPolicy.keys.map(function (k) { return Buffer.from(k, "ascii"); }));
170
- clientInterpreter.addKnownPreimage(walletPolicy.serialize());
171
- clientInterpreter.addKnownMapping(merkelizedPsbt.globalMerkleMap);
172
- try {
173
- for (_a = __values(merkelizedPsbt.inputMerkleMaps), _b = _a.next(); !_b.done; _b = _a.next()) {
174
- map = _b.value;
175
- clientInterpreter.addKnownMapping(map);
176
- }
177
- }
178
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
179
- finally {
180
- try {
181
- if (_b && !_b.done && (_e = _a["return"])) _e.call(_a);
182
- }
183
- finally { if (e_1) throw e_1.error; }
184
- }
185
- try {
186
- for (_c = __values(merkelizedPsbt.outputMerkleMaps), _d = _c.next(); !_d.done; _d = _c.next()) {
187
- map = _d.value;
188
- clientInterpreter.addKnownMapping(map);
189
- }
190
- }
191
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
192
- finally {
193
- try {
194
- if (_d && !_d.done && (_f = _c["return"])) _f.call(_c);
195
- }
196
- finally { if (e_2) throw e_2.error; }
197
- }
198
- clientInterpreter.addKnownList(merkelizedPsbt.inputMapCommitments);
199
- inputMapsRoot = new merkle_1.Merkle(merkelizedPsbt.inputMapCommitments.map(function (m) { return (0, merkle_1.hashLeaf)(m); })).getRoot();
200
- clientInterpreter.addKnownList(merkelizedPsbt.outputMapCommitments);
201
- outputMapsRoot = new merkle_1.Merkle(merkelizedPsbt.outputMapCommitments.map(function (m) { return (0, merkle_1.hashLeaf)(m); })).getRoot();
202
- return [4 /*yield*/, this.makeRequest(BitcoinIns.SIGN_PSBT, Buffer.concat([
203
- merkelizedPsbt.getGlobalKeysValuesRoot(),
204
- (0, varint_1.createVarint)(merkelizedPsbt.getGlobalInputCount()),
205
- inputMapsRoot,
206
- (0, varint_1.createVarint)(merkelizedPsbt.getGlobalOutputCount()),
207
- outputMapsRoot,
208
- walletPolicy.getWalletId(),
209
- walletHMAC || Buffer.alloc(32, 0),
210
- ]), clientInterpreter)];
211
- case 1:
212
- _h.sent();
213
- yielded = clientInterpreter.getYielded();
214
- ret = new Map();
215
- try {
216
- for (yielded_1 = __values(yielded), yielded_1_1 = yielded_1.next(); !yielded_1_1.done; yielded_1_1 = yielded_1.next()) {
217
- inputAndSig = yielded_1_1.value;
218
- ret.set(inputAndSig[0], inputAndSig.slice(1));
219
- }
220
- }
221
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
222
- finally {
223
- try {
224
- if (yielded_1_1 && !yielded_1_1.done && (_g = yielded_1["return"])) _g.call(yielded_1);
225
- }
226
- finally { if (e_3) throw e_3.error; }
227
- }
228
- return [2 /*return*/, ret];
229
- }
230
- });
90
+ }
91
+ signPsbt(psbt, walletPolicy, walletHMAC, progressCallback) {
92
+ return __awaiter(this, void 0, void 0, function* () {
93
+ const merkelizedPsbt = new merkelizedPsbt_1.MerkelizedPsbt(psbt);
94
+ if (walletHMAC != null && walletHMAC.length != 32) {
95
+ throw new Error("Invalid HMAC length");
96
+ }
97
+ const clientInterpreter = new clientCommands_1.ClientCommandInterpreter(progressCallback);
98
+ // prepare ClientCommandInterpreter
99
+ clientInterpreter.addKnownList(walletPolicy.keys.map((k) => Buffer.from(k, "ascii")));
100
+ clientInterpreter.addKnownPreimage(walletPolicy.serialize());
101
+ clientInterpreter.addKnownMapping(merkelizedPsbt.globalMerkleMap);
102
+ for (const map of merkelizedPsbt.inputMerkleMaps) {
103
+ clientInterpreter.addKnownMapping(map);
104
+ }
105
+ for (const map of merkelizedPsbt.outputMerkleMaps) {
106
+ clientInterpreter.addKnownMapping(map);
107
+ }
108
+ clientInterpreter.addKnownList(merkelizedPsbt.inputMapCommitments);
109
+ const inputMapsRoot = new merkle_1.Merkle(merkelizedPsbt.inputMapCommitments.map((m) => (0, merkle_1.hashLeaf)(m))).getRoot();
110
+ clientInterpreter.addKnownList(merkelizedPsbt.outputMapCommitments);
111
+ const outputMapsRoot = new merkle_1.Merkle(merkelizedPsbt.outputMapCommitments.map((m) => (0, merkle_1.hashLeaf)(m))).getRoot();
112
+ yield this.makeRequest(BitcoinIns.SIGN_PSBT, Buffer.concat([
113
+ merkelizedPsbt.getGlobalKeysValuesRoot(),
114
+ (0, varint_1.createVarint)(merkelizedPsbt.getGlobalInputCount()),
115
+ inputMapsRoot,
116
+ (0, varint_1.createVarint)(merkelizedPsbt.getGlobalOutputCount()),
117
+ outputMapsRoot,
118
+ walletPolicy.getWalletId(),
119
+ walletHMAC || Buffer.alloc(32, 0),
120
+ ]), clientInterpreter);
121
+ const yielded = clientInterpreter.getYielded();
122
+ const ret = new Map();
123
+ for (const inputAndSig of yielded) {
124
+ ret.set(inputAndSig[0], inputAndSig.slice(1));
125
+ }
126
+ return ret;
231
127
  });
232
- };
233
- AppClient.prototype.getMasterFingerprint = function () {
234
- return __awaiter(this, void 0, void 0, function () {
235
- return __generator(this, function (_a) {
236
- return [2 /*return*/, this.makeRequest(BitcoinIns.GET_MASTER_FINGERPRINT, Buffer.from([]))];
237
- });
128
+ }
129
+ getMasterFingerprint() {
130
+ return __awaiter(this, void 0, void 0, function* () {
131
+ return this.makeRequest(BitcoinIns.GET_MASTER_FINGERPRINT, Buffer.from([]));
238
132
  });
239
- };
240
- return AppClient;
241
- }());
133
+ }
134
+ }
242
135
  exports.AppClient = AppClient;
243
136
  //# sourceMappingURL=appClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"appClient.js","sourceRoot":"","sources":["../../src/newops/appClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"appClient.js","sourceRoot":"","sources":["../../src/newops/appClient.ts"],"names":[],"mappings":"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"}