@zondax/ledger-cosmos-js 3.0.2 → 4.0.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.
- package/LICENSE +1 -1
- package/README.md +11 -15
- package/dist/consts.d.ts +25 -0
- package/dist/consts.js +21 -0
- package/dist/consts.js.map +1 -0
- package/dist/index.d.ts +38 -2
- package/dist/index.js +186 -19
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +11 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +42 -43
- package/dist/commandsV1.d.ts +0 -4
- package/dist/commandsV1.js +0 -130
- package/dist/commandsV1.js.map +0 -1
- package/dist/commandsV2.d.ts +0 -4
- package/dist/commandsV2.js +0 -105
- package/dist/commandsV2.js.map +0 -1
- package/dist/common.d.ts +0 -43
- package/dist/common.js +0 -166
- package/dist/common.js.map +0 -1
- package/dist/cosmosApp.d.ts +0 -19
- package/dist/cosmosApp.js +0 -378
- package/dist/cosmosApp.js.map +0 -1
- package/yarn.lock +0 -6626
package/dist/cosmosApp.js
DELETED
|
@@ -1,378 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
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 (g && (g = 0, op[0] && (_ = 0)), _) 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
|
-
exports.__esModule = true;
|
|
39
|
-
exports.CosmosApp = void 0;
|
|
40
|
-
/** ******************************************************************************
|
|
41
|
-
* (c) 2018 - 2022 Zondax AG
|
|
42
|
-
*
|
|
43
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
44
|
-
* you may not use this file except in compliance with the License.
|
|
45
|
-
* You may obtain a copy of the License at
|
|
46
|
-
*
|
|
47
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
48
|
-
*
|
|
49
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
50
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
51
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
52
|
-
* See the License for the specific language governing permissions and
|
|
53
|
-
* limitations under the License.
|
|
54
|
-
******************************************************************************* */
|
|
55
|
-
var common_1 = require("./common");
|
|
56
|
-
var commandsV1_1 = require("./commandsV1");
|
|
57
|
-
var commandsV2_1 = require("./commandsV2");
|
|
58
|
-
var crypto = require('crypto');
|
|
59
|
-
var bech32 = require('bech32');
|
|
60
|
-
var Ripemd160 = require('ripemd160');
|
|
61
|
-
var CosmosApp = /** @class */ (function () {
|
|
62
|
-
function CosmosApp(transport) {
|
|
63
|
-
if (!transport) {
|
|
64
|
-
throw new Error('Transport has not been defined');
|
|
65
|
-
}
|
|
66
|
-
this.transport = transport;
|
|
67
|
-
}
|
|
68
|
-
CosmosApp.serializeHRP = function (hrp) {
|
|
69
|
-
if (hrp == null || hrp.length < 3 || hrp.length > 83) {
|
|
70
|
-
throw new Error('Invalid HRP');
|
|
71
|
-
}
|
|
72
|
-
var buf = Buffer.alloc(1 + hrp.length);
|
|
73
|
-
buf.writeUInt8(hrp.length, 0);
|
|
74
|
-
buf.write(hrp, 1);
|
|
75
|
-
return buf;
|
|
76
|
-
};
|
|
77
|
-
CosmosApp.getBech32FromPK = function (hrp, pk) {
|
|
78
|
-
if (pk.length !== 33) {
|
|
79
|
-
throw new Error('expected compressed public key [31 bytes]');
|
|
80
|
-
}
|
|
81
|
-
var hashSha256 = crypto.createHash('sha256').update(pk).digest();
|
|
82
|
-
var hashRip = new Ripemd160().update(hashSha256).digest();
|
|
83
|
-
return bech32.encode(hrp, bech32.toWords(hashRip));
|
|
84
|
-
};
|
|
85
|
-
CosmosApp.prototype.serializePath = function (path) {
|
|
86
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
87
|
-
var _a;
|
|
88
|
-
return __generator(this, function (_b) {
|
|
89
|
-
switch (_b.label) {
|
|
90
|
-
case 0:
|
|
91
|
-
_a = this;
|
|
92
|
-
return [4 /*yield*/, (0, common_1.getVersion)(this.transport)];
|
|
93
|
-
case 1:
|
|
94
|
-
_a.versionResponse = _b.sent();
|
|
95
|
-
if (this.versionResponse.return_code !== common_1.ERROR_CODE.NoError) {
|
|
96
|
-
throw this.versionResponse;
|
|
97
|
-
}
|
|
98
|
-
switch (this.versionResponse.major) {
|
|
99
|
-
case 1:
|
|
100
|
-
return [2 /*return*/, (0, commandsV1_1.serializePathv1)(path)];
|
|
101
|
-
case 2:
|
|
102
|
-
return [2 /*return*/, (0, commandsV2_1.serializePathv2)(path)];
|
|
103
|
-
default:
|
|
104
|
-
return [2 /*return*/, Buffer.alloc(0)];
|
|
105
|
-
}
|
|
106
|
-
return [2 /*return*/];
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
});
|
|
110
|
-
};
|
|
111
|
-
CosmosApp.prototype.signGetChunks = function (path, buffer) {
|
|
112
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
113
|
-
var serializedPath, chunks, i, end;
|
|
114
|
-
return __generator(this, function (_a) {
|
|
115
|
-
switch (_a.label) {
|
|
116
|
-
case 0: return [4 /*yield*/, this.serializePath(path)];
|
|
117
|
-
case 1:
|
|
118
|
-
serializedPath = _a.sent();
|
|
119
|
-
chunks = [];
|
|
120
|
-
chunks.push(serializedPath);
|
|
121
|
-
for (i = 0; i < buffer.length; i += common_1.CHUNK_SIZE) {
|
|
122
|
-
end = i + common_1.CHUNK_SIZE;
|
|
123
|
-
if (i > buffer.length) {
|
|
124
|
-
end = buffer.length;
|
|
125
|
-
}
|
|
126
|
-
chunks.push(buffer.slice(i, end));
|
|
127
|
-
}
|
|
128
|
-
return [2 /*return*/, chunks];
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
});
|
|
132
|
-
};
|
|
133
|
-
CosmosApp.prototype.getVersion = function () {
|
|
134
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
135
|
-
var _a, e_1;
|
|
136
|
-
return __generator(this, function (_b) {
|
|
137
|
-
switch (_b.label) {
|
|
138
|
-
case 0:
|
|
139
|
-
_b.trys.push([0, 2, , 3]);
|
|
140
|
-
_a = this;
|
|
141
|
-
return [4 /*yield*/, (0, common_1.getVersion)(this.transport)];
|
|
142
|
-
case 1:
|
|
143
|
-
_a.versionResponse = _b.sent();
|
|
144
|
-
return [2 /*return*/, this.versionResponse];
|
|
145
|
-
case 2:
|
|
146
|
-
e_1 = _b.sent();
|
|
147
|
-
return [2 /*return*/, (0, common_1.processErrorResponse)(e_1)];
|
|
148
|
-
case 3: return [2 /*return*/];
|
|
149
|
-
}
|
|
150
|
-
});
|
|
151
|
-
});
|
|
152
|
-
};
|
|
153
|
-
CosmosApp.prototype.appInfo = function () {
|
|
154
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
155
|
-
return __generator(this, function (_a) {
|
|
156
|
-
return [2 /*return*/, this.transport.send(0xb0, 0x01, 0, 0).then(function (response) {
|
|
157
|
-
var errorCodeData = response.slice(-2);
|
|
158
|
-
var returnCode = errorCodeData[0] * 256 + errorCodeData[1];
|
|
159
|
-
var appName = '';
|
|
160
|
-
var appVersion = '';
|
|
161
|
-
var flagLen = 0;
|
|
162
|
-
var flagsValue = 0;
|
|
163
|
-
if (response[0] !== 1) {
|
|
164
|
-
// Ledger responds with format ID 1. There is no spec for any format != 1
|
|
165
|
-
return {
|
|
166
|
-
return_code: 0x9001,
|
|
167
|
-
error_message: 'response format ID not recognized'
|
|
168
|
-
};
|
|
169
|
-
}
|
|
170
|
-
else {
|
|
171
|
-
var appNameLen = response[1];
|
|
172
|
-
appName = response.slice(2, 2 + appNameLen).toString('ascii');
|
|
173
|
-
var idx = 2 + appNameLen;
|
|
174
|
-
var appVersionLen = response[idx];
|
|
175
|
-
idx += 1;
|
|
176
|
-
appVersion = response.slice(idx, idx + appVersionLen).toString('ascii');
|
|
177
|
-
idx += appVersionLen;
|
|
178
|
-
var appFlagsLen = response[idx];
|
|
179
|
-
idx += 1;
|
|
180
|
-
flagLen = appFlagsLen;
|
|
181
|
-
flagsValue = response[idx];
|
|
182
|
-
}
|
|
183
|
-
return {
|
|
184
|
-
return_code: returnCode,
|
|
185
|
-
error_message: (0, common_1.errorCodeToString)(returnCode),
|
|
186
|
-
// //
|
|
187
|
-
appName: appName,
|
|
188
|
-
appVersion: appVersion,
|
|
189
|
-
flagLen: flagLen,
|
|
190
|
-
flagsValue: flagsValue,
|
|
191
|
-
// eslint-disable-next-line no-bitwise
|
|
192
|
-
flag_recovery: (flagsValue & 1) !== 0,
|
|
193
|
-
// eslint-disable-next-line no-bitwise
|
|
194
|
-
flag_signed_mcu_code: (flagsValue & 2) !== 0,
|
|
195
|
-
// eslint-disable-next-line no-bitwise
|
|
196
|
-
flag_onboarded: (flagsValue & 4) !== 0,
|
|
197
|
-
// eslint-disable-next-line no-bitwise
|
|
198
|
-
flag_pin_validated: (flagsValue & 128) !== 0
|
|
199
|
-
};
|
|
200
|
-
}, common_1.processErrorResponse)];
|
|
201
|
-
});
|
|
202
|
-
});
|
|
203
|
-
};
|
|
204
|
-
CosmosApp.prototype.deviceInfo = function () {
|
|
205
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
206
|
-
return __generator(this, function (_a) {
|
|
207
|
-
return [2 /*return*/, this.transport.send(0xe0, 0x01, 0, 0, Buffer.from([]), [common_1.ERROR_CODE.NoError, 0x6e00]).then(function (response) {
|
|
208
|
-
var errorCodeData = response.slice(-2);
|
|
209
|
-
var returnCode = errorCodeData[0] * 256 + errorCodeData[1];
|
|
210
|
-
if (returnCode === 0x6e00) {
|
|
211
|
-
return {
|
|
212
|
-
return_code: returnCode,
|
|
213
|
-
error_message: 'This command is only available in the Dashboard'
|
|
214
|
-
};
|
|
215
|
-
}
|
|
216
|
-
var targetId = response.slice(0, 4).toString('hex');
|
|
217
|
-
var pos = 4;
|
|
218
|
-
var secureElementVersionLen = response[pos];
|
|
219
|
-
pos += 1;
|
|
220
|
-
var seVersion = response.slice(pos, pos + secureElementVersionLen).toString();
|
|
221
|
-
pos += secureElementVersionLen;
|
|
222
|
-
var flagsLen = response[pos];
|
|
223
|
-
pos += 1;
|
|
224
|
-
var flag = response.slice(pos, pos + flagsLen).toString('hex');
|
|
225
|
-
pos += flagsLen;
|
|
226
|
-
var mcuVersionLen = response[pos];
|
|
227
|
-
pos += 1;
|
|
228
|
-
// Patch issue in mcu version
|
|
229
|
-
var tmp = response.slice(pos, pos + mcuVersionLen);
|
|
230
|
-
if (tmp[mcuVersionLen - 1] === 0) {
|
|
231
|
-
tmp = response.slice(pos, pos + mcuVersionLen - 1);
|
|
232
|
-
}
|
|
233
|
-
var mcuVersion = tmp.toString();
|
|
234
|
-
return {
|
|
235
|
-
return_code: returnCode,
|
|
236
|
-
error_message: (0, common_1.errorCodeToString)(returnCode),
|
|
237
|
-
// //
|
|
238
|
-
targetId: targetId,
|
|
239
|
-
seVersion: seVersion,
|
|
240
|
-
flag: flag,
|
|
241
|
-
mcuVersion: mcuVersion
|
|
242
|
-
};
|
|
243
|
-
}, common_1.processErrorResponse)];
|
|
244
|
-
});
|
|
245
|
-
});
|
|
246
|
-
};
|
|
247
|
-
CosmosApp.prototype.publicKey = function (path) {
|
|
248
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
249
|
-
var serializedPath, data, e_2;
|
|
250
|
-
return __generator(this, function (_a) {
|
|
251
|
-
switch (_a.label) {
|
|
252
|
-
case 0:
|
|
253
|
-
_a.trys.push([0, 2, , 3]);
|
|
254
|
-
return [4 /*yield*/, this.serializePath(path)];
|
|
255
|
-
case 1:
|
|
256
|
-
serializedPath = _a.sent();
|
|
257
|
-
switch (this.versionResponse.major) {
|
|
258
|
-
case 1:
|
|
259
|
-
return [2 /*return*/, (0, commandsV1_1.publicKeyv1)(this, serializedPath)];
|
|
260
|
-
case 2: {
|
|
261
|
-
data = Buffer.concat([CosmosApp.serializeHRP('cosmos'), serializedPath]);
|
|
262
|
-
return [2 /*return*/, (0, commandsV2_1.publicKeyv2)(this, data)];
|
|
263
|
-
}
|
|
264
|
-
default:
|
|
265
|
-
return [2 /*return*/, {
|
|
266
|
-
return_code: 0x6400,
|
|
267
|
-
error_message: 'App Version is not supported'
|
|
268
|
-
}];
|
|
269
|
-
}
|
|
270
|
-
return [3 /*break*/, 3];
|
|
271
|
-
case 2:
|
|
272
|
-
e_2 = _a.sent();
|
|
273
|
-
return [2 /*return*/, (0, common_1.processErrorResponse)(e_2)];
|
|
274
|
-
case 3: return [2 /*return*/];
|
|
275
|
-
}
|
|
276
|
-
});
|
|
277
|
-
});
|
|
278
|
-
};
|
|
279
|
-
CosmosApp.prototype.getAddressAndPubKey = function (path, hrp, showInDevice) {
|
|
280
|
-
if (showInDevice === void 0) { showInDevice = false; }
|
|
281
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
282
|
-
var _this = this;
|
|
283
|
-
return __generator(this, function (_a) {
|
|
284
|
-
return [2 /*return*/, this.serializePath(path)
|
|
285
|
-
.then(function (serializedPath) {
|
|
286
|
-
var data = Buffer.concat([CosmosApp.serializeHRP(hrp), serializedPath]);
|
|
287
|
-
return _this.transport
|
|
288
|
-
.send(common_1.CLA, common_1.INS.GET_ADDR_SECP256K1, showInDevice ? common_1.P1_VALUES.SHOW_ADDRESS_IN_DEVICE : common_1.P1_VALUES.ONLY_RETRIEVE, 0, data, [common_1.ERROR_CODE.NoError])
|
|
289
|
-
.then(function (response) {
|
|
290
|
-
var errorCodeData = response.slice(-2);
|
|
291
|
-
var returnCode = errorCodeData[0] * 256 + errorCodeData[1];
|
|
292
|
-
var compressedPk = Buffer.from(response.slice(0, 33));
|
|
293
|
-
var bech32Address = Buffer.from(response.slice(33, -2)).toString();
|
|
294
|
-
return {
|
|
295
|
-
bech32_address: bech32Address,
|
|
296
|
-
compressed_pk: compressedPk,
|
|
297
|
-
return_code: returnCode,
|
|
298
|
-
error_message: (0, common_1.errorCodeToString)(returnCode)
|
|
299
|
-
};
|
|
300
|
-
}, common_1.processErrorResponse);
|
|
301
|
-
})["catch"](function (err) { return (0, common_1.processErrorResponse)(err); })];
|
|
302
|
-
});
|
|
303
|
-
});
|
|
304
|
-
};
|
|
305
|
-
CosmosApp.prototype.showAddressAndPubKey = function (path, hrp) {
|
|
306
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
307
|
-
return __generator(this, function (_a) {
|
|
308
|
-
return [2 /*return*/, this.getAddressAndPubKey(path, hrp, true)];
|
|
309
|
-
});
|
|
310
|
-
});
|
|
311
|
-
};
|
|
312
|
-
CosmosApp.prototype.signSendChunk = function (chunkIdx, chunkNum, chunk, txType) {
|
|
313
|
-
if (txType === void 0) { txType = common_1.P2_VALUES.JSON; }
|
|
314
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
315
|
-
return __generator(this, function (_a) {
|
|
316
|
-
switch (this.versionResponse.major) {
|
|
317
|
-
case 1:
|
|
318
|
-
return [2 /*return*/, (0, commandsV1_1.signSendChunkv1)(this, chunkIdx, chunkNum, chunk, txType)];
|
|
319
|
-
case 2:
|
|
320
|
-
return [2 /*return*/, (0, commandsV2_1.signSendChunkv2)(this, chunkIdx, chunkNum, chunk, txType)];
|
|
321
|
-
default:
|
|
322
|
-
return [2 /*return*/, {
|
|
323
|
-
return_code: 0x6400,
|
|
324
|
-
error_message: 'App Version is not supported'
|
|
325
|
-
}];
|
|
326
|
-
}
|
|
327
|
-
return [2 /*return*/];
|
|
328
|
-
});
|
|
329
|
-
});
|
|
330
|
-
};
|
|
331
|
-
CosmosApp.prototype.sign = function (path, buffer, txType) {
|
|
332
|
-
if (txType === void 0) { txType = common_1.P2_VALUES.JSON; }
|
|
333
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
334
|
-
var _this = this;
|
|
335
|
-
return __generator(this, function (_a) {
|
|
336
|
-
return [2 /*return*/, this.signGetChunks(path, buffer).then(function (chunks) {
|
|
337
|
-
return _this.signSendChunk(1, chunks.length, chunks[0], txType).then(function (response) { return __awaiter(_this, void 0, void 0, function () {
|
|
338
|
-
var result, i;
|
|
339
|
-
return __generator(this, function (_a) {
|
|
340
|
-
switch (_a.label) {
|
|
341
|
-
case 0:
|
|
342
|
-
result = {
|
|
343
|
-
return_code: response.return_code,
|
|
344
|
-
error_message: response.error_message,
|
|
345
|
-
signature: null
|
|
346
|
-
};
|
|
347
|
-
i = 1;
|
|
348
|
-
_a.label = 1;
|
|
349
|
-
case 1:
|
|
350
|
-
if (!(i < chunks.length)) return [3 /*break*/, 4];
|
|
351
|
-
return [4 /*yield*/, this.signSendChunk(1 + i, chunks.length, chunks[i], txType)];
|
|
352
|
-
case 2:
|
|
353
|
-
// eslint-disable-next-line no-await-in-loop
|
|
354
|
-
result = _a.sent();
|
|
355
|
-
if (result.return_code !== common_1.ERROR_CODE.NoError) {
|
|
356
|
-
return [3 /*break*/, 4];
|
|
357
|
-
}
|
|
358
|
-
_a.label = 3;
|
|
359
|
-
case 3:
|
|
360
|
-
i += 1;
|
|
361
|
-
return [3 /*break*/, 1];
|
|
362
|
-
case 4: return [2 /*return*/, {
|
|
363
|
-
return_code: result.return_code,
|
|
364
|
-
error_message: result.error_message,
|
|
365
|
-
// ///
|
|
366
|
-
signature: result.signature
|
|
367
|
-
}];
|
|
368
|
-
}
|
|
369
|
-
});
|
|
370
|
-
}); }, common_1.processErrorResponse);
|
|
371
|
-
}, common_1.processErrorResponse)];
|
|
372
|
-
});
|
|
373
|
-
});
|
|
374
|
-
};
|
|
375
|
-
return CosmosApp;
|
|
376
|
-
}());
|
|
377
|
-
exports.CosmosApp = CosmosApp;
|
|
378
|
-
//# sourceMappingURL=cosmosApp.js.map
|
package/dist/cosmosApp.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cosmosApp.js","sourceRoot":"","sources":["../src/cosmosApp.ts"],"names":[],"mappings":"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","sourcesContent":["/** ******************************************************************************\n * (c) 2018 - 2022 Zondax AG\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n ******************************************************************************* */\nimport { CHUNK_SIZE, CLA, INS, errorCodeToString, getVersion, processErrorResponse, ERROR_CODE, P1_VALUES, P2_VALUES } from './common'\n\nimport Transport from '@ledgerhq/hw-transport'\nimport { publicKeyv1, serializePathv1, signSendChunkv1 } from './commandsV1'\nimport { publicKeyv2, serializePathv2, signSendChunkv2 } from './commandsV2'\n\nconst crypto = require('crypto')\nconst bech32 = require('bech32')\nconst Ripemd160 = require('ripemd160')\n\nexport class CosmosApp {\n transport: Transport\n versionResponse?: any\n\n constructor(transport: any) {\n if (!transport) {\n throw new Error('Transport has not been defined')\n }\n\n this.transport = transport\n }\n\n static serializeHRP(hrp: string) {\n if (hrp == null || hrp.length < 3 || hrp.length > 83) {\n throw new Error('Invalid HRP')\n }\n const buf = Buffer.alloc(1 + hrp.length)\n buf.writeUInt8(hrp.length, 0)\n buf.write(hrp, 1)\n return buf\n }\n\n static getBech32FromPK(hrp: string, pk: Buffer) {\n if (pk.length !== 33) {\n throw new Error('expected compressed public key [31 bytes]')\n }\n const hashSha256 = crypto.createHash('sha256').update(pk).digest()\n const hashRip = new Ripemd160().update(hashSha256).digest()\n return bech32.encode(hrp, bech32.toWords(hashRip))\n }\n\n async serializePath(path: number[]) {\n this.versionResponse = await getVersion(this.transport)\n\n if (this.versionResponse.return_code !== ERROR_CODE.NoError) {\n throw this.versionResponse\n }\n\n switch (this.versionResponse.major) {\n case 1:\n return serializePathv1(path)\n case 2:\n return serializePathv2(path)\n default:\n return Buffer.alloc(0)\n }\n }\n\n async signGetChunks(path: number[], buffer: Buffer) {\n const serializedPath = await this.serializePath(path)\n\n const chunks = []\n chunks.push(serializedPath)\n\n for (let i = 0; i < buffer.length; i += CHUNK_SIZE) {\n let end = i + CHUNK_SIZE\n if (i > buffer.length) {\n end = buffer.length\n }\n chunks.push(buffer.slice(i, end))\n }\n\n return chunks\n }\n\n async getVersion() {\n try {\n this.versionResponse = await getVersion(this.transport)\n return this.versionResponse\n } catch (e) {\n return processErrorResponse(e)\n }\n }\n\n async appInfo() {\n return this.transport.send(0xb0, 0x01, 0, 0).then((response: any) => {\n const errorCodeData = response.slice(-2)\n const returnCode = errorCodeData[0] * 256 + errorCodeData[1]\n\n let appName = ''\n let appVersion = ''\n let flagLen = 0\n let flagsValue = 0\n\n if (response[0] !== 1) {\n // Ledger responds with format ID 1. There is no spec for any format != 1\n return {\n return_code: 0x9001,\n error_message: 'response format ID not recognized',\n }\n } else {\n const appNameLen = response[1]\n appName = response.slice(2, 2 + appNameLen).toString('ascii')\n let idx = 2 + appNameLen\n const appVersionLen = response[idx]\n idx += 1\n appVersion = response.slice(idx, idx + appVersionLen).toString('ascii')\n idx += appVersionLen\n const appFlagsLen = response[idx]\n idx += 1\n flagLen = appFlagsLen\n flagsValue = response[idx]\n }\n\n return {\n return_code: returnCode,\n error_message: errorCodeToString(returnCode),\n // //\n appName,\n appVersion,\n flagLen,\n flagsValue,\n // eslint-disable-next-line no-bitwise\n flag_recovery: (flagsValue & 1) !== 0,\n // eslint-disable-next-line no-bitwise\n flag_signed_mcu_code: (flagsValue & 2) !== 0,\n // eslint-disable-next-line no-bitwise\n flag_onboarded: (flagsValue & 4) !== 0,\n // eslint-disable-next-line no-bitwise\n flag_pin_validated: (flagsValue & 128) !== 0,\n }\n }, processErrorResponse)\n }\n\n async deviceInfo() {\n return this.transport.send(0xe0, 0x01, 0, 0, Buffer.from([]), [ERROR_CODE.NoError, 0x6e00]).then((response: any) => {\n const errorCodeData = response.slice(-2)\n const returnCode = errorCodeData[0] * 256 + errorCodeData[1]\n\n if (returnCode === 0x6e00) {\n return {\n return_code: returnCode,\n error_message: 'This command is only available in the Dashboard',\n }\n }\n\n const targetId = response.slice(0, 4).toString('hex')\n\n let pos = 4\n const secureElementVersionLen = response[pos]\n pos += 1\n const seVersion = response.slice(pos, pos + secureElementVersionLen).toString()\n pos += secureElementVersionLen\n\n const flagsLen = response[pos]\n pos += 1\n const flag = response.slice(pos, pos + flagsLen).toString('hex')\n pos += flagsLen\n\n const mcuVersionLen = response[pos]\n pos += 1\n // Patch issue in mcu version\n let tmp = response.slice(pos, pos + mcuVersionLen)\n if (tmp[mcuVersionLen - 1] === 0) {\n tmp = response.slice(pos, pos + mcuVersionLen - 1)\n }\n const mcuVersion = tmp.toString()\n\n return {\n return_code: returnCode,\n error_message: errorCodeToString(returnCode),\n // //\n targetId,\n seVersion,\n flag,\n mcuVersion,\n }\n }, processErrorResponse)\n }\n\n async publicKey(path: number[]) {\n try {\n const serializedPath = await this.serializePath(path)\n\n switch (this.versionResponse.major) {\n case 1:\n return publicKeyv1(this, serializedPath)\n case 2: {\n const data = Buffer.concat([CosmosApp.serializeHRP('cosmos'), serializedPath])\n return publicKeyv2(this, data)\n }\n default:\n return {\n return_code: 0x6400,\n error_message: 'App Version is not supported',\n }\n }\n } catch (e) {\n return processErrorResponse(e)\n }\n }\n\n async getAddressAndPubKey(path: number[], hrp: string, showInDevice = false) {\n return this.serializePath(path)\n .then((serializedPath: Buffer) => {\n const data = Buffer.concat([CosmosApp.serializeHRP(hrp), serializedPath])\n return this.transport\n .send(CLA, INS.GET_ADDR_SECP256K1, showInDevice ? P1_VALUES.SHOW_ADDRESS_IN_DEVICE : P1_VALUES.ONLY_RETRIEVE, 0, data, [ERROR_CODE.NoError])\n .then((response: any) => {\n const errorCodeData = response.slice(-2)\n const returnCode = errorCodeData[0] * 256 + errorCodeData[1]\n\n const compressedPk = Buffer.from(response.slice(0, 33))\n const bech32Address = Buffer.from(response.slice(33, -2)).toString()\n\n return {\n bech32_address: bech32Address,\n compressed_pk: compressedPk,\n return_code: returnCode,\n error_message: errorCodeToString(returnCode),\n }\n }, processErrorResponse)\n })\n .catch(err => processErrorResponse(err))\n }\n\n async showAddressAndPubKey(path: number[], hrp: string) {\n return this.getAddressAndPubKey(path, hrp, true)\n }\n\n async signSendChunk(chunkIdx: number, chunkNum: number, chunk: Buffer, txType = P2_VALUES.JSON) {\n switch (this.versionResponse.major) {\n case 1:\n return signSendChunkv1(this, chunkIdx, chunkNum, chunk, txType)\n case 2:\n return signSendChunkv2(this, chunkIdx, chunkNum, chunk, txType)\n default:\n return {\n return_code: 0x6400,\n error_message: 'App Version is not supported',\n }\n }\n }\n\n async sign(path: number[], buffer: Buffer, txType = P2_VALUES.JSON) {\n return this.signGetChunks(path, buffer).then(chunks => {\n return this.signSendChunk(1, chunks.length, chunks[0], txType).then(async response => {\n let result = {\n return_code: response.return_code,\n error_message: response.error_message,\n signature: null,\n }\n\n for (let i = 1; i < chunks.length; i += 1) {\n // eslint-disable-next-line no-await-in-loop\n result = await this.signSendChunk(1 + i, chunks.length, chunks[i], txType)\n if (result.return_code !== ERROR_CODE.NoError) {\n break\n }\n }\n\n return {\n return_code: result.return_code,\n error_message: result.error_message,\n // ///\n signature: result.signature,\n }\n }, processErrorResponse)\n }, processErrorResponse)\n }\n}\n"]}
|