@zondax/ledger-cosmos-js 3.0.2 → 3.0.3

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 CHANGED
@@ -186,7 +186,7 @@
186
186
  same "printed page" as the copyright notice for easier
187
187
  identification within third-party archives.
188
188
 
189
- Copyright 2018 - 2022 ZondaX AG
189
+ Copyright 2018 - 2023 Zondax AG
190
190
 
191
191
  Licensed under the Apache License, Version 2.0 (the "License");
192
192
  you may not use this file except in compliance with the License.
package/README.md CHANGED
@@ -1,33 +1,30 @@
1
1
  # @zondax/ledger-cosmos-js
2
2
 
3
- ![zondax](docs/zondax_light.png)
3
+ ![zondax_light](docs/zondax_light.png#gh-light-mode-only)
4
+ ![zondax_dark](docs/zondax_dark.png#gh-dark-mode-only)
4
5
 
5
6
  [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
6
- [![Main](https://github.com/Zondax/ledger-cosmos-js/workflows/Main/badge.svg)](https://github.com/Zondax/ledger-cosmos-js/actions?query=workflow%3AMain)
7
- [![npm version](https://badge.fury.io/js/%40zondax%2Fledger-cosmos-js.svg)](https://badge.fury.io/js/%40zondax%2Fledger-cosmos-js)
8
-
7
+ [![Main](https://github.com/cosmos/ledger-cosmos-js/workflows/Main/badge.svg)](https://github.com/cosmos/ledger-cosmos-js/actions?query=workflow%3AMain)
8
+ [![npm version](https://badge.fury.io/js/%40cosmos%2Fledger-cosmos-js.svg)](https://badge.fury.io/js/%40cosmos%2Fledger-cosmos-js)
9
9
 
10
10
  This package provides a basic client library to communicate with a Tendermint/Cosmos App running in a Ledger Nano S/S+/X devices
11
11
 
12
12
  We recommend using the npmjs package in order to receive updates/fixes.
13
13
 
14
-
15
14
  # Available commands
16
15
 
17
- | Operation | Response | Command |
18
- | ---------- | ---------------- | ----------------------- |
19
- | getVersion | app version | --------------- |
20
- | publicKey | pubkey | path (legacy command) |
21
- | getAddressAndPubKey | pubkey + address | path + ( showInDevice ) |
22
- | showAddressAndPubKey | signed message | path |
23
- | appInfo | name, version, flags, etc | --------------- |
24
- | deviceInfo | fw and mcu version, id, etc | Only available in dashboard |
25
- | sign | signed message | path + transaction type + message |
16
+ | Operation | Response | Command |
17
+ | -------------------- | --------------------------- | --------------------------- |
18
+ | getVersion | app version | --------------- |
19
+ | publicKey | pubkey | path (legacy command) |
20
+ | getAddressAndPubKey | pubkey + address | path + ( showInDevice ) |
21
+ | showAddressAndPubKey | signed message | path |
22
+ | appInfo | name, version, flags, etc | --------------- |
23
+ | deviceInfo | fw and mcu version, id, etc | Only available in dashboard |
24
+ | sign | signed message | path + message + (HRP) |
26
25
 
27
26
  getAddress command requires that you set the derivation path (account, change, index) and has an option parameter to display the address on the device. By default, it will retrieve the information without user confirmation.
28
27
 
29
- sign command requires that you specify the transaction type, with one of the available types: 0 for json transaction or 1 for textual transaction.
30
-
31
28
  # Testing with real devices
32
29
 
33
30
  It is possible to test this package with a real Ledger Nano device. To accomplish that, you will need to follow these steps:
@@ -4,10 +4,11 @@ export declare class CosmosApp {
4
4
  transport: Transport;
5
5
  versionResponse?: any;
6
6
  constructor(transport: any);
7
- static serializeHRP(hrp: string): Buffer;
7
+ static serializeHRP(hrp?: string): Buffer;
8
8
  static getBech32FromPK(hrp: string, pk: Buffer): any;
9
9
  serializePath(path: number[]): Promise<Buffer>;
10
10
  signGetChunks(path: number[], buffer: Buffer): Promise<Buffer[]>;
11
+ prepareChunks(path: number[], buffer: Buffer, hrp?: string): Promise<Buffer[]>;
11
12
  getVersion(): Promise<any>;
12
13
  appInfo(): Promise<any>;
13
14
  deviceInfo(): Promise<any>;
@@ -15,5 +16,5 @@ export declare class CosmosApp {
15
16
  getAddressAndPubKey(path: number[], hrp: string, showInDevice?: boolean): Promise<any>;
16
17
  showAddressAndPubKey(path: number[], hrp: string): Promise<any>;
17
18
  signSendChunk(chunkIdx: number, chunkNum: number, chunk: Buffer, txType?: number): Promise<any>;
18
- sign(path: number[], buffer: Buffer, txType?: number): Promise<any>;
19
+ sign(path: number[], buffer: Buffer, hrp?: string, txType?: number): Promise<any>;
19
20
  }
package/dist/cosmosApp.js CHANGED
@@ -130,6 +130,30 @@ var CosmosApp = /** @class */ (function () {
130
130
  });
131
131
  });
132
132
  };
133
+ CosmosApp.prototype.prepareChunks = function (path, buffer, hrp) {
134
+ return __awaiter(this, void 0, void 0, function () {
135
+ var serializedPath, firstChunk, chunks, i, end;
136
+ return __generator(this, function (_a) {
137
+ switch (_a.label) {
138
+ case 0: return [4 /*yield*/, this.serializePath(path)];
139
+ case 1:
140
+ serializedPath = _a.sent();
141
+ firstChunk = (hrp === undefined) ? serializedPath
142
+ : Buffer.concat([serializedPath, CosmosApp.serializeHRP(hrp)]);
143
+ chunks = [];
144
+ chunks.push(firstChunk);
145
+ for (i = 0; i < buffer.length; i += common_1.CHUNK_SIZE) {
146
+ end = i + common_1.CHUNK_SIZE;
147
+ if (i > buffer.length) {
148
+ end = buffer.length;
149
+ }
150
+ chunks.push(buffer.subarray(i, end));
151
+ }
152
+ return [2 /*return*/, chunks];
153
+ }
154
+ });
155
+ });
156
+ };
133
157
  CosmosApp.prototype.getVersion = function () {
134
158
  return __awaiter(this, void 0, void 0, function () {
135
159
  var _a, e_1;
@@ -285,7 +309,9 @@ var CosmosApp = /** @class */ (function () {
285
309
  .then(function (serializedPath) {
286
310
  var data = Buffer.concat([CosmosApp.serializeHRP(hrp), serializedPath]);
287
311
  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])
312
+ .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, [
313
+ common_1.ERROR_CODE.NoError,
314
+ ])
289
315
  .then(function (response) {
290
316
  var errorCodeData = response.slice(-2);
291
317
  var returnCode = errorCodeData[0] * 256 + errorCodeData[1];
@@ -328,12 +354,36 @@ var CosmosApp = /** @class */ (function () {
328
354
  });
329
355
  });
330
356
  };
331
- CosmosApp.prototype.sign = function (path, buffer, txType) {
357
+ // async sign(path: number[], buffer: Buffer, txType = P2_VALUES.JSON) {
358
+ // return this.signGetChunks(path, buffer).then(chunks => {
359
+ // return this.signSendChunk(1, chunks.length, chunks[0], txType).then(async response => {
360
+ // let result = {
361
+ // return_code: response.return_code,
362
+ // error_message: response.error_message,
363
+ // signature: null,
364
+ // }
365
+ // for (let i = 1; i < chunks.length; i += 1) {
366
+ // // eslint-disable-next-line no-await-in-loop
367
+ // result = await this.signSendChunk(1 + i, chunks.length, chunks[i], txType)
368
+ // if (result.return_code !== ERROR_CODE.NoError) {
369
+ // break
370
+ // }
371
+ // }
372
+ // return {
373
+ // return_code: result.return_code,
374
+ // error_message: result.error_message,
375
+ // // ///
376
+ // signature: result.signature,
377
+ // }
378
+ // }, processErrorResponse)
379
+ // }, processErrorResponse)
380
+ // }
381
+ CosmosApp.prototype.sign = function (path, buffer, hrp, txType) {
332
382
  if (txType === void 0) { txType = common_1.P2_VALUES.JSON; }
333
383
  return __awaiter(this, void 0, void 0, function () {
334
384
  var _this = this;
335
385
  return __generator(this, function (_a) {
336
- return [2 /*return*/, this.signGetChunks(path, buffer).then(function (chunks) {
386
+ return [2 /*return*/, this.prepareChunks(path, buffer, hrp).then(function (chunks) {
337
387
  return _this.signSendChunk(1, chunks.length, chunks[0], txType).then(function (response) { return __awaiter(_this, void 0, void 0, function () {
338
388
  var result, i;
339
389
  return __generator(this, function (_a) {
@@ -1 +1 @@
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"]}
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 prepareChunks(path: number[], buffer: Buffer, hrp?: string) {\n const serializedPath = await this.serializePath(path)\n const firstChunk = (hrp === undefined) ? serializedPath\n : Buffer.concat([serializedPath, CosmosApp.serializeHRP(hrp)])\n\n const chunks = []\n chunks.push(firstChunk)\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.subarray(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, [\n ERROR_CODE.NoError,\n ])\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 async sign(path: number[], buffer: Buffer, hrp?: string, txType = P2_VALUES.JSON) {\n return this.prepareChunks(path, buffer, hrp).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"]}
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@zondax/ledger-cosmos-js",
3
- "author": "ZondaX AG",
3
+ "author": "Zondax AG",
4
4
  "license": "Apache-2.0",
5
- "version": "3.0.2",
5
+ "version": "3.0.3",
6
6
  "description": "Node API for Cosmos App (Ledger Nano S/S+/X)",
7
7
  "main": "./dist/index.js",
8
8
  "typings": "./dist/index.d.ts",
@@ -30,8 +30,17 @@
30
30
  "dependencies": {
31
31
  "@babel/runtime": "^7.14.8",
32
32
  "@ledgerhq/hw-transport": "6.27.1",
33
+ "@ledgerhq/hw-transport-u2f": "^5.36.0-deprecated",
34
+ "@vue/cli-plugin-typescript": "^5.0.8",
35
+ "@vue/cli-service": "^5.0.8",
33
36
  "bech32": "^1.1.4",
34
- "ripemd160": "^2.0.2"
37
+ "buffer": "^6.0.3",
38
+ "crypto": "^1.0.1",
39
+ "crypto-browserify": "^3.12.0",
40
+ "ripemd160": "^2.0.2",
41
+ "stream-browserify": "^3.0.0",
42
+ "vue": "^2.7.7",
43
+ "vue-template-compiler": "^2.7.10"
35
44
  },
36
45
  "devDependencies": {
37
46
  "@babel/cli": "^7.18.10",
@@ -47,11 +56,11 @@
47
56
  "@types/node": "^18.11.9",
48
57
  "@typescript-eslint/eslint-plugin": "^5.33.1",
49
58
  "@typescript-eslint/parser": "^5.33.1",
59
+ "babel-eslint": "^10.1.0",
60
+ "babel-jest": "^28.1.3",
50
61
  "bip32": "2.0.6",
51
62
  "bip39": "3.0.2",
52
63
  "copyfiles": "^2.4.1",
53
- "babel-eslint": "^10.1.0",
54
- "babel-jest": "^28.1.3",
55
64
  "core-js": "^3.15.2",
56
65
  "crypto-js": "4.1.1",
57
66
  "eslint": "^8.22.0",
@@ -65,7 +74,8 @@
65
74
  "secp256k1": "^4.0.2",
66
75
  "ts-jest": "26",
67
76
  "ts-node": "^10.8.1",
68
- "typescript": "^4.7.4"
77
+ "typescript": "^4.7.4",
78
+ "webpack": "^5.74.0"
69
79
  },
70
80
  "moduleDirectories": [
71
81
  "node_modules",