@codesense/conseal 0.1.6

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 ADDED
@@ -0,0 +1,3005 @@
1
+ import {
2
+ load,
3
+ remove,
4
+ save
5
+ } from "./chunk-MDWFWP7Z.js";
6
+
7
+ // src/aes.ts
8
+ async function seal(key, plaintext) {
9
+ const iv = crypto.getRandomValues(new Uint8Array(12));
10
+ const ciphertext = await crypto.subtle.encrypt({ name: "AES-GCM", iv, tagLength: 128 }, key, plaintext);
11
+ return { ciphertext, iv };
12
+ }
13
+ async function unseal(key, ciphertext, iv) {
14
+ if (iv.byteLength !== 12) {
15
+ throw new TypeError(`AES-GCM IV must be 12 bytes (96 bits), got ${iv.byteLength}`);
16
+ }
17
+ return crypto.subtle.decrypt({ name: "AES-GCM", iv, tagLength: 128 }, key, ciphertext);
18
+ }
19
+ async function generateAesKey(extractable = false) {
20
+ return crypto.subtle.generateKey(
21
+ { name: "AES-GCM", length: 256 },
22
+ extractable,
23
+ ["encrypt", "decrypt"]
24
+ );
25
+ }
26
+ async function importAesKey(raw, extractable = false) {
27
+ return crypto.subtle.importKey(
28
+ "raw",
29
+ raw,
30
+ { name: "AES-GCM", length: 256 },
31
+ extractable,
32
+ ["encrypt", "decrypt"]
33
+ );
34
+ }
35
+
36
+ // src/pbkdf2.ts
37
+ var ITERATIONS = 6e5;
38
+ var SALT_LENGTH = 16;
39
+ async function deriveWrappingKey(passphrase, salt) {
40
+ const keyMaterial = await crypto.subtle.importKey(
41
+ "raw",
42
+ new TextEncoder().encode(passphrase),
43
+ "PBKDF2",
44
+ false,
45
+ ["deriveKey"]
46
+ );
47
+ return crypto.subtle.deriveKey(
48
+ { name: "PBKDF2", salt, iterations: ITERATIONS, hash: "SHA-256" },
49
+ keyMaterial,
50
+ { name: "AES-KW", length: 256 },
51
+ false,
52
+ ["wrapKey", "unwrapKey"]
53
+ );
54
+ }
55
+ async function wrapKey(passphrase, key) {
56
+ if (!key.extractable) {
57
+ throw new Error("wrapKey: key must be extractable (extractable: true)");
58
+ }
59
+ const salt = crypto.getRandomValues(new Uint8Array(SALT_LENGTH));
60
+ const wrappingKey = await deriveWrappingKey(passphrase, salt);
61
+ const wrappedKey = await crypto.subtle.wrapKey("raw", key, wrappingKey, "AES-KW");
62
+ return { wrappedKey, salt };
63
+ }
64
+ async function unwrapKey(passphrase, wrappedKey, salt) {
65
+ const wrappingKey = await deriveWrappingKey(passphrase, salt);
66
+ return crypto.subtle.unwrapKey(
67
+ "raw",
68
+ wrappedKey,
69
+ wrappingKey,
70
+ "AES-KW",
71
+ { name: "AES-GCM", length: 256 },
72
+ false,
73
+ // extractable: false — safe for IndexedDB storage
74
+ ["encrypt", "decrypt"]
75
+ );
76
+ }
77
+ async function rekey(oldPassphrase, newPassphrase, wrappedKey, salt) {
78
+ const oldWrappingKey = await deriveWrappingKey(oldPassphrase, salt);
79
+ const aek = await crypto.subtle.unwrapKey(
80
+ "raw",
81
+ wrappedKey,
82
+ oldWrappingKey,
83
+ "AES-KW",
84
+ { name: "AES-GCM", length: 256 },
85
+ true,
86
+ // extractable: true — needed so wrapKey() can wrap it again
87
+ ["encrypt", "decrypt"]
88
+ );
89
+ return wrapKey(newPassphrase, aek);
90
+ }
91
+
92
+ // src/jwk.ts
93
+ async function exportPublicKeyAsJwk(key) {
94
+ return crypto.subtle.exportKey("jwk", key);
95
+ }
96
+ async function importPublicKeyFromJwk(jwk, algorithm) {
97
+ const algorithmParams = algorithm === "ECDH" ? { name: "ECDH", namedCurve: "P-256" } : { name: "ECDSA", namedCurve: "P-256" };
98
+ const usages = algorithm === "ECDSA" ? ["verify"] : [];
99
+ return crypto.subtle.importKey("jwk", jwk, algorithmParams, true, usages);
100
+ }
101
+
102
+ // src/ecdh.ts
103
+ async function generateECDHKeyPair() {
104
+ return crypto.subtle.generateKey(
105
+ { name: "ECDH", namedCurve: "P-256" },
106
+ true,
107
+ // extractable: true — public key must be exportable as JWK for the registry
108
+ ["deriveKey"]
109
+ );
110
+ }
111
+ async function deriveSharedKey(privateKey, publicKey) {
112
+ return crypto.subtle.deriveKey(
113
+ { name: "ECDH", public: publicKey },
114
+ privateKey,
115
+ { name: "AES-GCM", length: 256 },
116
+ false,
117
+ ["encrypt", "decrypt"]
118
+ );
119
+ }
120
+ async function sealMessage(recipientPublicKey, plaintext) {
121
+ const ephemeral = await crypto.subtle.generateKey(
122
+ { name: "ECDH", namedCurve: "P-256" },
123
+ true,
124
+ // extractable: true — public key must be exported as JWK to send to recipient
125
+ ["deriveKey"]
126
+ );
127
+ const sharedKey = await deriveSharedKey(ephemeral.privateKey, recipientPublicKey);
128
+ const iv = crypto.getRandomValues(new Uint8Array(12));
129
+ const ciphertext = await crypto.subtle.encrypt({ name: "AES-GCM", iv, tagLength: 128 }, sharedKey, plaintext);
130
+ const ephemeralPublicKey = await exportPublicKeyAsJwk(ephemeral.publicKey);
131
+ return { ciphertext, iv, ephemeralPublicKey };
132
+ }
133
+ async function unsealMessage(recipientPrivateKey, ciphertext, iv, ephemeralPublicKey) {
134
+ const ephemeralKey = await importPublicKeyFromJwk(ephemeralPublicKey, "ECDH");
135
+ const sharedKey = await deriveSharedKey(recipientPrivateKey, ephemeralKey);
136
+ return crypto.subtle.decrypt({ name: "AES-GCM", iv, tagLength: 128 }, sharedKey, ciphertext);
137
+ }
138
+
139
+ // src/ecdsa.ts
140
+ async function generateECDSAKeyPair() {
141
+ return crypto.subtle.generateKey(
142
+ { name: "ECDSA", namedCurve: "P-256" },
143
+ true,
144
+ // extractable: true — public key must be exportable as JWK for the registry
145
+ ["sign", "verify"]
146
+ );
147
+ }
148
+ async function sign(privateKey, data) {
149
+ return crypto.subtle.sign({ name: "ECDSA", hash: "SHA-256" }, privateKey, data);
150
+ }
151
+ async function verify(publicKey, signature, data) {
152
+ return crypto.subtle.verify({ name: "ECDSA", hash: "SHA-256" }, publicKey, signature, data);
153
+ }
154
+
155
+ // src/init.ts
156
+ var AEK_KEY_ID = "aek";
157
+ async function init(wrappedKey, salt, passphrase) {
158
+ const aek = await unwrapKey(passphrase, wrappedKey, salt);
159
+ await save(AEK_KEY_ID, aek);
160
+ }
161
+
162
+ // node_modules/@noble/hashes/utils.js
163
+ function isBytes(a) {
164
+ return a instanceof Uint8Array || ArrayBuffer.isView(a) && a.constructor.name === "Uint8Array";
165
+ }
166
+ function anumber(n, title = "") {
167
+ if (!Number.isSafeInteger(n) || n < 0) {
168
+ const prefix = title && `"${title}" `;
169
+ throw new Error(`${prefix}expected integer >= 0, got ${n}`);
170
+ }
171
+ }
172
+ function abytes(value, length, title = "") {
173
+ const bytes = isBytes(value);
174
+ const len = value?.length;
175
+ const needsLen = length !== void 0;
176
+ if (!bytes || needsLen && len !== length) {
177
+ const prefix = title && `"${title}" `;
178
+ const ofLen = needsLen ? ` of length ${length}` : "";
179
+ const got = bytes ? `length=${len}` : `type=${typeof value}`;
180
+ throw new Error(prefix + "expected Uint8Array" + ofLen + ", got " + got);
181
+ }
182
+ return value;
183
+ }
184
+ function aexists(instance, checkFinished = true) {
185
+ if (instance.destroyed)
186
+ throw new Error("Hash instance has been destroyed");
187
+ if (checkFinished && instance.finished)
188
+ throw new Error("Hash#digest() has already been called");
189
+ }
190
+ function aoutput(out, instance) {
191
+ abytes(out, void 0, "digestInto() output");
192
+ const min = instance.outputLen;
193
+ if (out.length < min) {
194
+ throw new Error('"digestInto() output" expected to be of length >=' + min);
195
+ }
196
+ }
197
+ function clean(...arrays) {
198
+ for (let i = 0; i < arrays.length; i++) {
199
+ arrays[i].fill(0);
200
+ }
201
+ }
202
+ function createView(arr) {
203
+ return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);
204
+ }
205
+ function rotr(word, shift) {
206
+ return word << 32 - shift | word >>> shift;
207
+ }
208
+ function createHasher(hashCons, info = {}) {
209
+ const hashC = (msg, opts) => hashCons(opts).update(msg).digest();
210
+ const tmp = hashCons(void 0);
211
+ hashC.outputLen = tmp.outputLen;
212
+ hashC.blockLen = tmp.blockLen;
213
+ hashC.create = (opts) => hashCons(opts);
214
+ Object.assign(hashC, info);
215
+ return Object.freeze(hashC);
216
+ }
217
+ function randomBytes(bytesLength = 32) {
218
+ const cr = typeof globalThis === "object" ? globalThis.crypto : null;
219
+ if (typeof cr?.getRandomValues !== "function")
220
+ throw new Error("crypto.getRandomValues must be defined");
221
+ return cr.getRandomValues(new Uint8Array(bytesLength));
222
+ }
223
+ var oidNist = (suffix) => ({
224
+ oid: Uint8Array.from([6, 9, 96, 134, 72, 1, 101, 3, 4, 2, suffix])
225
+ });
226
+
227
+ // node_modules/@noble/hashes/_md.js
228
+ function Chi(a, b, c) {
229
+ return a & b ^ ~a & c;
230
+ }
231
+ function Maj(a, b, c) {
232
+ return a & b ^ a & c ^ b & c;
233
+ }
234
+ var HashMD = class {
235
+ blockLen;
236
+ outputLen;
237
+ padOffset;
238
+ isLE;
239
+ // For partial updates less than block size
240
+ buffer;
241
+ view;
242
+ finished = false;
243
+ length = 0;
244
+ pos = 0;
245
+ destroyed = false;
246
+ constructor(blockLen, outputLen, padOffset, isLE) {
247
+ this.blockLen = blockLen;
248
+ this.outputLen = outputLen;
249
+ this.padOffset = padOffset;
250
+ this.isLE = isLE;
251
+ this.buffer = new Uint8Array(blockLen);
252
+ this.view = createView(this.buffer);
253
+ }
254
+ update(data) {
255
+ aexists(this);
256
+ abytes(data);
257
+ const { view, buffer, blockLen } = this;
258
+ const len = data.length;
259
+ for (let pos = 0; pos < len; ) {
260
+ const take = Math.min(blockLen - this.pos, len - pos);
261
+ if (take === blockLen) {
262
+ const dataView = createView(data);
263
+ for (; blockLen <= len - pos; pos += blockLen)
264
+ this.process(dataView, pos);
265
+ continue;
266
+ }
267
+ buffer.set(data.subarray(pos, pos + take), this.pos);
268
+ this.pos += take;
269
+ pos += take;
270
+ if (this.pos === blockLen) {
271
+ this.process(view, 0);
272
+ this.pos = 0;
273
+ }
274
+ }
275
+ this.length += data.length;
276
+ this.roundClean();
277
+ return this;
278
+ }
279
+ digestInto(out) {
280
+ aexists(this);
281
+ aoutput(out, this);
282
+ this.finished = true;
283
+ const { buffer, view, blockLen, isLE } = this;
284
+ let { pos } = this;
285
+ buffer[pos++] = 128;
286
+ clean(this.buffer.subarray(pos));
287
+ if (this.padOffset > blockLen - pos) {
288
+ this.process(view, 0);
289
+ pos = 0;
290
+ }
291
+ for (let i = pos; i < blockLen; i++)
292
+ buffer[i] = 0;
293
+ view.setBigUint64(blockLen - 8, BigInt(this.length * 8), isLE);
294
+ this.process(view, 0);
295
+ const oview = createView(out);
296
+ const len = this.outputLen;
297
+ if (len % 4)
298
+ throw new Error("_sha2: outputLen must be aligned to 32bit");
299
+ const outLen = len / 4;
300
+ const state = this.get();
301
+ if (outLen > state.length)
302
+ throw new Error("_sha2: outputLen bigger than state");
303
+ for (let i = 0; i < outLen; i++)
304
+ oview.setUint32(4 * i, state[i], isLE);
305
+ }
306
+ digest() {
307
+ const { buffer, outputLen } = this;
308
+ this.digestInto(buffer);
309
+ const res = buffer.slice(0, outputLen);
310
+ this.destroy();
311
+ return res;
312
+ }
313
+ _cloneInto(to) {
314
+ to ||= new this.constructor();
315
+ to.set(...this.get());
316
+ const { blockLen, buffer, length, finished, destroyed, pos } = this;
317
+ to.destroyed = destroyed;
318
+ to.finished = finished;
319
+ to.length = length;
320
+ to.pos = pos;
321
+ if (length % blockLen)
322
+ to.buffer.set(buffer);
323
+ return to;
324
+ }
325
+ clone() {
326
+ return this._cloneInto();
327
+ }
328
+ };
329
+ var SHA256_IV = /* @__PURE__ */ Uint32Array.from([
330
+ 1779033703,
331
+ 3144134277,
332
+ 1013904242,
333
+ 2773480762,
334
+ 1359893119,
335
+ 2600822924,
336
+ 528734635,
337
+ 1541459225
338
+ ]);
339
+
340
+ // node_modules/@noble/hashes/sha2.js
341
+ var SHA256_K = /* @__PURE__ */ Uint32Array.from([
342
+ 1116352408,
343
+ 1899447441,
344
+ 3049323471,
345
+ 3921009573,
346
+ 961987163,
347
+ 1508970993,
348
+ 2453635748,
349
+ 2870763221,
350
+ 3624381080,
351
+ 310598401,
352
+ 607225278,
353
+ 1426881987,
354
+ 1925078388,
355
+ 2162078206,
356
+ 2614888103,
357
+ 3248222580,
358
+ 3835390401,
359
+ 4022224774,
360
+ 264347078,
361
+ 604807628,
362
+ 770255983,
363
+ 1249150122,
364
+ 1555081692,
365
+ 1996064986,
366
+ 2554220882,
367
+ 2821834349,
368
+ 2952996808,
369
+ 3210313671,
370
+ 3336571891,
371
+ 3584528711,
372
+ 113926993,
373
+ 338241895,
374
+ 666307205,
375
+ 773529912,
376
+ 1294757372,
377
+ 1396182291,
378
+ 1695183700,
379
+ 1986661051,
380
+ 2177026350,
381
+ 2456956037,
382
+ 2730485921,
383
+ 2820302411,
384
+ 3259730800,
385
+ 3345764771,
386
+ 3516065817,
387
+ 3600352804,
388
+ 4094571909,
389
+ 275423344,
390
+ 430227734,
391
+ 506948616,
392
+ 659060556,
393
+ 883997877,
394
+ 958139571,
395
+ 1322822218,
396
+ 1537002063,
397
+ 1747873779,
398
+ 1955562222,
399
+ 2024104815,
400
+ 2227730452,
401
+ 2361852424,
402
+ 2428436474,
403
+ 2756734187,
404
+ 3204031479,
405
+ 3329325298
406
+ ]);
407
+ var SHA256_W = /* @__PURE__ */ new Uint32Array(64);
408
+ var SHA2_32B = class extends HashMD {
409
+ constructor(outputLen) {
410
+ super(64, outputLen, 8, false);
411
+ }
412
+ get() {
413
+ const { A, B, C, D, E, F, G, H } = this;
414
+ return [A, B, C, D, E, F, G, H];
415
+ }
416
+ // prettier-ignore
417
+ set(A, B, C, D, E, F, G, H) {
418
+ this.A = A | 0;
419
+ this.B = B | 0;
420
+ this.C = C | 0;
421
+ this.D = D | 0;
422
+ this.E = E | 0;
423
+ this.F = F | 0;
424
+ this.G = G | 0;
425
+ this.H = H | 0;
426
+ }
427
+ process(view, offset) {
428
+ for (let i = 0; i < 16; i++, offset += 4)
429
+ SHA256_W[i] = view.getUint32(offset, false);
430
+ for (let i = 16; i < 64; i++) {
431
+ const W15 = SHA256_W[i - 15];
432
+ const W2 = SHA256_W[i - 2];
433
+ const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ W15 >>> 3;
434
+ const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ W2 >>> 10;
435
+ SHA256_W[i] = s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16] | 0;
436
+ }
437
+ let { A, B, C, D, E, F, G, H } = this;
438
+ for (let i = 0; i < 64; i++) {
439
+ const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);
440
+ const T1 = H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i] | 0;
441
+ const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);
442
+ const T2 = sigma0 + Maj(A, B, C) | 0;
443
+ H = G;
444
+ G = F;
445
+ F = E;
446
+ E = D + T1 | 0;
447
+ D = C;
448
+ C = B;
449
+ B = A;
450
+ A = T1 + T2 | 0;
451
+ }
452
+ A = A + this.A | 0;
453
+ B = B + this.B | 0;
454
+ C = C + this.C | 0;
455
+ D = D + this.D | 0;
456
+ E = E + this.E | 0;
457
+ F = F + this.F | 0;
458
+ G = G + this.G | 0;
459
+ H = H + this.H | 0;
460
+ this.set(A, B, C, D, E, F, G, H);
461
+ }
462
+ roundClean() {
463
+ clean(SHA256_W);
464
+ }
465
+ destroy() {
466
+ this.set(0, 0, 0, 0, 0, 0, 0, 0);
467
+ clean(this.buffer);
468
+ }
469
+ };
470
+ var _SHA256 = class extends SHA2_32B {
471
+ // We cannot use array here since array allows indexing by variable
472
+ // which means optimizer/compiler cannot use registers.
473
+ A = SHA256_IV[0] | 0;
474
+ B = SHA256_IV[1] | 0;
475
+ C = SHA256_IV[2] | 0;
476
+ D = SHA256_IV[3] | 0;
477
+ E = SHA256_IV[4] | 0;
478
+ F = SHA256_IV[5] | 0;
479
+ G = SHA256_IV[6] | 0;
480
+ H = SHA256_IV[7] | 0;
481
+ constructor() {
482
+ super(32);
483
+ }
484
+ };
485
+ var sha256 = /* @__PURE__ */ createHasher(
486
+ () => new _SHA256(),
487
+ /* @__PURE__ */ oidNist(1)
488
+ );
489
+
490
+ // node_modules/@scure/base/index.js
491
+ function isBytes2(a) {
492
+ return a instanceof Uint8Array || ArrayBuffer.isView(a) && a.constructor.name === "Uint8Array";
493
+ }
494
+ function isArrayOf(isString, arr) {
495
+ if (!Array.isArray(arr))
496
+ return false;
497
+ if (arr.length === 0)
498
+ return true;
499
+ if (isString) {
500
+ return arr.every((item) => typeof item === "string");
501
+ } else {
502
+ return arr.every((item) => Number.isSafeInteger(item));
503
+ }
504
+ }
505
+ function afn(input) {
506
+ if (typeof input !== "function")
507
+ throw new Error("function expected");
508
+ return true;
509
+ }
510
+ function astr(label, input) {
511
+ if (typeof input !== "string")
512
+ throw new Error(`${label}: string expected`);
513
+ return true;
514
+ }
515
+ function anumber2(n) {
516
+ if (!Number.isSafeInteger(n))
517
+ throw new Error(`invalid integer: ${n}`);
518
+ }
519
+ function aArr(input) {
520
+ if (!Array.isArray(input))
521
+ throw new Error("array expected");
522
+ }
523
+ function astrArr(label, input) {
524
+ if (!isArrayOf(true, input))
525
+ throw new Error(`${label}: array of strings expected`);
526
+ }
527
+ function anumArr(label, input) {
528
+ if (!isArrayOf(false, input))
529
+ throw new Error(`${label}: array of numbers expected`);
530
+ }
531
+ // @__NO_SIDE_EFFECTS__
532
+ function chain(...args) {
533
+ const id = (a) => a;
534
+ const wrap = (a, b) => (c) => a(b(c));
535
+ const encode = args.map((x) => x.encode).reduceRight(wrap, id);
536
+ const decode = args.map((x) => x.decode).reduce(wrap, id);
537
+ return { encode, decode };
538
+ }
539
+ // @__NO_SIDE_EFFECTS__
540
+ function alphabet(letters) {
541
+ const lettersA = typeof letters === "string" ? letters.split("") : letters;
542
+ const len = lettersA.length;
543
+ astrArr("alphabet", lettersA);
544
+ const indexes = new Map(lettersA.map((l, i) => [l, i]));
545
+ return {
546
+ encode: (digits) => {
547
+ aArr(digits);
548
+ return digits.map((i) => {
549
+ if (!Number.isSafeInteger(i) || i < 0 || i >= len)
550
+ throw new Error(`alphabet.encode: digit index outside alphabet "${i}". Allowed: ${letters}`);
551
+ return lettersA[i];
552
+ });
553
+ },
554
+ decode: (input) => {
555
+ aArr(input);
556
+ return input.map((letter) => {
557
+ astr("alphabet.decode", letter);
558
+ const i = indexes.get(letter);
559
+ if (i === void 0)
560
+ throw new Error(`Unknown letter: "${letter}". Allowed: ${letters}`);
561
+ return i;
562
+ });
563
+ }
564
+ };
565
+ }
566
+ // @__NO_SIDE_EFFECTS__
567
+ function join(separator = "") {
568
+ astr("join", separator);
569
+ return {
570
+ encode: (from) => {
571
+ astrArr("join.decode", from);
572
+ return from.join(separator);
573
+ },
574
+ decode: (to) => {
575
+ astr("join.decode", to);
576
+ return to.split(separator);
577
+ }
578
+ };
579
+ }
580
+ // @__NO_SIDE_EFFECTS__
581
+ function padding(bits, chr = "=") {
582
+ anumber2(bits);
583
+ astr("padding", chr);
584
+ return {
585
+ encode(data) {
586
+ astrArr("padding.encode", data);
587
+ while (data.length * bits % 8)
588
+ data.push(chr);
589
+ return data;
590
+ },
591
+ decode(input) {
592
+ astrArr("padding.decode", input);
593
+ let end = input.length;
594
+ if (end * bits % 8)
595
+ throw new Error("padding: invalid, string should have whole number of bytes");
596
+ for (; end > 0 && input[end - 1] === chr; end--) {
597
+ const last = end - 1;
598
+ const byte = last * bits;
599
+ if (byte % 8 === 0)
600
+ throw new Error("padding: invalid, string has too much padding");
601
+ }
602
+ return input.slice(0, end);
603
+ }
604
+ };
605
+ }
606
+ function convertRadix(data, from, to) {
607
+ if (from < 2)
608
+ throw new Error(`convertRadix: invalid from=${from}, base cannot be less than 2`);
609
+ if (to < 2)
610
+ throw new Error(`convertRadix: invalid to=${to}, base cannot be less than 2`);
611
+ aArr(data);
612
+ if (!data.length)
613
+ return [];
614
+ let pos = 0;
615
+ const res = [];
616
+ const digits = Array.from(data, (d) => {
617
+ anumber2(d);
618
+ if (d < 0 || d >= from)
619
+ throw new Error(`invalid integer: ${d}`);
620
+ return d;
621
+ });
622
+ const dlen = digits.length;
623
+ while (true) {
624
+ let carry = 0;
625
+ let done = true;
626
+ for (let i = pos; i < dlen; i++) {
627
+ const digit = digits[i];
628
+ const fromCarry = from * carry;
629
+ const digitBase = fromCarry + digit;
630
+ if (!Number.isSafeInteger(digitBase) || fromCarry / from !== carry || digitBase - digit !== fromCarry) {
631
+ throw new Error("convertRadix: carry overflow");
632
+ }
633
+ const div = digitBase / to;
634
+ carry = digitBase % to;
635
+ const rounded = Math.floor(div);
636
+ digits[i] = rounded;
637
+ if (!Number.isSafeInteger(rounded) || rounded * to + carry !== digitBase)
638
+ throw new Error("convertRadix: carry overflow");
639
+ if (!done)
640
+ continue;
641
+ else if (!rounded)
642
+ pos = i;
643
+ else
644
+ done = false;
645
+ }
646
+ res.push(carry);
647
+ if (done)
648
+ break;
649
+ }
650
+ for (let i = 0; i < data.length - 1 && data[i] === 0; i++)
651
+ res.push(0);
652
+ return res.reverse();
653
+ }
654
+ var gcd = (a, b) => b === 0 ? a : gcd(b, a % b);
655
+ var radix2carry = /* @__NO_SIDE_EFFECTS__ */ (from, to) => from + (to - gcd(from, to));
656
+ var powers = /* @__PURE__ */ (() => {
657
+ let res = [];
658
+ for (let i = 0; i < 40; i++)
659
+ res.push(2 ** i);
660
+ return res;
661
+ })();
662
+ function convertRadix2(data, from, to, padding2) {
663
+ aArr(data);
664
+ if (from <= 0 || from > 32)
665
+ throw new Error(`convertRadix2: wrong from=${from}`);
666
+ if (to <= 0 || to > 32)
667
+ throw new Error(`convertRadix2: wrong to=${to}`);
668
+ if (/* @__PURE__ */ radix2carry(from, to) > 32) {
669
+ throw new Error(`convertRadix2: carry overflow from=${from} to=${to} carryBits=${/* @__PURE__ */ radix2carry(from, to)}`);
670
+ }
671
+ let carry = 0;
672
+ let pos = 0;
673
+ const max = powers[from];
674
+ const mask = powers[to] - 1;
675
+ const res = [];
676
+ for (const n of data) {
677
+ anumber2(n);
678
+ if (n >= max)
679
+ throw new Error(`convertRadix2: invalid data word=${n} from=${from}`);
680
+ carry = carry << from | n;
681
+ if (pos + from > 32)
682
+ throw new Error(`convertRadix2: carry overflow pos=${pos} from=${from}`);
683
+ pos += from;
684
+ for (; pos >= to; pos -= to)
685
+ res.push((carry >> pos - to & mask) >>> 0);
686
+ const pow = powers[pos];
687
+ if (pow === void 0)
688
+ throw new Error("invalid carry");
689
+ carry &= pow - 1;
690
+ }
691
+ carry = carry << to - pos & mask;
692
+ if (!padding2 && pos >= from)
693
+ throw new Error("Excess padding");
694
+ if (!padding2 && carry > 0)
695
+ throw new Error(`Non-zero padding: ${carry}`);
696
+ if (padding2 && pos > 0)
697
+ res.push(carry >>> 0);
698
+ return res;
699
+ }
700
+ // @__NO_SIDE_EFFECTS__
701
+ function radix(num) {
702
+ anumber2(num);
703
+ const _256 = 2 ** 8;
704
+ return {
705
+ encode: (bytes) => {
706
+ if (!isBytes2(bytes))
707
+ throw new Error("radix.encode input should be Uint8Array");
708
+ return convertRadix(Array.from(bytes), _256, num);
709
+ },
710
+ decode: (digits) => {
711
+ anumArr("radix.decode", digits);
712
+ return Uint8Array.from(convertRadix(digits, num, _256));
713
+ }
714
+ };
715
+ }
716
+ // @__NO_SIDE_EFFECTS__
717
+ function radix2(bits, revPadding = false) {
718
+ anumber2(bits);
719
+ if (bits <= 0 || bits > 32)
720
+ throw new Error("radix2: bits should be in (0..32]");
721
+ if (/* @__PURE__ */ radix2carry(8, bits) > 32 || /* @__PURE__ */ radix2carry(bits, 8) > 32)
722
+ throw new Error("radix2: carry overflow");
723
+ return {
724
+ encode: (bytes) => {
725
+ if (!isBytes2(bytes))
726
+ throw new Error("radix2.encode input should be Uint8Array");
727
+ return convertRadix2(Array.from(bytes), 8, bits, !revPadding);
728
+ },
729
+ decode: (digits) => {
730
+ anumArr("radix2.decode", digits);
731
+ return Uint8Array.from(convertRadix2(digits, bits, 8, revPadding));
732
+ }
733
+ };
734
+ }
735
+ function checksum(len, fn) {
736
+ anumber2(len);
737
+ afn(fn);
738
+ return {
739
+ encode(data) {
740
+ if (!isBytes2(data))
741
+ throw new Error("checksum.encode: input should be Uint8Array");
742
+ const sum = fn(data).slice(0, len);
743
+ const res = new Uint8Array(data.length + len);
744
+ res.set(data);
745
+ res.set(sum, data.length);
746
+ return res;
747
+ },
748
+ decode(data) {
749
+ if (!isBytes2(data))
750
+ throw new Error("checksum.decode: input should be Uint8Array");
751
+ const payload = data.slice(0, -len);
752
+ const oldChecksum = data.slice(-len);
753
+ const newChecksum = fn(payload).slice(0, len);
754
+ for (let i = 0; i < len; i++)
755
+ if (newChecksum[i] !== oldChecksum[i])
756
+ throw new Error("Invalid checksum");
757
+ return payload;
758
+ }
759
+ };
760
+ }
761
+ var utils = {
762
+ alphabet,
763
+ chain,
764
+ checksum,
765
+ convertRadix,
766
+ convertRadix2,
767
+ radix,
768
+ radix2,
769
+ join,
770
+ padding
771
+ };
772
+
773
+ // node_modules/@scure/bip39/index.js
774
+ var isJapanese = (wordlist2) => wordlist2[0] === "\u3042\u3044\u3053\u304F\u3057\u3093";
775
+ function nfkd(str) {
776
+ if (typeof str !== "string")
777
+ throw new TypeError("invalid mnemonic type: " + typeof str);
778
+ return str.normalize("NFKD");
779
+ }
780
+ function normalize(str) {
781
+ const norm = nfkd(str);
782
+ const words = norm.split(" ");
783
+ if (![12, 15, 18, 21, 24].includes(words.length))
784
+ throw new Error("Invalid mnemonic");
785
+ return { nfkd: norm, words };
786
+ }
787
+ function aentropy(ent) {
788
+ abytes(ent);
789
+ if (![16, 20, 24, 28, 32].includes(ent.length))
790
+ throw new Error("invalid entropy length");
791
+ }
792
+ function generateMnemonic(wordlist2, strength = 128) {
793
+ anumber(strength);
794
+ if (strength % 32 !== 0 || strength > 256)
795
+ throw new TypeError("Invalid entropy");
796
+ return entropyToMnemonic(randomBytes(strength / 8), wordlist2);
797
+ }
798
+ var calcChecksum = (entropy) => {
799
+ const bitsLeft = 8 - entropy.length / 4;
800
+ return new Uint8Array([sha256(entropy)[0] >> bitsLeft << bitsLeft]);
801
+ };
802
+ function getCoder(wordlist2) {
803
+ if (!Array.isArray(wordlist2) || wordlist2.length !== 2048 || typeof wordlist2[0] !== "string")
804
+ throw new Error("Wordlist: expected array of 2048 strings");
805
+ wordlist2.forEach((i) => {
806
+ if (typeof i !== "string")
807
+ throw new Error("wordlist: non-string element: " + i);
808
+ });
809
+ return utils.chain(utils.checksum(1, calcChecksum), utils.radix2(11, true), utils.alphabet(wordlist2));
810
+ }
811
+ function mnemonicToEntropy(mnemonic, wordlist2) {
812
+ const { words } = normalize(mnemonic);
813
+ const entropy = getCoder(wordlist2).decode(words);
814
+ aentropy(entropy);
815
+ return entropy;
816
+ }
817
+ function entropyToMnemonic(entropy, wordlist2) {
818
+ aentropy(entropy);
819
+ const words = getCoder(wordlist2).encode(entropy);
820
+ return words.join(isJapanese(wordlist2) ? "\u3000" : " ");
821
+ }
822
+ function validateMnemonic(mnemonic, wordlist2) {
823
+ try {
824
+ mnemonicToEntropy(mnemonic, wordlist2);
825
+ } catch (e) {
826
+ return false;
827
+ }
828
+ return true;
829
+ }
830
+
831
+ // node_modules/@scure/bip39/wordlists/english.js
832
+ var wordlist = `abandon
833
+ ability
834
+ able
835
+ about
836
+ above
837
+ absent
838
+ absorb
839
+ abstract
840
+ absurd
841
+ abuse
842
+ access
843
+ accident
844
+ account
845
+ accuse
846
+ achieve
847
+ acid
848
+ acoustic
849
+ acquire
850
+ across
851
+ act
852
+ action
853
+ actor
854
+ actress
855
+ actual
856
+ adapt
857
+ add
858
+ addict
859
+ address
860
+ adjust
861
+ admit
862
+ adult
863
+ advance
864
+ advice
865
+ aerobic
866
+ affair
867
+ afford
868
+ afraid
869
+ again
870
+ age
871
+ agent
872
+ agree
873
+ ahead
874
+ aim
875
+ air
876
+ airport
877
+ aisle
878
+ alarm
879
+ album
880
+ alcohol
881
+ alert
882
+ alien
883
+ all
884
+ alley
885
+ allow
886
+ almost
887
+ alone
888
+ alpha
889
+ already
890
+ also
891
+ alter
892
+ always
893
+ amateur
894
+ amazing
895
+ among
896
+ amount
897
+ amused
898
+ analyst
899
+ anchor
900
+ ancient
901
+ anger
902
+ angle
903
+ angry
904
+ animal
905
+ ankle
906
+ announce
907
+ annual
908
+ another
909
+ answer
910
+ antenna
911
+ antique
912
+ anxiety
913
+ any
914
+ apart
915
+ apology
916
+ appear
917
+ apple
918
+ approve
919
+ april
920
+ arch
921
+ arctic
922
+ area
923
+ arena
924
+ argue
925
+ arm
926
+ armed
927
+ armor
928
+ army
929
+ around
930
+ arrange
931
+ arrest
932
+ arrive
933
+ arrow
934
+ art
935
+ artefact
936
+ artist
937
+ artwork
938
+ ask
939
+ aspect
940
+ assault
941
+ asset
942
+ assist
943
+ assume
944
+ asthma
945
+ athlete
946
+ atom
947
+ attack
948
+ attend
949
+ attitude
950
+ attract
951
+ auction
952
+ audit
953
+ august
954
+ aunt
955
+ author
956
+ auto
957
+ autumn
958
+ average
959
+ avocado
960
+ avoid
961
+ awake
962
+ aware
963
+ away
964
+ awesome
965
+ awful
966
+ awkward
967
+ axis
968
+ baby
969
+ bachelor
970
+ bacon
971
+ badge
972
+ bag
973
+ balance
974
+ balcony
975
+ ball
976
+ bamboo
977
+ banana
978
+ banner
979
+ bar
980
+ barely
981
+ bargain
982
+ barrel
983
+ base
984
+ basic
985
+ basket
986
+ battle
987
+ beach
988
+ bean
989
+ beauty
990
+ because
991
+ become
992
+ beef
993
+ before
994
+ begin
995
+ behave
996
+ behind
997
+ believe
998
+ below
999
+ belt
1000
+ bench
1001
+ benefit
1002
+ best
1003
+ betray
1004
+ better
1005
+ between
1006
+ beyond
1007
+ bicycle
1008
+ bid
1009
+ bike
1010
+ bind
1011
+ biology
1012
+ bird
1013
+ birth
1014
+ bitter
1015
+ black
1016
+ blade
1017
+ blame
1018
+ blanket
1019
+ blast
1020
+ bleak
1021
+ bless
1022
+ blind
1023
+ blood
1024
+ blossom
1025
+ blouse
1026
+ blue
1027
+ blur
1028
+ blush
1029
+ board
1030
+ boat
1031
+ body
1032
+ boil
1033
+ bomb
1034
+ bone
1035
+ bonus
1036
+ book
1037
+ boost
1038
+ border
1039
+ boring
1040
+ borrow
1041
+ boss
1042
+ bottom
1043
+ bounce
1044
+ box
1045
+ boy
1046
+ bracket
1047
+ brain
1048
+ brand
1049
+ brass
1050
+ brave
1051
+ bread
1052
+ breeze
1053
+ brick
1054
+ bridge
1055
+ brief
1056
+ bright
1057
+ bring
1058
+ brisk
1059
+ broccoli
1060
+ broken
1061
+ bronze
1062
+ broom
1063
+ brother
1064
+ brown
1065
+ brush
1066
+ bubble
1067
+ buddy
1068
+ budget
1069
+ buffalo
1070
+ build
1071
+ bulb
1072
+ bulk
1073
+ bullet
1074
+ bundle
1075
+ bunker
1076
+ burden
1077
+ burger
1078
+ burst
1079
+ bus
1080
+ business
1081
+ busy
1082
+ butter
1083
+ buyer
1084
+ buzz
1085
+ cabbage
1086
+ cabin
1087
+ cable
1088
+ cactus
1089
+ cage
1090
+ cake
1091
+ call
1092
+ calm
1093
+ camera
1094
+ camp
1095
+ can
1096
+ canal
1097
+ cancel
1098
+ candy
1099
+ cannon
1100
+ canoe
1101
+ canvas
1102
+ canyon
1103
+ capable
1104
+ capital
1105
+ captain
1106
+ car
1107
+ carbon
1108
+ card
1109
+ cargo
1110
+ carpet
1111
+ carry
1112
+ cart
1113
+ case
1114
+ cash
1115
+ casino
1116
+ castle
1117
+ casual
1118
+ cat
1119
+ catalog
1120
+ catch
1121
+ category
1122
+ cattle
1123
+ caught
1124
+ cause
1125
+ caution
1126
+ cave
1127
+ ceiling
1128
+ celery
1129
+ cement
1130
+ census
1131
+ century
1132
+ cereal
1133
+ certain
1134
+ chair
1135
+ chalk
1136
+ champion
1137
+ change
1138
+ chaos
1139
+ chapter
1140
+ charge
1141
+ chase
1142
+ chat
1143
+ cheap
1144
+ check
1145
+ cheese
1146
+ chef
1147
+ cherry
1148
+ chest
1149
+ chicken
1150
+ chief
1151
+ child
1152
+ chimney
1153
+ choice
1154
+ choose
1155
+ chronic
1156
+ chuckle
1157
+ chunk
1158
+ churn
1159
+ cigar
1160
+ cinnamon
1161
+ circle
1162
+ citizen
1163
+ city
1164
+ civil
1165
+ claim
1166
+ clap
1167
+ clarify
1168
+ claw
1169
+ clay
1170
+ clean
1171
+ clerk
1172
+ clever
1173
+ click
1174
+ client
1175
+ cliff
1176
+ climb
1177
+ clinic
1178
+ clip
1179
+ clock
1180
+ clog
1181
+ close
1182
+ cloth
1183
+ cloud
1184
+ clown
1185
+ club
1186
+ clump
1187
+ cluster
1188
+ clutch
1189
+ coach
1190
+ coast
1191
+ coconut
1192
+ code
1193
+ coffee
1194
+ coil
1195
+ coin
1196
+ collect
1197
+ color
1198
+ column
1199
+ combine
1200
+ come
1201
+ comfort
1202
+ comic
1203
+ common
1204
+ company
1205
+ concert
1206
+ conduct
1207
+ confirm
1208
+ congress
1209
+ connect
1210
+ consider
1211
+ control
1212
+ convince
1213
+ cook
1214
+ cool
1215
+ copper
1216
+ copy
1217
+ coral
1218
+ core
1219
+ corn
1220
+ correct
1221
+ cost
1222
+ cotton
1223
+ couch
1224
+ country
1225
+ couple
1226
+ course
1227
+ cousin
1228
+ cover
1229
+ coyote
1230
+ crack
1231
+ cradle
1232
+ craft
1233
+ cram
1234
+ crane
1235
+ crash
1236
+ crater
1237
+ crawl
1238
+ crazy
1239
+ cream
1240
+ credit
1241
+ creek
1242
+ crew
1243
+ cricket
1244
+ crime
1245
+ crisp
1246
+ critic
1247
+ crop
1248
+ cross
1249
+ crouch
1250
+ crowd
1251
+ crucial
1252
+ cruel
1253
+ cruise
1254
+ crumble
1255
+ crunch
1256
+ crush
1257
+ cry
1258
+ crystal
1259
+ cube
1260
+ culture
1261
+ cup
1262
+ cupboard
1263
+ curious
1264
+ current
1265
+ curtain
1266
+ curve
1267
+ cushion
1268
+ custom
1269
+ cute
1270
+ cycle
1271
+ dad
1272
+ damage
1273
+ damp
1274
+ dance
1275
+ danger
1276
+ daring
1277
+ dash
1278
+ daughter
1279
+ dawn
1280
+ day
1281
+ deal
1282
+ debate
1283
+ debris
1284
+ decade
1285
+ december
1286
+ decide
1287
+ decline
1288
+ decorate
1289
+ decrease
1290
+ deer
1291
+ defense
1292
+ define
1293
+ defy
1294
+ degree
1295
+ delay
1296
+ deliver
1297
+ demand
1298
+ demise
1299
+ denial
1300
+ dentist
1301
+ deny
1302
+ depart
1303
+ depend
1304
+ deposit
1305
+ depth
1306
+ deputy
1307
+ derive
1308
+ describe
1309
+ desert
1310
+ design
1311
+ desk
1312
+ despair
1313
+ destroy
1314
+ detail
1315
+ detect
1316
+ develop
1317
+ device
1318
+ devote
1319
+ diagram
1320
+ dial
1321
+ diamond
1322
+ diary
1323
+ dice
1324
+ diesel
1325
+ diet
1326
+ differ
1327
+ digital
1328
+ dignity
1329
+ dilemma
1330
+ dinner
1331
+ dinosaur
1332
+ direct
1333
+ dirt
1334
+ disagree
1335
+ discover
1336
+ disease
1337
+ dish
1338
+ dismiss
1339
+ disorder
1340
+ display
1341
+ distance
1342
+ divert
1343
+ divide
1344
+ divorce
1345
+ dizzy
1346
+ doctor
1347
+ document
1348
+ dog
1349
+ doll
1350
+ dolphin
1351
+ domain
1352
+ donate
1353
+ donkey
1354
+ donor
1355
+ door
1356
+ dose
1357
+ double
1358
+ dove
1359
+ draft
1360
+ dragon
1361
+ drama
1362
+ drastic
1363
+ draw
1364
+ dream
1365
+ dress
1366
+ drift
1367
+ drill
1368
+ drink
1369
+ drip
1370
+ drive
1371
+ drop
1372
+ drum
1373
+ dry
1374
+ duck
1375
+ dumb
1376
+ dune
1377
+ during
1378
+ dust
1379
+ dutch
1380
+ duty
1381
+ dwarf
1382
+ dynamic
1383
+ eager
1384
+ eagle
1385
+ early
1386
+ earn
1387
+ earth
1388
+ easily
1389
+ east
1390
+ easy
1391
+ echo
1392
+ ecology
1393
+ economy
1394
+ edge
1395
+ edit
1396
+ educate
1397
+ effort
1398
+ egg
1399
+ eight
1400
+ either
1401
+ elbow
1402
+ elder
1403
+ electric
1404
+ elegant
1405
+ element
1406
+ elephant
1407
+ elevator
1408
+ elite
1409
+ else
1410
+ embark
1411
+ embody
1412
+ embrace
1413
+ emerge
1414
+ emotion
1415
+ employ
1416
+ empower
1417
+ empty
1418
+ enable
1419
+ enact
1420
+ end
1421
+ endless
1422
+ endorse
1423
+ enemy
1424
+ energy
1425
+ enforce
1426
+ engage
1427
+ engine
1428
+ enhance
1429
+ enjoy
1430
+ enlist
1431
+ enough
1432
+ enrich
1433
+ enroll
1434
+ ensure
1435
+ enter
1436
+ entire
1437
+ entry
1438
+ envelope
1439
+ episode
1440
+ equal
1441
+ equip
1442
+ era
1443
+ erase
1444
+ erode
1445
+ erosion
1446
+ error
1447
+ erupt
1448
+ escape
1449
+ essay
1450
+ essence
1451
+ estate
1452
+ eternal
1453
+ ethics
1454
+ evidence
1455
+ evil
1456
+ evoke
1457
+ evolve
1458
+ exact
1459
+ example
1460
+ excess
1461
+ exchange
1462
+ excite
1463
+ exclude
1464
+ excuse
1465
+ execute
1466
+ exercise
1467
+ exhaust
1468
+ exhibit
1469
+ exile
1470
+ exist
1471
+ exit
1472
+ exotic
1473
+ expand
1474
+ expect
1475
+ expire
1476
+ explain
1477
+ expose
1478
+ express
1479
+ extend
1480
+ extra
1481
+ eye
1482
+ eyebrow
1483
+ fabric
1484
+ face
1485
+ faculty
1486
+ fade
1487
+ faint
1488
+ faith
1489
+ fall
1490
+ false
1491
+ fame
1492
+ family
1493
+ famous
1494
+ fan
1495
+ fancy
1496
+ fantasy
1497
+ farm
1498
+ fashion
1499
+ fat
1500
+ fatal
1501
+ father
1502
+ fatigue
1503
+ fault
1504
+ favorite
1505
+ feature
1506
+ february
1507
+ federal
1508
+ fee
1509
+ feed
1510
+ feel
1511
+ female
1512
+ fence
1513
+ festival
1514
+ fetch
1515
+ fever
1516
+ few
1517
+ fiber
1518
+ fiction
1519
+ field
1520
+ figure
1521
+ file
1522
+ film
1523
+ filter
1524
+ final
1525
+ find
1526
+ fine
1527
+ finger
1528
+ finish
1529
+ fire
1530
+ firm
1531
+ first
1532
+ fiscal
1533
+ fish
1534
+ fit
1535
+ fitness
1536
+ fix
1537
+ flag
1538
+ flame
1539
+ flash
1540
+ flat
1541
+ flavor
1542
+ flee
1543
+ flight
1544
+ flip
1545
+ float
1546
+ flock
1547
+ floor
1548
+ flower
1549
+ fluid
1550
+ flush
1551
+ fly
1552
+ foam
1553
+ focus
1554
+ fog
1555
+ foil
1556
+ fold
1557
+ follow
1558
+ food
1559
+ foot
1560
+ force
1561
+ forest
1562
+ forget
1563
+ fork
1564
+ fortune
1565
+ forum
1566
+ forward
1567
+ fossil
1568
+ foster
1569
+ found
1570
+ fox
1571
+ fragile
1572
+ frame
1573
+ frequent
1574
+ fresh
1575
+ friend
1576
+ fringe
1577
+ frog
1578
+ front
1579
+ frost
1580
+ frown
1581
+ frozen
1582
+ fruit
1583
+ fuel
1584
+ fun
1585
+ funny
1586
+ furnace
1587
+ fury
1588
+ future
1589
+ gadget
1590
+ gain
1591
+ galaxy
1592
+ gallery
1593
+ game
1594
+ gap
1595
+ garage
1596
+ garbage
1597
+ garden
1598
+ garlic
1599
+ garment
1600
+ gas
1601
+ gasp
1602
+ gate
1603
+ gather
1604
+ gauge
1605
+ gaze
1606
+ general
1607
+ genius
1608
+ genre
1609
+ gentle
1610
+ genuine
1611
+ gesture
1612
+ ghost
1613
+ giant
1614
+ gift
1615
+ giggle
1616
+ ginger
1617
+ giraffe
1618
+ girl
1619
+ give
1620
+ glad
1621
+ glance
1622
+ glare
1623
+ glass
1624
+ glide
1625
+ glimpse
1626
+ globe
1627
+ gloom
1628
+ glory
1629
+ glove
1630
+ glow
1631
+ glue
1632
+ goat
1633
+ goddess
1634
+ gold
1635
+ good
1636
+ goose
1637
+ gorilla
1638
+ gospel
1639
+ gossip
1640
+ govern
1641
+ gown
1642
+ grab
1643
+ grace
1644
+ grain
1645
+ grant
1646
+ grape
1647
+ grass
1648
+ gravity
1649
+ great
1650
+ green
1651
+ grid
1652
+ grief
1653
+ grit
1654
+ grocery
1655
+ group
1656
+ grow
1657
+ grunt
1658
+ guard
1659
+ guess
1660
+ guide
1661
+ guilt
1662
+ guitar
1663
+ gun
1664
+ gym
1665
+ habit
1666
+ hair
1667
+ half
1668
+ hammer
1669
+ hamster
1670
+ hand
1671
+ happy
1672
+ harbor
1673
+ hard
1674
+ harsh
1675
+ harvest
1676
+ hat
1677
+ have
1678
+ hawk
1679
+ hazard
1680
+ head
1681
+ health
1682
+ heart
1683
+ heavy
1684
+ hedgehog
1685
+ height
1686
+ hello
1687
+ helmet
1688
+ help
1689
+ hen
1690
+ hero
1691
+ hidden
1692
+ high
1693
+ hill
1694
+ hint
1695
+ hip
1696
+ hire
1697
+ history
1698
+ hobby
1699
+ hockey
1700
+ hold
1701
+ hole
1702
+ holiday
1703
+ hollow
1704
+ home
1705
+ honey
1706
+ hood
1707
+ hope
1708
+ horn
1709
+ horror
1710
+ horse
1711
+ hospital
1712
+ host
1713
+ hotel
1714
+ hour
1715
+ hover
1716
+ hub
1717
+ huge
1718
+ human
1719
+ humble
1720
+ humor
1721
+ hundred
1722
+ hungry
1723
+ hunt
1724
+ hurdle
1725
+ hurry
1726
+ hurt
1727
+ husband
1728
+ hybrid
1729
+ ice
1730
+ icon
1731
+ idea
1732
+ identify
1733
+ idle
1734
+ ignore
1735
+ ill
1736
+ illegal
1737
+ illness
1738
+ image
1739
+ imitate
1740
+ immense
1741
+ immune
1742
+ impact
1743
+ impose
1744
+ improve
1745
+ impulse
1746
+ inch
1747
+ include
1748
+ income
1749
+ increase
1750
+ index
1751
+ indicate
1752
+ indoor
1753
+ industry
1754
+ infant
1755
+ inflict
1756
+ inform
1757
+ inhale
1758
+ inherit
1759
+ initial
1760
+ inject
1761
+ injury
1762
+ inmate
1763
+ inner
1764
+ innocent
1765
+ input
1766
+ inquiry
1767
+ insane
1768
+ insect
1769
+ inside
1770
+ inspire
1771
+ install
1772
+ intact
1773
+ interest
1774
+ into
1775
+ invest
1776
+ invite
1777
+ involve
1778
+ iron
1779
+ island
1780
+ isolate
1781
+ issue
1782
+ item
1783
+ ivory
1784
+ jacket
1785
+ jaguar
1786
+ jar
1787
+ jazz
1788
+ jealous
1789
+ jeans
1790
+ jelly
1791
+ jewel
1792
+ job
1793
+ join
1794
+ joke
1795
+ journey
1796
+ joy
1797
+ judge
1798
+ juice
1799
+ jump
1800
+ jungle
1801
+ junior
1802
+ junk
1803
+ just
1804
+ kangaroo
1805
+ keen
1806
+ keep
1807
+ ketchup
1808
+ key
1809
+ kick
1810
+ kid
1811
+ kidney
1812
+ kind
1813
+ kingdom
1814
+ kiss
1815
+ kit
1816
+ kitchen
1817
+ kite
1818
+ kitten
1819
+ kiwi
1820
+ knee
1821
+ knife
1822
+ knock
1823
+ know
1824
+ lab
1825
+ label
1826
+ labor
1827
+ ladder
1828
+ lady
1829
+ lake
1830
+ lamp
1831
+ language
1832
+ laptop
1833
+ large
1834
+ later
1835
+ latin
1836
+ laugh
1837
+ laundry
1838
+ lava
1839
+ law
1840
+ lawn
1841
+ lawsuit
1842
+ layer
1843
+ lazy
1844
+ leader
1845
+ leaf
1846
+ learn
1847
+ leave
1848
+ lecture
1849
+ left
1850
+ leg
1851
+ legal
1852
+ legend
1853
+ leisure
1854
+ lemon
1855
+ lend
1856
+ length
1857
+ lens
1858
+ leopard
1859
+ lesson
1860
+ letter
1861
+ level
1862
+ liar
1863
+ liberty
1864
+ library
1865
+ license
1866
+ life
1867
+ lift
1868
+ light
1869
+ like
1870
+ limb
1871
+ limit
1872
+ link
1873
+ lion
1874
+ liquid
1875
+ list
1876
+ little
1877
+ live
1878
+ lizard
1879
+ load
1880
+ loan
1881
+ lobster
1882
+ local
1883
+ lock
1884
+ logic
1885
+ lonely
1886
+ long
1887
+ loop
1888
+ lottery
1889
+ loud
1890
+ lounge
1891
+ love
1892
+ loyal
1893
+ lucky
1894
+ luggage
1895
+ lumber
1896
+ lunar
1897
+ lunch
1898
+ luxury
1899
+ lyrics
1900
+ machine
1901
+ mad
1902
+ magic
1903
+ magnet
1904
+ maid
1905
+ mail
1906
+ main
1907
+ major
1908
+ make
1909
+ mammal
1910
+ man
1911
+ manage
1912
+ mandate
1913
+ mango
1914
+ mansion
1915
+ manual
1916
+ maple
1917
+ marble
1918
+ march
1919
+ margin
1920
+ marine
1921
+ market
1922
+ marriage
1923
+ mask
1924
+ mass
1925
+ master
1926
+ match
1927
+ material
1928
+ math
1929
+ matrix
1930
+ matter
1931
+ maximum
1932
+ maze
1933
+ meadow
1934
+ mean
1935
+ measure
1936
+ meat
1937
+ mechanic
1938
+ medal
1939
+ media
1940
+ melody
1941
+ melt
1942
+ member
1943
+ memory
1944
+ mention
1945
+ menu
1946
+ mercy
1947
+ merge
1948
+ merit
1949
+ merry
1950
+ mesh
1951
+ message
1952
+ metal
1953
+ method
1954
+ middle
1955
+ midnight
1956
+ milk
1957
+ million
1958
+ mimic
1959
+ mind
1960
+ minimum
1961
+ minor
1962
+ minute
1963
+ miracle
1964
+ mirror
1965
+ misery
1966
+ miss
1967
+ mistake
1968
+ mix
1969
+ mixed
1970
+ mixture
1971
+ mobile
1972
+ model
1973
+ modify
1974
+ mom
1975
+ moment
1976
+ monitor
1977
+ monkey
1978
+ monster
1979
+ month
1980
+ moon
1981
+ moral
1982
+ more
1983
+ morning
1984
+ mosquito
1985
+ mother
1986
+ motion
1987
+ motor
1988
+ mountain
1989
+ mouse
1990
+ move
1991
+ movie
1992
+ much
1993
+ muffin
1994
+ mule
1995
+ multiply
1996
+ muscle
1997
+ museum
1998
+ mushroom
1999
+ music
2000
+ must
2001
+ mutual
2002
+ myself
2003
+ mystery
2004
+ myth
2005
+ naive
2006
+ name
2007
+ napkin
2008
+ narrow
2009
+ nasty
2010
+ nation
2011
+ nature
2012
+ near
2013
+ neck
2014
+ need
2015
+ negative
2016
+ neglect
2017
+ neither
2018
+ nephew
2019
+ nerve
2020
+ nest
2021
+ net
2022
+ network
2023
+ neutral
2024
+ never
2025
+ news
2026
+ next
2027
+ nice
2028
+ night
2029
+ noble
2030
+ noise
2031
+ nominee
2032
+ noodle
2033
+ normal
2034
+ north
2035
+ nose
2036
+ notable
2037
+ note
2038
+ nothing
2039
+ notice
2040
+ novel
2041
+ now
2042
+ nuclear
2043
+ number
2044
+ nurse
2045
+ nut
2046
+ oak
2047
+ obey
2048
+ object
2049
+ oblige
2050
+ obscure
2051
+ observe
2052
+ obtain
2053
+ obvious
2054
+ occur
2055
+ ocean
2056
+ october
2057
+ odor
2058
+ off
2059
+ offer
2060
+ office
2061
+ often
2062
+ oil
2063
+ okay
2064
+ old
2065
+ olive
2066
+ olympic
2067
+ omit
2068
+ once
2069
+ one
2070
+ onion
2071
+ online
2072
+ only
2073
+ open
2074
+ opera
2075
+ opinion
2076
+ oppose
2077
+ option
2078
+ orange
2079
+ orbit
2080
+ orchard
2081
+ order
2082
+ ordinary
2083
+ organ
2084
+ orient
2085
+ original
2086
+ orphan
2087
+ ostrich
2088
+ other
2089
+ outdoor
2090
+ outer
2091
+ output
2092
+ outside
2093
+ oval
2094
+ oven
2095
+ over
2096
+ own
2097
+ owner
2098
+ oxygen
2099
+ oyster
2100
+ ozone
2101
+ pact
2102
+ paddle
2103
+ page
2104
+ pair
2105
+ palace
2106
+ palm
2107
+ panda
2108
+ panel
2109
+ panic
2110
+ panther
2111
+ paper
2112
+ parade
2113
+ parent
2114
+ park
2115
+ parrot
2116
+ party
2117
+ pass
2118
+ patch
2119
+ path
2120
+ patient
2121
+ patrol
2122
+ pattern
2123
+ pause
2124
+ pave
2125
+ payment
2126
+ peace
2127
+ peanut
2128
+ pear
2129
+ peasant
2130
+ pelican
2131
+ pen
2132
+ penalty
2133
+ pencil
2134
+ people
2135
+ pepper
2136
+ perfect
2137
+ permit
2138
+ person
2139
+ pet
2140
+ phone
2141
+ photo
2142
+ phrase
2143
+ physical
2144
+ piano
2145
+ picnic
2146
+ picture
2147
+ piece
2148
+ pig
2149
+ pigeon
2150
+ pill
2151
+ pilot
2152
+ pink
2153
+ pioneer
2154
+ pipe
2155
+ pistol
2156
+ pitch
2157
+ pizza
2158
+ place
2159
+ planet
2160
+ plastic
2161
+ plate
2162
+ play
2163
+ please
2164
+ pledge
2165
+ pluck
2166
+ plug
2167
+ plunge
2168
+ poem
2169
+ poet
2170
+ point
2171
+ polar
2172
+ pole
2173
+ police
2174
+ pond
2175
+ pony
2176
+ pool
2177
+ popular
2178
+ portion
2179
+ position
2180
+ possible
2181
+ post
2182
+ potato
2183
+ pottery
2184
+ poverty
2185
+ powder
2186
+ power
2187
+ practice
2188
+ praise
2189
+ predict
2190
+ prefer
2191
+ prepare
2192
+ present
2193
+ pretty
2194
+ prevent
2195
+ price
2196
+ pride
2197
+ primary
2198
+ print
2199
+ priority
2200
+ prison
2201
+ private
2202
+ prize
2203
+ problem
2204
+ process
2205
+ produce
2206
+ profit
2207
+ program
2208
+ project
2209
+ promote
2210
+ proof
2211
+ property
2212
+ prosper
2213
+ protect
2214
+ proud
2215
+ provide
2216
+ public
2217
+ pudding
2218
+ pull
2219
+ pulp
2220
+ pulse
2221
+ pumpkin
2222
+ punch
2223
+ pupil
2224
+ puppy
2225
+ purchase
2226
+ purity
2227
+ purpose
2228
+ purse
2229
+ push
2230
+ put
2231
+ puzzle
2232
+ pyramid
2233
+ quality
2234
+ quantum
2235
+ quarter
2236
+ question
2237
+ quick
2238
+ quit
2239
+ quiz
2240
+ quote
2241
+ rabbit
2242
+ raccoon
2243
+ race
2244
+ rack
2245
+ radar
2246
+ radio
2247
+ rail
2248
+ rain
2249
+ raise
2250
+ rally
2251
+ ramp
2252
+ ranch
2253
+ random
2254
+ range
2255
+ rapid
2256
+ rare
2257
+ rate
2258
+ rather
2259
+ raven
2260
+ raw
2261
+ razor
2262
+ ready
2263
+ real
2264
+ reason
2265
+ rebel
2266
+ rebuild
2267
+ recall
2268
+ receive
2269
+ recipe
2270
+ record
2271
+ recycle
2272
+ reduce
2273
+ reflect
2274
+ reform
2275
+ refuse
2276
+ region
2277
+ regret
2278
+ regular
2279
+ reject
2280
+ relax
2281
+ release
2282
+ relief
2283
+ rely
2284
+ remain
2285
+ remember
2286
+ remind
2287
+ remove
2288
+ render
2289
+ renew
2290
+ rent
2291
+ reopen
2292
+ repair
2293
+ repeat
2294
+ replace
2295
+ report
2296
+ require
2297
+ rescue
2298
+ resemble
2299
+ resist
2300
+ resource
2301
+ response
2302
+ result
2303
+ retire
2304
+ retreat
2305
+ return
2306
+ reunion
2307
+ reveal
2308
+ review
2309
+ reward
2310
+ rhythm
2311
+ rib
2312
+ ribbon
2313
+ rice
2314
+ rich
2315
+ ride
2316
+ ridge
2317
+ rifle
2318
+ right
2319
+ rigid
2320
+ ring
2321
+ riot
2322
+ ripple
2323
+ risk
2324
+ ritual
2325
+ rival
2326
+ river
2327
+ road
2328
+ roast
2329
+ robot
2330
+ robust
2331
+ rocket
2332
+ romance
2333
+ roof
2334
+ rookie
2335
+ room
2336
+ rose
2337
+ rotate
2338
+ rough
2339
+ round
2340
+ route
2341
+ royal
2342
+ rubber
2343
+ rude
2344
+ rug
2345
+ rule
2346
+ run
2347
+ runway
2348
+ rural
2349
+ sad
2350
+ saddle
2351
+ sadness
2352
+ safe
2353
+ sail
2354
+ salad
2355
+ salmon
2356
+ salon
2357
+ salt
2358
+ salute
2359
+ same
2360
+ sample
2361
+ sand
2362
+ satisfy
2363
+ satoshi
2364
+ sauce
2365
+ sausage
2366
+ save
2367
+ say
2368
+ scale
2369
+ scan
2370
+ scare
2371
+ scatter
2372
+ scene
2373
+ scheme
2374
+ school
2375
+ science
2376
+ scissors
2377
+ scorpion
2378
+ scout
2379
+ scrap
2380
+ screen
2381
+ script
2382
+ scrub
2383
+ sea
2384
+ search
2385
+ season
2386
+ seat
2387
+ second
2388
+ secret
2389
+ section
2390
+ security
2391
+ seed
2392
+ seek
2393
+ segment
2394
+ select
2395
+ sell
2396
+ seminar
2397
+ senior
2398
+ sense
2399
+ sentence
2400
+ series
2401
+ service
2402
+ session
2403
+ settle
2404
+ setup
2405
+ seven
2406
+ shadow
2407
+ shaft
2408
+ shallow
2409
+ share
2410
+ shed
2411
+ shell
2412
+ sheriff
2413
+ shield
2414
+ shift
2415
+ shine
2416
+ ship
2417
+ shiver
2418
+ shock
2419
+ shoe
2420
+ shoot
2421
+ shop
2422
+ short
2423
+ shoulder
2424
+ shove
2425
+ shrimp
2426
+ shrug
2427
+ shuffle
2428
+ shy
2429
+ sibling
2430
+ sick
2431
+ side
2432
+ siege
2433
+ sight
2434
+ sign
2435
+ silent
2436
+ silk
2437
+ silly
2438
+ silver
2439
+ similar
2440
+ simple
2441
+ since
2442
+ sing
2443
+ siren
2444
+ sister
2445
+ situate
2446
+ six
2447
+ size
2448
+ skate
2449
+ sketch
2450
+ ski
2451
+ skill
2452
+ skin
2453
+ skirt
2454
+ skull
2455
+ slab
2456
+ slam
2457
+ sleep
2458
+ slender
2459
+ slice
2460
+ slide
2461
+ slight
2462
+ slim
2463
+ slogan
2464
+ slot
2465
+ slow
2466
+ slush
2467
+ small
2468
+ smart
2469
+ smile
2470
+ smoke
2471
+ smooth
2472
+ snack
2473
+ snake
2474
+ snap
2475
+ sniff
2476
+ snow
2477
+ soap
2478
+ soccer
2479
+ social
2480
+ sock
2481
+ soda
2482
+ soft
2483
+ solar
2484
+ soldier
2485
+ solid
2486
+ solution
2487
+ solve
2488
+ someone
2489
+ song
2490
+ soon
2491
+ sorry
2492
+ sort
2493
+ soul
2494
+ sound
2495
+ soup
2496
+ source
2497
+ south
2498
+ space
2499
+ spare
2500
+ spatial
2501
+ spawn
2502
+ speak
2503
+ special
2504
+ speed
2505
+ spell
2506
+ spend
2507
+ sphere
2508
+ spice
2509
+ spider
2510
+ spike
2511
+ spin
2512
+ spirit
2513
+ split
2514
+ spoil
2515
+ sponsor
2516
+ spoon
2517
+ sport
2518
+ spot
2519
+ spray
2520
+ spread
2521
+ spring
2522
+ spy
2523
+ square
2524
+ squeeze
2525
+ squirrel
2526
+ stable
2527
+ stadium
2528
+ staff
2529
+ stage
2530
+ stairs
2531
+ stamp
2532
+ stand
2533
+ start
2534
+ state
2535
+ stay
2536
+ steak
2537
+ steel
2538
+ stem
2539
+ step
2540
+ stereo
2541
+ stick
2542
+ still
2543
+ sting
2544
+ stock
2545
+ stomach
2546
+ stone
2547
+ stool
2548
+ story
2549
+ stove
2550
+ strategy
2551
+ street
2552
+ strike
2553
+ strong
2554
+ struggle
2555
+ student
2556
+ stuff
2557
+ stumble
2558
+ style
2559
+ subject
2560
+ submit
2561
+ subway
2562
+ success
2563
+ such
2564
+ sudden
2565
+ suffer
2566
+ sugar
2567
+ suggest
2568
+ suit
2569
+ summer
2570
+ sun
2571
+ sunny
2572
+ sunset
2573
+ super
2574
+ supply
2575
+ supreme
2576
+ sure
2577
+ surface
2578
+ surge
2579
+ surprise
2580
+ surround
2581
+ survey
2582
+ suspect
2583
+ sustain
2584
+ swallow
2585
+ swamp
2586
+ swap
2587
+ swarm
2588
+ swear
2589
+ sweet
2590
+ swift
2591
+ swim
2592
+ swing
2593
+ switch
2594
+ sword
2595
+ symbol
2596
+ symptom
2597
+ syrup
2598
+ system
2599
+ table
2600
+ tackle
2601
+ tag
2602
+ tail
2603
+ talent
2604
+ talk
2605
+ tank
2606
+ tape
2607
+ target
2608
+ task
2609
+ taste
2610
+ tattoo
2611
+ taxi
2612
+ teach
2613
+ team
2614
+ tell
2615
+ ten
2616
+ tenant
2617
+ tennis
2618
+ tent
2619
+ term
2620
+ test
2621
+ text
2622
+ thank
2623
+ that
2624
+ theme
2625
+ then
2626
+ theory
2627
+ there
2628
+ they
2629
+ thing
2630
+ this
2631
+ thought
2632
+ three
2633
+ thrive
2634
+ throw
2635
+ thumb
2636
+ thunder
2637
+ ticket
2638
+ tide
2639
+ tiger
2640
+ tilt
2641
+ timber
2642
+ time
2643
+ tiny
2644
+ tip
2645
+ tired
2646
+ tissue
2647
+ title
2648
+ toast
2649
+ tobacco
2650
+ today
2651
+ toddler
2652
+ toe
2653
+ together
2654
+ toilet
2655
+ token
2656
+ tomato
2657
+ tomorrow
2658
+ tone
2659
+ tongue
2660
+ tonight
2661
+ tool
2662
+ tooth
2663
+ top
2664
+ topic
2665
+ topple
2666
+ torch
2667
+ tornado
2668
+ tortoise
2669
+ toss
2670
+ total
2671
+ tourist
2672
+ toward
2673
+ tower
2674
+ town
2675
+ toy
2676
+ track
2677
+ trade
2678
+ traffic
2679
+ tragic
2680
+ train
2681
+ transfer
2682
+ trap
2683
+ trash
2684
+ travel
2685
+ tray
2686
+ treat
2687
+ tree
2688
+ trend
2689
+ trial
2690
+ tribe
2691
+ trick
2692
+ trigger
2693
+ trim
2694
+ trip
2695
+ trophy
2696
+ trouble
2697
+ truck
2698
+ true
2699
+ truly
2700
+ trumpet
2701
+ trust
2702
+ truth
2703
+ try
2704
+ tube
2705
+ tuition
2706
+ tumble
2707
+ tuna
2708
+ tunnel
2709
+ turkey
2710
+ turn
2711
+ turtle
2712
+ twelve
2713
+ twenty
2714
+ twice
2715
+ twin
2716
+ twist
2717
+ two
2718
+ type
2719
+ typical
2720
+ ugly
2721
+ umbrella
2722
+ unable
2723
+ unaware
2724
+ uncle
2725
+ uncover
2726
+ under
2727
+ undo
2728
+ unfair
2729
+ unfold
2730
+ unhappy
2731
+ uniform
2732
+ unique
2733
+ unit
2734
+ universe
2735
+ unknown
2736
+ unlock
2737
+ until
2738
+ unusual
2739
+ unveil
2740
+ update
2741
+ upgrade
2742
+ uphold
2743
+ upon
2744
+ upper
2745
+ upset
2746
+ urban
2747
+ urge
2748
+ usage
2749
+ use
2750
+ used
2751
+ useful
2752
+ useless
2753
+ usual
2754
+ utility
2755
+ vacant
2756
+ vacuum
2757
+ vague
2758
+ valid
2759
+ valley
2760
+ valve
2761
+ van
2762
+ vanish
2763
+ vapor
2764
+ various
2765
+ vast
2766
+ vault
2767
+ vehicle
2768
+ velvet
2769
+ vendor
2770
+ venture
2771
+ venue
2772
+ verb
2773
+ verify
2774
+ version
2775
+ very
2776
+ vessel
2777
+ veteran
2778
+ viable
2779
+ vibrant
2780
+ vicious
2781
+ victory
2782
+ video
2783
+ view
2784
+ village
2785
+ vintage
2786
+ violin
2787
+ virtual
2788
+ virus
2789
+ visa
2790
+ visit
2791
+ visual
2792
+ vital
2793
+ vivid
2794
+ vocal
2795
+ voice
2796
+ void
2797
+ volcano
2798
+ volume
2799
+ vote
2800
+ voyage
2801
+ wage
2802
+ wagon
2803
+ wait
2804
+ walk
2805
+ wall
2806
+ walnut
2807
+ want
2808
+ warfare
2809
+ warm
2810
+ warrior
2811
+ wash
2812
+ wasp
2813
+ waste
2814
+ water
2815
+ wave
2816
+ way
2817
+ wealth
2818
+ weapon
2819
+ wear
2820
+ weasel
2821
+ weather
2822
+ web
2823
+ wedding
2824
+ weekend
2825
+ weird
2826
+ welcome
2827
+ west
2828
+ wet
2829
+ whale
2830
+ what
2831
+ wheat
2832
+ wheel
2833
+ when
2834
+ where
2835
+ whip
2836
+ whisper
2837
+ wide
2838
+ width
2839
+ wife
2840
+ wild
2841
+ will
2842
+ win
2843
+ window
2844
+ wine
2845
+ wing
2846
+ wink
2847
+ winner
2848
+ winter
2849
+ wire
2850
+ wisdom
2851
+ wise
2852
+ wish
2853
+ witness
2854
+ wolf
2855
+ woman
2856
+ wonder
2857
+ wood
2858
+ wool
2859
+ word
2860
+ work
2861
+ world
2862
+ worry
2863
+ worth
2864
+ wrap
2865
+ wreck
2866
+ wrestle
2867
+ wrist
2868
+ write
2869
+ wrong
2870
+ yard
2871
+ year
2872
+ yellow
2873
+ you
2874
+ young
2875
+ youth
2876
+ zebra
2877
+ zero
2878
+ zone
2879
+ zoo`.split("\n");
2880
+
2881
+ // src/mnemonic.ts
2882
+ function generateMnemonic2() {
2883
+ return generateMnemonic(wordlist, 256);
2884
+ }
2885
+ async function recoverWithMnemonic(mnemonic) {
2886
+ if (!validateMnemonic(mnemonic, wordlist)) {
2887
+ throw new Error("Invalid mnemonic: phrase does not pass BIP-39 checksum validation");
2888
+ }
2889
+ const entropy = mnemonicToEntropy(mnemonic, wordlist).slice();
2890
+ return crypto.subtle.importKey(
2891
+ "raw",
2892
+ entropy,
2893
+ { name: "AES-GCM", length: 256 },
2894
+ false,
2895
+ // extractable: false — key is for use only, never exported
2896
+ ["encrypt", "decrypt"]
2897
+ );
2898
+ }
2899
+
2900
+ // src/base64.ts
2901
+ function toBase64(buf) {
2902
+ const u8 = buf instanceof Uint8Array ? buf : new Uint8Array(buf);
2903
+ let binary = "";
2904
+ for (const byte of u8) binary += String.fromCharCode(byte);
2905
+ return btoa(binary);
2906
+ }
2907
+ function fromBase64(b64) {
2908
+ return Uint8Array.from(atob(b64), (c) => c.charCodeAt(0));
2909
+ }
2910
+ function toBase64Url(buf) {
2911
+ return toBase64(buf).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
2912
+ }
2913
+ function fromBase64Url(b64url) {
2914
+ const b64 = b64url.replace(/-/g, "+").replace(/_/g, "/");
2915
+ return Uint8Array.from(atob(b64), (c) => c.charCodeAt(0));
2916
+ }
2917
+
2918
+ // src/envelope.ts
2919
+ async function sealEnvelope(plaintext, passcode) {
2920
+ const dek = await crypto.subtle.generateKey(
2921
+ { name: "AES-GCM", length: 256 },
2922
+ true,
2923
+ ["encrypt", "decrypt"]
2924
+ );
2925
+ const { ciphertext, iv } = await seal(dek, plaintext);
2926
+ const { wrappedKey, salt } = await wrapKey(passcode, dek);
2927
+ return { ciphertext, iv, wrappedKey, salt };
2928
+ }
2929
+ async function unsealEnvelope(envelope, passcode) {
2930
+ const dek = await unwrapKey(passcode, envelope.wrappedKey, envelope.salt);
2931
+ return unseal(dek, envelope.ciphertext, envelope.iv);
2932
+ }
2933
+ function encodeEnvelope(envelope) {
2934
+ return JSON.stringify({
2935
+ ciphertext: toBase64(envelope.ciphertext),
2936
+ iv: toBase64(envelope.iv),
2937
+ wrappedKey: toBase64(envelope.wrappedKey),
2938
+ salt: toBase64(envelope.salt)
2939
+ }, null, 2);
2940
+ }
2941
+ function decodeEnvelope(json) {
2942
+ const p = JSON.parse(json);
2943
+ const required = ["ciphertext", "iv", "wrappedKey", "salt"];
2944
+ for (const field of required) {
2945
+ if (typeof p[field] !== "string") {
2946
+ throw new TypeError(`Invalid envelope: missing or invalid '${field}' field`);
2947
+ }
2948
+ }
2949
+ const validated = p;
2950
+ return {
2951
+ ciphertext: fromBase64(validated.ciphertext).buffer,
2952
+ iv: fromBase64(validated.iv),
2953
+ wrappedKey: fromBase64(validated.wrappedKey).buffer,
2954
+ salt: fromBase64(validated.salt)
2955
+ };
2956
+ }
2957
+
2958
+ // src/digest.ts
2959
+ async function digest(data) {
2960
+ return crypto.subtle.digest("SHA-256", data);
2961
+ }
2962
+ export {
2963
+ AEK_KEY_ID,
2964
+ decodeEnvelope,
2965
+ digest,
2966
+ encodeEnvelope,
2967
+ exportPublicKeyAsJwk,
2968
+ fromBase64,
2969
+ fromBase64Url,
2970
+ generateAesKey,
2971
+ generateECDHKeyPair,
2972
+ generateECDSAKeyPair,
2973
+ generateMnemonic2 as generateMnemonic,
2974
+ importAesKey,
2975
+ importPublicKeyFromJwk,
2976
+ init,
2977
+ load,
2978
+ recoverWithMnemonic,
2979
+ rekey,
2980
+ remove,
2981
+ save,
2982
+ seal,
2983
+ sealEnvelope,
2984
+ sealMessage,
2985
+ sign,
2986
+ toBase64,
2987
+ toBase64Url,
2988
+ unseal,
2989
+ unsealEnvelope,
2990
+ unsealMessage,
2991
+ unwrapKey,
2992
+ verify,
2993
+ wrapKey
2994
+ };
2995
+ /*! Bundled license information:
2996
+
2997
+ @noble/hashes/utils.js:
2998
+ (*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
2999
+
3000
+ @scure/base/index.js:
3001
+ (*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
3002
+
3003
+ @scure/bip39/index.js:
3004
+ (*! scure-bip39 - MIT License (c) 2022 Patricio Palladino, Paul Miller (paulmillr.com) *)
3005
+ */