@siacentral/ledgerjs-sia 1.1.0 → 1.2.1
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/README.md +9 -5
- package/lib/sia.d.ts +11 -0
- package/lib/sia.d.ts.map +1 -1
- package/lib/sia.js +75 -5
- package/lib/sia.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -20,14 +20,18 @@ import TransportWebHID from '@ledgerhq/hw-transport-webhid';
|
|
|
20
20
|
* and returns the first Sia address of the ledger wallet.
|
|
21
21
|
*/
|
|
22
22
|
async function connect() {
|
|
23
|
+
let sia;
|
|
23
24
|
try {
|
|
24
|
-
const transport = await TransportWebHID.create()
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
const transport = await TransportWebHID.create();
|
|
26
|
+
sia = new Sia(transport);
|
|
27
|
+
|
|
28
|
+
const address = await sia.getAddress(0);
|
|
28
29
|
console.log(address);
|
|
29
30
|
} catch (ex) {
|
|
30
31
|
// TODO: handle error
|
|
32
|
+
} finally {
|
|
33
|
+
// always close the transport when done.
|
|
34
|
+
if (sia) sia.close();
|
|
31
35
|
}
|
|
32
36
|
}
|
|
33
37
|
|
|
@@ -56,4 +60,4 @@ async function connect() {
|
|
|
56
60
|
|
|
57
61
|
connect();
|
|
58
62
|
</script>
|
|
59
|
-
```
|
|
63
|
+
```
|
package/lib/sia.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
2
3
|
import type Transport from "@ledgerhq/hw-transport";
|
|
3
4
|
import { Buffer } from 'buffer';
|
|
4
5
|
interface VerifyResponse {
|
|
@@ -57,6 +58,16 @@ export default class Sia {
|
|
|
57
58
|
* @returns {string} the base64 encoded signature
|
|
58
59
|
*/
|
|
59
60
|
signTransaction(encodedTxn: Buffer, sigIndex: number, keyIndex: number, changeIndex: number): Promise<string>;
|
|
61
|
+
/**
|
|
62
|
+
* signV2Transaction signs the v2 transaction with the provided key
|
|
63
|
+
* @param encodedTxn {Buffer} a sia encoded (V2TransactionSemantics) v2 transaction
|
|
64
|
+
* @param sigIndex {number} the index of the signature to sign
|
|
65
|
+
* @param keyIndex {number} the index of the key to sign with
|
|
66
|
+
* @param changeIndex {number} the index of the key used for the change output
|
|
67
|
+
* @returns {string} the base64 encoded signature
|
|
68
|
+
*/
|
|
69
|
+
signV2Transaction(encodedTxn: Buffer, sigIndex: number, keyIndex: number, changeIndex: number): Promise<string>;
|
|
70
|
+
blindSign(sigHash: Buffer, keyIndex: number): Promise<string>;
|
|
60
71
|
close(): Promise<void>;
|
|
61
72
|
}
|
|
62
73
|
export {};
|
package/lib/sia.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sia.d.ts","sourceRoot":"","sources":["../src/sia.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sia.d.ts","sourceRoot":"","sources":["../src/sia.ts"],"names":[],"mappings":";;AAAA,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAShC,UAAU,cAAc;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,OAAO,GAAG;IACvB,SAAS,EAAE,SAAS,CAAC;gBAET,SAAS,EAAE,SAAS,EAAE,WAAW,SAAQ;IAYrD;;;;OAIG;IACG,UAAU,IAAK,OAAO,CAAC,MAAM,CAAC;IAMpC;;;;;;;OAOG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,GAAI,OAAO,CAAC,cAAc,CAAC;IAW9D;;;;;;;OAOG;IACG,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAI,OAAO,CAAC,cAAc,CAAC;IAWpE;;;;;;;OAOG;IACG,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAI,OAAO,CAAC,MAAM,CAAC;IA0BnG;;;;;;;OAOG;IACG,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAI,OAAO,CAAC,MAAM,CAAC;IAwBpH;;;;;;;OAOG;IACG,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAI,OAAO,CAAC,MAAM,CAAC;IAwBhH,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAI,OAAO,CAAC,MAAM,CAAC;IAiBpE,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;CAGvB"}
|
package/lib/sia.js
CHANGED
|
@@ -14,7 +14,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
14
14
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
15
|
function step(op) {
|
|
16
16
|
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
-
while (_) try {
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
18
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
19
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
20
|
switch (op[0]) {
|
|
@@ -57,8 +57,10 @@ var Sia = /** @class */ (function () {
|
|
|
57
57
|
transport.decorateAppAPIMethods(this, [
|
|
58
58
|
'signTransactionV044',
|
|
59
59
|
'signTransaction',
|
|
60
|
+
'signV2Transaction',
|
|
60
61
|
'verifyPublicKey',
|
|
61
|
-
'verifyStandardAddress'
|
|
62
|
+
'verifyStandardAddress',
|
|
63
|
+
'signHash',
|
|
62
64
|
], scrambleKey);
|
|
63
65
|
}
|
|
64
66
|
/**
|
|
@@ -74,7 +76,7 @@ var Sia = /** @class */ (function () {
|
|
|
74
76
|
case 0: return [4 /*yield*/, this.transport.send(0xe0, 0x01, 0x00, 0x00, buffer_1.Buffer.alloc(0))];
|
|
75
77
|
case 1:
|
|
76
78
|
resp = _a.sent();
|
|
77
|
-
return [2 /*return*/, "v"
|
|
79
|
+
return [2 /*return*/, "v".concat(resp[0], ".").concat(resp[1], ".").concat(resp[2])];
|
|
78
80
|
}
|
|
79
81
|
});
|
|
80
82
|
});
|
|
@@ -98,7 +100,7 @@ var Sia = /** @class */ (function () {
|
|
|
98
100
|
// the status code is appended as the last 2 bytes of the response, but
|
|
99
101
|
// the transport already handles invalid codes.
|
|
100
102
|
return [2 /*return*/, {
|
|
101
|
-
publicKey: "ed25519:"
|
|
103
|
+
publicKey: "ed25519:".concat(resp.slice(0, 32).reduce(function (v, b) { return v + ('0' + b.toString(16)).slice(-2); }, '')),
|
|
102
104
|
address: resp.slice(32, resp.length - 2).toString()
|
|
103
105
|
}];
|
|
104
106
|
}
|
|
@@ -124,7 +126,7 @@ var Sia = /** @class */ (function () {
|
|
|
124
126
|
// the status code is appended as the last 2 bytes of the response, but
|
|
125
127
|
// the transport already handles invalid codes.
|
|
126
128
|
return [2 /*return*/, {
|
|
127
|
-
publicKey: "ed25519:"
|
|
129
|
+
publicKey: "ed25519:".concat(resp.slice(0, 32).reduce(function (v, b) { return v + ('0' + b.toString(16)).slice(-2); }, '')),
|
|
128
130
|
address: resp.slice(32, resp.length - 2).toString()
|
|
129
131
|
}];
|
|
130
132
|
}
|
|
@@ -158,6 +160,7 @@ var Sia = /** @class */ (function () {
|
|
|
158
160
|
if (!(i < buf.length)) return [3 /*break*/, 4];
|
|
159
161
|
return [4 /*yield*/, this.transport.send(0xe0, 0x08, i === 0 ? 0x00 : 0x80, 0x01, buffer_1.Buffer.from(buf.subarray(i, i + 255)))];
|
|
160
162
|
case 2:
|
|
163
|
+
// INS_GET_TXN_HASH = 0x08
|
|
161
164
|
resp = _a.sent();
|
|
162
165
|
_a.label = 3;
|
|
163
166
|
case 3:
|
|
@@ -199,6 +202,73 @@ var Sia = /** @class */ (function () {
|
|
|
199
202
|
if (!(i < buf.length)) return [3 /*break*/, 4];
|
|
200
203
|
return [4 /*yield*/, this.transport.send(0xe0, 0x08, i === 0 ? 0x00 : 0x80, 0x01, buffer_1.Buffer.from(buf.subarray(i, i + 255)))];
|
|
201
204
|
case 2:
|
|
205
|
+
// INS_GET_TXN_HASH = 0x08
|
|
206
|
+
resp = _a.sent();
|
|
207
|
+
_a.label = 3;
|
|
208
|
+
case 3:
|
|
209
|
+
i += 255;
|
|
210
|
+
return [3 /*break*/, 1];
|
|
211
|
+
case 4: return [2 /*return*/, (0, base64_1.encode)(resp)];
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
};
|
|
216
|
+
/**
|
|
217
|
+
* signV2Transaction signs the v2 transaction with the provided key
|
|
218
|
+
* @param encodedTxn {Buffer} a sia encoded (V2TransactionSemantics) v2 transaction
|
|
219
|
+
* @param sigIndex {number} the index of the signature to sign
|
|
220
|
+
* @param keyIndex {number} the index of the key to sign with
|
|
221
|
+
* @param changeIndex {number} the index of the key used for the change output
|
|
222
|
+
* @returns {string} the base64 encoded signature
|
|
223
|
+
*/
|
|
224
|
+
Sia.prototype.signV2Transaction = function (encodedTxn, sigIndex, keyIndex, changeIndex) {
|
|
225
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
226
|
+
var buf, resp, i;
|
|
227
|
+
return __generator(this, function (_a) {
|
|
228
|
+
switch (_a.label) {
|
|
229
|
+
case 0:
|
|
230
|
+
buf = buffer_1.Buffer.alloc(encodedTxn.length + 10);
|
|
231
|
+
resp = buffer_1.Buffer.alloc(0);
|
|
232
|
+
if (encodedTxn.length === 0)
|
|
233
|
+
throw new Error('empty transaction');
|
|
234
|
+
buf.writeUInt32LE(keyIndex, 0);
|
|
235
|
+
buf.writeUInt16LE(sigIndex, 4);
|
|
236
|
+
buf.writeUInt32LE(changeIndex, 6);
|
|
237
|
+
buf.set(encodedTxn, 10);
|
|
238
|
+
i = 0;
|
|
239
|
+
_a.label = 1;
|
|
240
|
+
case 1:
|
|
241
|
+
if (!(i < buf.length)) return [3 /*break*/, 4];
|
|
242
|
+
return [4 /*yield*/, this.transport.send(0xe0, 0x10, i === 0 ? 0x00 : 0x80, 0x01, buffer_1.Buffer.from(buf.subarray(i, i + 255)))];
|
|
243
|
+
case 2:
|
|
244
|
+
// INS_GET_V2TXN_HASH = 0x10
|
|
245
|
+
resp = _a.sent();
|
|
246
|
+
_a.label = 3;
|
|
247
|
+
case 3:
|
|
248
|
+
i += 255;
|
|
249
|
+
return [3 /*break*/, 1];
|
|
250
|
+
case 4: return [2 /*return*/, (0, base64_1.encode)(resp)];
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
};
|
|
255
|
+
Sia.prototype.blindSign = function (sigHash, keyIndex) {
|
|
256
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
257
|
+
var buf, resp, i;
|
|
258
|
+
return __generator(this, function (_a) {
|
|
259
|
+
switch (_a.label) {
|
|
260
|
+
case 0:
|
|
261
|
+
buf = buffer_1.Buffer.alloc(sigHash.length + 4);
|
|
262
|
+
resp = buffer_1.Buffer.alloc(0);
|
|
263
|
+
buf.set(sigHash, 0);
|
|
264
|
+
buf.writeUInt32LE(keyIndex, sigHash.length);
|
|
265
|
+
i = 0;
|
|
266
|
+
_a.label = 1;
|
|
267
|
+
case 1:
|
|
268
|
+
if (!(i < buf.length)) return [3 /*break*/, 4];
|
|
269
|
+
return [4 /*yield*/, this.transport.send(0xe0, 0x04, 0x00, 0x00, buffer_1.Buffer.from(buf.subarray(i, i + 255)))];
|
|
270
|
+
case 2:
|
|
271
|
+
// INS_SIGN_HASH = 0x04
|
|
202
272
|
resp = _a.sent();
|
|
203
273
|
_a.label = 3;
|
|
204
274
|
case 3:
|
package/lib/sia.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sia.js","sourceRoot":"","sources":["../src/sia.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,iCAAgC;AAChC,4CAA2C;AAE3C,SAAS,cAAc,CAAC,GAAW;IAClC,IAAM,GAAG,GAAG,eAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,GAAG,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC1B,OAAO,GAAG,CAAC;AACZ,CAAC;AAOD;;;;;;GAMG;AACH;IAGC,aAAY,SAAoB,EAAE,WAAmB;QAAnB,4BAAA,EAAA,mBAAmB;QACpD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,SAAS,CAAC,qBAAqB,CAAC,IAAI,EAAE;YACrC,qBAAqB;YACrB,iBAAiB;YACjB,iBAAiB;YACjB,uBAAuB;
|
|
1
|
+
{"version":3,"file":"sia.js","sourceRoot":"","sources":["../src/sia.ts"],"names":[],"mappings":"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"}
|