@ledgerhq/hw-app-solana 7.4.3-nightly.0 → 7.5.0-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.
- package/CHANGELOG.md +7 -3
- package/README.md +15 -3
- package/lib/Solana.d.ts +7 -0
- package/lib/Solana.d.ts.map +1 -1
- package/lib/Solana.js +12 -0
- package/lib/Solana.js.map +1 -1
- package/lib/descriptor.d.ts +8 -0
- package/lib/descriptor.d.ts.map +1 -0
- package/lib/descriptor.js +16 -0
- package/lib/descriptor.js.map +1 -0
- package/lib-es/Solana.d.ts +7 -0
- package/lib-es/Solana.d.ts.map +1 -1
- package/lib-es/Solana.js +12 -0
- package/lib-es/Solana.js.map +1 -1
- package/lib-es/descriptor.d.ts +8 -0
- package/lib-es/descriptor.d.ts.map +1 -0
- package/lib-es/descriptor.js +12 -0
- package/lib-es/descriptor.js.map +1 -0
- package/package.json +5 -5
- package/src/Solana.ts +18 -0
- package/src/descriptor.ts +19 -0
- package/tests/Solana.test.ts +15 -0
- package/tests/descriptor.test.ts +21 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
# @ledgerhq/hw-app-solana
|
|
2
2
|
|
|
3
|
-
## 7.
|
|
3
|
+
## 7.5.0-next.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#10225](https://github.com/LedgerHQ/ledger-live/pull/10225) [`e65c386`](https://github.com/LedgerHQ/ledger-live/commit/e65c386cfb3e53e3ee9f501dc08971a93eb5cf81) Thanks [@francois-guerin-ledger](https://github.com/francois-guerin-ledger)! - core(coin-solana,hw-app-solana): support SPL tokens dynamically
|
|
4
8
|
|
|
5
9
|
### Patch Changes
|
|
6
10
|
|
|
7
11
|
- Updated dependencies [[`b5e3217`](https://github.com/LedgerHQ/ledger-live/commit/b5e321789d3a6f9cb1916067790590640db0876f)]:
|
|
8
|
-
- @ledgerhq/errors@6.22.0-
|
|
9
|
-
- @ledgerhq/hw-transport@6.31.7-
|
|
12
|
+
- @ledgerhq/errors@6.22.0-next.0
|
|
13
|
+
- @ledgerhq/hw-transport@6.31.7-next.0
|
|
10
14
|
|
|
11
15
|
## 7.4.2
|
|
12
16
|
|
package/README.md
CHANGED
|
@@ -45,17 +45,19 @@ If ledger returns error `6808` - enable blind signature in settings (not needed
|
|
|
45
45
|
* [getAddress](#getaddress)
|
|
46
46
|
* [Parameters](#parameters-1)
|
|
47
47
|
* [Examples](#examples-1)
|
|
48
|
-
* [
|
|
48
|
+
* [provideTrustedDynamicDescriptor](#providetrusteddynamicdescriptor)
|
|
49
49
|
* [Parameters](#parameters-2)
|
|
50
|
+
* [signTransaction](#signtransaction)
|
|
51
|
+
* [Parameters](#parameters-3)
|
|
50
52
|
* [Examples](#examples-2)
|
|
51
53
|
* [signOffchainMessage](#signoffchainmessage)
|
|
52
|
-
* [Parameters](#parameters-
|
|
54
|
+
* [Parameters](#parameters-4)
|
|
53
55
|
* [Examples](#examples-3)
|
|
54
56
|
* [getAppConfiguration](#getappconfiguration)
|
|
55
57
|
* [Examples](#examples-4)
|
|
56
58
|
* [getChallenge](#getchallenge)
|
|
57
59
|
* [provideTrustedName](#providetrustedname)
|
|
58
|
-
* [Parameters](#parameters-
|
|
60
|
+
* [Parameters](#parameters-5)
|
|
59
61
|
|
|
60
62
|
### Solana
|
|
61
63
|
|
|
@@ -93,6 +95,16 @@ solana.getAddress("44'/501'/0'").then(r => r.address)
|
|
|
93
95
|
|
|
94
96
|
Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<{address: [Buffer](https://nodejs.org/api/buffer.html)}>** an object with the address field
|
|
95
97
|
|
|
98
|
+
#### provideTrustedDynamicDescriptor
|
|
99
|
+
|
|
100
|
+
Provides trusted dynamic and signed coin metadata
|
|
101
|
+
|
|
102
|
+
##### Parameters
|
|
103
|
+
|
|
104
|
+
* `data` **DescriptorInput** An object containing the descriptor and its signature from the CAL
|
|
105
|
+
|
|
106
|
+
Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)>** 
|
|
107
|
+
|
|
96
108
|
#### signTransaction
|
|
97
109
|
|
|
98
110
|
Sign a Solana transaction.
|
package/lib/Solana.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
/// <reference types="node" />
|
|
3
3
|
import Transport from "@ledgerhq/hw-transport";
|
|
4
|
+
import { DescriptorInput } from "./descriptor";
|
|
4
5
|
/**
|
|
5
6
|
* Solana API
|
|
6
7
|
*
|
|
@@ -30,6 +31,12 @@ export default class Solana {
|
|
|
30
31
|
getAddress(path: string, display?: boolean): Promise<{
|
|
31
32
|
address: Buffer;
|
|
32
33
|
}>;
|
|
34
|
+
/**
|
|
35
|
+
* Provides trusted dynamic and signed coin metadata
|
|
36
|
+
*
|
|
37
|
+
* @param data An object containing the descriptor and its signature from the CAL
|
|
38
|
+
*/
|
|
39
|
+
provideTrustedDynamicDescriptor(data: DescriptorInput): Promise<boolean>;
|
|
33
40
|
/**
|
|
34
41
|
* Sign a Solana transaction.
|
|
35
42
|
*
|
package/lib/Solana.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Solana.d.ts","sourceRoot":"","sources":["../src/Solana.ts"],"names":[],"mappings":";;AAAA,OAAO,SAAS,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"Solana.d.ts","sourceRoot":"","sources":["../src/Solana.ts"],"names":[],"mappings":";;AAAA,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAK/C,OAAO,EAAE,eAAe,EAAmB,MAAM,cAAc,CAAC;AA2BhE;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,OAAO,MAAM;IACzB,OAAO,CAAC,SAAS,CAAY;gBAG3B,SAAS,EAAE,SAAS,EAGpB,WAAW,GAAE,MAAsC;IAiBrD;;;;;;;;;;;;OAYG;IACG,UAAU,CACd,IAAI,EAAE,MAAM,EAGZ,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC;QACT,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IAcF;;;;OAIG;IACG,+BAA+B,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAU9E;;;;;;;;;;OAUG;IACG,eAAe,CACnB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;QACT,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAeF;;;;;;;;;;OAUG;IACG,mBAAmB,CACvB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;QACT,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAeF;;;;;;;OAOG;IACG,mBAAmB,IAAI,OAAO,CAAC,SAAS,CAAC;IAa/C;;;;OAIG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAerC;;;;;OAKG;IACG,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYxD,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,aAAa;YAUP,YAAY;IAuC1B,OAAO,CAAC,cAAc;CAWvB;AAED,aAAK,iBAAiB;IACpB,IAAI,IAAA;IACJ,KAAK,IAAA;CACN;AAED,KAAK,SAAS,GAAG;IACf,mBAAmB,EAAE,OAAO,CAAC;IAC7B,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC"}
|
package/lib/Solana.js
CHANGED
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const errors_1 = require("@ledgerhq/errors");
|
|
7
7
|
const bip32_path_1 = __importDefault(require("bip32-path"));
|
|
8
|
+
const descriptor_1 = require("./descriptor");
|
|
8
9
|
const P1_NON_CONFIRM = 0x00;
|
|
9
10
|
const P1_CONFIRM = 0x01;
|
|
10
11
|
const P2_INIT = 0x00;
|
|
@@ -19,6 +20,7 @@ const INS = {
|
|
|
19
20
|
SIGN_OFFCHAIN: 0x07,
|
|
20
21
|
GET_CHALLENGE: 0x20,
|
|
21
22
|
PROVIDE_TRUSTED_NAME: 0x21,
|
|
23
|
+
PROVIDE_TRUSTED_DYNAMIC_DESCRIPTOR: 0x22,
|
|
22
24
|
};
|
|
23
25
|
var EXTRA_STATUS_CODES;
|
|
24
26
|
(function (EXTRA_STATUS_CODES) {
|
|
@@ -47,6 +49,7 @@ class Solana {
|
|
|
47
49
|
"getAppConfiguration",
|
|
48
50
|
"getChallenge",
|
|
49
51
|
"provideTrustedName",
|
|
52
|
+
"provideTrustedDynamicDescriptor",
|
|
50
53
|
], scrambleKey);
|
|
51
54
|
}
|
|
52
55
|
/**
|
|
@@ -72,6 +75,15 @@ class Solana {
|
|
|
72
75
|
address: addressBuffer,
|
|
73
76
|
};
|
|
74
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Provides trusted dynamic and signed coin metadata
|
|
80
|
+
*
|
|
81
|
+
* @param data An object containing the descriptor and its signature from the CAL
|
|
82
|
+
*/
|
|
83
|
+
async provideTrustedDynamicDescriptor(data) {
|
|
84
|
+
await this.sendToDevice(INS.PROVIDE_TRUSTED_DYNAMIC_DESCRIPTOR, P1_NON_CONFIRM, (0, descriptor_1.buildDescriptor)(data));
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
75
87
|
/**
|
|
76
88
|
* Sign a Solana transaction.
|
|
77
89
|
*
|
package/lib/Solana.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Solana.js","sourceRoot":"","sources":["../src/Solana.ts"],"names":[],"mappings":";;;;;AAEA,6CAA+C;AAE/C,4DAAiC;
|
|
1
|
+
{"version":3,"file":"Solana.js","sourceRoot":"","sources":["../src/Solana.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
export type DescriptorInput = {
|
|
4
|
+
data: Buffer;
|
|
5
|
+
signature: Buffer;
|
|
6
|
+
};
|
|
7
|
+
export declare function buildDescriptor({ data, signature }: DescriptorInput): Buffer;
|
|
8
|
+
//# sourceMappingURL=descriptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../src/descriptor.ts"],"names":[],"mappings":";;AAAA,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAYF,wBAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,eAAe,GAAG,MAAM,CAG5E"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildDescriptor = void 0;
|
|
4
|
+
function buildTLV(tag, value) {
|
|
5
|
+
const length = value.length;
|
|
6
|
+
if (length > 0xff) {
|
|
7
|
+
throw new Error("Value length exceeds 255 bytes");
|
|
8
|
+
}
|
|
9
|
+
return Buffer.concat([tag, new Uint8Array([length]), value]);
|
|
10
|
+
}
|
|
11
|
+
function buildDescriptor({ data, signature }) {
|
|
12
|
+
const SIGNATURE_TAG = Buffer.from(new Uint8Array([0x08]));
|
|
13
|
+
return Buffer.concat([data, buildTLV(SIGNATURE_TAG, signature)]);
|
|
14
|
+
}
|
|
15
|
+
exports.buildDescriptor = buildDescriptor;
|
|
16
|
+
//# sourceMappingURL=descriptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"descriptor.js","sourceRoot":"","sources":["../src/descriptor.ts"],"names":[],"mappings":";;;AAKA,SAAS,QAAQ,CAAC,GAAW,EAAE,KAAa;IAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAE5B,IAAI,MAAM,GAAG,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,SAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,SAAS,EAAmB;IAClE,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1D,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC;AAHD,0CAGC"}
|
package/lib-es/Solana.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
/// <reference types="node" />
|
|
3
3
|
import Transport from "@ledgerhq/hw-transport";
|
|
4
|
+
import { DescriptorInput } from "./descriptor";
|
|
4
5
|
/**
|
|
5
6
|
* Solana API
|
|
6
7
|
*
|
|
@@ -30,6 +31,12 @@ export default class Solana {
|
|
|
30
31
|
getAddress(path: string, display?: boolean): Promise<{
|
|
31
32
|
address: Buffer;
|
|
32
33
|
}>;
|
|
34
|
+
/**
|
|
35
|
+
* Provides trusted dynamic and signed coin metadata
|
|
36
|
+
*
|
|
37
|
+
* @param data An object containing the descriptor and its signature from the CAL
|
|
38
|
+
*/
|
|
39
|
+
provideTrustedDynamicDescriptor(data: DescriptorInput): Promise<boolean>;
|
|
33
40
|
/**
|
|
34
41
|
* Sign a Solana transaction.
|
|
35
42
|
*
|
package/lib-es/Solana.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Solana.d.ts","sourceRoot":"","sources":["../src/Solana.ts"],"names":[],"mappings":";;AAAA,OAAO,SAAS,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"Solana.d.ts","sourceRoot":"","sources":["../src/Solana.ts"],"names":[],"mappings":";;AAAA,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAK/C,OAAO,EAAE,eAAe,EAAmB,MAAM,cAAc,CAAC;AA2BhE;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,OAAO,MAAM;IACzB,OAAO,CAAC,SAAS,CAAY;gBAG3B,SAAS,EAAE,SAAS,EAGpB,WAAW,GAAE,MAAsC;IAiBrD;;;;;;;;;;;;OAYG;IACG,UAAU,CACd,IAAI,EAAE,MAAM,EAGZ,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC;QACT,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IAcF;;;;OAIG;IACG,+BAA+B,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAU9E;;;;;;;;;;OAUG;IACG,eAAe,CACnB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;QACT,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAeF;;;;;;;;;;OAUG;IACG,mBAAmB,CACvB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;QACT,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAeF;;;;;;;OAOG;IACG,mBAAmB,IAAI,OAAO,CAAC,SAAS,CAAC;IAa/C;;;;OAIG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAerC;;;;;OAKG;IACG,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYxD,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,aAAa;YAUP,YAAY;IAuC1B,OAAO,CAAC,cAAc;CAWvB;AAED,aAAK,iBAAiB;IACpB,IAAI,IAAA;IACJ,KAAK,IAAA;CACN;AAED,KAAK,SAAS,GAAG;IACf,mBAAmB,EAAE,OAAO,CAAC;IAC7B,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC"}
|
package/lib-es/Solana.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { StatusCodes } from "@ledgerhq/errors";
|
|
2
2
|
import BIPPath from "bip32-path";
|
|
3
|
+
import { buildDescriptor } from "./descriptor";
|
|
3
4
|
const P1_NON_CONFIRM = 0x00;
|
|
4
5
|
const P1_CONFIRM = 0x01;
|
|
5
6
|
const P2_INIT = 0x00;
|
|
@@ -14,6 +15,7 @@ const INS = {
|
|
|
14
15
|
SIGN_OFFCHAIN: 0x07,
|
|
15
16
|
GET_CHALLENGE: 0x20,
|
|
16
17
|
PROVIDE_TRUSTED_NAME: 0x21,
|
|
18
|
+
PROVIDE_TRUSTED_DYNAMIC_DESCRIPTOR: 0x22,
|
|
17
19
|
};
|
|
18
20
|
var EXTRA_STATUS_CODES;
|
|
19
21
|
(function (EXTRA_STATUS_CODES) {
|
|
@@ -42,6 +44,7 @@ export default class Solana {
|
|
|
42
44
|
"getAppConfiguration",
|
|
43
45
|
"getChallenge",
|
|
44
46
|
"provideTrustedName",
|
|
47
|
+
"provideTrustedDynamicDescriptor",
|
|
45
48
|
], scrambleKey);
|
|
46
49
|
}
|
|
47
50
|
/**
|
|
@@ -67,6 +70,15 @@ export default class Solana {
|
|
|
67
70
|
address: addressBuffer,
|
|
68
71
|
};
|
|
69
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Provides trusted dynamic and signed coin metadata
|
|
75
|
+
*
|
|
76
|
+
* @param data An object containing the descriptor and its signature from the CAL
|
|
77
|
+
*/
|
|
78
|
+
async provideTrustedDynamicDescriptor(data) {
|
|
79
|
+
await this.sendToDevice(INS.PROVIDE_TRUSTED_DYNAMIC_DESCRIPTOR, P1_NON_CONFIRM, buildDescriptor(data));
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
70
82
|
/**
|
|
71
83
|
* Sign a Solana transaction.
|
|
72
84
|
*
|
package/lib-es/Solana.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Solana.js","sourceRoot":"","sources":["../src/Solana.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,OAAO,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"Solana.js","sourceRoot":"","sources":["../src/Solana.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
export type DescriptorInput = {
|
|
4
|
+
data: Buffer;
|
|
5
|
+
signature: Buffer;
|
|
6
|
+
};
|
|
7
|
+
export declare function buildDescriptor({ data, signature }: DescriptorInput): Buffer;
|
|
8
|
+
//# sourceMappingURL=descriptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../src/descriptor.ts"],"names":[],"mappings":";;AAAA,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAYF,wBAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,eAAe,GAAG,MAAM,CAG5E"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
function buildTLV(tag, value) {
|
|
2
|
+
const length = value.length;
|
|
3
|
+
if (length > 0xff) {
|
|
4
|
+
throw new Error("Value length exceeds 255 bytes");
|
|
5
|
+
}
|
|
6
|
+
return Buffer.concat([tag, new Uint8Array([length]), value]);
|
|
7
|
+
}
|
|
8
|
+
export function buildDescriptor({ data, signature }) {
|
|
9
|
+
const SIGNATURE_TAG = Buffer.from(new Uint8Array([0x08]));
|
|
10
|
+
return Buffer.concat([data, buildTLV(SIGNATURE_TAG, signature)]);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=descriptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"descriptor.js","sourceRoot":"","sources":["../src/descriptor.ts"],"names":[],"mappings":"AAKA,SAAS,QAAQ,CAAC,GAAW,EAAE,KAAa;IAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAE5B,IAAI,MAAM,GAAG,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAE,IAAI,EAAE,SAAS,EAAmB;IAClE,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1D,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ledgerhq/hw-app-solana",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.5.0-next.0",
|
|
4
4
|
"description": "Ledger Hardware Wallet Solana Application API",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Ledger",
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
"license": "Apache-2.0",
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"bip32-path": "^0.4.2",
|
|
31
|
-
"@ledgerhq/errors": "^6.22.0-
|
|
32
|
-
"@ledgerhq/hw-transport": "^6.31.7-
|
|
31
|
+
"@ledgerhq/errors": "^6.22.0-next.0",
|
|
32
|
+
"@ledgerhq/hw-transport": "^6.31.7-next.0"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@types/jest": "^29.5.10",
|
|
@@ -40,8 +40,8 @@
|
|
|
40
40
|
"source-map-support": "^0.5.21",
|
|
41
41
|
"ts-jest": "^29.1.1",
|
|
42
42
|
"ts-node": "^10.4.0",
|
|
43
|
-
"@ledgerhq/hw-transport-mocker": "^6.29.7-
|
|
44
|
-
"@ledgerhq/hw-transport-node-speculos": "^6.29.7-
|
|
43
|
+
"@ledgerhq/hw-transport-mocker": "^6.29.7-next.0",
|
|
44
|
+
"@ledgerhq/hw-transport-node-speculos": "^6.29.7-next.0"
|
|
45
45
|
},
|
|
46
46
|
"scripts": {
|
|
47
47
|
"clean": "rimraf lib lib-es",
|
package/src/Solana.ts
CHANGED
|
@@ -3,6 +3,7 @@ import Transport from "@ledgerhq/hw-transport";
|
|
|
3
3
|
import { StatusCodes } from "@ledgerhq/errors";
|
|
4
4
|
|
|
5
5
|
import BIPPath from "bip32-path";
|
|
6
|
+
import { DescriptorInput, buildDescriptor } from "./descriptor";
|
|
6
7
|
|
|
7
8
|
const P1_NON_CONFIRM = 0x00;
|
|
8
9
|
const P1_CONFIRM = 0x01;
|
|
@@ -22,6 +23,7 @@ const INS = {
|
|
|
22
23
|
SIGN_OFFCHAIN: 0x07,
|
|
23
24
|
GET_CHALLENGE: 0x20,
|
|
24
25
|
PROVIDE_TRUSTED_NAME: 0x21,
|
|
26
|
+
PROVIDE_TRUSTED_DYNAMIC_DESCRIPTOR: 0x22,
|
|
25
27
|
};
|
|
26
28
|
|
|
27
29
|
enum EXTRA_STATUS_CODES {
|
|
@@ -56,6 +58,7 @@ export default class Solana {
|
|
|
56
58
|
"getAppConfiguration",
|
|
57
59
|
"getChallenge",
|
|
58
60
|
"provideTrustedName",
|
|
61
|
+
"provideTrustedDynamicDescriptor",
|
|
59
62
|
],
|
|
60
63
|
scrambleKey,
|
|
61
64
|
);
|
|
@@ -95,6 +98,21 @@ export default class Solana {
|
|
|
95
98
|
};
|
|
96
99
|
}
|
|
97
100
|
|
|
101
|
+
/**
|
|
102
|
+
* Provides trusted dynamic and signed coin metadata
|
|
103
|
+
*
|
|
104
|
+
* @param data An object containing the descriptor and its signature from the CAL
|
|
105
|
+
*/
|
|
106
|
+
async provideTrustedDynamicDescriptor(data: DescriptorInput): Promise<boolean> {
|
|
107
|
+
await this.sendToDevice(
|
|
108
|
+
INS.PROVIDE_TRUSTED_DYNAMIC_DESCRIPTOR,
|
|
109
|
+
P1_NON_CONFIRM,
|
|
110
|
+
buildDescriptor(data),
|
|
111
|
+
);
|
|
112
|
+
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
|
|
98
116
|
/**
|
|
99
117
|
* Sign a Solana transaction.
|
|
100
118
|
*
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type DescriptorInput = {
|
|
2
|
+
data: Buffer;
|
|
3
|
+
signature: Buffer;
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
function buildTLV(tag: Buffer, value: Buffer): Buffer {
|
|
7
|
+
const length = value.length;
|
|
8
|
+
|
|
9
|
+
if (length > 0xff) {
|
|
10
|
+
throw new Error("Value length exceeds 255 bytes");
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
return Buffer.concat([tag, new Uint8Array([length]), value]);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function buildDescriptor({ data, signature }: DescriptorInput): Buffer {
|
|
17
|
+
const SIGNATURE_TAG = Buffer.from(new Uint8Array([0x08]));
|
|
18
|
+
return Buffer.concat([data, buildTLV(SIGNATURE_TAG, signature)]);
|
|
19
|
+
}
|
package/tests/Solana.test.ts
CHANGED
|
@@ -4,6 +4,21 @@ import {
|
|
|
4
4
|
} from "@ledgerhq/hw-transport-mocker";
|
|
5
5
|
import Solana from "../src/Solana";
|
|
6
6
|
|
|
7
|
+
test("provideTrustedDynamicDescriptor", async () => {
|
|
8
|
+
const transport = await openTransportReplayer(
|
|
9
|
+
RecordStore.fromString(`
|
|
10
|
+
=> e02200000711220803334455
|
|
11
|
+
<= 9000
|
|
12
|
+
`)
|
|
13
|
+
);
|
|
14
|
+
const solana = new Solana(transport);
|
|
15
|
+
expect(await solana.provideTrustedDynamicDescriptor({
|
|
16
|
+
data: Buffer.from("1122", "hex"),
|
|
17
|
+
signature: Buffer.from("334455", "hex"),
|
|
18
|
+
}),
|
|
19
|
+
).toEqual(true);
|
|
20
|
+
})
|
|
21
|
+
|
|
7
22
|
test("getAppConfiguration", async () => {
|
|
8
23
|
const transport = await openTransportReplayer(
|
|
9
24
|
RecordStore.fromString(`
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { buildDescriptor } from "../src/descriptor";
|
|
2
|
+
|
|
3
|
+
describe("Solana descriptor", () => {
|
|
4
|
+
it("builds a descriptor", () => {
|
|
5
|
+
expect(
|
|
6
|
+
buildDescriptor({
|
|
7
|
+
data: Buffer.from("000102030405", "hex"),
|
|
8
|
+
signature: Buffer.from("060708090a0b", "hex"),
|
|
9
|
+
}),
|
|
10
|
+
).toEqual(Buffer.from("0001020304050806060708090a0b", "hex"));
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
it("fails to restrict the signature size within 1 byte", () => {
|
|
14
|
+
expect(() =>
|
|
15
|
+
buildDescriptor({
|
|
16
|
+
data: Buffer.from("000102030405", "hex"),
|
|
17
|
+
signature: Buffer.from(new Uint8Array(256)),
|
|
18
|
+
}),
|
|
19
|
+
).toThrow("Value length exceeds 255 bytes");
|
|
20
|
+
});
|
|
21
|
+
});
|