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