@sidhujag/sysweb3-keyring 1.0.628 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +66 -0
  3. package/cjs/hardware-wallet-manager.js +302 -128
  4. package/cjs/hardware-wallet-manager.js.map +1 -1
  5. package/cjs/keyring-core.js +93 -0
  6. package/cjs/keyring-core.js.map +1 -1
  7. package/cjs/keyring-manager.js +9 -3
  8. package/cjs/keyring-manager.js.map +1 -1
  9. package/cjs/ledger/bitcoin_client/lib/appClient.js.map +1 -1
  10. package/cjs/ledger/host-types.js +10 -0
  11. package/cjs/ledger/host-types.js.map +1 -0
  12. package/cjs/ledger/index.js +243 -447
  13. package/cjs/ledger/index.js.map +1 -1
  14. package/cjs/ledger/prepare-psbt.js +177 -0
  15. package/cjs/ledger/prepare-psbt.js.map +1 -0
  16. package/cjs/software-hd-account.js +23 -0
  17. package/cjs/software-hd-account.js.map +1 -0
  18. package/cjs/software.js +16 -0
  19. package/cjs/software.js.map +1 -1
  20. package/cjs/transactions/ethereum.js +55 -10
  21. package/cjs/transactions/ethereum.js.map +1 -1
  22. package/cjs/transactions/hardware-psbt.js +36 -44
  23. package/cjs/transactions/hardware-psbt.js.map +1 -1
  24. package/cjs/transactions/prepared-evm.js +196 -0
  25. package/cjs/transactions/prepared-evm.js.map +1 -0
  26. package/cjs/trezor/connect.js +243 -0
  27. package/cjs/trezor/connect.js.map +1 -0
  28. package/cjs/trezor/index.js +96 -58
  29. package/cjs/trezor/index.js.map +1 -1
  30. package/cjs/trezor/witness.js +25 -0
  31. package/cjs/trezor/witness.js.map +1 -0
  32. package/cjs/utils/psbt-account-scope.js +5 -3
  33. package/cjs/utils/psbt-account-scope.js.map +1 -1
  34. package/esm/errorUtils.js +72 -0
  35. package/esm/errorUtils.js.map +1 -0
  36. package/esm/ethers-v6.js +207 -0
  37. package/esm/ethers-v6.js.map +1 -0
  38. package/esm/hardware-wallet-manager.js +643 -0
  39. package/esm/hardware-wallet-manager.js.map +1 -0
  40. package/esm/ledger/bitcoin_client/lib/appClient.js +279 -0
  41. package/esm/ledger/bitcoin_client/lib/appClient.js.map +1 -0
  42. package/esm/ledger/bitcoin_client/lib/bip32.js +49 -0
  43. package/esm/ledger/bitcoin_client/lib/bip32.js.map +1 -0
  44. package/esm/ledger/bitcoin_client/lib/buffertools.js +119 -0
  45. package/esm/ledger/bitcoin_client/lib/buffertools.js.map +1 -0
  46. package/esm/ledger/bitcoin_client/lib/clientCommands.js +269 -0
  47. package/esm/ledger/bitcoin_client/lib/clientCommands.js.map +1 -0
  48. package/esm/ledger/bitcoin_client/lib/merkelizedPsbt.js +50 -0
  49. package/esm/ledger/bitcoin_client/lib/merkelizedPsbt.js.map +1 -0
  50. package/esm/ledger/bitcoin_client/lib/merkle.js +111 -0
  51. package/esm/ledger/bitcoin_client/lib/merkle.js.map +1 -0
  52. package/esm/ledger/bitcoin_client/lib/merkleMap.js +42 -0
  53. package/esm/ledger/bitcoin_client/lib/merkleMap.js.map +1 -0
  54. package/esm/ledger/bitcoin_client/lib/policy.js +68 -0
  55. package/esm/ledger/bitcoin_client/lib/policy.js.map +1 -0
  56. package/esm/ledger/bitcoin_client/lib/psbtv2.js +645 -0
  57. package/esm/ledger/bitcoin_client/lib/psbtv2.js.map +1 -0
  58. package/esm/ledger/bitcoin_client/lib/varint.js +108 -0
  59. package/esm/ledger/bitcoin_client/lib/varint.js.map +1 -0
  60. package/esm/ledger/consts.js +4 -0
  61. package/esm/ledger/consts.js.map +1 -0
  62. package/esm/ledger/dmk-evm.js +258 -0
  63. package/esm/ledger/dmk-evm.js.map +1 -0
  64. package/esm/ledger/dmk-session.js +264 -0
  65. package/esm/ledger/dmk-session.js.map +1 -0
  66. package/esm/ledger/dmk-utxo.js +279 -0
  67. package/esm/ledger/dmk-utxo.js.map +1 -0
  68. package/esm/ledger/host-types.js +5 -0
  69. package/esm/ledger/host-types.js.map +1 -0
  70. package/esm/ledger/index.js +268 -0
  71. package/esm/ledger/index.js.map +1 -0
  72. package/esm/ledger/prepare-psbt.js +141 -0
  73. package/esm/ledger/prepare-psbt.js.map +1 -0
  74. package/esm/ledger/types.js +2 -0
  75. package/esm/ledger/types.js.map +1 -0
  76. package/esm/ledger-host.js +36 -0
  77. package/esm/ledger-host.js.map +1 -0
  78. package/esm/private-records.js +153 -0
  79. package/esm/private-records.js.map +1 -0
  80. package/esm/providers.js +588 -0
  81. package/esm/providers.js.map +1 -0
  82. package/esm/signers.js +28 -0
  83. package/esm/signers.js.map +1 -0
  84. package/esm/trezor/connect.js +206 -0
  85. package/esm/trezor/connect.js.map +1 -0
  86. package/esm/trezor/index.js +876 -0
  87. package/esm/trezor/index.js.map +1 -0
  88. package/esm/trezor/witness.js +21 -0
  89. package/esm/trezor/witness.js.map +1 -0
  90. package/esm/types.js +17 -0
  91. package/esm/types.js.map +1 -0
  92. package/esm/utils/derivation-paths.js +109 -0
  93. package/esm/utils/derivation-paths.js.map +1 -0
  94. package/esm/utils/psbt-account-scope.js +310 -0
  95. package/esm/utils/psbt-account-scope.js.map +1 -0
  96. package/package.json +21 -8
  97. package/types/hardware-wallet-manager.d.ts +12 -19
  98. package/types/keyring-core.d.ts +6 -0
  99. package/types/keyring-manager.d.ts +2 -1
  100. package/types/ledger/bitcoin_client/lib/appClient.d.ts +6 -3
  101. package/types/ledger/dmk-evm.d.ts +8 -0
  102. package/types/ledger/dmk-session.d.ts +60 -0
  103. package/types/ledger/dmk-utxo.d.ts +26 -0
  104. package/types/ledger/host-types.d.ts +131 -0
  105. package/types/ledger/index.d.ts +21 -58
  106. package/types/ledger/prepare-psbt.d.ts +3 -0
  107. package/types/ledger/types.d.ts +3 -0
  108. package/types/ledger-host.d.ts +7 -0
  109. package/types/software-hd-account.d.ts +16 -0
  110. package/types/software.d.ts +16 -0
  111. package/types/transactions/ethereum.d.ts +1 -1
  112. package/types/transactions/prepared-evm.d.ts +53 -0
  113. package/types/trezor/connect.d.ts +42 -0
  114. package/types/trezor/index.d.ts +22 -4
  115. package/types/trezor/witness.d.ts +3 -0
  116. package/types/utils/psbt-account-scope.d.ts +1 -0
@@ -0,0 +1,279 @@
1
+ import { pathElementsToBuffer, pathStringToArray } from './bip32';
2
+ import { ClientCommandInterpreter } from './clientCommands';
3
+ import { MerkelizedPsbt } from './merkelizedPsbt';
4
+ import { hashLeaf, Merkle } from './merkle';
5
+ import { PsbtV2 } from './psbtv2';
6
+ import { createVarint, parseVarint } from './varint';
7
+ const CLA_BTC = 0xe1;
8
+ const CLA_FRAMEWORK = 0xf8;
9
+ const CURRENT_PROTOCOL_VERSION = 1; // supported from version 2.1.0 of the app
10
+ var BitcoinIns;
11
+ (function (BitcoinIns) {
12
+ BitcoinIns[BitcoinIns["GET_PUBKEY"] = 0] = "GET_PUBKEY";
13
+ BitcoinIns[BitcoinIns["REGISTER_WALLET"] = 2] = "REGISTER_WALLET";
14
+ BitcoinIns[BitcoinIns["GET_WALLET_ADDRESS"] = 3] = "GET_WALLET_ADDRESS";
15
+ BitcoinIns[BitcoinIns["SIGN_PSBT"] = 4] = "SIGN_PSBT";
16
+ BitcoinIns[BitcoinIns["GET_MASTER_FINGERPRINT"] = 5] = "GET_MASTER_FINGERPRINT";
17
+ BitcoinIns[BitcoinIns["SIGN_MESSAGE"] = 16] = "SIGN_MESSAGE";
18
+ })(BitcoinIns || (BitcoinIns = {}));
19
+ var FrameworkIns;
20
+ (function (FrameworkIns) {
21
+ FrameworkIns[FrameworkIns["CONTINUE_INTERRUPTED"] = 1] = "CONTINUE_INTERRUPTED";
22
+ })(FrameworkIns || (FrameworkIns = {}));
23
+ /**
24
+ * This class represents a partial signature produced by the app during signing.
25
+ * It always contains the `signature` and the corresponding `pubkey` whose private key
26
+ * was used for signing; in the case of taproot script paths, it also contains the
27
+ * tapleaf hash.
28
+ */
29
+ export class PartialSignature {
30
+ constructor(pubkey, signature, tapleafHash) {
31
+ this.pubkey = pubkey;
32
+ this.signature = signature;
33
+ this.tapleafHash = tapleafHash;
34
+ }
35
+ }
36
+ /**
37
+ * Creates an instance of `PartialSignature` from the returned raw augmented pubkey and signature.
38
+ * @param pubkeyAugm the public key, concatenated with the tapleaf hash in the case of taproot script path spend.
39
+ * @param signature the signature
40
+ * @returns an instance of `PartialSignature`.
41
+ */
42
+ function makePartialSignature(pubkeyAugm, signature) {
43
+ if (pubkeyAugm.length == 64) {
44
+ // tapscript spend: concatenation of 32-bytes x-only pubkey and 32-bytes tapleaf_hash
45
+ return new PartialSignature(pubkeyAugm.slice(0, 32), signature, pubkeyAugm.slice(32, 64));
46
+ }
47
+ else if (pubkeyAugm.length == 32 || pubkeyAugm.length == 33) {
48
+ // legacy, segwit or taproot keypath spend: pubkeyAugm is just the pubkey
49
+ return new PartialSignature(pubkeyAugm, signature);
50
+ }
51
+ else {
52
+ throw new Error(`Invalid length for pubkeyAugm: ${pubkeyAugm.length} bytes.`);
53
+ }
54
+ }
55
+ /**
56
+ * This class encapsulates the APDU protocol documented at
57
+ * https://github.com/LedgerHQ/app-bitcoin-new/blob/master/doc/bitcoin.md
58
+ */
59
+ export class AppClient {
60
+ constructor(transport) {
61
+ this.transport = transport;
62
+ }
63
+ async makeRequest(ins, data, cci) {
64
+ let response = await this.transport.send(CLA_BTC, ins, 0, CURRENT_PROTOCOL_VERSION, data, [0x9000, 0xe000]);
65
+ while (response.readUInt16BE(response.length - 2) === 0xe000) {
66
+ if (!cci) {
67
+ throw new Error('Unexpected SW_INTERRUPTED_EXECUTION');
68
+ }
69
+ const hwRequest = response.slice(0, -2);
70
+ const commandResponse = cci.execute(hwRequest);
71
+ response = await this.transport.send(CLA_FRAMEWORK, FrameworkIns.CONTINUE_INTERRUPTED, 0, 0, commandResponse, [0x9000, 0xe000]);
72
+ }
73
+ return response.slice(0, -2); // drop the status word (can only be 0x9000 at this point)
74
+ }
75
+ /**
76
+ * Returns an object containing the currently running app's name, version and the device status flags.
77
+ *
78
+ * @returns an object with app name, version and device status flags.
79
+ */
80
+ async getAppAndVersion() {
81
+ const r = await this.transport.send(0xb0, 0x01, 0x00, 0x00);
82
+ let i = 0;
83
+ const format = r[i++];
84
+ if (format !== 1)
85
+ throw new Error('Unexpected response');
86
+ const nameLength = r[i++];
87
+ const name = r.slice(i, (i += nameLength)).toString('ascii');
88
+ const versionLength = r[i++];
89
+ const version = r.slice(i, (i += versionLength)).toString('ascii');
90
+ const flagLength = r[i++];
91
+ const flags = r.slice(i, (i += flagLength));
92
+ return {
93
+ name,
94
+ version,
95
+ flags,
96
+ };
97
+ }
98
+ /**
99
+ * Requests the BIP-32 extended pubkey to the hardware wallet.
100
+ * If `display` is `false`, only standard paths will be accepted; an error is returned if an unusual path is
101
+ * requested.
102
+ * If `display` is `true`, the requested path is shown on screen for user verification; unusual paths can be
103
+ * requested, and a warning is shown to the user in that case.
104
+ *
105
+ * @param path the requested BIP-32 path as a string
106
+ * @param display `false` to silently retrieve a pubkey for a standard path, `true` to display the path on screen
107
+ * @returns the base58-encoded serialized extended pubkey (xpub)
108
+ */
109
+ async getExtendedPubkey(path, display = false) {
110
+ const pathElements = pathStringToArray(path);
111
+ if (pathElements.length > 6) {
112
+ throw new Error('Path too long. At most 6 levels allowed.');
113
+ }
114
+ const response = await this.makeRequest(BitcoinIns.GET_PUBKEY, Buffer.concat([
115
+ Buffer.from(display ? [1] : [0]),
116
+ pathElementsToBuffer(pathElements),
117
+ ]));
118
+ return response.toString('ascii');
119
+ }
120
+ /**
121
+ * Registers a `WalletPolicy`, after interactive verification from the user.
122
+ * On success, after user's approval, this function returns the id (which is the same that can be computed with
123
+ * `walletPolicy.getid()`), followed by the 32-byte hmac. The client should store the hmac to use it for future
124
+ * requests to `getWalletAddress` or `signPsbt` using this `WalletPolicy`.
125
+ *
126
+ * @param walletPolicy the `WalletPolicy` to register
127
+ * @returns a pair of two 32-byte arrays: the id of the Wallet Policy, followed by the policy hmac
128
+ */
129
+ async registerWallet(walletPolicy) {
130
+ const clientInterpreter = new ClientCommandInterpreter();
131
+ clientInterpreter.addKnownWalletPolicy(walletPolicy);
132
+ const serializedWalletPolicy = walletPolicy.serialize();
133
+ const response = await this.makeRequest(BitcoinIns.REGISTER_WALLET, Buffer.concat([
134
+ createVarint(serializedWalletPolicy.length),
135
+ serializedWalletPolicy,
136
+ ]), clientInterpreter);
137
+ if (response.length != 64) {
138
+ throw Error(`Invalid response length. Expected 64 bytes, got ${response.length}`);
139
+ }
140
+ const walletId = response.subarray(0, 32);
141
+ const walletHMAC = response.subarray(32);
142
+ return [walletId, walletHMAC];
143
+ }
144
+ /**
145
+ * Returns the address of `walletPolicy` for the given `change` and `addressIndex`.
146
+ *
147
+ * @param walletPolicy the `WalletPolicy` to use
148
+ * @param walletHMAC the 32-byte hmac returned during wallet registration for a registered policy; otherwise
149
+ * `null` for a standard policy
150
+ * @param change `0` for a normal receive address, `1` for a change address
151
+ * @param addressIndex the address index to retrieve
152
+ * @param display `True` to show the address on screen, `False` to retrieve it silently
153
+ * @returns the address, as an ascii string.
154
+ */
155
+ async getWalletAddress(walletPolicy, walletHMAC, change, addressIndex, display) {
156
+ if (change !== 0 && change !== 1)
157
+ throw new Error('Change can only be 0 or 1');
158
+ if (addressIndex < 0 || !Number.isInteger(addressIndex))
159
+ throw new Error('Invalid address index');
160
+ if (walletHMAC != null && walletHMAC.length != 32) {
161
+ throw new Error('Invalid HMAC length');
162
+ }
163
+ const clientInterpreter = new ClientCommandInterpreter();
164
+ clientInterpreter.addKnownWalletPolicy(walletPolicy);
165
+ const addressIndexBuffer = Buffer.alloc(4);
166
+ addressIndexBuffer.writeUInt32BE(addressIndex, 0);
167
+ const response = await this.makeRequest(BitcoinIns.GET_WALLET_ADDRESS, Buffer.concat([
168
+ Buffer.from(display ? [1] : [0]),
169
+ walletPolicy.getId(),
170
+ walletHMAC || Buffer.alloc(32, 0),
171
+ Buffer.from([change]),
172
+ addressIndexBuffer,
173
+ ]), clientInterpreter);
174
+ const address = response.toString('ascii');
175
+ return address;
176
+ }
177
+ /**
178
+ * Signs a psbt using a (standard or registered) `WalletPolicy`. This is an interactive command, as user validation
179
+ * is necessary using the device's secure screen.
180
+ * On success, a map of input indexes and signatures is returned.
181
+ * @param psbt a base64-encoded string, or a psbt in a binary Buffer. Using the `PsbtV2` type is deprecated.
182
+ * @param walletPolicy the `WalletPolicy` to use for signing
183
+ * @param walletHMAC the 32-byte hmac obtained during wallet policy registration, or `null` for a standard policy
184
+ * @param progressCallback optionally, a callback that will be called every time a signature is produced during
185
+ * the signing process. The callback does not receive any argument, but can be used to track progress.
186
+ * @returns an array of of tuples with 2 elements containing:
187
+ * - the index of the input being signed;
188
+ * - an instance of PartialSignature
189
+ */
190
+ async signPsbt(psbt, walletPolicy, walletHMAC, progressCallback) {
191
+ if (typeof psbt === 'string') {
192
+ psbt = Buffer.from(psbt, 'base64');
193
+ }
194
+ if (Buffer.isBuffer(psbt)) {
195
+ const psbtObj = new PsbtV2();
196
+ psbtObj.deserialize(psbt);
197
+ psbt = psbtObj;
198
+ }
199
+ const merkelizedPsbt = new MerkelizedPsbt(psbt);
200
+ if (walletHMAC != null && walletHMAC.length != 32) {
201
+ throw new Error('Invalid HMAC length');
202
+ }
203
+ const clientInterpreter = new ClientCommandInterpreter(progressCallback);
204
+ // prepare ClientCommandInterpreter
205
+ clientInterpreter.addKnownWalletPolicy(walletPolicy);
206
+ clientInterpreter.addKnownMapping(merkelizedPsbt.globalMerkleMap);
207
+ for (const map of merkelizedPsbt.inputMerkleMaps) {
208
+ clientInterpreter.addKnownMapping(map);
209
+ }
210
+ for (const map of merkelizedPsbt.outputMerkleMaps) {
211
+ clientInterpreter.addKnownMapping(map);
212
+ }
213
+ clientInterpreter.addKnownList(merkelizedPsbt.inputMapCommitments);
214
+ const inputMapsRoot = new Merkle(merkelizedPsbt.inputMapCommitments.map((m) => hashLeaf(m))).getRoot();
215
+ clientInterpreter.addKnownList(merkelizedPsbt.outputMapCommitments);
216
+ const outputMapsRoot = new Merkle(merkelizedPsbt.outputMapCommitments.map((m) => hashLeaf(m))).getRoot();
217
+ await this.makeRequest(BitcoinIns.SIGN_PSBT, Buffer.concat([
218
+ merkelizedPsbt.getGlobalKeysValuesRoot(),
219
+ createVarint(merkelizedPsbt.getGlobalInputCount()),
220
+ inputMapsRoot,
221
+ createVarint(merkelizedPsbt.getGlobalOutputCount()),
222
+ outputMapsRoot,
223
+ walletPolicy.getId(),
224
+ walletHMAC || Buffer.alloc(32, 0),
225
+ ]), clientInterpreter);
226
+ const yielded = clientInterpreter.getYielded();
227
+ const ret = [];
228
+ for (const inputAndSig of yielded) {
229
+ // inputAndSig contains:
230
+ // <inputIndex : varint> <pubkeyLen : 1 byte> <pubkey : pubkeyLen bytes (32 or 33)> <signature : variable length>
231
+ const [inputIndex, inputIndexLen] = parseVarint(inputAndSig, 0);
232
+ const pubkeyAugmLen = inputAndSig[inputIndexLen];
233
+ const pubkeyAugm = inputAndSig.subarray(inputIndexLen + 1, inputIndexLen + 1 + pubkeyAugmLen);
234
+ const signature = inputAndSig.subarray(inputIndexLen + 1 + pubkeyAugmLen);
235
+ const partialSig = makePartialSignature(pubkeyAugm, signature);
236
+ ret.push([Number(inputIndex), partialSig]);
237
+ }
238
+ return ret;
239
+ }
240
+ /**
241
+ * Returns the fingerprint of the master public key, as per BIP-32 standard.
242
+ * @returns the master key fingerprint as a string of 8 hexadecimal digits.
243
+ */
244
+ async getMasterFingerprint() {
245
+ const fpr = await this.makeRequest(BitcoinIns.GET_MASTER_FINGERPRINT, Buffer.from([]));
246
+ return fpr.toString('hex');
247
+ }
248
+ /**
249
+ * Signs a message using the legacy Bitcoin Message Signing standard. The signed message is
250
+ * the double-sha256 hash of the concatenation of:
251
+ * - "\x18Bitcoin Signed Message:\n";
252
+ * - the length of `message`, encoded as a Bitcoin-style variable length integer;
253
+ * - `message`.
254
+ *
255
+ * @param message the serialized message to sign
256
+ * @param path the BIP-32 path of the key used to sign the message
257
+ * @returns base64-encoded signature of the message.
258
+ */
259
+ async signMessage(message, path) {
260
+ const pathElements = pathStringToArray(path);
261
+ const clientInterpreter = new ClientCommandInterpreter();
262
+ // prepare ClientCommandInterpreter
263
+ const nChunks = Math.ceil(message.length / 64);
264
+ const chunks = [];
265
+ for (let i = 0; i < nChunks; i++) {
266
+ chunks.push(message.subarray(64 * i, 64 * i + 64));
267
+ }
268
+ clientInterpreter.addKnownList(chunks);
269
+ const chunksRoot = new Merkle(chunks.map((m) => hashLeaf(m))).getRoot();
270
+ const result = await this.makeRequest(BitcoinIns.SIGN_MESSAGE, Buffer.concat([
271
+ pathElementsToBuffer(pathElements),
272
+ createVarint(message.length),
273
+ chunksRoot,
274
+ ]), clientInterpreter);
275
+ return result.toString('base64');
276
+ }
277
+ }
278
+ export default AppClient;
279
+ //# sourceMappingURL=appClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appClient.js","sourceRoot":"","sources":["../../../../../src/ledger/bitcoin_client/lib/appClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import bippath from 'bip32-path';
2
+ import bs58check from 'bs58check';
3
+ export function pathElementsToBuffer(paths) {
4
+ const buffer = Buffer.alloc(1 + paths.length * 4);
5
+ buffer[0] = paths.length;
6
+ paths.forEach((element, index) => {
7
+ buffer.writeUInt32BE(element, 1 + 4 * index);
8
+ });
9
+ return buffer;
10
+ }
11
+ export function bip32asBuffer(path) {
12
+ const pathElements = !path ? [] : pathStringToArray(path);
13
+ return pathElementsToBuffer(pathElements);
14
+ }
15
+ export function pathArrayToString(pathElements) {
16
+ // bippath doesn't handle an empty path.
17
+ if (pathElements.length == 0) {
18
+ return 'm';
19
+ }
20
+ return bippath.fromPathArray(pathElements).toString();
21
+ }
22
+ export function pathStringToArray(path) {
23
+ // bippath doesn't handle an empty path.
24
+ if (path == 'm' || path == '') {
25
+ return [];
26
+ }
27
+ return bippath.fromString(path).toPathArray();
28
+ }
29
+ export function pubkeyFromXpub(xpub) {
30
+ const xpubBuf = Buffer.from(bs58check.decode(xpub));
31
+ return xpubBuf.slice(xpubBuf.length - 33);
32
+ }
33
+ export function getXpubComponents(xpub) {
34
+ const xpubBuf = Buffer.from(bs58check.decode(xpub));
35
+ return {
36
+ chaincode: xpubBuf.slice(13, 13 + 32),
37
+ pubkey: xpubBuf.slice(xpubBuf.length - 33),
38
+ version: xpubBuf.readUInt32BE(0),
39
+ };
40
+ }
41
+ export function hardenedPathOf(pathElements) {
42
+ for (let i = pathElements.length - 1; i >= 0; i--) {
43
+ if (pathElements[i] >= 0x80000000) {
44
+ return pathElements.slice(0, i + 1);
45
+ }
46
+ }
47
+ return [];
48
+ }
49
+ //# sourceMappingURL=bip32.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bip32.js","sourceRoot":"","sources":["../../../../../src/ledger/bitcoin_client/lib/bip32.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,SAAS,MAAM,WAAW,CAAC;AAElC,MAAM,UAAU,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,MAAM,UAAU,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,MAAM,UAAU,iBAAiB,CAAC,YAA+B;IAC/D,wCAAwC;IACxC,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC7B,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,wCAAwC;IACxC,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAK5C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,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,MAAM,UAAU,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,119 @@
1
+ import { createVarint, parseVarint, sanitizeBigintToNumber } from './varint';
2
+ export function unsafeTo64bitLE(n) {
3
+ // we want to represent the input as a 8-bytes array
4
+ if (n > Number.MAX_SAFE_INTEGER) {
5
+ throw new Error("Can't convert numbers > MAX_SAFE_INT");
6
+ }
7
+ const byteArray = Buffer.alloc(8, 0);
8
+ for (let index = 0; index < byteArray.length; index++) {
9
+ const byte = n & 0xff;
10
+ byteArray[index] = byte;
11
+ n = (n - byte) / 256;
12
+ }
13
+ return byteArray;
14
+ }
15
+ export function unsafeFrom64bitLE(byteArray) {
16
+ let value = 0;
17
+ if (byteArray.length != 8) {
18
+ throw new Error('Expected Bufffer of lenght 8');
19
+ }
20
+ if (byteArray[7] != 0) {
21
+ throw new Error("Can't encode numbers > MAX_SAFE_INT");
22
+ }
23
+ if (byteArray[6] > 0x1f) {
24
+ throw new Error("Can't encode numbers > MAX_SAFE_INT");
25
+ }
26
+ for (let i = byteArray.length - 1; i >= 0; i--) {
27
+ value = value * 256 + byteArray[i];
28
+ }
29
+ return value;
30
+ }
31
+ export class BufferWriter {
32
+ constructor() {
33
+ this.bufs = [];
34
+ }
35
+ write(alloc, fn) {
36
+ const b = Buffer.alloc(alloc);
37
+ fn(b);
38
+ this.bufs.push(b);
39
+ }
40
+ writeUInt8(i) {
41
+ this.write(1, (b) => b.writeUInt8(i, 0));
42
+ }
43
+ writeInt32(i) {
44
+ this.write(4, (b) => b.writeInt32LE(i, 0));
45
+ }
46
+ writeUInt32(i) {
47
+ this.write(4, (b) => b.writeUInt32LE(i, 0));
48
+ }
49
+ writeUInt64(i) {
50
+ const bytes = unsafeTo64bitLE(i);
51
+ this.writeSlice(bytes);
52
+ }
53
+ writeVarInt(i) {
54
+ this.bufs.push(createVarint(i));
55
+ }
56
+ writeSlice(slice) {
57
+ this.bufs.push(Buffer.from(slice));
58
+ }
59
+ writeVarSlice(slice) {
60
+ this.writeVarInt(slice.length);
61
+ this.writeSlice(slice);
62
+ }
63
+ buffer() {
64
+ return Buffer.concat(this.bufs);
65
+ }
66
+ }
67
+ export class BufferReader {
68
+ constructor(buffer, offset = 0) {
69
+ this.buffer = buffer;
70
+ this.offset = offset;
71
+ }
72
+ available() {
73
+ return this.buffer.length - this.offset;
74
+ }
75
+ readUInt8() {
76
+ const result = this.buffer.readUInt8(this.offset);
77
+ this.offset++;
78
+ return result;
79
+ }
80
+ readInt32() {
81
+ const result = this.buffer.readInt32LE(this.offset);
82
+ this.offset += 4;
83
+ return result;
84
+ }
85
+ readUInt32() {
86
+ const result = this.buffer.readUInt32LE(this.offset);
87
+ this.offset += 4;
88
+ return result;
89
+ }
90
+ readUInt64() {
91
+ const buf = this.readSlice(8);
92
+ return unsafeFrom64bitLE(buf);
93
+ }
94
+ readVarInt() {
95
+ const [vi, viSize] = parseVarint(this.buffer, this.offset);
96
+ this.offset += viSize;
97
+ return vi;
98
+ }
99
+ readSlice(n) {
100
+ if (this.buffer.length < this.offset + n) {
101
+ throw new Error('Cannot read slice out of bounds');
102
+ }
103
+ const result = this.buffer.slice(this.offset, this.offset + n);
104
+ this.offset += n;
105
+ return result;
106
+ }
107
+ readVarSlice() {
108
+ const n = sanitizeBigintToNumber(this.readVarInt());
109
+ return this.readSlice(n);
110
+ }
111
+ readVector() {
112
+ const count = this.readVarInt();
113
+ const vector = [];
114
+ for (let i = 0; i < count; i++)
115
+ vector.push(this.readVarSlice());
116
+ return vector;
117
+ }
118
+ }
119
+ //# 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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"}