@sidhujag/sysweb3-keyring 1.0.491

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.
Files changed (104) hide show
  1. package/README.md +201 -0
  2. package/cjs/errorUtils.js +75 -0
  3. package/cjs/errorUtils.js.map +1 -0
  4. package/cjs/hardware-wallet-manager.js +462 -0
  5. package/cjs/hardware-wallet-manager.js.map +1 -0
  6. package/cjs/index.js +31 -0
  7. package/cjs/index.js.map +1 -0
  8. package/cjs/initial-state.js +105 -0
  9. package/cjs/initial-state.js.map +1 -0
  10. package/cjs/keyring-manager.js +1687 -0
  11. package/cjs/keyring-manager.js.map +1 -0
  12. package/cjs/ledger/bitcoin_client/index.js +47 -0
  13. package/cjs/ledger/bitcoin_client/index.js.map +1 -0
  14. package/cjs/ledger/bitcoin_client/lib/appClient.js +408 -0
  15. package/cjs/ledger/bitcoin_client/lib/appClient.js.map +1 -0
  16. package/cjs/ledger/bitcoin_client/lib/bip32.js +61 -0
  17. package/cjs/ledger/bitcoin_client/lib/bip32.js.map +1 -0
  18. package/cjs/ledger/bitcoin_client/lib/buffertools.js +126 -0
  19. package/cjs/ledger/bitcoin_client/lib/buffertools.js.map +1 -0
  20. package/cjs/ledger/bitcoin_client/lib/clientCommands.js +270 -0
  21. package/cjs/ledger/bitcoin_client/lib/clientCommands.js.map +1 -0
  22. package/cjs/ledger/bitcoin_client/lib/constants.js +16 -0
  23. package/cjs/ledger/bitcoin_client/lib/constants.js.map +1 -0
  24. package/cjs/ledger/bitcoin_client/lib/merkelizedPsbt.js +54 -0
  25. package/cjs/ledger/bitcoin_client/lib/merkelizedPsbt.js.map +1 -0
  26. package/cjs/ledger/bitcoin_client/lib/merkle.js +109 -0
  27. package/cjs/ledger/bitcoin_client/lib/merkle.js.map +1 -0
  28. package/cjs/ledger/bitcoin_client/lib/merkleMap.js +46 -0
  29. package/cjs/ledger/bitcoin_client/lib/merkleMap.js.map +1 -0
  30. package/cjs/ledger/bitcoin_client/lib/policy.js +66 -0
  31. package/cjs/ledger/bitcoin_client/lib/policy.js.map +1 -0
  32. package/cjs/ledger/bitcoin_client/lib/psbtv2.js +640 -0
  33. package/cjs/ledger/bitcoin_client/lib/psbtv2.js.map +1 -0
  34. package/cjs/ledger/bitcoin_client/lib/varint.js +113 -0
  35. package/cjs/ledger/bitcoin_client/lib/varint.js.map +1 -0
  36. package/cjs/ledger/consts.js +7 -0
  37. package/cjs/ledger/consts.js.map +1 -0
  38. package/cjs/ledger/index.js +319 -0
  39. package/cjs/ledger/index.js.map +1 -0
  40. package/cjs/ledger/types.js +3 -0
  41. package/cjs/ledger/types.js.map +1 -0
  42. package/cjs/network-utils.js +76 -0
  43. package/cjs/network-utils.js.map +1 -0
  44. package/cjs/providers.js +270 -0
  45. package/cjs/providers.js.map +1 -0
  46. package/cjs/signers.js +64 -0
  47. package/cjs/signers.js.map +1 -0
  48. package/cjs/storage.js +30 -0
  49. package/cjs/storage.js.map +1 -0
  50. package/cjs/transactions/__tests__/integration.test.js +237 -0
  51. package/cjs/transactions/__tests__/integration.test.js.map +1 -0
  52. package/cjs/transactions/__tests__/syscoin.test.js +361 -0
  53. package/cjs/transactions/__tests__/syscoin.test.js.map +1 -0
  54. package/cjs/transactions/ethereum.js +1577 -0
  55. package/cjs/transactions/ethereum.js.map +1 -0
  56. package/cjs/transactions/index.js +19 -0
  57. package/cjs/transactions/index.js.map +1 -0
  58. package/cjs/transactions/syscoin.js +328 -0
  59. package/cjs/transactions/syscoin.js.map +1 -0
  60. package/cjs/trezor/index.js +718 -0
  61. package/cjs/trezor/index.js.map +1 -0
  62. package/cjs/types.js +12 -0
  63. package/cjs/types.js.map +1 -0
  64. package/cjs/utils/derivation-paths.js +99 -0
  65. package/cjs/utils/derivation-paths.js.map +1 -0
  66. package/cjs/utils/psbt.js +60 -0
  67. package/cjs/utils/psbt.js.map +1 -0
  68. package/cjs/utils.js +130 -0
  69. package/cjs/utils.js.map +1 -0
  70. package/package.json +46 -0
  71. package/types/errorUtils.d.ts +1 -0
  72. package/types/hardware-wallet-manager.d.ts +110 -0
  73. package/types/index.d.ts +12 -0
  74. package/types/initial-state.d.ts +79 -0
  75. package/types/keyring-manager.d.ts +184 -0
  76. package/types/ledger/bitcoin_client/index.d.ts +5 -0
  77. package/types/ledger/bitcoin_client/lib/appClient.d.ts +106 -0
  78. package/types/ledger/bitcoin_client/lib/bip32.d.ts +11 -0
  79. package/types/ledger/bitcoin_client/lib/buffertools.d.ts +28 -0
  80. package/types/ledger/bitcoin_client/lib/clientCommands.d.ts +77 -0
  81. package/types/ledger/bitcoin_client/lib/constants.d.ts +12 -0
  82. package/types/ledger/bitcoin_client/lib/merkelizedPsbt.d.ts +24 -0
  83. package/types/ledger/bitcoin_client/lib/merkle.d.ts +32 -0
  84. package/types/ledger/bitcoin_client/lib/merkleMap.d.ts +23 -0
  85. package/types/ledger/bitcoin_client/lib/policy.d.ts +36 -0
  86. package/types/ledger/bitcoin_client/lib/psbtv2.d.ts +167 -0
  87. package/types/ledger/bitcoin_client/lib/varint.d.ts +23 -0
  88. package/types/ledger/consts.d.ts +3 -0
  89. package/types/ledger/index.d.ts +51 -0
  90. package/types/ledger/types.d.ts +48 -0
  91. package/types/network-utils.d.ts +14 -0
  92. package/types/providers.d.ts +47 -0
  93. package/types/signers.d.ts +95 -0
  94. package/types/storage.d.ts +2 -0
  95. package/types/transactions/__tests__/integration.test.d.ts +1 -0
  96. package/types/transactions/__tests__/syscoin.test.d.ts +1 -0
  97. package/types/transactions/ethereum.d.ts +80 -0
  98. package/types/transactions/index.d.ts +2 -0
  99. package/types/transactions/syscoin.d.ts +61 -0
  100. package/types/trezor/index.d.ts +170 -0
  101. package/types/types.d.ts +294 -0
  102. package/types/utils/derivation-paths.d.ts +35 -0
  103. package/types/utils/psbt.d.ts +17 -0
  104. package/types/utils.d.ts +4 -0
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.pathElementsToBuffer = pathElementsToBuffer;
7
+ exports.bip32asBuffer = bip32asBuffer;
8
+ exports.pathArrayToString = pathArrayToString;
9
+ exports.pathStringToArray = pathStringToArray;
10
+ exports.pubkeyFromXpub = pubkeyFromXpub;
11
+ exports.getXpubComponents = getXpubComponents;
12
+ exports.hardenedPathOf = hardenedPathOf;
13
+ const bip32_path_1 = __importDefault(require("bip32-path")); // TODO: get rid of this dependency
14
+ const bs58check_1 = __importDefault(require("bs58check"));
15
+ function pathElementsToBuffer(paths) {
16
+ const buffer = Buffer.alloc(1 + paths.length * 4);
17
+ buffer[0] = paths.length;
18
+ paths.forEach((element, index) => {
19
+ buffer.writeUInt32BE(element, 1 + 4 * index);
20
+ });
21
+ return buffer;
22
+ }
23
+ function bip32asBuffer(path) {
24
+ const pathElements = !path ? [] : pathStringToArray(path);
25
+ return pathElementsToBuffer(pathElements);
26
+ }
27
+ function pathArrayToString(pathElements) {
28
+ // bippath doesn't handle an empty path.
29
+ if (pathElements.length == 0) {
30
+ return 'm';
31
+ }
32
+ return bip32_path_1.default.fromPathArray(pathElements).toString();
33
+ }
34
+ function pathStringToArray(path) {
35
+ // bippath doesn't handle an empty path.
36
+ if (path == 'm' || path == '') {
37
+ return [];
38
+ }
39
+ return bip32_path_1.default.fromString(path).toPathArray();
40
+ }
41
+ function pubkeyFromXpub(xpub) {
42
+ const xpubBuf = Buffer.from(bs58check_1.default.decode(xpub));
43
+ return xpubBuf.slice(xpubBuf.length - 33);
44
+ }
45
+ function getXpubComponents(xpub) {
46
+ const xpubBuf = Buffer.from(bs58check_1.default.decode(xpub));
47
+ return {
48
+ chaincode: xpubBuf.slice(13, 13 + 32),
49
+ pubkey: xpubBuf.slice(xpubBuf.length - 33),
50
+ version: xpubBuf.readUInt32BE(0),
51
+ };
52
+ }
53
+ function hardenedPathOf(pathElements) {
54
+ for (let i = pathElements.length - 1; i >= 0; i--) {
55
+ if (pathElements[i] >= 0x80000000) {
56
+ return pathElements.slice(0, i + 1);
57
+ }
58
+ }
59
+ return [];
60
+ }
61
+ //# sourceMappingURL=bip32.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bip32.js","sourceRoot":"","sources":["../../../../../src/ledger/bitcoin_client/lib/bip32.ts"],"names":[],"mappings":";;;;;AAGA,oDAOC;AAED,sCAGC;AAED,8CAMC;AAED,8CAMC;AAED,wCAGC;AAED,8CAWC;AAED,wCASC;AA5DD,4DAAiC,CAAC,mCAAmC;AACrE,0DAAkC;AAElC,SAAgB,oBAAoB,CAAC,KAAwB;IAC3D,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAClD,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACzB,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QAC/B,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,aAAa,CAAC,IAAY;IACxC,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1D,OAAO,oBAAoB,CAAC,YAAY,CAAC,CAAC;AAC5C,CAAC;AAED,SAAgB,iBAAiB,CAAC,YAA+B;IAC/D,wCAAwC;IACxC,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC7B,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,oBAAO,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;AACxD,CAAC;AAED,SAAgB,iBAAiB,CAAC,IAAY;IAC5C,wCAAwC;IACxC,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,oBAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AAChD,CAAC;AAED,SAAgB,cAAc,CAAC,IAAY;IACzC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,SAAgB,iBAAiB,CAAC,IAAY;IAK5C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;QACrC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;QAC1C,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;KACjC,CAAC;AACJ,CAAC;AAED,SAAgB,cAAc,CAC5B,YAA+B;IAE/B,KAAK,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAClD,IAAI,YAAY,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC;YAClC,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BufferReader = exports.BufferWriter = void 0;
4
+ exports.unsafeTo64bitLE = unsafeTo64bitLE;
5
+ exports.unsafeFrom64bitLE = unsafeFrom64bitLE;
6
+ const varint_1 = require("./varint");
7
+ function unsafeTo64bitLE(n) {
8
+ // we want to represent the input as a 8-bytes array
9
+ if (n > Number.MAX_SAFE_INTEGER) {
10
+ throw new Error("Can't convert numbers > MAX_SAFE_INT");
11
+ }
12
+ const byteArray = Buffer.alloc(8, 0);
13
+ for (let index = 0; index < byteArray.length; index++) {
14
+ const byte = n & 0xff;
15
+ byteArray[index] = byte;
16
+ n = (n - byte) / 256;
17
+ }
18
+ return byteArray;
19
+ }
20
+ function unsafeFrom64bitLE(byteArray) {
21
+ let value = 0;
22
+ if (byteArray.length != 8) {
23
+ throw new Error('Expected Bufffer of lenght 8');
24
+ }
25
+ if (byteArray[7] != 0) {
26
+ throw new Error("Can't encode numbers > MAX_SAFE_INT");
27
+ }
28
+ if (byteArray[6] > 0x1f) {
29
+ throw new Error("Can't encode numbers > MAX_SAFE_INT");
30
+ }
31
+ for (let i = byteArray.length - 1; i >= 0; i--) {
32
+ value = value * 256 + byteArray[i];
33
+ }
34
+ return value;
35
+ }
36
+ class BufferWriter {
37
+ constructor() {
38
+ this.bufs = [];
39
+ }
40
+ write(alloc, fn) {
41
+ const b = Buffer.alloc(alloc);
42
+ fn(b);
43
+ this.bufs.push(b);
44
+ }
45
+ writeUInt8(i) {
46
+ this.write(1, (b) => b.writeUInt8(i, 0));
47
+ }
48
+ writeInt32(i) {
49
+ this.write(4, (b) => b.writeInt32LE(i, 0));
50
+ }
51
+ writeUInt32(i) {
52
+ this.write(4, (b) => b.writeUInt32LE(i, 0));
53
+ }
54
+ writeUInt64(i) {
55
+ const bytes = unsafeTo64bitLE(i);
56
+ this.writeSlice(bytes);
57
+ }
58
+ writeVarInt(i) {
59
+ this.bufs.push((0, varint_1.createVarint)(i));
60
+ }
61
+ writeSlice(slice) {
62
+ this.bufs.push(Buffer.from(slice));
63
+ }
64
+ writeVarSlice(slice) {
65
+ this.writeVarInt(slice.length);
66
+ this.writeSlice(slice);
67
+ }
68
+ buffer() {
69
+ return Buffer.concat(this.bufs);
70
+ }
71
+ }
72
+ exports.BufferWriter = BufferWriter;
73
+ class BufferReader {
74
+ constructor(buffer, offset = 0) {
75
+ this.buffer = buffer;
76
+ this.offset = offset;
77
+ }
78
+ available() {
79
+ return this.buffer.length - this.offset;
80
+ }
81
+ readUInt8() {
82
+ const result = this.buffer.readUInt8(this.offset);
83
+ this.offset++;
84
+ return result;
85
+ }
86
+ readInt32() {
87
+ const result = this.buffer.readInt32LE(this.offset);
88
+ this.offset += 4;
89
+ return result;
90
+ }
91
+ readUInt32() {
92
+ const result = this.buffer.readUInt32LE(this.offset);
93
+ this.offset += 4;
94
+ return result;
95
+ }
96
+ readUInt64() {
97
+ const buf = this.readSlice(8);
98
+ return unsafeFrom64bitLE(buf);
99
+ }
100
+ readVarInt() {
101
+ const [vi, viSize] = (0, varint_1.parseVarint)(this.buffer, this.offset);
102
+ this.offset += viSize;
103
+ return vi;
104
+ }
105
+ readSlice(n) {
106
+ if (this.buffer.length < this.offset + n) {
107
+ throw new Error('Cannot read slice out of bounds');
108
+ }
109
+ const result = this.buffer.slice(this.offset, this.offset + n);
110
+ this.offset += n;
111
+ return result;
112
+ }
113
+ readVarSlice() {
114
+ const n = (0, varint_1.sanitizeBigintToNumber)(this.readVarInt());
115
+ return this.readSlice(n);
116
+ }
117
+ readVector() {
118
+ const count = this.readVarInt();
119
+ const vector = [];
120
+ for (let i = 0; i < count; i++)
121
+ vector.push(this.readVarSlice());
122
+ return vector;
123
+ }
124
+ }
125
+ exports.BufferReader = BufferReader;
126
+ //# sourceMappingURL=buffertools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buffertools.js","sourceRoot":"","sources":["../../../../../src/ledger/bitcoin_client/lib/buffertools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,270 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ClientCommandInterpreter = exports.GetMoreElementsCommand = exports.GetMerkleLeafIndexCommand = exports.GetMerkleLeafProofCommand = exports.GetPreimageCommand = exports.YieldCommand = void 0;
4
+ /* eslint-disable camelcase */
5
+ const bitcoinjs_lib_1 = require("bitcoinjs-lib");
6
+ const buffertools_1 = require("./buffertools");
7
+ const merkle_1 = require("./merkle");
8
+ const varint_1 = require("./varint");
9
+ var ClientCommandCode;
10
+ (function (ClientCommandCode) {
11
+ ClientCommandCode[ClientCommandCode["YIELD"] = 16] = "YIELD";
12
+ ClientCommandCode[ClientCommandCode["GET_PREIMAGE"] = 64] = "GET_PREIMAGE";
13
+ ClientCommandCode[ClientCommandCode["GET_MERKLE_LEAF_PROOF"] = 65] = "GET_MERKLE_LEAF_PROOF";
14
+ ClientCommandCode[ClientCommandCode["GET_MERKLE_LEAF_INDEX"] = 66] = "GET_MERKLE_LEAF_INDEX";
15
+ ClientCommandCode[ClientCommandCode["GET_MORE_ELEMENTS"] = 160] = "GET_MORE_ELEMENTS";
16
+ })(ClientCommandCode || (ClientCommandCode = {}));
17
+ class ClientCommand {
18
+ }
19
+ class YieldCommand extends ClientCommand {
20
+ constructor(results, progressCallback) {
21
+ super();
22
+ this.progressCallback = progressCallback;
23
+ this.code = ClientCommandCode.YIELD;
24
+ this.results = results;
25
+ }
26
+ execute(request) {
27
+ this.results.push(Buffer.from(request.subarray(1)));
28
+ if (this.progressCallback) {
29
+ this.progressCallback();
30
+ }
31
+ return Buffer.from('');
32
+ }
33
+ }
34
+ exports.YieldCommand = YieldCommand;
35
+ class GetPreimageCommand extends ClientCommand {
36
+ constructor(known_preimages, queue) {
37
+ super();
38
+ this.code = ClientCommandCode.GET_PREIMAGE;
39
+ this.known_preimages = known_preimages;
40
+ this.queue = queue;
41
+ }
42
+ execute(request) {
43
+ const req = Buffer.from(request.subarray(1));
44
+ // we expect no more data to read
45
+ if (req.length != 1 + 32) {
46
+ throw new Error('Invalid request, unexpected trailing data');
47
+ }
48
+ if (req[0] != 0) {
49
+ throw new Error('Unsupported request, the first byte should be 0');
50
+ }
51
+ // read the hash
52
+ const hash = Buffer.alloc(32);
53
+ for (let i = 0; i < 32; i++) {
54
+ hash[i] = req[1 + i];
55
+ }
56
+ const req_hash_hex = hash.toString('hex');
57
+ const known_preimage = this.known_preimages.get(req_hash_hex);
58
+ if (known_preimage != undefined) {
59
+ const preimage_len_varint = (0, varint_1.createVarint)(known_preimage.length);
60
+ // We can send at most 255 - len(preimage_len_out) - 1 bytes in a single message;
61
+ // the rest will be stored in the queue for GET_MORE_ELEMENTS
62
+ const max_payload_size = 255 - preimage_len_varint.length - 1;
63
+ const payload_size = Math.min(max_payload_size, known_preimage.length);
64
+ if (payload_size < known_preimage.length) {
65
+ for (let i = payload_size; i < known_preimage.length; i++) {
66
+ this.queue.push(Buffer.from([known_preimage[i]]));
67
+ }
68
+ }
69
+ return Buffer.concat([
70
+ preimage_len_varint,
71
+ Buffer.from([payload_size]),
72
+ Buffer.from(known_preimage.subarray(0, payload_size)),
73
+ ]);
74
+ }
75
+ throw Error(`Requested unknown preimage for: ${req_hash_hex}`);
76
+ }
77
+ }
78
+ exports.GetPreimageCommand = GetPreimageCommand;
79
+ class GetMerkleLeafProofCommand extends ClientCommand {
80
+ constructor(known_trees, queue) {
81
+ super();
82
+ this.code = ClientCommandCode.GET_MERKLE_LEAF_PROOF;
83
+ this.known_trees = known_trees;
84
+ this.queue = queue;
85
+ }
86
+ execute(request) {
87
+ const req = Buffer.from(request.subarray(1));
88
+ if (req.length < 32 + 1 + 1) {
89
+ throw new Error('Invalid request, expected at least 34 bytes');
90
+ }
91
+ const reqBuf = new buffertools_1.BufferReader(req);
92
+ const hash = reqBuf.readSlice(32);
93
+ const hash_hex = hash.toString('hex');
94
+ let tree_size;
95
+ let leaf_index;
96
+ try {
97
+ tree_size = (0, varint_1.sanitizeBigintToNumber)(reqBuf.readVarInt());
98
+ leaf_index = (0, varint_1.sanitizeBigintToNumber)(reqBuf.readVarInt());
99
+ }
100
+ catch (e) {
101
+ throw new Error("Invalid request, couldn't parse tree_size or leaf_index");
102
+ }
103
+ const mt = this.known_trees.get(hash_hex);
104
+ if (!mt) {
105
+ throw Error(`Requested Merkle leaf proof for unknown tree: ${hash_hex}`);
106
+ }
107
+ if (leaf_index >= tree_size || mt.size() != tree_size) {
108
+ throw Error('Invalid index or tree size.');
109
+ }
110
+ if (this.queue.length != 0) {
111
+ throw Error('This command should not execute when the queue is not empty.');
112
+ }
113
+ const proof = mt.getProof(leaf_index);
114
+ const n_response_elements = Math.min(Math.floor((255 - 32 - 1 - 1) / 32), proof.length);
115
+ const n_leftover_elements = proof.length - n_response_elements;
116
+ // Add to the queue any proof elements that do not fit the response
117
+ if (n_leftover_elements > 0) {
118
+ this.queue.push(...proof.slice(-n_leftover_elements));
119
+ }
120
+ return Buffer.concat([
121
+ mt.getLeafHash(leaf_index),
122
+ Buffer.from([proof.length]),
123
+ Buffer.from([n_response_elements]),
124
+ ...proof.slice(0, n_response_elements),
125
+ ]);
126
+ }
127
+ }
128
+ exports.GetMerkleLeafProofCommand = GetMerkleLeafProofCommand;
129
+ class GetMerkleLeafIndexCommand extends ClientCommand {
130
+ constructor(known_trees) {
131
+ super();
132
+ this.code = ClientCommandCode.GET_MERKLE_LEAF_INDEX;
133
+ this.known_trees = known_trees;
134
+ }
135
+ execute(request) {
136
+ const req = Buffer.from(request.subarray(1));
137
+ if (req.length != 32 + 32) {
138
+ throw new Error('Invalid request, unexpected trailing data');
139
+ }
140
+ // read the root hash
141
+ const root_hash = Buffer.alloc(32);
142
+ for (let i = 0; i < 32; i++) {
143
+ root_hash[i] = req.readUInt8(i);
144
+ }
145
+ const root_hash_hex = root_hash.toString('hex');
146
+ // read the leaf hash
147
+ const leef_hash = Buffer.alloc(32);
148
+ for (let i = 0; i < 32; i++) {
149
+ leef_hash[i] = req.readUInt8(32 + i);
150
+ }
151
+ const leef_hash_hex = leef_hash.toString('hex');
152
+ const mt = this.known_trees.get(root_hash_hex);
153
+ if (!mt) {
154
+ throw Error(`Requested Merkle leaf index for unknown root: ${root_hash_hex}`);
155
+ }
156
+ let leaf_index = 0;
157
+ let found = 0;
158
+ for (let i = 0; i < mt.size(); i++) {
159
+ if (mt.getLeafHash(i).toString('hex') == leef_hash_hex) {
160
+ found = 1;
161
+ leaf_index = i;
162
+ break;
163
+ }
164
+ }
165
+ return Buffer.concat([Buffer.from([found]), (0, varint_1.createVarint)(leaf_index)]);
166
+ }
167
+ }
168
+ exports.GetMerkleLeafIndexCommand = GetMerkleLeafIndexCommand;
169
+ class GetMoreElementsCommand extends ClientCommand {
170
+ constructor(queue) {
171
+ super();
172
+ this.code = ClientCommandCode.GET_MORE_ELEMENTS;
173
+ this.queue = queue;
174
+ }
175
+ execute(request) {
176
+ if (request.length != 1) {
177
+ throw new Error('Invalid request, unexpected trailing data');
178
+ }
179
+ if (this.queue.length === 0) {
180
+ throw new Error('No elements to get');
181
+ }
182
+ // all elements should have the same length
183
+ const element_len = this.queue[0].length;
184
+ if (this.queue.some((el) => el.length != element_len)) {
185
+ throw new Error('The queue contains elements with different byte length, which is not expected');
186
+ }
187
+ const max_elements = Math.floor(253 / element_len);
188
+ const n_returned_elements = Math.min(max_elements, this.queue.length);
189
+ const returned_elements = this.queue.splice(0, n_returned_elements);
190
+ return Buffer.concat([
191
+ Buffer.from([n_returned_elements]),
192
+ Buffer.from([element_len]),
193
+ ...returned_elements,
194
+ ]);
195
+ }
196
+ }
197
+ exports.GetMoreElementsCommand = GetMoreElementsCommand;
198
+ /**
199
+ * This class will dispatch a client command coming from the hardware device to
200
+ * the appropriate client command implementation. Those client commands
201
+ * typically requests data from a merkle tree or merkelized maps.
202
+ *
203
+ * A ClientCommandInterpreter is prepared by adding the merkle trees and
204
+ * merkelized maps it should be able to serve to the hardware device. This class
205
+ * doesn't know anything about the semantics of the data it holds, it just
206
+ * serves merkle data. It doesn't even know in what context it is being
207
+ * executed, ie SignPsbt, getWalletAddress, etc.
208
+ *
209
+ * If the command yelds results to the client, as signPsbt does, the yielded
210
+ * data will be accessible after the command completed by calling getYielded(),
211
+ * which will return the yields in the same order as they came in.
212
+ */
213
+ class ClientCommandInterpreter {
214
+ constructor(progressCallback) {
215
+ this.roots = new Map();
216
+ this.preimages = new Map();
217
+ this.yielded = [];
218
+ this.queue = [];
219
+ this.commands = new Map();
220
+ const commands = [
221
+ new YieldCommand(this.yielded, progressCallback),
222
+ new GetPreimageCommand(this.preimages, this.queue),
223
+ new GetMerkleLeafIndexCommand(this.roots),
224
+ new GetMerkleLeafProofCommand(this.roots, this.queue),
225
+ new GetMoreElementsCommand(this.queue),
226
+ ];
227
+ for (const cmd of commands) {
228
+ if (this.commands.has(cmd.code)) {
229
+ throw new Error(`Multiple commands with code ${cmd.code}`);
230
+ }
231
+ this.commands.set(cmd.code, cmd);
232
+ }
233
+ }
234
+ getYielded() {
235
+ return this.yielded;
236
+ }
237
+ addKnownPreimage(preimage) {
238
+ this.preimages.set(bitcoinjs_lib_1.crypto.sha256(preimage).toString('hex'), preimage);
239
+ }
240
+ addKnownList(elements) {
241
+ for (const el of elements) {
242
+ const preimage = Buffer.concat([Buffer.from([0]), el]);
243
+ this.addKnownPreimage(preimage);
244
+ }
245
+ const mt = new merkle_1.Merkle(elements.map((el) => (0, merkle_1.hashLeaf)(el)));
246
+ this.roots.set(mt.getRoot().toString('hex'), mt);
247
+ }
248
+ addKnownMapping(mm) {
249
+ this.addKnownList(mm.keys);
250
+ this.addKnownList(mm.values);
251
+ }
252
+ addKnownWalletPolicy(wp) {
253
+ this.addKnownPreimage(wp.serialize());
254
+ this.addKnownList(wp.keys.map((k) => Buffer.from(k, 'ascii')));
255
+ this.addKnownPreimage(Buffer.from(wp.descriptorTemplate));
256
+ }
257
+ execute(request) {
258
+ if (request.length == 0) {
259
+ throw new Error('Unexpected empty command');
260
+ }
261
+ const cmdCode = request[0];
262
+ const cmd = this.commands.get(cmdCode);
263
+ if (!cmd) {
264
+ throw new Error(`Unexpected command code ${cmdCode}`);
265
+ }
266
+ return cmd.execute(request);
267
+ }
268
+ }
269
+ exports.ClientCommandInterpreter = ClientCommandInterpreter;
270
+ //# sourceMappingURL=clientCommands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientCommands.js","sourceRoot":"","sources":["../../../../../src/ledger/bitcoin_client/lib/clientCommands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OP_RETURN = exports.OP_CHECKSIG = exports.OP_EQUALVERIFY = exports.OP_EQUAL = exports.HASH_SIZE = exports.OP_HASH160 = exports.OP_DUP = exports.SIGHASH_ALL = exports.DEFAULT_SEQUENCE = exports.DEFAULT_LOCKTIME = exports.DEFAULT_VERSION = exports.MAX_SCRIPT_BLOCK = void 0;
4
+ exports.MAX_SCRIPT_BLOCK = 50;
5
+ exports.DEFAULT_VERSION = 1;
6
+ exports.DEFAULT_LOCKTIME = 0;
7
+ exports.DEFAULT_SEQUENCE = 0xffffffff;
8
+ exports.SIGHASH_ALL = 1;
9
+ exports.OP_DUP = 0x76;
10
+ exports.OP_HASH160 = 0xa9;
11
+ exports.HASH_SIZE = 0x14;
12
+ exports.OP_EQUAL = 0x87;
13
+ exports.OP_EQUALVERIFY = 0x88;
14
+ exports.OP_CHECKSIG = 0xac;
15
+ exports.OP_RETURN = 0x6a;
16
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../src/ledger/bitcoin_client/lib/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,gBAAgB,GAAG,EAAE,CAAC;AACtB,QAAA,eAAe,GAAG,CAAC,CAAC;AACpB,QAAA,gBAAgB,GAAG,CAAC,CAAC;AACrB,QAAA,gBAAgB,GAAG,UAAU,CAAC;AAC9B,QAAA,WAAW,GAAG,CAAC,CAAC;AAChB,QAAA,MAAM,GAAG,IAAI,CAAC;AACd,QAAA,UAAU,GAAG,IAAI,CAAC;AAClB,QAAA,SAAS,GAAG,IAAI,CAAC;AACjB,QAAA,QAAQ,GAAG,IAAI,CAAC;AAChB,QAAA,cAAc,GAAG,IAAI,CAAC;AACtB,QAAA,WAAW,GAAG,IAAI,CAAC;AACnB,QAAA,SAAS,GAAG,IAAI,CAAC"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MerkelizedPsbt = void 0;
4
+ const merkleMap_1 = require("./merkleMap");
5
+ const psbtv2_1 = require("./psbtv2");
6
+ /**
7
+ * This class merkelizes a PSBTv2, by merkelizing the different
8
+ * maps of the psbt. This is used during the transaction signing process,
9
+ * where the hardware app can request specific parts of the psbt from the
10
+ * client code and be sure that the response data actually belong to the psbt.
11
+ * The reason for this is the limited amount of memory available to the app,
12
+ * so it can't always store the full psbt in memory.
13
+ *
14
+ * The signing process is documented at
15
+ * https://github.com/LedgerHQ/app-bitcoin-new/blob/master/doc/bitcoin.md#sign_psbt
16
+ */
17
+ class MerkelizedPsbt extends psbtv2_1.PsbtV2 {
18
+ constructor(psbt) {
19
+ super();
20
+ this.inputMerkleMaps = [];
21
+ this.outputMerkleMaps = [];
22
+ psbt.copy(this);
23
+ this.globalMerkleMap = MerkelizedPsbt.createMerkleMap(this.globalMap);
24
+ for (let i = 0; i < this.getGlobalInputCount(); i++) {
25
+ this.inputMerkleMaps.push(MerkelizedPsbt.createMerkleMap(this.inputMaps[i]));
26
+ }
27
+ this.inputMapCommitments = [...this.inputMerkleMaps.values()].map((v) => v.commitment());
28
+ for (let i = 0; i < this.getGlobalOutputCount(); i++) {
29
+ this.outputMerkleMaps.push(MerkelizedPsbt.createMerkleMap(this.outputMaps[i]));
30
+ }
31
+ this.outputMapCommitments = [...this.outputMerkleMaps.values()].map((v) => v.commitment());
32
+ }
33
+ // These public functions are for MerkelizedPsbt.
34
+ getGlobalSize() {
35
+ return this.globalMap.size;
36
+ }
37
+ getGlobalKeysValuesRoot() {
38
+ return this.globalMerkleMap.commitment();
39
+ }
40
+ static createMerkleMap(map) {
41
+ const sortedKeysStrings = [...map.keys()].sort();
42
+ const values = sortedKeysStrings.map((k) => {
43
+ const v = map.get(k);
44
+ if (!v) {
45
+ throw new Error('No value for key ' + k);
46
+ }
47
+ return v;
48
+ });
49
+ const sortedKeys = sortedKeysStrings.map((k) => Buffer.from(k, 'hex'));
50
+ return new merkleMap_1.MerkleMap(sortedKeys, values);
51
+ }
52
+ }
53
+ exports.MerkelizedPsbt = MerkelizedPsbt;
54
+ //# sourceMappingURL=merkelizedPsbt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merkelizedPsbt.js","sourceRoot":"","sources":["../../../../../src/ledger/bitcoin_client/lib/merkelizedPsbt.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AACxC,qCAAkC;AAElC;;;;;;;;;;GAUG;AACH,MAAa,cAAe,SAAQ,eAAM;IAMxC,YAAY,IAAY;QACtB,KAAK,EAAE,CAAC;QALH,oBAAe,GAAgB,EAAE,CAAC;QAClC,qBAAgB,GAAgB,EAAE,CAAC;QAKxC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YACpD,IAAI,CAAC,eAAe,CAAC,IAAI,CACvB,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAClD,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,mBAAmB,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACtE,CAAC,CAAC,UAAU,EAAE,CACf,CAAC;QAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YACrD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CACxB,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CACnD,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,oBAAoB,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACxE,CAAC,CAAC,UAAU,EAAE,CACf,CAAC;IACJ,CAAC;IACD,iDAAiD;IACjD,aAAa;QACX,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B,CAAC;IACD,uBAAuB;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;IAC3C,CAAC;IAEO,MAAM,CAAC,eAAe,CAAC,GAAgC;QAC7D,MAAM,iBAAiB,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACzC,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,CAAC,EAAE,CAAC;gBACP,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,CAAC,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAEvE,OAAO,IAAI,qBAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;CACF;AAlDD,wCAkDC"}