@rabby-wallet/eth-hd-keyring 4.3.0 → 4.3.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/dist/index.js +18 -25
- package/package.json +1 -1
- package/patches/slip39+0.1.9.patch +130 -8
package/dist/index.js
CHANGED
|
@@ -100,27 +100,20 @@ var require_slip39_helper = __commonJS({
|
|
|
100
100
|
var ROUND_COUNT = 4;
|
|
101
101
|
var DIGEST_INDEX = 254;
|
|
102
102
|
var SECRET_INDEX = 255;
|
|
103
|
-
|
|
103
|
+
var slip39EncodeHex = function(str) {
|
|
104
104
|
let bytes = [];
|
|
105
|
-
for (let i = 0; i <
|
|
106
|
-
bytes.push(
|
|
105
|
+
for (let i = 0; i < str.length; ++i) {
|
|
106
|
+
bytes.push(str.charCodeAt(i));
|
|
107
107
|
}
|
|
108
108
|
return bytes;
|
|
109
109
|
};
|
|
110
|
-
|
|
111
|
-
let
|
|
112
|
-
const
|
|
113
|
-
for (let i = 0; i < hex.length; i++) {
|
|
114
|
-
str.push(String.fromCharCode(hex[i]));
|
|
115
|
-
}
|
|
116
|
-
return str.toString().replace(/,/g, "");
|
|
117
|
-
};
|
|
118
|
-
Array.prototype.slip39Generate = function(m, v = (_) => _) {
|
|
119
|
-
let n = m || this.length;
|
|
110
|
+
var slip39Generate = function(m, v = (_) => _) {
|
|
111
|
+
let n = m;
|
|
112
|
+
const arr = [];
|
|
120
113
|
for (let i = 0; i < n; i++) {
|
|
121
|
-
|
|
114
|
+
arr[i] = v(i);
|
|
122
115
|
}
|
|
123
|
-
return
|
|
116
|
+
return arr;
|
|
124
117
|
};
|
|
125
118
|
var BIGINT_WORD_BITS = BigInt(8);
|
|
126
119
|
function decodeBigInt(bytes) {
|
|
@@ -186,9 +179,9 @@ var require_slip39_helper = __commonJS({
|
|
|
186
179
|
}
|
|
187
180
|
let IL = masterSecret.slice().slice(0, masterSecret.length / 2);
|
|
188
181
|
let IR = masterSecret.slice().slice(masterSecret.length / 2);
|
|
189
|
-
const pwd =
|
|
182
|
+
const pwd = slip39EncodeHex(passphrase);
|
|
190
183
|
const salt = getSalt(identifier, extendableBackupFlag);
|
|
191
|
-
let range =
|
|
184
|
+
let range = slip39Generate(ROUND_COUNT);
|
|
192
185
|
range = encrypt ? range : range.reverse();
|
|
193
186
|
range.forEach((round) => {
|
|
194
187
|
const f = roundFunction(round, pwd, iterationExponent, salt, IR);
|
|
@@ -222,7 +215,7 @@ var require_slip39_helper = __commonJS({
|
|
|
222
215
|
);
|
|
223
216
|
}
|
|
224
217
|
if (threshold === 1) {
|
|
225
|
-
return
|
|
218
|
+
return slip39Generate(shareCount, () => sharedSecret);
|
|
226
219
|
}
|
|
227
220
|
const randomShareCount = threshold - 2;
|
|
228
221
|
const randomPart = randomBytes(sharedSecret.length - DIGEST_LENGTH);
|
|
@@ -230,7 +223,7 @@ var require_slip39_helper = __commonJS({
|
|
|
230
223
|
let baseShares = /* @__PURE__ */ new Map();
|
|
231
224
|
let shares = [];
|
|
232
225
|
if (randomShareCount) {
|
|
233
|
-
shares =
|
|
226
|
+
shares = slip39Generate(
|
|
234
227
|
randomShareCount,
|
|
235
228
|
() => randomBytes(sharedSecret.length)
|
|
236
229
|
);
|
|
@@ -259,13 +252,13 @@ var require_slip39_helper = __commonJS({
|
|
|
259
252
|
`Invalid padding in mnemonic or insufficient length of mnemonics (${a.length} or ${b.length})`
|
|
260
253
|
);
|
|
261
254
|
}
|
|
262
|
-
return
|
|
255
|
+
return slip39Generate(a.length, (i) => a[i] ^ b[i]);
|
|
263
256
|
}
|
|
264
257
|
function getSalt(identifier, extendableBackupFlag) {
|
|
265
258
|
if (extendableBackupFlag) {
|
|
266
259
|
return [];
|
|
267
260
|
} else {
|
|
268
|
-
const salt =
|
|
261
|
+
const salt = slip39EncodeHex(CUSTOMIZATION_STRING_NON_EXTENDABLE);
|
|
269
262
|
return salt.concat(identifier);
|
|
270
263
|
}
|
|
271
264
|
}
|
|
@@ -289,7 +282,7 @@ var require_slip39_helper = __commonJS({
|
|
|
289
282
|
shares.forEach((v, k) => {
|
|
290
283
|
logProd = logProd + LOG_TABLE[k ^ x];
|
|
291
284
|
});
|
|
292
|
-
let results =
|
|
285
|
+
let results = slip39Generate(
|
|
293
286
|
sharesValueLengths.values().next().value,
|
|
294
287
|
() => 0
|
|
295
288
|
);
|
|
@@ -338,14 +331,14 @@ var require_slip39_helper = __commonJS({
|
|
|
338
331
|
return extendableBackupFlag ? CUSTOMIZATION_STRING_EXTENDABLE : CUSTOMIZATION_STRING_NON_EXTENDABLE;
|
|
339
332
|
}
|
|
340
333
|
function rs1024CreateChecksum(data, extendableBackupFlag) {
|
|
341
|
-
const values = get_customization_string(extendableBackupFlag)
|
|
334
|
+
const values = slip39EncodeHex(get_customization_string(extendableBackupFlag)).concat(data).concat(slip39Generate(CHECKSUM_WORDS_LENGTH, () => 0));
|
|
342
335
|
const polymod = rs1024Polymod(values) ^ 1;
|
|
343
336
|
const result = Array().slip39Generate(CHECKSUM_WORDS_LENGTH, (i) => polymod >> 10 * i & 1023).reverse();
|
|
344
337
|
return result;
|
|
345
338
|
}
|
|
346
339
|
function rs1024VerifyChecksum(data, extendableBackupFlag) {
|
|
347
340
|
return rs1024Polymod(
|
|
348
|
-
get_customization_string(extendableBackupFlag)
|
|
341
|
+
slip39EncodeHex(get_customization_string(extendableBackupFlag)).concat(data)
|
|
349
342
|
) === 1;
|
|
350
343
|
}
|
|
351
344
|
function intFromIndices(indices) {
|
|
@@ -358,7 +351,7 @@ var require_slip39_helper = __commonJS({
|
|
|
358
351
|
}
|
|
359
352
|
function intToIndices(value, length, bits) {
|
|
360
353
|
const mask = BigInt((1 << bits) - 1);
|
|
361
|
-
const result =
|
|
354
|
+
const result = slip39Generate(
|
|
362
355
|
length,
|
|
363
356
|
(i) => parseInt(value >> BigInt(i) * BigInt(bits) & mask, 10)
|
|
364
357
|
);
|
package/package.json
CHANGED
|
@@ -14,13 +14,44 @@ index aff1c16..bd3ba54 100644
|
|
|
14
14
|
this.validatePath(path);
|
|
15
15
|
|
|
16
16
|
diff --git a/node_modules/slip39/src/slip39_helper.js b/node_modules/slip39/src/slip39_helper.js
|
|
17
|
-
index 8bcb956..
|
|
17
|
+
index 8bcb956..e9b86e4 100644
|
|
18
18
|
--- a/node_modules/slip39/src/slip39_helper.js
|
|
19
19
|
+++ b/node_modules/slip39/src/slip39_helper.js
|
|
20
|
-
@@ -
|
|
21
|
-
|
|
20
|
+
@@ -75,44 +75,21 @@ const SECRET_INDEX = 255;
|
|
21
|
+
//
|
|
22
|
+
// Helper functions for SLIP39 implementation.
|
|
23
|
+
//
|
|
24
|
+
-String.prototype.slip39EncodeHex = function () {
|
|
25
|
+
+const slip39EncodeHex = function (str) {
|
|
26
|
+
let bytes = [];
|
|
27
|
+
- for (let i = 0; i < this.length; ++i) {
|
|
28
|
+
- bytes.push(this.charCodeAt(i));
|
|
29
|
+
+ for (let i = 0; i < str.length; ++i) {
|
|
30
|
+
+ bytes.push(str.charCodeAt(i));
|
|
31
|
+
}
|
|
32
|
+
return bytes;
|
|
22
33
|
};
|
|
23
34
|
|
|
35
|
+
-Array.prototype.slip39DecodeHex = function () {
|
|
36
|
+
- let str = [];
|
|
37
|
+
- const hex = this.toString().split(",");
|
|
38
|
+
- for (let i = 0; i < hex.length; i++) {
|
|
39
|
+
- str.push(String.fromCharCode(hex[i]));
|
|
40
|
+
- }
|
|
41
|
+
- return str.toString().replace(/,/g, "");
|
|
42
|
+
-};
|
|
43
|
+
-
|
|
44
|
+
-Array.prototype.slip39Generate = function (m, v = (_) => _) {
|
|
45
|
+
- let n = m || this.length;
|
|
46
|
+
+const slip39Generate = function (m, v = (_) => _) {
|
|
47
|
+
+ let n = m;
|
|
48
|
+
+ const arr = []
|
|
49
|
+
for (let i = 0; i < n; i++) {
|
|
50
|
+
- this[i] = v(i);
|
|
51
|
+
- }
|
|
52
|
+
- return this;
|
|
53
|
+
-};
|
|
54
|
+
-
|
|
24
55
|
-Array.prototype.toHexString = function () {
|
|
25
56
|
- return Array.prototype.map
|
|
26
57
|
- .call(this, function (byte) {
|
|
@@ -32,14 +63,105 @@ index 8bcb956..3bf2210 100644
|
|
|
32
63
|
-Array.prototype.toByteArray = function (hexString) {
|
|
33
64
|
- for (let i = 0; i < hexString.length; i = i + 2) {
|
|
34
65
|
- this.push(parseInt(hexString.substr(i, 2), 16));
|
|
35
|
-
|
|
66
|
+
+ arr[i] = v(i);
|
|
67
|
+
}
|
|
36
68
|
- return this;
|
|
37
|
-
|
|
38
|
-
|
|
69
|
+
+ return arr;
|
|
70
|
+
};
|
|
71
|
+
|
|
39
72
|
const BIGINT_WORD_BITS = BigInt(8);
|
|
73
|
+
@@ -208,11 +185,11 @@ function crypt(
|
|
74
|
+
let IL = masterSecret.slice().slice(0, masterSecret.length / 2);
|
|
75
|
+
let IR = masterSecret.slice().slice(masterSecret.length / 2);
|
|
76
|
+
|
|
77
|
+
- const pwd = passphrase.slip39EncodeHex();
|
|
78
|
+
+ const pwd = slip39EncodeHex(passphrase);
|
|
79
|
+
|
|
80
|
+
const salt = getSalt(identifier, extendableBackupFlag);
|
|
81
|
+
|
|
82
|
+
- let range = Array().slip39Generate(ROUND_COUNT);
|
|
83
|
+
+ let range = slip39Generate(ROUND_COUNT);
|
|
84
|
+
range = encrypt ? range : range.reverse();
|
|
85
|
+
|
|
86
|
+
range.forEach((round) => {
|
|
87
|
+
@@ -254,7 +231,7 @@ function splitSecret(threshold, shareCount, sharedSecret) {
|
|
88
|
+
}
|
|
89
|
+
// If the threshold is 1, then the digest of the shared secret is not used.
|
|
90
|
+
if (threshold === 1) {
|
|
91
|
+
- return Array().slip39Generate(shareCount, () => sharedSecret);
|
|
92
|
+
+ return slip39Generate(shareCount, () => sharedSecret);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const randomShareCount = threshold - 2;
|
|
96
|
+
@@ -265,7 +242,7 @@ function splitSecret(threshold, shareCount, sharedSecret) {
|
|
97
|
+
let baseShares = new Map();
|
|
98
|
+
let shares = [];
|
|
99
|
+
if (randomShareCount) {
|
|
100
|
+
- shares = Array().slip39Generate(randomShareCount, () =>
|
|
101
|
+
+ shares = slip39Generate(randomShareCount, () =>
|
|
102
|
+
randomBytes(sharedSecret.length),
|
|
103
|
+
);
|
|
104
|
+
shares.forEach((item, idx) => {
|
|
105
|
+
@@ -302,14 +279,14 @@ function xor(a, b) {
|
|
106
|
+
`Invalid padding in mnemonic or insufficient length of mnemonics (${a.length} or ${b.length})`,
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
- return Array().slip39Generate(a.length, (i) => a[i] ^ b[i]);
|
|
110
|
+
+ return slip39Generate(a.length, (i) => a[i] ^ b[i]);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function getSalt(identifier, extendableBackupFlag) {
|
|
114
|
+
if (extendableBackupFlag) {
|
|
115
|
+
return [];
|
|
116
|
+
} else {
|
|
117
|
+
- const salt = CUSTOMIZATION_STRING_NON_EXTENDABLE.slip39EncodeHex();
|
|
118
|
+
+ const salt = slip39EncodeHex(CUSTOMIZATION_STRING_NON_EXTENDABLE);
|
|
119
|
+
return salt.concat(identifier);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
@@ -340,7 +317,7 @@ function interpolate(shares, x) {
|
|
123
|
+
logProd = logProd + LOG_TABLE[k ^ x];
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
- let results = Array().slip39Generate(
|
|
127
|
+
+ let results = slip39Generate(
|
|
128
|
+
sharesValueLengths.values().next().value,
|
|
129
|
+
() => 0,
|
|
130
|
+
);
|
|
131
|
+
@@ -400,10 +377,9 @@ function get_customization_string(extendableBackupFlag) {
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function rs1024CreateChecksum(data, extendableBackupFlag) {
|
|
135
|
+
- const values = get_customization_string(extendableBackupFlag)
|
|
136
|
+
- .slip39EncodeHex()
|
|
137
|
+
+ const values = slip39EncodeHex(get_customization_string(extendableBackupFlag))
|
|
138
|
+
.concat(data)
|
|
139
|
+
- .concat(Array().slip39Generate(CHECKSUM_WORDS_LENGTH, () => 0));
|
|
140
|
+
+ .concat(slip39Generate(CHECKSUM_WORDS_LENGTH, () => 0));
|
|
141
|
+
const polymod = rs1024Polymod(values) ^ 1;
|
|
142
|
+
const result = Array()
|
|
143
|
+
.slip39Generate(CHECKSUM_WORDS_LENGTH, (i) => (polymod >> (10 * i)) & 1023)
|
|
144
|
+
@@ -414,9 +390,7 @@ function rs1024CreateChecksum(data, extendableBackupFlag) {
|
|
40
145
|
|
|
41
|
-
function
|
|
42
|
-
|
|
146
|
+
function rs1024VerifyChecksum(data, extendableBackupFlag) {
|
|
147
|
+
return (
|
|
148
|
+
- rs1024Polymod(
|
|
149
|
+
- get_customization_string(extendableBackupFlag)
|
|
150
|
+
- .slip39EncodeHex()
|
|
151
|
+
+ rs1024Polymod(slip39EncodeHex(get_customization_string(extendableBackupFlag))
|
|
152
|
+
.concat(data),
|
|
153
|
+
) === 1
|
|
154
|
+
);
|
|
155
|
+
@@ -440,7 +414,7 @@ function intFromIndices(indices) {
|
|
156
|
+
//
|
|
157
|
+
function intToIndices(value, length, bits) {
|
|
158
|
+
const mask = BigInt((1 << bits) - 1);
|
|
159
|
+
- const result = Array().slip39Generate(length, (i) =>
|
|
160
|
+
+ const result = slip39Generate(length, (i) =>
|
|
161
|
+
parseInt((value >> (BigInt(i) * BigInt(bits))) & mask, 10),
|
|
162
|
+
);
|
|
163
|
+
return result.reverse();
|
|
164
|
+
@@ -1886,4 +1860,6 @@ exports = module.exports = {
|
|
43
165
|
crypt,
|
|
44
166
|
bitsToBytes,
|
|
45
167
|
WORD_LIST,
|