@ledgerhq/hw-app-str 7.2.10-nightly.20251210120335 → 7.3.0-nightly.20251212024049

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 CHANGED
@@ -1,12 +1,16 @@
1
1
  # @ledgerhq/hw-app-str
2
2
 
3
- ## 7.2.10-nightly.20251210120335
3
+ ## 7.3.0-nightly.20251212024049
4
+
5
+ ### Minor Changes
6
+
7
+ - [#13137](https://github.com/LedgerHQ/ledger-live/pull/13137) [`7da392a`](https://github.com/LedgerHQ/ledger-live/commit/7da392a6f4b220913050ce1baa4003a76c0b24e9) Thanks [@overcat](https://github.com/overcat)! - Add `signMessage` method for message signing.
4
8
 
5
9
  ### Patch Changes
6
10
 
7
- - Updated dependencies [[`bdacedf`](https://github.com/LedgerHQ/ledger-live/commit/bdacedfe32bea8ffce96ab675a44c0d7cf395143)]:
8
- - @ledgerhq/errors@6.28.0-nightly.20251210120335
9
- - @ledgerhq/hw-transport@6.31.14-nightly.20251210120335
11
+ - Updated dependencies [[`4be69a7`](https://github.com/LedgerHQ/ledger-live/commit/4be69a71dcd7624a1cba8dd1b1847ef009eb2d83), [`bdacedf`](https://github.com/LedgerHQ/ledger-live/commit/bdacedfe32bea8ffce96ab675a44c0d7cf395143)]:
12
+ - @ledgerhq/errors@6.28.0-nightly.20251212024049
13
+ - @ledgerhq/hw-transport@6.31.14-nightly.20251212024049
10
14
 
11
15
  ## 7.2.9
12
16
 
package/README.md CHANGED
@@ -56,6 +56,9 @@ We have written corresponding classes for exceptions that developers should acti
56
56
  * [signHash](#signhash)
57
57
  * [Parameters](#parameters-4)
58
58
  * [Examples](#examples-5)
59
+ * [signMessage](#signmessage)
60
+ * [Parameters](#parameters-5)
61
+ * [Examples](#examples-6)
59
62
 
60
63
  ### StellarHashSigningNotEnabledError
61
64
 
@@ -172,3 +175,20 @@ str.signHash("44'/148'/0'", hash).then(o => o.signature)
172
175
  ```
173
176
 
174
177
  Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<{signature: [Buffer](https://nodejs.org/api/buffer.html)}>** an object with the signature
178
+
179
+ #### signMessage
180
+
181
+ Sign a message.
182
+
183
+ ##### Parameters
184
+
185
+ * `path` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** a path in BIP 32 format
186
+ * `message` **[Buffer](https://nodejs.org/api/buffer.html)** the message to sign
187
+
188
+ ##### Examples
189
+
190
+ ```javascript
191
+ str.signMessage("44'/148'/0'", message).then(o => o.signature)
192
+ ```
193
+
194
+ Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<{signature: [Buffer](https://nodejs.org/api/buffer.html)}>** an object with the signature
package/lib/Str.d.ts CHANGED
@@ -92,6 +92,18 @@ export default class Str {
92
92
  signHash(path: string, hash: Buffer): Promise<{
93
93
  signature: Buffer;
94
94
  }>;
95
+ /**
96
+ * Sign a message.
97
+ *
98
+ * @param path a path in BIP 32 format
99
+ * @param message the message to sign
100
+ * @return an object with the signature
101
+ * @example
102
+ * str.signMessage("44'/148'/0'", message).then(o => o.signature)
103
+ */
104
+ signMessage(path: string, message: Buffer): Promise<{
105
+ signature: Buffer;
106
+ }>;
95
107
  private sendToDevice;
96
108
  }
97
109
  export * from "./errors";
package/lib/Str.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Str.d.ts","sourceRoot":"","sources":["../src/Str.ts"],"names":[],"mappings":";;AAAA;;;;;;;;;;;;;;;kFAekF;AAClF,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AA8BpD;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,OAAO,GAAG;IACtB,OAAO,CAAC,SAAS,CAAY;gBAEjB,SAAS,EAAE,SAAS,EAAE,WAAW,SAAQ;IAerD;;;;;;;OAOG;IACG,mBAAmB,IAAI,OAAO,CAAC;QACnC,OAAO,EAAE,MAAM,CAAC;QAChB,kBAAkB,EAAE,OAAO,CAAC;QAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IAUF;;;;;;;;;OASG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAWpF;;;;;;;;OAQG;IACG,eAAe,CACnB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;QACT,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAOF;;;;;;;;OAQG;IACG,wBAAwB,CAC5B,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC;QACT,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAOF;;;;;;;;OAQG;IACG,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;QACT,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;YAOY,YAAY;CAsB3B;AA8CD,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"Str.d.ts","sourceRoot":"","sources":["../src/Str.ts"],"names":[],"mappings":";;AAAA;;;;;;;;;;;;;;;kFAekF;AAClF,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AA+BpD;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,OAAO,GAAG;IACtB,OAAO,CAAC,SAAS,CAAY;gBAEjB,SAAS,EAAE,SAAS,EAAE,WAAW,SAAQ;IAerD;;;;;;;OAOG;IACG,mBAAmB,IAAI,OAAO,CAAC;QACnC,OAAO,EAAE,MAAM,CAAC;QAChB,kBAAkB,EAAE,OAAO,CAAC;QAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IAUF;;;;;;;;;OASG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAWpF;;;;;;;;OAQG;IACG,eAAe,CACnB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;QACT,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAOF;;;;;;;;OAQG;IACG,wBAAwB,CAC5B,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC;QACT,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAOF;;;;;;;;OAQG;IACG,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;QACT,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAOF;;;;;;;;OAQG;IACG,WAAW,CACf,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QACT,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;YAOY,YAAY;CAsB3B;AA8CD,cAAc,UAAU,CAAC"}
package/lib/Str.js CHANGED
@@ -31,6 +31,7 @@ const INS_SIGN_TX = 0x04;
31
31
  const INS_GET_CONF = 0x06;
32
32
  const INS_SIGN_HASH = 0x08;
33
33
  const INS_SIGN_SOROBAN_AUTHORIZATION = 0x0a;
34
+ const INS_SIGN_MESSAGE = 0x0c;
34
35
  const APDU_MAX_PAYLOAD = 255;
35
36
  const SW_DENY = 0x6985;
36
37
  const SW_HASH_SIGNING_MODE_NOT_ENABLED = 0x6c66;
@@ -141,6 +142,21 @@ class Str {
141
142
  const resp = await this.sendToDevice(INS_SIGN_HASH, payload);
142
143
  return { signature: resp };
143
144
  }
145
+ /**
146
+ * Sign a message.
147
+ *
148
+ * @param path a path in BIP 32 format
149
+ * @param message the message to sign
150
+ * @return an object with the signature
151
+ * @example
152
+ * str.signMessage("44'/148'/0'", message).then(o => o.signature)
153
+ */
154
+ async signMessage(path, message) {
155
+ const pathBuffer = pathToBuffer(path);
156
+ const payload = Buffer.concat([pathBuffer, message]);
157
+ const resp = await this.sendToDevice(INS_SIGN_MESSAGE, payload);
158
+ return { signature: resp };
159
+ }
144
160
  async sendToDevice(instruction, payload) {
145
161
  let response = Buffer.alloc(0);
146
162
  let remaining = payload.length;
package/lib/Str.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Str.js","sourceRoot":"","sources":["../src/Str.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Str.js","sourceRoot":"","sources":["../src/Str.ts"],"names":[],"mappings":"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"}
package/lib-es/Str.d.ts CHANGED
@@ -92,6 +92,18 @@ export default class Str {
92
92
  signHash(path: string, hash: Buffer): Promise<{
93
93
  signature: Buffer;
94
94
  }>;
95
+ /**
96
+ * Sign a message.
97
+ *
98
+ * @param path a path in BIP 32 format
99
+ * @param message the message to sign
100
+ * @return an object with the signature
101
+ * @example
102
+ * str.signMessage("44'/148'/0'", message).then(o => o.signature)
103
+ */
104
+ signMessage(path: string, message: Buffer): Promise<{
105
+ signature: Buffer;
106
+ }>;
95
107
  private sendToDevice;
96
108
  }
97
109
  export * from "./errors";
@@ -1 +1 @@
1
- {"version":3,"file":"Str.d.ts","sourceRoot":"","sources":["../src/Str.ts"],"names":[],"mappings":";;AAAA;;;;;;;;;;;;;;;kFAekF;AAClF,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AA8BpD;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,OAAO,GAAG;IACtB,OAAO,CAAC,SAAS,CAAY;gBAEjB,SAAS,EAAE,SAAS,EAAE,WAAW,SAAQ;IAerD;;;;;;;OAOG;IACG,mBAAmB,IAAI,OAAO,CAAC;QACnC,OAAO,EAAE,MAAM,CAAC;QAChB,kBAAkB,EAAE,OAAO,CAAC;QAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IAUF;;;;;;;;;OASG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAWpF;;;;;;;;OAQG;IACG,eAAe,CACnB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;QACT,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAOF;;;;;;;;OAQG;IACG,wBAAwB,CAC5B,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC;QACT,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAOF;;;;;;;;OAQG;IACG,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;QACT,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;YAOY,YAAY;CAsB3B;AA8CD,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"Str.d.ts","sourceRoot":"","sources":["../src/Str.ts"],"names":[],"mappings":";;AAAA;;;;;;;;;;;;;;;kFAekF;AAClF,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AA+BpD;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,OAAO,GAAG;IACtB,OAAO,CAAC,SAAS,CAAY;gBAEjB,SAAS,EAAE,SAAS,EAAE,WAAW,SAAQ;IAerD;;;;;;;OAOG;IACG,mBAAmB,IAAI,OAAO,CAAC;QACnC,OAAO,EAAE,MAAM,CAAC;QAChB,kBAAkB,EAAE,OAAO,CAAC;QAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IAUF;;;;;;;;;OASG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAWpF;;;;;;;;OAQG;IACG,eAAe,CACnB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;QACT,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAOF;;;;;;;;OAQG;IACG,wBAAwB,CAC5B,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC;QACT,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAOF;;;;;;;;OAQG;IACG,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;QACT,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAOF;;;;;;;;OAQG;IACG,WAAW,CACf,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QACT,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;YAOY,YAAY;CAsB3B;AA8CD,cAAc,UAAU,CAAC"}
package/lib-es/Str.js CHANGED
@@ -12,6 +12,7 @@ const INS_SIGN_TX = 0x04;
12
12
  const INS_GET_CONF = 0x06;
13
13
  const INS_SIGN_HASH = 0x08;
14
14
  const INS_SIGN_SOROBAN_AUTHORIZATION = 0x0a;
15
+ const INS_SIGN_MESSAGE = 0x0c;
15
16
  const APDU_MAX_PAYLOAD = 255;
16
17
  const SW_DENY = 0x6985;
17
18
  const SW_HASH_SIGNING_MODE_NOT_ENABLED = 0x6c66;
@@ -122,6 +123,21 @@ export default class Str {
122
123
  const resp = await this.sendToDevice(INS_SIGN_HASH, payload);
123
124
  return { signature: resp };
124
125
  }
126
+ /**
127
+ * Sign a message.
128
+ *
129
+ * @param path a path in BIP 32 format
130
+ * @param message the message to sign
131
+ * @return an object with the signature
132
+ * @example
133
+ * str.signMessage("44'/148'/0'", message).then(o => o.signature)
134
+ */
135
+ async signMessage(path, message) {
136
+ const pathBuffer = pathToBuffer(path);
137
+ const payload = Buffer.concat([pathBuffer, message]);
138
+ const resp = await this.sendToDevice(INS_SIGN_MESSAGE, payload);
139
+ return { signature: resp };
140
+ }
125
141
  async sendToDevice(instruction, payload) {
126
142
  let response = Buffer.alloc(0);
127
143
  let remaining = payload.length;
package/lib-es/Str.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Str.js","sourceRoot":"","sources":["../src/Str.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Str.js","sourceRoot":"","sources":["../src/Str.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ledgerhq/hw-app-str",
3
- "version": "7.2.10-nightly.20251210120335",
3
+ "version": "7.3.0-nightly.20251212024049",
4
4
  "description": "Ledger Hardware Wallet Stellar 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/hw-transport": "6.31.14-nightly.20251210120335",
32
- "@ledgerhq/errors": "^6.28.0-nightly.20251210120335"
31
+ "@ledgerhq/errors": "^6.28.0-nightly.20251212024049",
32
+ "@ledgerhq/hw-transport": "6.31.14-nightly.20251212024049"
33
33
  },
34
34
  "devDependencies": {
35
35
  "@types/jest": "^29.5.10",
@@ -40,7 +40,7 @@
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.30.0-nightly.20251210120335"
43
+ "@ledgerhq/hw-transport-mocker": "^6.30.0-nightly.20251212024049"
44
44
  },
45
45
  "gitHead": "dd0dea64b58e5a9125c8a422dcffd29e5ef6abec",
46
46
  "scripts": {
package/src/Str.ts CHANGED
@@ -36,6 +36,7 @@ const INS_SIGN_TX = 0x04;
36
36
  const INS_GET_CONF = 0x06;
37
37
  const INS_SIGN_HASH = 0x08;
38
38
  const INS_SIGN_SOROBAN_AUTHORIZATION = 0x0a;
39
+ const INS_SIGN_MESSAGE = 0x0c;
39
40
 
40
41
  const APDU_MAX_PAYLOAD = 255;
41
42
 
@@ -178,6 +179,27 @@ export default class Str {
178
179
  return { signature: resp };
179
180
  }
180
181
 
182
+ /**
183
+ * Sign a message.
184
+ *
185
+ * @param path a path in BIP 32 format
186
+ * @param message the message to sign
187
+ * @return an object with the signature
188
+ * @example
189
+ * str.signMessage("44'/148'/0'", message).then(o => o.signature)
190
+ */
191
+ async signMessage(
192
+ path: string,
193
+ message: Buffer,
194
+ ): Promise<{
195
+ signature: Buffer;
196
+ }> {
197
+ const pathBuffer = pathToBuffer(path);
198
+ const payload = Buffer.concat([pathBuffer, message]);
199
+ const resp = await this.sendToDevice(INS_SIGN_MESSAGE, payload);
200
+ return { signature: resp };
201
+ }
202
+
181
203
  private async sendToDevice(instruction: number, payload: Buffer) {
182
204
  let response: Buffer = Buffer.alloc(0);
183
205
  let remaining = payload.length;
package/tests/Str.test.ts CHANGED
@@ -1,9 +1,11 @@
1
- import {
2
- openTransportReplayer,
3
- RecordStore,
4
- } from "@ledgerhq/hw-transport-mocker";
1
+ import { openTransportReplayer, RecordStore } from "@ledgerhq/hw-transport-mocker";
5
2
  import Str from "../src/Str";
6
- import { StellarHashSigningNotEnabledError, StellarDataParsingFailedError, StellarUserRefusedError, StellarDataTooLargeError } from "../src/errors";
3
+ import {
4
+ StellarHashSigningNotEnabledError,
5
+ StellarDataParsingFailedError,
6
+ StellarUserRefusedError,
7
+ StellarDataTooLargeError,
8
+ } from "../src/errors";
7
9
  import { TransportStatusError } from "@ledgerhq/errors";
8
10
 
9
11
  test("getAppConfiguration (hash signing disabled)", async () => {
@@ -11,7 +13,7 @@ test("getAppConfiguration (hash signing disabled)", async () => {
11
13
  RecordStore.fromString(`
12
14
  => e006000000
13
15
  <= 00050401061a9000
14
- `)
16
+ `),
15
17
  );
16
18
  const str = new Str(transport);
17
19
  const result = await str.getAppConfiguration();
@@ -23,7 +25,7 @@ test("getAppConfiguration (hash signing enabled)", async () => {
23
25
  RecordStore.fromString(`
24
26
  => e006000000
25
27
  <= 01050401061a9000
26
- `)
28
+ `),
27
29
  );
28
30
  const str = new Str(transport);
29
31
  const result = await str.getAppConfiguration();
@@ -35,11 +37,15 @@ test("getAppConfiguration (old version app < 5.4.1)", async () => {
35
37
  RecordStore.fromString(`
36
38
  => e006000000
37
39
  <= 000504019000
38
- `)
40
+ `),
39
41
  );
40
42
  const str = new Str(transport);
41
43
  const result = await str.getAppConfiguration();
42
- expect(result).toStrictEqual({ hashSigningEnabled: false, maxDataSize: undefined, version: "5.4.1" });
44
+ expect(result).toStrictEqual({
45
+ hashSigningEnabled: false,
46
+ maxDataSize: undefined,
47
+ version: "5.4.1",
48
+ });
43
49
  });
44
50
 
45
51
  test("getPublicKey (without confirm)", async () => {
@@ -47,12 +53,12 @@ test("getPublicKey (without confirm)", async () => {
47
53
  RecordStore.fromString(`
48
54
  => e00200000d038000002c8000009480000000
49
55
  <= 9a222500cf47b03d05edec04ed3294cece1de727ccadb401f47d6b4b230e81a09000
50
- `)
56
+ `),
51
57
  );
52
58
  const str = new Str(transport);
53
59
  const { rawPublicKey } = await str.getPublicKey("44'/148'/0'", false);
54
60
  expect(rawPublicKey.toString("hex")).toEqual(
55
- "9a222500cf47b03d05edec04ed3294cece1de727ccadb401f47d6b4b230e81a0"
61
+ "9a222500cf47b03d05edec04ed3294cece1de727ccadb401f47d6b4b230e81a0",
56
62
  );
57
63
  });
58
64
 
@@ -61,12 +67,12 @@ test("getPublicKey (with confirm)", async () => {
61
67
  RecordStore.fromString(`
62
68
  => e00200010d038000002c8000009480000000
63
69
  <= 9a222500cf47b03d05edec04ed3294cece1de727ccadb401f47d6b4b230e81a09000
64
- `)
70
+ `),
65
71
  );
66
72
  const str = new Str(transport);
67
73
  const { rawPublicKey } = await str.getPublicKey("44'/148'/0'", true);
68
74
  expect(rawPublicKey.toString("hex")).toEqual(
69
- "9a222500cf47b03d05edec04ed3294cece1de727ccadb401f47d6b4b230e81a0"
75
+ "9a222500cf47b03d05edec04ed3294cece1de727ccadb401f47d6b4b230e81a0",
70
76
  );
71
77
  });
72
78
 
@@ -75,7 +81,7 @@ test("getPublicKey (with confirm and rejected)", async () => {
75
81
  RecordStore.fromString(`
76
82
  => e00200010d038000002c8000009480000000
77
83
  <= 6985
78
- `)
84
+ `),
79
85
  );
80
86
  const str = new Str(transport);
81
87
  await expect(str.getPublicKey("44'/148'/0'", true)).rejects.toThrow(StellarUserRefusedError);
@@ -86,40 +92,51 @@ test("signHash (hash signing enabled)", async () => {
86
92
  RecordStore.fromString(`
87
93
  => e00800002d038000002c8000009480000000a85c933d37847689825acbdfeb50e66d791814abf03b9be4bd6450abb6c99616
88
94
  <= bd4ddd948dd1b27d92672d968eba50b8822eacebf67142f77eda5c5ee9c569c048c90b074a677470984bb203417e911d5b1d74270c2a82772cb80893fca1d70b9000
89
- `)
95
+ `),
90
96
  );
91
97
  const str = new Str(transport);
92
- const hash = Buffer.from("a85c933d37847689825acbdfeb50e66d791814abf03b9be4bd6450abb6c99616", "hex");
98
+ const hash = Buffer.from(
99
+ "a85c933d37847689825acbdfeb50e66d791814abf03b9be4bd6450abb6c99616",
100
+ "hex",
101
+ );
93
102
  const { signature } = await str.signHash("44'/148'/0'", hash);
94
103
  const result = signature.toString("hex");
95
104
  expect(result).toEqual(
96
- "bd4ddd948dd1b27d92672d968eba50b8822eacebf67142f77eda5c5ee9c569c048c90b074a677470984bb203417e911d5b1d74270c2a82772cb80893fca1d70b"
105
+ "bd4ddd948dd1b27d92672d968eba50b8822eacebf67142f77eda5c5ee9c569c048c90b074a677470984bb203417e911d5b1d74270c2a82772cb80893fca1d70b",
97
106
  );
98
- })
107
+ });
99
108
 
100
109
  test("signHash (hash signing disabled)", async () => {
101
110
  const transport = await openTransportReplayer(
102
111
  RecordStore.fromString(`
103
112
  => e00800002d038000002c8000009480000000a85c933d37847689825acbdfeb50e66d791814abf03b9be4bd6450abb6c99616
104
113
  <= 6c66
105
- `)
114
+ `),
106
115
  );
107
116
  const str = new Str(transport);
108
- const hash = Buffer.from("a85c933d37847689825acbdfeb50e66d791814abf03b9be4bd6450abb6c99616", "hex");
109
- await expect(str.signHash("44'/148'/0'", hash)).rejects.toThrow(StellarHashSigningNotEnabledError);
110
- })
117
+ const hash = Buffer.from(
118
+ "a85c933d37847689825acbdfeb50e66d791814abf03b9be4bd6450abb6c99616",
119
+ "hex",
120
+ );
121
+ await expect(str.signHash("44'/148'/0'", hash)).rejects.toThrow(
122
+ StellarHashSigningNotEnabledError,
123
+ );
124
+ });
111
125
 
112
126
  test("signHash (rejected)", async () => {
113
127
  const transport = await openTransportReplayer(
114
128
  RecordStore.fromString(`
115
129
  => e00800002d038000002c8000009480000000a85c933d37847689825acbdfeb50e66d791814abf03b9be4bd6450abb6c99616
116
130
  <= 6985
117
- `)
131
+ `),
118
132
  );
119
133
  const str = new Str(transport);
120
- const hash = Buffer.from("a85c933d37847689825acbdfeb50e66d791814abf03b9be4bd6450abb6c99616", "hex");
134
+ const hash = Buffer.from(
135
+ "a85c933d37847689825acbdfeb50e66d791814abf03b9be4bd6450abb6c99616",
136
+ "hex",
137
+ );
121
138
  await expect(str.signHash("44'/148'/0'", hash)).rejects.toThrow(StellarUserRefusedError);
122
- })
139
+ });
123
140
 
124
141
  test("signTransaction (size exceeds APDU_MAX_PAYLOAD)", async () => {
125
142
  const transport = await openTransportReplayer(
@@ -132,17 +149,17 @@ test("signTransaction (size exceeds APDU_MAX_PAYLOAD)", async () => {
132
149
  <= 9000
133
150
  => e00480003c0000000713e16858bde4ab50a006dbf07172288f3ec19d8640d1a853016c60c15c2511170000000000186636000002b000000000000000000000000c
134
151
  <= 83968afc83b45d0672f5b5259a7bab68ee030f6ffda0c2f3fd550e3b5dd40b3a6bee1f246e760523ab6bd434f9e11f237ffd16bc8f18bb58a59eb94abe1a5a0c9000
135
- `)
152
+ `),
136
153
  );
137
154
  const str = new Str(transport);
138
155
  const transaction = Buffer.from(
139
156
  "7ac33997544e3175d266bd022439b22cdb16508c01163f26e5cb2a3e1045a9790000000200000000e93388bbfd2fbd11806dd0bd59cea9079e7cc70ce7b1e154f114cdfe4e466ecd000071d7002d9fed000000010000000000000000000000010000000100000000e93388bbfd2fbd11806dd0bd59cea9079e7cc70ce7b1e154f114cdfe4e466ecd00000018000000020000024c0061736d0100000001150460027e7e017e60037e7e7e017e6000017e600000021904016c01300000016c01310000016c015f0001016c013800000305040203030305030100100619037f01418080c0000b7f00418080c0000b7f00418080c0000b073505066d656d6f7279020009696e6372656d656e740004015f00070a5f5f646174615f656e6403010b5f5f686561705f6261736503020aa70104920102017f017e41002100024002400240428ebad0af86d43942021080808080004201520d00428ebad0af86d4394202108180808000220142ff01834204520d012001422088a721000b200041016a2200450d01428ebad0af86d4392000ad422086420484220142021082808080001a4284808080a0064284808080c00c1083808080001a20010f0b00000b108580808000000b0900108680808000000b040000000b02000b00730e636f6e74726163747370656376300000000000000040496e6372656d656e7420696e6372656d656e747320616e20696e7465726e616c20636f756e7465722c20616e642072657475726e73207468652076616c75652e00000009696e6372656d656e74000000000000000000000100000004001e11636f6e7472616374656e766d657461763000000000000000140000003900730e636f6e74726163746d65746176300000000000000005727376657200000000000006312e37332e3000000000000000000008727373646b7665720000003332302e302e302d726332233039393234313366396230356535626662316638373262636539396538396439313239623265363100000000000000000100000000000000010000000713e16858bde4ab50a006dbf07172288f3ec19d8640d1a853016c60c15c2511170000000000186636000002b000000000000000000000000c",
140
- "hex"
157
+ "hex",
141
158
  );
142
159
  const { signature } = await str.signTransaction("44'/148'/0'", transaction);
143
160
  const result = signature.toString("hex");
144
161
  expect(result).toEqual(
145
- "83968afc83b45d0672f5b5259a7bab68ee030f6ffda0c2f3fd550e3b5dd40b3a6bee1f246e760523ab6bd434f9e11f237ffd16bc8f18bb58a59eb94abe1a5a0c"
162
+ "83968afc83b45d0672f5b5259a7bab68ee030f6ffda0c2f3fd550e3b5dd40b3a6bee1f246e760523ab6bd434f9e11f237ffd16bc8f18bb58a59eb94abe1a5a0c",
146
163
  );
147
164
  });
148
165
 
@@ -151,17 +168,17 @@ test("signTransaction (size does not exceed APDU_MAX_PAYLOAD)", async () => {
151
168
  RecordStore.fromString(`
152
169
  => e0040000ff038000002c80000094800000007ac33997544e3175d266bd022439b22cdb16508c01163f26e5cb2a3e1045a9790000000200000000e93388bbfd2fbd11806dd0bd59cea9079e7cc70ce7b1e154f114cdfe4e466ecd000071d7002d9fed000000010000000000000000000000010000000100000000e93388bbfd2fbd11806dd0bd59cea9079e7cc70ce7b1e154f114cdfe4e466ecd00000018000000020000024c0061736d0100000001150460027e7e017e60037e7e7e017e6000017e600000021904016c01300000016c01310000016c015f0001016c013800000305040203030305030100100619037f01418080c0000b7f00418080c0000b7f00418080
153
170
  <= f30f5d707a6dbde681f9604832391295719130790578ecaca0b1d37a68923b15714b36f4507e56aff2d0e3256ed5af496a6b021896e13dca00a8283e426860089000
154
- `)
171
+ `),
155
172
  );
156
173
  const str = new Str(transport);
157
174
  const transaction = Buffer.from(
158
175
  "7ac33997544e3175d266bd022439b22cdb16508c01163f26e5cb2a3e1045a9790000000200000000e93388bbfd2fbd11806dd0bd59cea9079e7cc70ce7b1e154f114cdfe4e466ecd000071d7002d9fed000000010000000000000000000000010000000100000000e93388bbfd2fbd11806dd0bd59cea9079e7cc70ce7b1e154f114cdfe4e466ecd00000018000000020000024c0061736d0100000001150460027e7e017e60037e7e7e017e6000017e600000021904016c01300000016c01310000016c015f0001016c013800000305040203030305030100100619037f01418080c0000b7f00418080c0000b7f00418080",
159
- "hex"
176
+ "hex",
160
177
  );
161
178
  const { signature } = await str.signTransaction("44'/148'/0'", transaction);
162
179
  const result = signature.toString("hex");
163
180
  expect(result).toEqual(
164
- "f30f5d707a6dbde681f9604832391295719130790578ecaca0b1d37a68923b15714b36f4507e56aff2d0e3256ed5af496a6b021896e13dca00a8283e42686008"
181
+ "f30f5d707a6dbde681f9604832391295719130790578ecaca0b1d37a68923b15714b36f4507e56aff2d0e3256ed5af496a6b021896e13dca00a8283e42686008",
165
182
  );
166
183
  });
167
184
 
@@ -174,14 +191,16 @@ test("signTransaction (size too long)", async () => {
174
191
  <= 9000
175
192
  => e0048080ff6372656d656e7420696e6372656d656e747320616e20696e7465726e616c20636f756e7465722c20616e642072657475726e73207468652076616c75652e00000009696e6372656d656e74000000000000000000000100000004001e11636f6e7472616374656e766d657461763000000000000000140000003900730e636f6e74726163746d65746176300000000000000005727376657200000000000006312e37332e3000000000000000000008727373646b7665720000003332302e302e302d72633223303939323431336639623035653562666231663837326263653939653839643931323962326536310000000000000000010000000000000001
176
193
  <= b004
177
- `)
194
+ `),
178
195
  );
179
196
  const str = new Str(transport);
180
197
  const transaction = Buffer.from(
181
198
  "7ac33997544e3175d266bd022439b22cdb16508c01163f26e5cb2a3e1045a9790000000200000000e93388bbfd2fbd11806dd0bd59cea9079e7cc70ce7b1e154f114cdfe4e466ecd000071d7002d9fed000000010000000000000000000000010000000100000000e93388bbfd2fbd11806dd0bd59cea9079e7cc70ce7b1e154f114cdfe4e466ecd00000018000000020000024c0061736d0100000001150460027e7e017e60037e7e7e017e6000017e600000021904016c01300000016c01310000016c015f0001016c013800000305040203030305030100100619037f01418080c0000b7f00418080c0000b7f00418080c0000b073505066d656d6f7279020009696e6372656d656e740004015f00070a5f5f646174615f656e6403010b5f5f686561705f6261736503020aa70104920102017f017e41002100024002400240428ebad0af86d43942021080808080004201520d00428ebad0af86d4394202108180808000220142ff01834204520d012001422088a721000b200041016a2200450d01428ebad0af86d4392000ad422086420484220142021082808080001a4284808080a0064284808080c00c1083808080001a20010f0b00000b108580808000000b0900108680808000000b040000000b02000b00730e636f6e74726163747370656376300000000000000040496e6372656d656e7420696e6372656d656e747320616e20696e7465726e616c20636f756e7465722c20616e642072657475726e73207468652076616c75652e00000009696e6372656d656e74000000000000000000000100000004001e11636f6e7472616374656e766d657461763000000000000000140000003900730e636f6e74726163746d65746176300000000000000005727376657200000000000006312e37332e3000000000000000000008727373646b7665720000003332302e302e302d726332233039393234313366396230356535626662316638373262636539396538396439313239623265363100000000000000000100000000000000010000000713e16858bde4ab50a006dbf07172288f3ec19d8640d1a853016c60c15c2511170000000000186636000002b000000000000000000000000c",
182
- "hex"
199
+ "hex",
200
+ );
201
+ await expect(str.signTransaction("44'/148'/0'", transaction)).rejects.toThrow(
202
+ StellarDataTooLargeError,
183
203
  );
184
- await expect(str.signTransaction("44'/148'/0'", transaction)).rejects.toThrow(StellarDataTooLargeError);
185
204
  });
186
205
 
187
206
  test("signTransaction (rejected)", async () => {
@@ -195,14 +214,16 @@ test("signTransaction (rejected)", async () => {
195
214
  <= 9000
196
215
  => e00480003c0000000713e16858bde4ab50a006dbf07172288f3ec19d8640d1a853016c60c15c2511170000000000186636000002b000000000000000000000000c
197
216
  <= 6985
198
- `)
217
+ `),
199
218
  );
200
219
  const str = new Str(transport);
201
220
  const transaction = Buffer.from(
202
221
  "7ac33997544e3175d266bd022439b22cdb16508c01163f26e5cb2a3e1045a9790000000200000000e93388bbfd2fbd11806dd0bd59cea9079e7cc70ce7b1e154f114cdfe4e466ecd000071d7002d9fed000000010000000000000000000000010000000100000000e93388bbfd2fbd11806dd0bd59cea9079e7cc70ce7b1e154f114cdfe4e466ecd00000018000000020000024c0061736d0100000001150460027e7e017e60037e7e7e017e6000017e600000021904016c01300000016c01310000016c015f0001016c013800000305040203030305030100100619037f01418080c0000b7f00418080c0000b7f00418080c0000b073505066d656d6f7279020009696e6372656d656e740004015f00070a5f5f646174615f656e6403010b5f5f686561705f6261736503020aa70104920102017f017e41002100024002400240428ebad0af86d43942021080808080004201520d00428ebad0af86d4394202108180808000220142ff01834204520d012001422088a721000b200041016a2200450d01428ebad0af86d4392000ad422086420484220142021082808080001a4284808080a0064284808080c00c1083808080001a20010f0b00000b108580808000000b0900108680808000000b040000000b02000b00730e636f6e74726163747370656376300000000000000040496e6372656d656e7420696e6372656d656e747320616e20696e7465726e616c20636f756e7465722c20616e642072657475726e73207468652076616c75652e00000009696e6372656d656e74000000000000000000000100000004001e11636f6e7472616374656e766d657461763000000000000000140000003900730e636f6e74726163746d65746176300000000000000005727376657200000000000006312e37332e3000000000000000000008727373646b7665720000003332302e302e302d726332233039393234313366396230356535626662316638373262636539396538396439313239623265363100000000000000000100000000000000010000000713e16858bde4ab50a006dbf07172288f3ec19d8640d1a853016c60c15c2511170000000000186636000002b000000000000000000000000c",
203
- "hex"
222
+ "hex",
223
+ );
224
+ await expect(str.signTransaction("44'/148'/0'", transaction)).rejects.toThrow(
225
+ StellarUserRefusedError,
204
226
  );
205
- await expect(str.signTransaction("44'/148'/0'", transaction)).rejects.toThrow(StellarUserRefusedError);
206
227
  });
207
228
 
208
229
  test("signTransaction (parse data failed)", async () => {
@@ -210,14 +231,16 @@ test("signTransaction (parse data failed)", async () => {
210
231
  RecordStore.fromString(`
211
232
  => e0040000ff038000002c80000094800000007ac33997544e3175d266bd022439b22cdb16508c01163f26e5cb2a3e1045a9790000000200000000e93388bbfd2fbd11806dd0bd59cea9079e7cc70ce7b1e154f114cdfe4e466ecd000071d7002d9fed000000010000000000000000000000010000000100000000e93388bbfd2fbd11806dd0bd59cea9079e7cc70ce7b1e154f114cdfe4e466ecd00000018000000020000024c0061736d0100000001150460027e7e017e60037e7e7e017e6000017e600000021904016c01300000016c01310000016c015f0001016c013800000305040203030305030100100619037f01418080c0000b7f00418080c0000b7f00418080
212
233
  <= b005
213
- `)
234
+ `),
214
235
  );
215
236
  const str = new Str(transport);
216
237
  const transaction = Buffer.from(
217
238
  "7ac33997544e3175d266bd022439b22cdb16508c01163f26e5cb2a3e1045a9790000000200000000e93388bbfd2fbd11806dd0bd59cea9079e7cc70ce7b1e154f114cdfe4e466ecd000071d7002d9fed000000010000000000000000000000010000000100000000e93388bbfd2fbd11806dd0bd59cea9079e7cc70ce7b1e154f114cdfe4e466ecd00000018000000020000024c0061736d0100000001150460027e7e017e60037e7e7e017e6000017e600000021904016c01300000016c01310000016c015f0001016c013800000305040203030305030100100619037f01418080c0000b7f00418080c0000b7f00418080",
218
- "hex"
239
+ "hex",
240
+ );
241
+ await expect(str.signTransaction("44'/148'/0'", transaction)).rejects.toThrow(
242
+ StellarDataParsingFailedError,
219
243
  );
220
- await expect(str.signTransaction("44'/148'/0'", transaction)).rejects.toThrow(StellarDataParsingFailedError);
221
244
  });
222
245
 
223
246
  test("signSorobanAuthorization (size exceeds APDU_MAX_PAYLOAD)", async () => {
@@ -229,17 +252,17 @@ test("signSorobanAuthorization (size exceeds APDU_MAX_PAYLOAD)", async () => {
229
252
  <= 9000
230
253
  => e00a800037a5a13baf5571637a2157c6affb7491d7c4454eecd2b0b7e40e67023f096fac0000000a0000000000000000000000026944050000000000
231
254
  <= 2e45c6d44fe613c3d7b38c9f7147bd70dc58cf7e1badb80d33632dcdafb90944674096da05dfe0f185da86535a6ca1a1fcef852a19ae99b22e4438ca5c43b9089000
232
- `)
255
+ `),
233
256
  );
234
257
  const str = new Str(transport);
235
258
  const hashIdPreimage = Buffer.from(
236
259
  "000000097ac33997544e3175d266bd022439b22cdb16508c01163f26e5cb2a3e1045a9790000000049756d450210c89f0000000000000001d7928b72c2703ccfeaf7eb9ff4ef4d504a55a8b979fc9b450ea2c842b4d1ce61000000087472616e7366657200000003000000120000000000000000acd0adc778238000bdb6bad22e919923897f7a87e310cef1505e6c0b0b71542500000012000000000000000079a5a13baf5571637a2157c6affb7491d7c4454eecd2b0b7e40e67023f096fac0000000a00000000000000000000000269440500000000020000000000000001d7928b72c2703ccfeaf7eb9ff4ef4d504a55a8b979fc9b450ea2c842b4d1ce61000000087472616e7366657200000003000000120000000000000000acd0adc778238000bdb6bad22e919923897f7a87e310cef1505e6c0b0b71542500000012000000000000000079a5a13baf5571637a2157c6affb7491d7c4454eecd2b0b7e40e67023f096fac0000000a00000000000000000000000269440500000000000000000000000001d7928b72c2703ccfeaf7eb9ff4ef4d504a55a8b979fc9b450ea2c842b4d1ce61000000087472616e7366657200000003000000120000000000000000acd0adc778238000bdb6bad22e919923897f7a87e310cef1505e6c0b0b71542500000012000000000000000079a5a13baf5571637a2157c6affb7491d7c4454eecd2b0b7e40e67023f096fac0000000a0000000000000000000000026944050000000000",
237
- "hex"
260
+ "hex",
238
261
  );
239
262
  const { signature } = await str.signSorobanAuthorization("44'/148'/0'", hashIdPreimage);
240
263
  const result = signature.toString("hex");
241
264
  expect(result).toEqual(
242
- "2e45c6d44fe613c3d7b38c9f7147bd70dc58cf7e1badb80d33632dcdafb90944674096da05dfe0f185da86535a6ca1a1fcef852a19ae99b22e4438ca5c43b908"
265
+ "2e45c6d44fe613c3d7b38c9f7147bd70dc58cf7e1badb80d33632dcdafb90944674096da05dfe0f185da86535a6ca1a1fcef852a19ae99b22e4438ca5c43b908",
243
266
  );
244
267
  });
245
268
 
@@ -248,17 +271,17 @@ test("signSorobanAuthorization (size does not exceed APDU_MAX_PAYLOAD)", async (
248
271
  RecordStore.fromString(`
249
272
  => e00a0000fd038000002c8000009480000000000000097ac33997544e3175d266bd022439b22cdb16508c01163f26e5cb2a3e1045a9790000000049756d450210c89f0000000000000001d7928b72c2703ccfeaf7eb9ff4ef4d504a55a8b979fc9b450ea2c842b4d1ce61000000087472616e7366657200000003000000120000000000000000acd0adc778238000bdb6bad22e919923897f7a87e310cef1505e6c0b0b71542500000012000000000000000079a5a13baf5571637a2157c6affb7491d7c4454eecd2b0b7e40e67023f096fac0000000a00000000000000000000000269440500000000020000000000000001d7928b72c2703ccfeaf7eb9ff4ef4d50
250
273
  <= 2e45c6d44fe613c3d7b38c9f7147bd70dc58cf7e1badb80d33632dcdafb90944674096da05dfe0f185da86535a6ca1a1fcef852a19ae99b22e4438ca5c43b9089000
251
- `)
274
+ `),
252
275
  );
253
276
  const str = new Str(transport);
254
277
  const hashIdPreimage = Buffer.from(
255
278
  "000000097ac33997544e3175d266bd022439b22cdb16508c01163f26e5cb2a3e1045a9790000000049756d450210c89f0000000000000001d7928b72c2703ccfeaf7eb9ff4ef4d504a55a8b979fc9b450ea2c842b4d1ce61000000087472616e7366657200000003000000120000000000000000acd0adc778238000bdb6bad22e919923897f7a87e310cef1505e6c0b0b71542500000012000000000000000079a5a13baf5571637a2157c6affb7491d7c4454eecd2b0b7e40e67023f096fac0000000a00000000000000000000000269440500000000020000000000000001d7928b72c2703ccfeaf7eb9ff4ef4d50",
256
- "hex"
279
+ "hex",
257
280
  );
258
281
  const { signature } = await str.signSorobanAuthorization("44'/148'/0'", hashIdPreimage);
259
282
  const result = signature.toString("hex");
260
283
  expect(result).toEqual(
261
- "2e45c6d44fe613c3d7b38c9f7147bd70dc58cf7e1badb80d33632dcdafb90944674096da05dfe0f185da86535a6ca1a1fcef852a19ae99b22e4438ca5c43b908"
284
+ "2e45c6d44fe613c3d7b38c9f7147bd70dc58cf7e1badb80d33632dcdafb90944674096da05dfe0f185da86535a6ca1a1fcef852a19ae99b22e4438ca5c43b908",
262
285
  );
263
286
  });
264
287
 
@@ -269,14 +292,16 @@ test("signSorobanAuthorization (size too long)", async () => {
269
292
  <= 9000
270
293
  => e00a8080ffa8b979fc9b450ea2c842b4d1ce61000000087472616e7366657200000003000000120000000000000000acd0adc778238000bdb6bad22e919923897f7a87e310cef1505e6c0b0b71542500000012000000000000000079a5a13baf5571637a2157c6affb7491d7c4454eecd2b0b7e40e67023f096fac0000000a00000000000000000000000269440500000000000000000000000001d7928b72c2703ccfeaf7eb9ff4ef4d504a55a8b979fc9b450ea2c842b4d1ce61000000087472616e7366657200000003000000120000000000000000acd0adc778238000bdb6bad22e919923897f7a87e310cef1505e6c0b0b71542500000012000000000000000079
271
294
  <= b004
272
- `)
295
+ `),
273
296
  );
274
297
  const str = new Str(transport);
275
298
  const hashIdPreimage = Buffer.from(
276
299
  "000000097ac33997544e3175d266bd022439b22cdb16508c01163f26e5cb2a3e1045a9790000000049756d450210c89f0000000000000001d7928b72c2703ccfeaf7eb9ff4ef4d504a55a8b979fc9b450ea2c842b4d1ce61000000087472616e7366657200000003000000120000000000000000acd0adc778238000bdb6bad22e919923897f7a87e310cef1505e6c0b0b71542500000012000000000000000079a5a13baf5571637a2157c6affb7491d7c4454eecd2b0b7e40e67023f096fac0000000a00000000000000000000000269440500000000020000000000000001d7928b72c2703ccfeaf7eb9ff4ef4d504a55a8b979fc9b450ea2c842b4d1ce61000000087472616e7366657200000003000000120000000000000000acd0adc778238000bdb6bad22e919923897f7a87e310cef1505e6c0b0b71542500000012000000000000000079a5a13baf5571637a2157c6affb7491d7c4454eecd2b0b7e40e67023f096fac0000000a00000000000000000000000269440500000000000000000000000001d7928b72c2703ccfeaf7eb9ff4ef4d504a55a8b979fc9b450ea2c842b4d1ce61000000087472616e7366657200000003000000120000000000000000acd0adc778238000bdb6bad22e919923897f7a87e310cef1505e6c0b0b71542500000012000000000000000079a5a13baf5571637a2157c6affb7491d7c4454eecd2b0b7e40e67023f096fac0000000a0000000000000000000000026944050000000000",
277
- "hex"
300
+ "hex",
301
+ );
302
+ await expect(str.signSorobanAuthorization("44'/148'/0'", hashIdPreimage)).rejects.toThrow(
303
+ StellarDataTooLargeError,
278
304
  );
279
- await expect(str.signSorobanAuthorization("44'/148'/0'", hashIdPreimage)).rejects.toThrow(StellarDataTooLargeError);
280
305
  });
281
306
 
282
307
  test("signSorobanAuthorization (rejected)", async () => {
@@ -284,14 +309,16 @@ test("signSorobanAuthorization (rejected)", async () => {
284
309
  RecordStore.fromString(`
285
310
  => e00a0000fd038000002c8000009480000000000000097ac33997544e3175d266bd022439b22cdb16508c01163f26e5cb2a3e1045a9790000000049756d450210c89f0000000000000001d7928b72c2703ccfeaf7eb9ff4ef4d504a55a8b979fc9b450ea2c842b4d1ce61000000087472616e7366657200000003000000120000000000000000acd0adc778238000bdb6bad22e919923897f7a87e310cef1505e6c0b0b71542500000012000000000000000079a5a13baf5571637a2157c6affb7491d7c4454eecd2b0b7e40e67023f096fac0000000a00000000000000000000000269440500000000020000000000000001d7928b72c2703ccfeaf7eb9ff4ef4d50
286
311
  <= 6985
287
- `)
312
+ `),
288
313
  );
289
314
  const str = new Str(transport);
290
315
  const hashIdPreimage = Buffer.from(
291
316
  "000000097ac33997544e3175d266bd022439b22cdb16508c01163f26e5cb2a3e1045a9790000000049756d450210c89f0000000000000001d7928b72c2703ccfeaf7eb9ff4ef4d504a55a8b979fc9b450ea2c842b4d1ce61000000087472616e7366657200000003000000120000000000000000acd0adc778238000bdb6bad22e919923897f7a87e310cef1505e6c0b0b71542500000012000000000000000079a5a13baf5571637a2157c6affb7491d7c4454eecd2b0b7e40e67023f096fac0000000a00000000000000000000000269440500000000020000000000000001d7928b72c2703ccfeaf7eb9ff4ef4d50",
292
- "hex"
317
+ "hex",
318
+ );
319
+ await expect(str.signSorobanAuthorization("44'/148'/0'", hashIdPreimage)).rejects.toThrow(
320
+ StellarUserRefusedError,
293
321
  );
294
- await expect(str.signSorobanAuthorization("44'/148'/0'", hashIdPreimage)).rejects.toThrow(StellarUserRefusedError);
295
322
  });
296
323
 
297
324
  test("signSorobanAuthorization (parse data failed)", async () => {
@@ -303,14 +330,16 @@ test("signSorobanAuthorization (parse data failed)", async () => {
303
330
  <= 9000
304
331
  => e00a800037a5a13baf5571637a2157c6affb7491d7c4454eecd2b0b7e40e67023f096fac0000000a0000000000000000000000026944050000000000
305
332
  <= b005
306
- `)
333
+ `),
307
334
  );
308
335
  const str = new Str(transport);
309
336
  const hashIdPreimage = Buffer.from(
310
337
  "000000097ac33997544e3175d266bd022439b22cdb16508c01163f26e5cb2a3e1045a9790000000049756d450210c89f0000000000000001d7928b72c2703ccfeaf7eb9ff4ef4d504a55a8b979fc9b450ea2c842b4d1ce61000000087472616e7366657200000003000000120000000000000000acd0adc778238000bdb6bad22e919923897f7a87e310cef1505e6c0b0b71542500000012000000000000000079a5a13baf5571637a2157c6affb7491d7c4454eecd2b0b7e40e67023f096fac0000000a00000000000000000000000269440500000000020000000000000001d7928b72c2703ccfeaf7eb9ff4ef4d504a55a8b979fc9b450ea2c842b4d1ce61000000087472616e7366657200000003000000120000000000000000acd0adc778238000bdb6bad22e919923897f7a87e310cef1505e6c0b0b71542500000012000000000000000079a5a13baf5571637a2157c6affb7491d7c4454eecd2b0b7e40e67023f096fac0000000a00000000000000000000000269440500000000000000000000000001d7928b72c2703ccfeaf7eb9ff4ef4d504a55a8b979fc9b450ea2c842b4d1ce61000000087472616e7366657200000003000000120000000000000000acd0adc778238000bdb6bad22e919923897f7a87e310cef1505e6c0b0b71542500000012000000000000000079a5a13baf5571637a2157c6affb7491d7c4454eecd2b0b7e40e67023f096fac0000000a0000000000000000000000026944050000000000",
311
- "hex"
338
+ "hex",
339
+ );
340
+ await expect(str.signSorobanAuthorization("44'/148'/0'", hashIdPreimage)).rejects.toThrow(
341
+ StellarDataParsingFailedError,
312
342
  );
313
- await expect(str.signSorobanAuthorization("44'/148'/0'", hashIdPreimage)).rejects.toThrow(StellarDataParsingFailedError);
314
343
  });
315
344
 
316
345
  test("pathToBuffer (44'/148'/19773')", async () => {
@@ -318,26 +347,106 @@ test("pathToBuffer (44'/148'/19773')", async () => {
318
347
  RecordStore.fromString(`
319
348
  => e00200000d038000002c8000009480004d3d
320
349
  <= 04becf1537ae24f24d326368a2ad8a09b06cb0671e96e6878d4e623aab4bf6e79000
321
- `)
350
+ `),
322
351
  );
323
352
  const str = new Str(transport);
324
353
  const { rawPublicKey } = await str.getPublicKey("44'/148'/19773'", false);
325
354
  expect(rawPublicKey.toString("hex")).toEqual(
326
- "04becf1537ae24f24d326368a2ad8a09b06cb0671e96e6878d4e623aab4bf6e7"
355
+ "04becf1537ae24f24d326368a2ad8a09b06cb0671e96e6878d4e623aab4bf6e7",
356
+ );
357
+ });
358
+
359
+ test("signMessage (size exceeds APDU_MAX_PAYLOAD)", async () => {
360
+ const transport = await openTransportReplayer(
361
+ RecordStore.fromString(`
362
+ => e00c0080ff038000002c8000009480000000303030302d303030312d303030322d303030332d303030342d303030352d303030362d303030372d303030382d303030392d303031302d303031312d303031322d303031332d303031342d303031352d303031362d303031372d303031382d303031392d303032302d303032312d303032322d303032332d303032342d303032352d303032362d303032372d303032382d303032392d303033302d303033312d303033322d303033332d303033342d303033352d303033362d303033372d303033382d303033392d303034302d303034312d303034322d303034332d303034342d303034352d303034362d303034372d3030
363
+ <= 9000
364
+ => e00c8080ff34382d303034392d303035302d303035312d303035322d303035332d303035342d303035352d303035362d303035372d303035382d303035392d303036302d303036312d303036322d303036332d303036342d303036352d303036362d303036372d303036382d303036392d303037302d303037312d303037322d303037332d303037342d303037352d303037362d303037372d303037382d303037392d303038302d303038312d303038322d303038332d303038342d303038352d303038362d303038372d303038382d303038392d303039302d303039312d303039322d303039332d303039342d303039352d303039362d303039372d303039382d3030
365
+ <= 9000
366
+ => e00c8080ff39392d303130302d303130312d303130322d303130332d303130342d303130352d303130362d303130372d303130382d303130392d303131302d303131312d303131322d303131332d303131342d303131352d303131362d303131372d303131382d303131392d303132302d303132312d303132322d303132332d303132342d303132352d303132362d303132372d303132382d303132392d303133302d303133312d303133322d303133332d303133342d303133352d303133362d303133372d303133382d303133392d303134302d303134312d303134322d303134332d303134342d303134352d303134362d303134372d303134382d303134392d3031
367
+ <= 9000
368
+ => e00c80002035302d303135312d303135322d303135332d303135342d303135352d30313536
369
+ <= e979b44337e599eed5bda5f3f0ac38963c3ef5fb0a2c1bec43d5aa8e9df91a050018936610e742d1aa09f675d505e86aa6b16836c5ea23702b3a58a22eecaf029000
370
+ `),
371
+ );
372
+ const str = new Str(transport);
373
+ const message = Buffer.from(
374
+ "303030302d303030312d303030322d303030332d303030342d303030352d303030362d303030372d303030382d303030392d303031302d303031312d303031322d303031332d303031342d303031352d303031362d303031372d303031382d303031392d303032302d303032312d303032322d303032332d303032342d303032352d303032362d303032372d303032382d303032392d303033302d303033312d303033322d303033332d303033342d303033352d303033362d303033372d303033382d303033392d303034302d303034312d303034322d303034332d303034342d303034352d303034362d303034372d303034382d303034392d303035302d303035312d303035322d303035332d303035342d303035352d303035362d303035372d303035382d303035392d303036302d303036312d303036322d303036332d303036342d303036352d303036362d303036372d303036382d303036392d303037302d303037312d303037322d303037332d303037342d303037352d303037362d303037372d303037382d303037392d303038302d303038312d303038322d303038332d303038342d303038352d303038362d303038372d303038382d303038392d303039302d303039312d303039322d303039332d303039342d303039352d303039362d303039372d303039382d303039392d303130302d303130312d303130322d303130332d303130342d303130352d303130362d303130372d303130382d303130392d303131302d303131312d303131322d303131332d303131342d303131352d303131362d303131372d303131382d303131392d303132302d303132312d303132322d303132332d303132342d303132352d303132362d303132372d303132382d303132392d303133302d303133312d303133322d303133332d303133342d303133352d303133362d303133372d303133382d303133392d303134302d303134312d303134322d303134332d303134342d303134352d303134362d303134372d303134382d303134392d303135302d303135312d303135322d303135332d303135342d303135352d30313536",
375
+ "hex",
376
+ );
377
+ const { signature } = await str.signMessage("44'/148'/0'", message);
378
+ const result = signature.toString("hex");
379
+ expect(result).toEqual(
380
+ "e979b44337e599eed5bda5f3f0ac38963c3ef5fb0a2c1bec43d5aa8e9df91a050018936610e742d1aa09f675d505e86aa6b16836c5ea23702b3a58a22eecaf02",
381
+ );
382
+ });
383
+
384
+ test("signMessage (size does not exceed APDU_MAX_PAYLOAD)", async () => {
385
+ const transport = await openTransportReplayer(
386
+ RecordStore.fromString(`
387
+ => e00c000061038000002c8000009480000000303030302d303030312d303030322d303030332d303030342d303030352d303030362d303030372d303030382d303030392d303031302d303031312d303031322d303031332d303031342d303031352d30303136
388
+ <= 6479fd356ef37d61da8d47cd3a1af9ed1e35653d8598c56ee41d695540bbe1f804b2b2c029b6af11a1db08a7001983830efa44d5c751e4193323f1beda2621099000
389
+ `),
390
+ );
391
+ const str = new Str(transport);
392
+ const message = Buffer.from(
393
+ "303030302d303030312d303030322d303030332d303030342d303030352d303030362d303030372d303030382d303030392d303031302d303031312d303031322d303031332d303031342d303031352d30303136",
394
+ "hex",
395
+ );
396
+ const { signature } = await str.signMessage("44'/148'/0'", message);
397
+ const result = signature.toString("hex");
398
+ expect(result).toEqual(
399
+ "6479fd356ef37d61da8d47cd3a1af9ed1e35653d8598c56ee41d695540bbe1f804b2b2c029b6af11a1db08a7001983830efa44d5c751e4193323f1beda262109",
327
400
  );
328
401
  });
329
402
 
403
+ test("signMessage (size too long)", async () => {
404
+ const transport = await openTransportReplayer(
405
+ RecordStore.fromString(`
406
+ => e00c0080ff038000002c8000009480000000303030302d303030312d303030322d303030332d303030342d303030352d303030362d303030372d303030382d303030392d303031302d303031312d303031322d303031332d303031342d303031352d303031362d303031372d303031382d303031392d303032302d303032312d303032322d303032332d303032342d303032352d303032362d303032372d303032382d303032392d303033302d303033312d303033322d303033332d303033342d303033352d303033362d303033372d303033382d303033392d303034302d303034312d303034322d303034332d303034342d303034352d303034362d303034372d3030
407
+ <= 9000
408
+ => e00c8080ff34382d303034392d303035302d303035312d303035322d303035332d303035342d303035352d303035362d303035372d303035382d303035392d303036302d303036312d303036322d303036332d303036342d303036352d303036362d303036372d303036382d303036392d303037302d303037312d303037322d303037332d303037342d303037352d303037362d303037372d303037382d303037392d303038302d303038312d303038322d303038332d303038342d303038352d303038362d303038372d303038382d303038392d303039302d303039312d303039322d303039332d303039342d303039352d303039362d303039372d303039382d3030
409
+ <= 9000
410
+ => e00c8080ff39392d303130302d303130312d303130322d303130332d303130342d303130352d303130362d303130372d303130382d303130392d303131302d303131312d303131322d303131332d303131342d303131352d303131362d303131372d303131382d303131392d303132302d303132312d303132322d303132332d303132342d303132352d303132362d303132372d303132382d303132392d303133302d303133312d303133322d303133332d303133342d303133352d303133362d303133372d303133382d303133392d303134302d303134312d303134322d303134332d303134342d303134352d303134362d303134372d303134382d303134392d3031
411
+ <= 9000
412
+ => e00c80002035302d303135312d303135322d303135332d303135342d303135352d30313536
413
+ <= b004
414
+ `),
415
+ );
416
+ const str = new Str(transport);
417
+ const message = Buffer.from(
418
+ "303030302d303030312d303030322d303030332d303030342d303030352d303030362d303030372d303030382d303030392d303031302d303031312d303031322d303031332d303031342d303031352d303031362d303031372d303031382d303031392d303032302d303032312d303032322d303032332d303032342d303032352d303032362d303032372d303032382d303032392d303033302d303033312d303033322d303033332d303033342d303033352d303033362d303033372d303033382d303033392d303034302d303034312d303034322d303034332d303034342d303034352d303034362d303034372d303034382d303034392d303035302d303035312d303035322d303035332d303035342d303035352d303035362d303035372d303035382d303035392d303036302d303036312d303036322d303036332d303036342d303036352d303036362d303036372d303036382d303036392d303037302d303037312d303037322d303037332d303037342d303037352d303037362d303037372d303037382d303037392d303038302d303038312d303038322d303038332d303038342d303038352d303038362d303038372d303038382d303038392d303039302d303039312d303039322d303039332d303039342d303039352d303039362d303039372d303039382d303039392d303130302d303130312d303130322d303130332d303130342d303130352d303130362d303130372d303130382d303130392d303131302d303131312d303131322d303131332d303131342d303131352d303131362d303131372d303131382d303131392d303132302d303132312d303132322d303132332d303132342d303132352d303132362d303132372d303132382d303132392d303133302d303133312d303133322d303133332d303133342d303133352d303133362d303133372d303133382d303133392d303134302d303134312d303134322d303134332d303134342d303134352d303134362d303134372d303134382d303134392d303135302d303135312d303135322d303135332d303135342d303135352d30313536",
419
+ "hex",
420
+ );
421
+ await expect(str.signMessage("44'/148'/0'", message)).rejects.toThrow(StellarDataTooLargeError);
422
+ });
423
+
424
+ test("signMessage (rejected)", async () => {
425
+ const transport = await openTransportReplayer(
426
+ RecordStore.fromString(`
427
+ => e00c000061038000002c8000009480000000303030302d303030312d303030322d303030332d303030342d303030352d303030362d303030372d303030382d303030392d303031302d303031312d303031322d303031332d303031342d303031352d30303136
428
+ <= 6985
429
+ `),
430
+ );
431
+ const str = new Str(transport);
432
+ const message = Buffer.from(
433
+ "303030302d303030312d303030322d303030332d303030342d303030352d303030362d303030372d303030382d303030392d303031302d303031312d303031322d303031332d303031342d303031352d30303136",
434
+ "hex",
435
+ );
436
+ await expect(str.signMessage("44'/148'/0'", message)).rejects.toThrow(StellarUserRefusedError);
437
+ });
438
+
330
439
  test("pathToBuffer (44'/148'/19773)", async () => {
331
440
  const transport = await openTransportReplayer(
332
441
  RecordStore.fromString(`
333
442
  => e00200000d038000002c8000009480004d3d
334
443
  <= 04becf1537ae24f24d326368a2ad8a09b06cb0671e96e6878d4e623aab4bf6e79000
335
- `)
444
+ `),
336
445
  );
337
446
  const str = new Str(transport);
338
447
  const { rawPublicKey } = await str.getPublicKey("44'/148'/19773", false);
339
448
  expect(rawPublicKey.toString("hex")).toEqual(
340
- "04becf1537ae24f24d326368a2ad8a09b06cb0671e96e6878d4e623aab4bf6e7"
449
+ "04becf1537ae24f24d326368a2ad8a09b06cb0671e96e6878d4e623aab4bf6e7",
341
450
  );
342
451
  });
343
452
 
@@ -346,7 +455,7 @@ test("remapErrors (unexpected)", async () => {
346
455
  RecordStore.fromString(`
347
456
  => e00200000d038000002c8000009480004d3d
348
457
  <= b001
349
- `)
458
+ `),
350
459
  );
351
460
  const str = new Str(transport);
352
461
  try {
@@ -357,4 +466,4 @@ test("remapErrors (unexpected)", async () => {
357
466
  expect(error.statusCode).toBe(0xb001);
358
467
  }
359
468
  }
360
- });
469
+ });