UNPKG

559 kBJavaScriptView Raw
1(function (global, factory) {
2 typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@polkadot/util')) :
3 typeof define === 'function' && define.amd ? define(['exports', '@polkadot/util'], factory) :
4 (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.polkadotUtilCrypto = {}, global.polkadotUtil));
5})(this, (function (exports, util) { 'use strict';
6
7 const global = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : window;
8
9 var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
10 const packageInfo$2 = { name: '@polkadot/x-global', path: (({ url: (typeof document === 'undefined' && typeof location === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : typeof document === 'undefined' ? location.href : (_documentCurrentScript && _documentCurrentScript.src || new URL('bundle-polkadot-util-crypto.js', document.baseURI).href)) }) && (typeof document === 'undefined' && typeof location === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : typeof document === 'undefined' ? location.href : (_documentCurrentScript && _documentCurrentScript.src || new URL('bundle-polkadot-util-crypto.js', document.baseURI).href))) ? new URL((typeof document === 'undefined' && typeof location === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : typeof document === 'undefined' ? location.href : (_documentCurrentScript && _documentCurrentScript.src || new URL('bundle-polkadot-util-crypto.js', document.baseURI).href))).pathname.substring(0, new URL((typeof document === 'undefined' && typeof location === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : typeof document === 'undefined' ? location.href : (_documentCurrentScript && _documentCurrentScript.src || new URL('bundle-polkadot-util-crypto.js', document.baseURI).href))).pathname.lastIndexOf('/') + 1) : 'auto', type: 'esm', version: '13.2.3' };
11
12 function evaluateThis(fn) {
13 return fn('return this');
14 }
15 const xglobal = (typeof globalThis !== 'undefined'
16 ? globalThis
17 : typeof global !== 'undefined'
18 ? global
19 : typeof self !== 'undefined'
20 ? self
21 : typeof window !== 'undefined'
22 ? window
23 : evaluateThis(Function));
24 function extractGlobal(name, fallback) {
25 return typeof xglobal[name] === 'undefined'
26 ? fallback
27 : xglobal[name];
28 }
29 function exposeGlobal(name, fallback) {
30 if (typeof xglobal[name] === 'undefined') {
31 xglobal[name] = fallback;
32 }
33 }
34
35 const build = /*#__PURE__*/Object.freeze({
36 __proto__: null,
37 exposeGlobal: exposeGlobal,
38 extractGlobal: extractGlobal,
39 packageInfo: packageInfo$2,
40 xglobal: xglobal
41 });
42
43 function invalidFallback() {
44 return Number.NaN;
45 }
46 const BigInt$1 = extractGlobal('BigInt', invalidFallback);
47
48 exposeGlobal('BigInt', BigInt$1);
49
50 function getDefaultExportFromCjs (x) {
51 return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
52 }
53
54 function getAugmentedNamespace(n) {
55 if (n.__esModule) return n;
56 var f = n.default;
57 if (typeof f == "function") {
58 var a = function a () {
59 if (this instanceof a) {
60 return Reflect.construct(f, arguments, this.constructor);
61 }
62 return f.apply(this, arguments);
63 };
64 a.prototype = f.prototype;
65 } else a = {};
66 Object.defineProperty(a, '__esModule', {value: true});
67 Object.keys(n).forEach(function (k) {
68 var d = Object.getOwnPropertyDescriptor(n, k);
69 Object.defineProperty(a, k, d.get ? d : {
70 enumerable: true,
71 get: function () {
72 return n[k];
73 }
74 });
75 });
76 return a;
77 }
78
79 var browser = {};
80
81 const require$$0 = /*@__PURE__*/getAugmentedNamespace(build);
82
83 var packageInfo$1 = {};
84
85 Object.defineProperty(packageInfo$1, "__esModule", { value: true });
86 packageInfo$1.packageInfo = void 0;
87 packageInfo$1.packageInfo = { name: '@polkadot/x-randomvalues', path: typeof __dirname === 'string' ? __dirname : 'auto', type: 'cjs', version: '13.2.3' };
88
89 (function (exports) {
90 Object.defineProperty(exports, "__esModule", { value: true });
91 exports.crypto = exports.packageInfo = void 0;
92 exports.getRandomValues = getRandomValues;
93 const x_global_1 = require$$0;
94 var packageInfo_js_1 = packageInfo$1;
95 Object.defineProperty(exports, "packageInfo", { enumerable: true, get: function () { return packageInfo_js_1.packageInfo; } });
96 exports.crypto = x_global_1.xglobal.crypto;
97 function getRandomValues(arr) {
98 return exports.crypto.getRandomValues(arr);
99 }
100 } (browser));
101 getDefaultExportFromCjs(browser);
102
103 const DEFAULT_CRYPTO = { getRandomValues: browser.getRandomValues };
104 const DEFAULT_SELF = { crypto: DEFAULT_CRYPTO };
105 class Wbg {
106 __internal__bridge;
107 constructor(bridge) {
108 this.__internal__bridge = bridge;
109 }
110 abort = () => {
111 throw new Error('abort');
112 };
113 __wbindgen_is_undefined = (idx) => {
114 return this.__internal__bridge.getObject(idx) === undefined;
115 };
116 __wbindgen_throw = (ptr, len) => {
117 throw new Error(this.__internal__bridge.getString(ptr, len));
118 };
119 __wbg_self_1b7a39e3a92c949c = () => {
120 return this.__internal__bridge.addObject(DEFAULT_SELF);
121 };
122 __wbg_require_604837428532a733 = (ptr, len) => {
123 throw new Error(`Unable to require ${this.__internal__bridge.getString(ptr, len)}`);
124 };
125 __wbg_crypto_968f1772287e2df0 = (_idx) => {
126 return this.__internal__bridge.addObject(DEFAULT_CRYPTO);
127 };
128 __wbg_getRandomValues_a3d34b4fee3c2869 = (_idx) => {
129 return this.__internal__bridge.addObject(DEFAULT_CRYPTO.getRandomValues);
130 };
131 __wbg_getRandomValues_f5e14ab7ac8e995d = (_arg0, ptr, len) => {
132 DEFAULT_CRYPTO.getRandomValues(this.__internal__bridge.getU8a(ptr, len));
133 };
134 __wbg_randomFillSync_d5bd2d655fdf256a = (_idx, _ptr, _len) => {
135 throw new Error('randomFillsync is not available');
136 };
137 __wbindgen_object_drop_ref = (idx) => {
138 this.__internal__bridge.takeObject(idx);
139 };
140 }
141
142 class Bridge {
143 __internal__createWasm;
144 __internal__heap;
145 __internal__wbg;
146 __internal__cachegetInt32;
147 __internal__cachegetUint8;
148 __internal__heapNext;
149 __internal__wasm;
150 __internal__wasmError;
151 __internal__wasmPromise;
152 __internal__type;
153 constructor(createWasm) {
154 this.__internal__createWasm = createWasm;
155 this.__internal__cachegetInt32 = null;
156 this.__internal__cachegetUint8 = null;
157 this.__internal__heap = new Array(32)
158 .fill(undefined)
159 .concat(undefined, null, true, false);
160 this.__internal__heapNext = this.__internal__heap.length;
161 this.__internal__type = 'none';
162 this.__internal__wasm = null;
163 this.__internal__wasmError = null;
164 this.__internal__wasmPromise = null;
165 this.__internal__wbg = { ...new Wbg(this) };
166 }
167 get error() {
168 return this.__internal__wasmError;
169 }
170 get type() {
171 return this.__internal__type;
172 }
173 get wasm() {
174 return this.__internal__wasm;
175 }
176 async init(createWasm) {
177 if (!this.__internal__wasmPromise || createWasm) {
178 this.__internal__wasmPromise = (createWasm || this.__internal__createWasm)(this.__internal__wbg);
179 }
180 const { error, type, wasm } = await this.__internal__wasmPromise;
181 this.__internal__type = type;
182 this.__internal__wasm = wasm;
183 this.__internal__wasmError = error;
184 return this.__internal__wasm;
185 }
186 getObject(idx) {
187 return this.__internal__heap[idx];
188 }
189 dropObject(idx) {
190 if (idx < 36) {
191 return;
192 }
193 this.__internal__heap[idx] = this.__internal__heapNext;
194 this.__internal__heapNext = idx;
195 }
196 takeObject(idx) {
197 const ret = this.getObject(idx);
198 this.dropObject(idx);
199 return ret;
200 }
201 addObject(obj) {
202 if (this.__internal__heapNext === this.__internal__heap.length) {
203 this.__internal__heap.push(this.__internal__heap.length + 1);
204 }
205 const idx = this.__internal__heapNext;
206 this.__internal__heapNext = this.__internal__heap[idx];
207 this.__internal__heap[idx] = obj;
208 return idx;
209 }
210 getInt32() {
211 if (this.__internal__cachegetInt32 === null || this.__internal__cachegetInt32.buffer !== this.__internal__wasm.memory.buffer) {
212 this.__internal__cachegetInt32 = new Int32Array(this.__internal__wasm.memory.buffer);
213 }
214 return this.__internal__cachegetInt32;
215 }
216 getUint8() {
217 if (this.__internal__cachegetUint8 === null || this.__internal__cachegetUint8.buffer !== this.__internal__wasm.memory.buffer) {
218 this.__internal__cachegetUint8 = new Uint8Array(this.__internal__wasm.memory.buffer);
219 }
220 return this.__internal__cachegetUint8;
221 }
222 getU8a(ptr, len) {
223 return this.getUint8().subarray(ptr / 1, ptr / 1 + len);
224 }
225 getString(ptr, len) {
226 return util.u8aToString(this.getU8a(ptr, len));
227 }
228 allocU8a(arg) {
229 const ptr = this.__internal__wasm.__wbindgen_malloc(arg.length * 1);
230 this.getUint8().set(arg, ptr / 1);
231 return [ptr, arg.length];
232 }
233 allocString(arg) {
234 return this.allocU8a(util.stringToU8a(arg));
235 }
236 resultU8a() {
237 const r0 = this.getInt32()[8 / 4 + 0];
238 const r1 = this.getInt32()[8 / 4 + 1];
239 const ret = this.getU8a(r0, r1).slice();
240 this.__internal__wasm.__wbindgen_free(r0, r1 * 1);
241 return ret;
242 }
243 resultString() {
244 return util.u8aToString(this.resultU8a());
245 }
246 }
247
248 function createWasmFn(root, wasmBytes, asmFn) {
249 return async (wbg) => {
250 const result = {
251 error: null,
252 type: 'none',
253 wasm: null
254 };
255 try {
256 if (!wasmBytes?.length) {
257 throw new Error('No WebAssembly provided for initialization');
258 }
259 else if (typeof WebAssembly !== 'object' || typeof WebAssembly.instantiate !== 'function') {
260 throw new Error('WebAssembly is not available in your environment');
261 }
262 const source = await WebAssembly.instantiate(wasmBytes, { wbg });
263 result.wasm = source.instance.exports;
264 result.type = 'wasm';
265 }
266 catch (error) {
267 if (typeof asmFn === 'function') {
268 result.wasm = asmFn(wbg);
269 result.type = 'asm';
270 }
271 else {
272 result.error = `FATAL: Unable to initialize @polkadot/wasm-${root}:: ${error.message}`;
273 console.error(result.error);
274 }
275 }
276 return result;
277 };
278 }
279
280 const CHR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
281 const map = new Array(256);
282 for (let i = 0, count = CHR.length; i < count; i++) {
283 map[CHR.charCodeAt(i)] = i;
284 }
285 function base64Decode$1(data, out) {
286 let byte = 0;
287 let bits = 0;
288 let pos = -1;
289 for (let i = 0, last = out.length - 1; pos !== last; i++) {
290 byte = (byte << 6) | map[data.charCodeAt(i)];
291 if ((bits += 6) >= 8) {
292 out[++pos] = (byte >>> (bits -= 8)) & 0xff;
293 }
294 }
295 return out;
296 }
297
298 const u8 = Uint8Array, u16 = Uint16Array, u32$1 = Uint32Array;
299 const clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);
300 const fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);
301 const fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);
302 const freb = (eb, start) => {
303 const b = new u16(31);
304 for (let i = 0; i < 31; ++i) {
305 b[i] = start += 1 << eb[i - 1];
306 }
307 const r = new u32$1(b[30]);
308 for (let i = 1; i < 30; ++i) {
309 for (let j = b[i]; j < b[i + 1]; ++j) {
310 r[j] = ((j - b[i]) << 5) | i;
311 }
312 }
313 return [b, r];
314 };
315 const [fl, revfl] = freb(fleb, 2);
316 fl[28] = 258, revfl[258] = 28;
317 const [fd] = freb(fdeb, 0);
318 const rev = new u16(32768);
319 for (let i = 0; i < 32768; ++i) {
320 let x = ((i & 0xAAAA) >>> 1) | ((i & 0x5555) << 1);
321 x = ((x & 0xCCCC) >>> 2) | ((x & 0x3333) << 2);
322 x = ((x & 0xF0F0) >>> 4) | ((x & 0x0F0F) << 4);
323 rev[i] = (((x & 0xFF00) >>> 8) | ((x & 0x00FF) << 8)) >>> 1;
324 }
325 const hMap = ((cd, mb, r) => {
326 const s = cd.length;
327 let i = 0;
328 const l = new u16(mb);
329 for (; i < s; ++i) {
330 if (cd[i])
331 ++l[cd[i] - 1];
332 }
333 const le = new u16(mb);
334 for (i = 1; i < mb; ++i) {
335 le[i] = (le[i - 1] + l[i - 1]) << 1;
336 }
337 let co;
338 if (r) {
339 co = new u16(1 << mb);
340 const rvb = 15 - mb;
341 for (i = 0; i < s; ++i) {
342 if (cd[i]) {
343 const sv = (i << 4) | cd[i];
344 const r = mb - cd[i];
345 let v = le[cd[i] - 1]++ << r;
346 for (const m = v | ((1 << r) - 1); v <= m; ++v) {
347 co[rev[v] >> rvb] = sv;
348 }
349 }
350 }
351 }
352 else {
353 co = new u16(s);
354 for (i = 0; i < s; ++i) {
355 if (cd[i]) {
356 co[i] = rev[le[cd[i] - 1]++] >> (15 - cd[i]);
357 }
358 }
359 }
360 return co;
361 });
362 const flt = new u8(288);
363 for (let i = 0; i < 144; ++i)
364 flt[i] = 8;
365 for (let i = 144; i < 256; ++i)
366 flt[i] = 9;
367 for (let i = 256; i < 280; ++i)
368 flt[i] = 7;
369 for (let i = 280; i < 288; ++i)
370 flt[i] = 8;
371 const fdt = new u8(32);
372 for (let i = 0; i < 32; ++i)
373 fdt[i] = 5;
374 const flrm = hMap(flt, 9, 1);
375 const fdrm = hMap(fdt, 5, 1);
376 const bits = (d, p, m) => {
377 const o = p >>> 3;
378 return ((d[o] | (d[o + 1] << 8)) >>> (p & 7)) & m;
379 };
380 const bits16 = (d, p) => {
381 const o = p >>> 3;
382 return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >>> (p & 7));
383 };
384 const shft = (p) => (p >>> 3) + (p & 7 && 1);
385 const slc = (v, s, e) => {
386 if (s == null || s < 0)
387 s = 0;
388 if (e == null || e > v.length)
389 e = v.length;
390 const n = new (v instanceof u16 ? u16 : v instanceof u32$1 ? u32$1 : u8)(e - s);
391 n.set(v.subarray(s, e));
392 return n;
393 };
394 const max = (a) => {
395 let m = a[0];
396 for (let i = 1, count = a.length; i < count; ++i) {
397 if (a[i] > m)
398 m = a[i];
399 }
400 return m;
401 };
402 const inflt = (dat, buf, st) => {
403 const noSt = !st || st.i;
404 if (!st)
405 st = {};
406 const sl = dat.length;
407 const noBuf = !buf || !noSt;
408 if (!buf)
409 buf = new u8(sl * 3);
410 const cbuf = (l) => {
411 let bl = buf.length;
412 if (l > bl) {
413 const nbuf = new u8(Math.max(bl << 1, l));
414 nbuf.set(buf);
415 buf = nbuf;
416 }
417 };
418 let final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;
419 if (final && !lm)
420 return buf;
421 const tbts = sl << 3;
422 do {
423 if (!lm) {
424 st.f = final = bits(dat, pos, 1);
425 const type = bits(dat, pos + 1, 3);
426 pos += 3;
427 if (!type) {
428 const s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;
429 if (t > sl) {
430 if (noSt)
431 throw 'unexpected EOF';
432 break;
433 }
434 if (noBuf)
435 cbuf(bt + l);
436 buf.set(dat.subarray(s, t), bt);
437 st.b = bt += l, st.p = pos = t << 3;
438 continue;
439 }
440 else if (type == 1)
441 lm = flrm, dm = fdrm, lbt = 9, dbt = 5;
442 else if (type == 2) {
443 const hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;
444 const tl = hLit + bits(dat, pos + 5, 31) + 1;
445 pos += 14;
446 const ldt = new u8(tl);
447 const clt = new u8(19);
448 for (let i = 0; i < hcLen; ++i) {
449 clt[clim[i]] = bits(dat, pos + i * 3, 7);
450 }
451 pos += hcLen * 3;
452 const clb = max(clt), clbmsk = (1 << clb) - 1;
453 if (!noSt && pos + tl * (clb + 7) > tbts)
454 break;
455 const clm = hMap(clt, clb, 1);
456 for (let i = 0; i < tl;) {
457 const r = clm[bits(dat, pos, clbmsk)];
458 pos += r & 15;
459 const s = r >>> 4;
460 if (s < 16) {
461 ldt[i++] = s;
462 }
463 else {
464 let c = 0, n = 0;
465 if (s == 16)
466 n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];
467 else if (s == 17)
468 n = 3 + bits(dat, pos, 7), pos += 3;
469 else if (s == 18)
470 n = 11 + bits(dat, pos, 127), pos += 7;
471 while (n--)
472 ldt[i++] = c;
473 }
474 }
475 const lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);
476 lbt = max(lt);
477 dbt = max(dt);
478 lm = hMap(lt, lbt, 1);
479 dm = hMap(dt, dbt, 1);
480 }
481 else
482 throw 'invalid block type';
483 if (pos > tbts)
484 throw 'unexpected EOF';
485 }
486 if (noBuf)
487 cbuf(bt + 131072);
488 const lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;
489 const mxa = lbt + dbt + 18;
490 while (noSt || pos + mxa < tbts) {
491 const c = lm[bits16(dat, pos) & lms], sym = c >>> 4;
492 pos += c & 15;
493 if (pos > tbts)
494 throw 'unexpected EOF';
495 if (!c)
496 throw 'invalid length/literal';
497 if (sym < 256)
498 buf[bt++] = sym;
499 else if (sym == 256) {
500 lm = undefined;
501 break;
502 }
503 else {
504 let add = sym - 254;
505 if (sym > 264) {
506 const i = sym - 257, b = fleb[i];
507 add = bits(dat, pos, (1 << b) - 1) + fl[i];
508 pos += b;
509 }
510 const d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;
511 if (!d)
512 throw 'invalid distance';
513 pos += d & 15;
514 let dt = fd[dsym];
515 if (dsym > 3) {
516 const b = fdeb[dsym];
517 dt += bits16(dat, pos) & ((1 << b) - 1), pos += b;
518 }
519 if (pos > tbts)
520 throw 'unexpected EOF';
521 if (noBuf)
522 cbuf(bt + 131072);
523 const end = bt + add;
524 for (; bt < end; bt += 4) {
525 buf[bt] = buf[bt - dt];
526 buf[bt + 1] = buf[bt + 1 - dt];
527 buf[bt + 2] = buf[bt + 2 - dt];
528 buf[bt + 3] = buf[bt + 3 - dt];
529 }
530 bt = end;
531 }
532 }
533 st.l = lm, st.p = pos, st.b = bt;
534 if (lm)
535 final = 1, st.m = lbt, st.d = dm, st.n = dbt;
536 } while (!final);
537 return bt == buf.length ? buf : slc(buf, 0, bt);
538 };
539 const zlv = (d) => {
540 if ((d[0] & 15) != 8 || (d[0] >>> 4) > 7 || ((d[0] << 8 | d[1]) % 31))
541 throw 'invalid zlib data';
542 if (d[1] & 32)
543 throw 'invalid zlib data: preset dictionaries not supported';
544 };
545 function unzlibSync(data, out) {
546 return inflt((zlv(data), data.subarray(2, -4)), out);
547 }
548
549 var lenIn = 171008;
550 var lenOut = 339468;
551 var bytes_1 = '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';
552
553 const wasmBytes = unzlibSync(base64Decode$1(bytes_1, new Uint8Array(lenIn)), new Uint8Array(lenOut));
554
555 const createWasm = createWasmFn('crypto', wasmBytes, null);
556
557 const bridge = new Bridge(createWasm);
558 async function initBridge(createWasm) {
559 return bridge.init(createWasm);
560 }
561
562 function withWasm(fn) {
563 return (...params) => {
564 if (!bridge.wasm) {
565 throw new Error('The WASM interface has not been initialized. Ensure that you wait for the initialization Promise with waitReady() from @polkadot/wasm-crypto (or cryptoWaitReady() from @polkadot/util-crypto) before attempting to use WASM-only interfaces.');
566 }
567 return fn(bridge.wasm, ...params);
568 };
569 }
570 const bip39Generate = withWasm((wasm, words) => {
571 wasm.ext_bip39_generate(8, words);
572 return bridge.resultString();
573 });
574 const bip39ToEntropy = withWasm((wasm, phrase) => {
575 wasm.ext_bip39_to_entropy(8, ...bridge.allocString(phrase));
576 return bridge.resultU8a();
577 });
578 const bip39ToMiniSecret = withWasm((wasm, phrase, password) => {
579 wasm.ext_bip39_to_mini_secret(8, ...bridge.allocString(phrase), ...bridge.allocString(password));
580 return bridge.resultU8a();
581 });
582 const bip39ToSeed = withWasm((wasm, phrase, password) => {
583 wasm.ext_bip39_to_seed(8, ...bridge.allocString(phrase), ...bridge.allocString(password));
584 return bridge.resultU8a();
585 });
586 const bip39Validate = withWasm((wasm, phrase) => {
587 const ret = wasm.ext_bip39_validate(...bridge.allocString(phrase));
588 return ret !== 0;
589 });
590 const ed25519KeypairFromSeed = withWasm((wasm, seed) => {
591 wasm.ext_ed_from_seed(8, ...bridge.allocU8a(seed));
592 return bridge.resultU8a();
593 });
594 const ed25519Sign$1 = withWasm((wasm, pubkey, seckey, message) => {
595 wasm.ext_ed_sign(8, ...bridge.allocU8a(pubkey), ...bridge.allocU8a(seckey), ...bridge.allocU8a(message));
596 return bridge.resultU8a();
597 });
598 const ed25519Verify$1 = withWasm((wasm, signature, message, pubkey) => {
599 const ret = wasm.ext_ed_verify(...bridge.allocU8a(signature), ...bridge.allocU8a(message), ...bridge.allocU8a(pubkey));
600 return ret !== 0;
601 });
602 const secp256k1FromSeed = withWasm((wasm, seckey) => {
603 wasm.ext_secp_from_seed(8, ...bridge.allocU8a(seckey));
604 return bridge.resultU8a();
605 });
606 const secp256k1Compress$1 = withWasm((wasm, pubkey) => {
607 wasm.ext_secp_pub_compress(8, ...bridge.allocU8a(pubkey));
608 return bridge.resultU8a();
609 });
610 const secp256k1Expand$1 = withWasm((wasm, pubkey) => {
611 wasm.ext_secp_pub_expand(8, ...bridge.allocU8a(pubkey));
612 return bridge.resultU8a();
613 });
614 const secp256k1Recover$1 = withWasm((wasm, msgHash, sig, recovery) => {
615 wasm.ext_secp_recover(8, ...bridge.allocU8a(msgHash), ...bridge.allocU8a(sig), recovery);
616 return bridge.resultU8a();
617 });
618 const secp256k1Sign$1 = withWasm((wasm, msgHash, seckey) => {
619 wasm.ext_secp_sign(8, ...bridge.allocU8a(msgHash), ...bridge.allocU8a(seckey));
620 return bridge.resultU8a();
621 });
622 const sr25519DeriveKeypairHard = withWasm((wasm, pair, cc) => {
623 wasm.ext_sr_derive_keypair_hard(8, ...bridge.allocU8a(pair), ...bridge.allocU8a(cc));
624 return bridge.resultU8a();
625 });
626 const sr25519DeriveKeypairSoft = withWasm((wasm, pair, cc) => {
627 wasm.ext_sr_derive_keypair_soft(8, ...bridge.allocU8a(pair), ...bridge.allocU8a(cc));
628 return bridge.resultU8a();
629 });
630 const sr25519DerivePublicSoft = withWasm((wasm, pubkey, cc) => {
631 wasm.ext_sr_derive_public_soft(8, ...bridge.allocU8a(pubkey), ...bridge.allocU8a(cc));
632 return bridge.resultU8a();
633 });
634 const sr25519KeypairFromSeed = withWasm((wasm, seed) => {
635 wasm.ext_sr_from_seed(8, ...bridge.allocU8a(seed));
636 return bridge.resultU8a();
637 });
638 const sr25519Sign$1 = withWasm((wasm, pubkey, secret, message) => {
639 wasm.ext_sr_sign(8, ...bridge.allocU8a(pubkey), ...bridge.allocU8a(secret), ...bridge.allocU8a(message));
640 return bridge.resultU8a();
641 });
642 const sr25519Verify$1 = withWasm((wasm, signature, message, pubkey) => {
643 const ret = wasm.ext_sr_verify(...bridge.allocU8a(signature), ...bridge.allocU8a(message), ...bridge.allocU8a(pubkey));
644 return ret !== 0;
645 });
646 const sr25519Agree = withWasm((wasm, pubkey, secret) => {
647 wasm.ext_sr_agree(8, ...bridge.allocU8a(pubkey), ...bridge.allocU8a(secret));
648 return bridge.resultU8a();
649 });
650 const vrfSign = withWasm((wasm, secret, context, message, extra) => {
651 wasm.ext_vrf_sign(8, ...bridge.allocU8a(secret), ...bridge.allocU8a(context), ...bridge.allocU8a(message), ...bridge.allocU8a(extra));
652 return bridge.resultU8a();
653 });
654 const vrfVerify = withWasm((wasm, pubkey, context, message, extra, outAndProof) => {
655 const ret = wasm.ext_vrf_verify(...bridge.allocU8a(pubkey), ...bridge.allocU8a(context), ...bridge.allocU8a(message), ...bridge.allocU8a(extra), ...bridge.allocU8a(outAndProof));
656 return ret !== 0;
657 });
658 const blake2b$1 = withWasm((wasm, data, key, size) => {
659 wasm.ext_blake2b(8, ...bridge.allocU8a(data), ...bridge.allocU8a(key), size);
660 return bridge.resultU8a();
661 });
662 const hmacSha256 = withWasm((wasm, key, data) => {
663 wasm.ext_hmac_sha256(8, ...bridge.allocU8a(key), ...bridge.allocU8a(data));
664 return bridge.resultU8a();
665 });
666 const hmacSha512 = withWasm((wasm, key, data) => {
667 wasm.ext_hmac_sha512(8, ...bridge.allocU8a(key), ...bridge.allocU8a(data));
668 return bridge.resultU8a();
669 });
670 const keccak256 = withWasm((wasm, data) => {
671 wasm.ext_keccak256(8, ...bridge.allocU8a(data));
672 return bridge.resultU8a();
673 });
674 const keccak512 = withWasm((wasm, data) => {
675 wasm.ext_keccak512(8, ...bridge.allocU8a(data));
676 return bridge.resultU8a();
677 });
678 const pbkdf2$1 = withWasm((wasm, data, salt, rounds) => {
679 wasm.ext_pbkdf2(8, ...bridge.allocU8a(data), ...bridge.allocU8a(salt), rounds);
680 return bridge.resultU8a();
681 });
682 const scrypt$1 = withWasm((wasm, password, salt, log2n, r, p) => {
683 wasm.ext_scrypt(8, ...bridge.allocU8a(password), ...bridge.allocU8a(salt), log2n, r, p);
684 return bridge.resultU8a();
685 });
686 const sha256$1 = withWasm((wasm, data) => {
687 wasm.ext_sha256(8, ...bridge.allocU8a(data));
688 return bridge.resultU8a();
689 });
690 const sha512$1 = withWasm((wasm, data) => {
691 wasm.ext_sha512(8, ...bridge.allocU8a(data));
692 return bridge.resultU8a();
693 });
694 const twox = withWasm((wasm, data, rounds) => {
695 wasm.ext_twox(8, ...bridge.allocU8a(data), rounds);
696 return bridge.resultU8a();
697 });
698 function isReady() {
699 return !!bridge.wasm;
700 }
701 async function waitReady() {
702 try {
703 const wasm = await initBridge();
704 return !!wasm;
705 }
706 catch {
707 return false;
708 }
709 }
710
711 const cryptoIsReady = isReady;
712 function cryptoWaitReady() {
713 return waitReady()
714 .then(() => {
715 if (!isReady()) {
716 throw new Error('Unable to initialize @polkadot/util-crypto');
717 }
718 return true;
719 })
720 .catch(() => false);
721 }
722
723 cryptoWaitReady().catch(() => {
724 });
725
726 const packageInfo = { name: '@polkadot/util-crypto', path: (({ url: (typeof document === 'undefined' && typeof location === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : typeof document === 'undefined' ? location.href : (_documentCurrentScript && _documentCurrentScript.src || new URL('bundle-polkadot-util-crypto.js', document.baseURI).href)) }) && (typeof document === 'undefined' && typeof location === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : typeof document === 'undefined' ? location.href : (_documentCurrentScript && _documentCurrentScript.src || new URL('bundle-polkadot-util-crypto.js', document.baseURI).href))) ? new URL((typeof document === 'undefined' && typeof location === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : typeof document === 'undefined' ? location.href : (_documentCurrentScript && _documentCurrentScript.src || new URL('bundle-polkadot-util-crypto.js', document.baseURI).href))).pathname.substring(0, new URL((typeof document === 'undefined' && typeof location === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : typeof document === 'undefined' ? location.href : (_documentCurrentScript && _documentCurrentScript.src || new URL('bundle-polkadot-util-crypto.js', document.baseURI).href))).pathname.lastIndexOf('/') + 1) : 'auto', type: 'esm', version: '13.2.3' };
727
728 /*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) */
729 function assertNumber(n) {
730 if (!Number.isSafeInteger(n))
731 throw new Error(`Wrong integer: ${n}`);
732 }
733 function isBytes$3(a) {
734 return (a instanceof Uint8Array ||
735 (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array'));
736 }
737 function chain(...args) {
738 const id = (a) => a;
739 const wrap = (a, b) => (c) => a(b(c));
740 const encode = args.map((x) => x.encode).reduceRight(wrap, id);
741 const decode = args.map((x) => x.decode).reduce(wrap, id);
742 return { encode, decode };
743 }
744 function alphabet(alphabet) {
745 return {
746 encode: (digits) => {
747 if (!Array.isArray(digits) || (digits.length && typeof digits[0] !== 'number'))
748 throw new Error('alphabet.encode input should be an array of numbers');
749 return digits.map((i) => {
750 assertNumber(i);
751 if (i < 0 || i >= alphabet.length)
752 throw new Error(`Digit index outside alphabet: ${i} (alphabet: ${alphabet.length})`);
753 return alphabet[i];
754 });
755 },
756 decode: (input) => {
757 if (!Array.isArray(input) || (input.length && typeof input[0] !== 'string'))
758 throw new Error('alphabet.decode input should be array of strings');
759 return input.map((letter) => {
760 if (typeof letter !== 'string')
761 throw new Error(`alphabet.decode: not string element=${letter}`);
762 const index = alphabet.indexOf(letter);
763 if (index === -1)
764 throw new Error(`Unknown letter: "${letter}". Allowed: ${alphabet}`);
765 return index;
766 });
767 },
768 };
769 }
770 function join(separator = '') {
771 if (typeof separator !== 'string')
772 throw new Error('join separator should be string');
773 return {
774 encode: (from) => {
775 if (!Array.isArray(from) || (from.length && typeof from[0] !== 'string'))
776 throw new Error('join.encode input should be array of strings');
777 for (let i of from)
778 if (typeof i !== 'string')
779 throw new Error(`join.encode: non-string input=${i}`);
780 return from.join(separator);
781 },
782 decode: (to) => {
783 if (typeof to !== 'string')
784 throw new Error('join.decode input should be string');
785 return to.split(separator);
786 },
787 };
788 }
789 function padding(bits, chr = '=') {
790 assertNumber(bits);
791 if (typeof chr !== 'string')
792 throw new Error('padding chr should be string');
793 return {
794 encode(data) {
795 if (!Array.isArray(data) || (data.length && typeof data[0] !== 'string'))
796 throw new Error('padding.encode input should be array of strings');
797 for (let i of data)
798 if (typeof i !== 'string')
799 throw new Error(`padding.encode: non-string input=${i}`);
800 while ((data.length * bits) % 8)
801 data.push(chr);
802 return data;
803 },
804 decode(input) {
805 if (!Array.isArray(input) || (input.length && typeof input[0] !== 'string'))
806 throw new Error('padding.encode input should be array of strings');
807 for (let i of input)
808 if (typeof i !== 'string')
809 throw new Error(`padding.decode: non-string input=${i}`);
810 let end = input.length;
811 if ((end * bits) % 8)
812 throw new Error('Invalid padding: string should have whole number of bytes');
813 for (; end > 0 && input[end - 1] === chr; end--) {
814 if (!(((end - 1) * bits) % 8))
815 throw new Error('Invalid padding: string has too much padding');
816 }
817 return input.slice(0, end);
818 },
819 };
820 }
821 function normalize$1(fn) {
822 if (typeof fn !== 'function')
823 throw new Error('normalize fn should be function');
824 return { encode: (from) => from, decode: (to) => fn(to) };
825 }
826 function convertRadix(data, from, to) {
827 if (from < 2)
828 throw new Error(`convertRadix: wrong from=${from}, base cannot be less than 2`);
829 if (to < 2)
830 throw new Error(`convertRadix: wrong to=${to}, base cannot be less than 2`);
831 if (!Array.isArray(data))
832 throw new Error('convertRadix: data should be array');
833 if (!data.length)
834 return [];
835 let pos = 0;
836 const res = [];
837 const digits = Array.from(data);
838 digits.forEach((d) => {
839 assertNumber(d);
840 if (d < 0 || d >= from)
841 throw new Error(`Wrong integer: ${d}`);
842 });
843 while (true) {
844 let carry = 0;
845 let done = true;
846 for (let i = pos; i < digits.length; i++) {
847 const digit = digits[i];
848 const digitBase = from * carry + digit;
849 if (!Number.isSafeInteger(digitBase) ||
850 (from * carry) / from !== carry ||
851 digitBase - digit !== from * carry) {
852 throw new Error('convertRadix: carry overflow');
853 }
854 carry = digitBase % to;
855 const rounded = Math.floor(digitBase / to);
856 digits[i] = rounded;
857 if (!Number.isSafeInteger(rounded) || rounded * to + carry !== digitBase)
858 throw new Error('convertRadix: carry overflow');
859 if (!done)
860 continue;
861 else if (!rounded)
862 pos = i;
863 else
864 done = false;
865 }
866 res.push(carry);
867 if (done)
868 break;
869 }
870 for (let i = 0; i < data.length - 1 && data[i] === 0; i++)
871 res.push(0);
872 return res.reverse();
873 }
874 const gcd = (a, b) => (!b ? a : gcd(b, a % b));
875 const radix2carry = (from, to) => from + (to - gcd(from, to));
876 function convertRadix2(data, from, to, padding) {
877 if (!Array.isArray(data))
878 throw new Error('convertRadix2: data should be array');
879 if (from <= 0 || from > 32)
880 throw new Error(`convertRadix2: wrong from=${from}`);
881 if (to <= 0 || to > 32)
882 throw new Error(`convertRadix2: wrong to=${to}`);
883 if (radix2carry(from, to) > 32) {
884 throw new Error(`convertRadix2: carry overflow from=${from} to=${to} carryBits=${radix2carry(from, to)}`);
885 }
886 let carry = 0;
887 let pos = 0;
888 const mask = 2 ** to - 1;
889 const res = [];
890 for (const n of data) {
891 assertNumber(n);
892 if (n >= 2 ** from)
893 throw new Error(`convertRadix2: invalid data word=${n} from=${from}`);
894 carry = (carry << from) | n;
895 if (pos + from > 32)
896 throw new Error(`convertRadix2: carry overflow pos=${pos} from=${from}`);
897 pos += from;
898 for (; pos >= to; pos -= to)
899 res.push(((carry >> (pos - to)) & mask) >>> 0);
900 carry &= 2 ** pos - 1;
901 }
902 carry = (carry << (to - pos)) & mask;
903 if (!padding && pos >= from)
904 throw new Error('Excess padding');
905 if (!padding && carry)
906 throw new Error(`Non-zero padding: ${carry}`);
907 if (padding && pos > 0)
908 res.push(carry >>> 0);
909 return res;
910 }
911 function radix(num) {
912 assertNumber(num);
913 return {
914 encode: (bytes) => {
915 if (!isBytes$3(bytes))
916 throw new Error('radix.encode input should be Uint8Array');
917 return convertRadix(Array.from(bytes), 2 ** 8, num);
918 },
919 decode: (digits) => {
920 if (!Array.isArray(digits) || (digits.length && typeof digits[0] !== 'number'))
921 throw new Error('radix.decode input should be array of numbers');
922 return Uint8Array.from(convertRadix(digits, num, 2 ** 8));
923 },
924 };
925 }
926 function radix2(bits, revPadding = false) {
927 assertNumber(bits);
928 if (bits <= 0 || bits > 32)
929 throw new Error('radix2: bits should be in (0..32]');
930 if (radix2carry(8, bits) > 32 || radix2carry(bits, 8) > 32)
931 throw new Error('radix2: carry overflow');
932 return {
933 encode: (bytes) => {
934 if (!isBytes$3(bytes))
935 throw new Error('radix2.encode input should be Uint8Array');
936 return convertRadix2(Array.from(bytes), 8, bits, !revPadding);
937 },
938 decode: (digits) => {
939 if (!Array.isArray(digits) || (digits.length && typeof digits[0] !== 'number'))
940 throw new Error('radix2.decode input should be array of numbers');
941 return Uint8Array.from(convertRadix2(digits, bits, 8, revPadding));
942 },
943 };
944 }
945 function unsafeWrapper(fn) {
946 if (typeof fn !== 'function')
947 throw new Error('unsafeWrapper fn should be function');
948 return function (...args) {
949 try {
950 return fn.apply(null, args);
951 }
952 catch (e) { }
953 };
954 }
955 function checksum(len, fn) {
956 assertNumber(len);
957 if (typeof fn !== 'function')
958 throw new Error('checksum fn should be function');
959 return {
960 encode(data) {
961 if (!isBytes$3(data))
962 throw new Error('checksum.encode: input should be Uint8Array');
963 const checksum = fn(data).slice(0, len);
964 const res = new Uint8Array(data.length + len);
965 res.set(data);
966 res.set(checksum, data.length);
967 return res;
968 },
969 decode(data) {
970 if (!isBytes$3(data))
971 throw new Error('checksum.decode: input should be Uint8Array');
972 const payload = data.slice(0, -len);
973 const newChecksum = fn(payload).slice(0, len);
974 const oldChecksum = data.slice(-len);
975 for (let i = 0; i < len; i++)
976 if (newChecksum[i] !== oldChecksum[i])
977 throw new Error('Invalid checksum');
978 return payload;
979 },
980 };
981 }
982 const utils = {
983 alphabet, chain, checksum, convertRadix, convertRadix2, radix, radix2, join, padding,
984 };
985 chain(radix2(4), alphabet('0123456789ABCDEF'), join(''));
986 chain(radix2(5), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'), padding(5), join(''));
987 chain(radix2(5), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'), join(''));
988 chain(radix2(5), alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'), padding(5), join(''));
989 chain(radix2(5), alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'), join(''));
990 chain(radix2(5), alphabet('0123456789ABCDEFGHJKMNPQRSTVWXYZ'), join(''), normalize$1((s) => s.toUpperCase().replace(/O/g, '0').replace(/[IL]/g, '1')));
991 const base64 = chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'), padding(6), join(''));
992 chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'), join(''));
993 chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'), padding(6), join(''));
994 chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'), join(''));
995 const genBase58 = (abc) => chain(radix(58), alphabet(abc), join(''));
996 const base58 = genBase58('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz');
997 genBase58('123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ');
998 genBase58('rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz');
999 const BECH_ALPHABET = chain(alphabet('qpzry9x8gf2tvdw0s3jn54khce6mua7l'), join(''));
1000 const POLYMOD_GENERATORS = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];
1001 function bech32Polymod(pre) {
1002 const b = pre >> 25;
1003 let chk = (pre & 0x1ffffff) << 5;
1004 for (let i = 0; i < POLYMOD_GENERATORS.length; i++) {
1005 if (((b >> i) & 1) === 1)
1006 chk ^= POLYMOD_GENERATORS[i];
1007 }
1008 return chk;
1009 }
1010 function bechChecksum(prefix, words, encodingConst = 1) {
1011 const len = prefix.length;
1012 let chk = 1;
1013 for (let i = 0; i < len; i++) {
1014 const c = prefix.charCodeAt(i);
1015 if (c < 33 || c > 126)
1016 throw new Error(`Invalid prefix (${prefix})`);
1017 chk = bech32Polymod(chk) ^ (c >> 5);
1018 }
1019 chk = bech32Polymod(chk);
1020 for (let i = 0; i < len; i++)
1021 chk = bech32Polymod(chk) ^ (prefix.charCodeAt(i) & 0x1f);
1022 for (let v of words)
1023 chk = bech32Polymod(chk) ^ v;
1024 for (let i = 0; i < 6; i++)
1025 chk = bech32Polymod(chk);
1026 chk ^= encodingConst;
1027 return BECH_ALPHABET.encode(convertRadix2([chk % 2 ** 30], 30, 5, false));
1028 }
1029 function genBech32(encoding) {
1030 const ENCODING_CONST = encoding === 'bech32' ? 1 : 0x2bc830a3;
1031 const _words = radix2(5);
1032 const fromWords = _words.decode;
1033 const toWords = _words.encode;
1034 const fromWordsUnsafe = unsafeWrapper(fromWords);
1035 function encode(prefix, words, limit = 90) {
1036 if (typeof prefix !== 'string')
1037 throw new Error(`bech32.encode prefix should be string, not ${typeof prefix}`);
1038 if (!Array.isArray(words) || (words.length && typeof words[0] !== 'number'))
1039 throw new Error(`bech32.encode words should be array of numbers, not ${typeof words}`);
1040 if (prefix.length === 0)
1041 throw new TypeError(`Invalid prefix length ${prefix.length}`);
1042 const actualLength = prefix.length + 7 + words.length;
1043 if (limit !== false && actualLength > limit)
1044 throw new TypeError(`Length ${actualLength} exceeds limit ${limit}`);
1045 const lowered = prefix.toLowerCase();
1046 const sum = bechChecksum(lowered, words, ENCODING_CONST);
1047 return `${lowered}1${BECH_ALPHABET.encode(words)}${sum}`;
1048 }
1049 function decode(str, limit = 90) {
1050 if (typeof str !== 'string')
1051 throw new Error(`bech32.decode input should be string, not ${typeof str}`);
1052 if (str.length < 8 || (limit !== false && str.length > limit))
1053 throw new TypeError(`Wrong string length: ${str.length} (${str}). Expected (8..${limit})`);
1054 const lowered = str.toLowerCase();
1055 if (str !== lowered && str !== str.toUpperCase())
1056 throw new Error(`String must be lowercase or uppercase`);
1057 const sepIndex = lowered.lastIndexOf('1');
1058 if (sepIndex === 0 || sepIndex === -1)
1059 throw new Error(`Letter "1" must be present between prefix and data only`);
1060 const prefix = lowered.slice(0, sepIndex);
1061 const data = lowered.slice(sepIndex + 1);
1062 if (data.length < 6)
1063 throw new Error('Data must be at least 6 characters long');
1064 const words = BECH_ALPHABET.decode(data).slice(0, -6);
1065 const sum = bechChecksum(prefix, words, ENCODING_CONST);
1066 if (!data.endsWith(sum))
1067 throw new Error(`Invalid checksum in ${str}: expected "${sum}"`);
1068 return { prefix, words };
1069 }
1070 const decodeUnsafe = unsafeWrapper(decode);
1071 function decodeToBytes(str) {
1072 const { prefix, words } = decode(str, false);
1073 return { prefix, words, bytes: fromWords(words) };
1074 }
1075 return { encode, decode, decodeToBytes, decodeUnsafe, fromWords, fromWordsUnsafe, toWords };
1076 }
1077 genBech32('bech32');
1078 genBech32('bech32m');
1079 chain(radix2(4), alphabet('0123456789abcdef'), join(''), normalize$1((s) => {
1080 if (typeof s !== 'string' || s.length % 2)
1081 throw new TypeError(`hex.decode: expected string, got ${typeof s} with length ${s.length}`);
1082 return s.toLowerCase();
1083 }));
1084
1085 function createDecode({ coder, ipfs }, validate) {
1086 return (value, ipfsCompat) => {
1087 validate(value, ipfsCompat);
1088 return coder.decode(ipfs && ipfsCompat
1089 ? value.substring(1)
1090 : value);
1091 };
1092 }
1093 function createEncode({ coder, ipfs }) {
1094 return (value, ipfsCompat) => {
1095 const out = coder.encode(util.u8aToU8a(value));
1096 return ipfs && ipfsCompat
1097 ? `${ipfs}${out}`
1098 : out;
1099 };
1100 }
1101 function createIs(validate) {
1102 return (value, ipfsCompat) => {
1103 try {
1104 return validate(value, ipfsCompat);
1105 }
1106 catch {
1107 return false;
1108 }
1109 };
1110 }
1111 function createValidate({ chars, ipfs, type, withPadding }) {
1112 return (value, ipfsCompat) => {
1113 if (typeof value !== 'string') {
1114 throw new Error(`Expected ${type} string input`);
1115 }
1116 else if (ipfs && ipfsCompat && !value.startsWith(ipfs)) {
1117 throw new Error(`Expected ipfs-compatible ${type} to start with '${ipfs}'`);
1118 }
1119 for (let i = (ipfsCompat ? 1 : 0), count = value.length; i < count; i++) {
1120 if (chars.includes(value[i])) ;
1121 else if (withPadding && value[i] === '=') {
1122 if (i === count - 1) ;
1123 else if (value[i + 1] === '=') ;
1124 else {
1125 throw new Error(`Invalid ${type} padding sequence "${value[i]}${value[i + 1]}" at index ${i}`);
1126 }
1127 }
1128 else {
1129 throw new Error(`Invalid ${type} character "${value[i]}" (0x${value.charCodeAt(i).toString(16)}) at index ${i}`);
1130 }
1131 }
1132 return true;
1133 };
1134 }
1135
1136 const config$2 = {
1137 chars: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz',
1138 coder: base58,
1139 ipfs: 'z',
1140 type: 'base58'
1141 };
1142 const base58Validate = createValidate(config$2);
1143 const base58Decode = createDecode(config$2, base58Validate);
1144 const base58Encode = createEncode(config$2);
1145 const isBase58 = createIs(base58Validate);
1146
1147 function number(n) {
1148 if (!Number.isSafeInteger(n) || n < 0)
1149 throw new Error(`Wrong positive integer: ${n}`);
1150 }
1151 function isBytes$2(a) {
1152 return (a instanceof Uint8Array ||
1153 (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array'));
1154 }
1155 function bytes(b, ...lengths) {
1156 if (!isBytes$2(b))
1157 throw new Error('Expected Uint8Array');
1158 if (lengths.length > 0 && !lengths.includes(b.length))
1159 throw new Error(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);
1160 }
1161 function hash(hash) {
1162 if (typeof hash !== 'function' || typeof hash.create !== 'function')
1163 throw new Error('Hash should be wrapped by utils.wrapConstructor');
1164 number(hash.outputLen);
1165 number(hash.blockLen);
1166 }
1167 function exists(instance, checkFinished = true) {
1168 if (instance.destroyed)
1169 throw new Error('Hash instance has been destroyed');
1170 if (checkFinished && instance.finished)
1171 throw new Error('Hash#digest() has already been called');
1172 }
1173 function output(out, instance) {
1174 bytes(out);
1175 const min = instance.outputLen;
1176 if (out.length < min) {
1177 throw new Error(`digestInto() expects output buffer of length at least ${min}`);
1178 }
1179 }
1180
1181 const crypto = typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;
1182
1183 /*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
1184 const u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));
1185 function isBytes$1(a) {
1186 return (a instanceof Uint8Array ||
1187 (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array'));
1188 }
1189 const createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);
1190 const rotr = (word, shift) => (word << (32 - shift)) | (word >>> shift);
1191 const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;
1192 if (!isLE)
1193 throw new Error('Non little-endian hardware is not supported');
1194 Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));
1195 function utf8ToBytes$1(str) {
1196 if (typeof str !== 'string')
1197 throw new Error(`utf8ToBytes expected string, got ${typeof str}`);
1198 return new Uint8Array(new TextEncoder().encode(str));
1199 }
1200 function toBytes(data) {
1201 if (typeof data === 'string')
1202 data = utf8ToBytes$1(data);
1203 if (!isBytes$1(data))
1204 throw new Error(`expected Uint8Array, got ${typeof data}`);
1205 return data;
1206 }
1207 function concatBytes$1(...arrays) {
1208 let sum = 0;
1209 for (let i = 0; i < arrays.length; i++) {
1210 const a = arrays[i];
1211 if (!isBytes$1(a))
1212 throw new Error('Uint8Array expected');
1213 sum += a.length;
1214 }
1215 const res = new Uint8Array(sum);
1216 for (let i = 0, pad = 0; i < arrays.length; i++) {
1217 const a = arrays[i];
1218 res.set(a, pad);
1219 pad += a.length;
1220 }
1221 return res;
1222 }
1223 class Hash {
1224 clone() {
1225 return this._cloneInto();
1226 }
1227 }
1228 const toStr = {}.toString;
1229 function checkOpts(defaults, opts) {
1230 if (opts !== undefined && toStr.call(opts) !== '[object Object]')
1231 throw new Error('Options should be object or undefined');
1232 const merged = Object.assign(defaults, opts);
1233 return merged;
1234 }
1235 function wrapConstructor(hashCons) {
1236 const hashC = (msg) => hashCons().update(toBytes(msg)).digest();
1237 const tmp = hashCons();
1238 hashC.outputLen = tmp.outputLen;
1239 hashC.blockLen = tmp.blockLen;
1240 hashC.create = () => hashCons();
1241 return hashC;
1242 }
1243 function wrapConstructorWithOpts(hashCons) {
1244 const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();
1245 const tmp = hashCons({});
1246 hashC.outputLen = tmp.outputLen;
1247 hashC.blockLen = tmp.blockLen;
1248 hashC.create = (opts) => hashCons(opts);
1249 return hashC;
1250 }
1251 function wrapXOFConstructorWithOpts(hashCons) {
1252 const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();
1253 const tmp = hashCons({});
1254 hashC.outputLen = tmp.outputLen;
1255 hashC.blockLen = tmp.blockLen;
1256 hashC.create = (opts) => hashCons(opts);
1257 return hashC;
1258 }
1259 function randomBytes(bytesLength = 32) {
1260 if (crypto && typeof crypto.getRandomValues === 'function') {
1261 return crypto.getRandomValues(new Uint8Array(bytesLength));
1262 }
1263 throw new Error('crypto.getRandomValues must be defined');
1264 }
1265
1266 const SIGMA = new Uint8Array([
1267 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
1268 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,
1269 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4,
1270 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8,
1271 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13,
1272 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9,
1273 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11,
1274 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10,
1275 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5,
1276 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0,
1277 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
1278 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,
1279 ]);
1280 class BLAKE2 extends Hash {
1281 constructor(blockLen, outputLen, opts = {}, keyLen, saltLen, persLen) {
1282 super();
1283 this.blockLen = blockLen;
1284 this.outputLen = outputLen;
1285 this.length = 0;
1286 this.pos = 0;
1287 this.finished = false;
1288 this.destroyed = false;
1289 number(blockLen);
1290 number(outputLen);
1291 number(keyLen);
1292 if (outputLen < 0 || outputLen > keyLen)
1293 throw new Error('outputLen bigger than keyLen');
1294 if (opts.key !== undefined && (opts.key.length < 1 || opts.key.length > keyLen))
1295 throw new Error(`key must be up 1..${keyLen} byte long or undefined`);
1296 if (opts.salt !== undefined && opts.salt.length !== saltLen)
1297 throw new Error(`salt must be ${saltLen} byte long or undefined`);
1298 if (opts.personalization !== undefined && opts.personalization.length !== persLen)
1299 throw new Error(`personalization must be ${persLen} byte long or undefined`);
1300 this.buffer32 = u32((this.buffer = new Uint8Array(blockLen)));
1301 }
1302 update(data) {
1303 exists(this);
1304 const { blockLen, buffer, buffer32 } = this;
1305 data = toBytes(data);
1306 const len = data.length;
1307 const offset = data.byteOffset;
1308 const buf = data.buffer;
1309 for (let pos = 0; pos < len;) {
1310 if (this.pos === blockLen) {
1311 this.compress(buffer32, 0, false);
1312 this.pos = 0;
1313 }
1314 const take = Math.min(blockLen - this.pos, len - pos);
1315 const dataOffset = offset + pos;
1316 if (take === blockLen && !(dataOffset % 4) && pos + take < len) {
1317 const data32 = new Uint32Array(buf, dataOffset, Math.floor((len - pos) / 4));
1318 for (let pos32 = 0; pos + blockLen < len; pos32 += buffer32.length, pos += blockLen) {
1319 this.length += blockLen;
1320 this.compress(data32, pos32, false);
1321 }
1322 continue;
1323 }
1324 buffer.set(data.subarray(pos, pos + take), this.pos);
1325 this.pos += take;
1326 this.length += take;
1327 pos += take;
1328 }
1329 return this;
1330 }
1331 digestInto(out) {
1332 exists(this);
1333 output(out, this);
1334 const { pos, buffer32 } = this;
1335 this.finished = true;
1336 this.buffer.subarray(pos).fill(0);
1337 this.compress(buffer32, 0, true);
1338 const out32 = u32(out);
1339 this.get().forEach((v, i) => (out32[i] = v));
1340 }
1341 digest() {
1342 const { buffer, outputLen } = this;
1343 this.digestInto(buffer);
1344 const res = buffer.slice(0, outputLen);
1345 this.destroy();
1346 return res;
1347 }
1348 _cloneInto(to) {
1349 const { buffer, length, finished, destroyed, outputLen, pos } = this;
1350 to || (to = new this.constructor({ dkLen: outputLen }));
1351 to.set(...this.get());
1352 to.length = length;
1353 to.finished = finished;
1354 to.destroyed = destroyed;
1355 to.outputLen = outputLen;
1356 to.buffer.set(buffer);
1357 to.pos = pos;
1358 return to;
1359 }
1360 }
1361
1362 const U32_MASK64 = BigInt(2 ** 32 - 1);
1363 const _32n$1 = BigInt(32);
1364 function fromBig(n, le = false) {
1365 if (le)
1366 return { h: Number(n & U32_MASK64), l: Number((n >> _32n$1) & U32_MASK64) };
1367 return { h: Number((n >> _32n$1) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };
1368 }
1369 function split(lst, le = false) {
1370 let Ah = new Uint32Array(lst.length);
1371 let Al = new Uint32Array(lst.length);
1372 for (let i = 0; i < lst.length; i++) {
1373 const { h, l } = fromBig(lst[i], le);
1374 [Ah[i], Al[i]] = [h, l];
1375 }
1376 return [Ah, Al];
1377 }
1378 const toBig = (h, l) => (BigInt(h >>> 0) << _32n$1) | BigInt(l >>> 0);
1379 const shrSH = (h, _l, s) => h >>> s;
1380 const shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);
1381 const rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));
1382 const rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);
1383 const rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));
1384 const rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));
1385 const rotr32H = (_h, l) => l;
1386 const rotr32L = (h, _l) => h;
1387 const rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));
1388 const rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));
1389 const rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));
1390 const rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));
1391 function add(Ah, Al, Bh, Bl) {
1392 const l = (Al >>> 0) + (Bl >>> 0);
1393 return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };
1394 }
1395 const add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);
1396 const add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;
1397 const add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);
1398 const add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;
1399 const add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);
1400 const add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;
1401 const u64 = {
1402 fromBig, split, toBig,
1403 shrSH, shrSL,
1404 rotrSH, rotrSL, rotrBH, rotrBL,
1405 rotr32H, rotr32L,
1406 rotlSH, rotlSL, rotlBH, rotlBL,
1407 add, add3L, add3H, add4L, add4H, add5H, add5L,
1408 };
1409
1410 const IV$1 = new Uint32Array([
1411 0xf3bcc908, 0x6a09e667, 0x84caa73b, 0xbb67ae85, 0xfe94f82b, 0x3c6ef372, 0x5f1d36f1, 0xa54ff53a,
1412 0xade682d1, 0x510e527f, 0x2b3e6c1f, 0x9b05688c, 0xfb41bd6b, 0x1f83d9ab, 0x137e2179, 0x5be0cd19
1413 ]);
1414 const BUF = new Uint32Array(32);
1415 function G1(a, b, c, d, msg, x) {
1416 const Xl = msg[x], Xh = msg[x + 1];
1417 let Al = BUF[2 * a], Ah = BUF[2 * a + 1];
1418 let Bl = BUF[2 * b], Bh = BUF[2 * b + 1];
1419 let Cl = BUF[2 * c], Ch = BUF[2 * c + 1];
1420 let Dl = BUF[2 * d], Dh = BUF[2 * d + 1];
1421 let ll = u64.add3L(Al, Bl, Xl);
1422 Ah = u64.add3H(ll, Ah, Bh, Xh);
1423 Al = ll | 0;
1424 ({ Dh, Dl } = { Dh: Dh ^ Ah, Dl: Dl ^ Al });
1425 ({ Dh, Dl } = { Dh: u64.rotr32H(Dh, Dl), Dl: u64.rotr32L(Dh, Dl) });
1426 ({ h: Ch, l: Cl } = u64.add(Ch, Cl, Dh, Dl));
1427 ({ Bh, Bl } = { Bh: Bh ^ Ch, Bl: Bl ^ Cl });
1428 ({ Bh, Bl } = { Bh: u64.rotrSH(Bh, Bl, 24), Bl: u64.rotrSL(Bh, Bl, 24) });
1429 (BUF[2 * a] = Al), (BUF[2 * a + 1] = Ah);
1430 (BUF[2 * b] = Bl), (BUF[2 * b + 1] = Bh);
1431 (BUF[2 * c] = Cl), (BUF[2 * c + 1] = Ch);
1432 (BUF[2 * d] = Dl), (BUF[2 * d + 1] = Dh);
1433 }
1434 function G2(a, b, c, d, msg, x) {
1435 const Xl = msg[x], Xh = msg[x + 1];
1436 let Al = BUF[2 * a], Ah = BUF[2 * a + 1];
1437 let Bl = BUF[2 * b], Bh = BUF[2 * b + 1];
1438 let Cl = BUF[2 * c], Ch = BUF[2 * c + 1];
1439 let Dl = BUF[2 * d], Dh = BUF[2 * d + 1];
1440 let ll = u64.add3L(Al, Bl, Xl);
1441 Ah = u64.add3H(ll, Ah, Bh, Xh);
1442 Al = ll | 0;
1443 ({ Dh, Dl } = { Dh: Dh ^ Ah, Dl: Dl ^ Al });
1444 ({ Dh, Dl } = { Dh: u64.rotrSH(Dh, Dl, 16), Dl: u64.rotrSL(Dh, Dl, 16) });
1445 ({ h: Ch, l: Cl } = u64.add(Ch, Cl, Dh, Dl));
1446 ({ Bh, Bl } = { Bh: Bh ^ Ch, Bl: Bl ^ Cl });
1447 ({ Bh, Bl } = { Bh: u64.rotrBH(Bh, Bl, 63), Bl: u64.rotrBL(Bh, Bl, 63) });
1448 (BUF[2 * a] = Al), (BUF[2 * a + 1] = Ah);
1449 (BUF[2 * b] = Bl), (BUF[2 * b + 1] = Bh);
1450 (BUF[2 * c] = Cl), (BUF[2 * c + 1] = Ch);
1451 (BUF[2 * d] = Dl), (BUF[2 * d + 1] = Dh);
1452 }
1453 class BLAKE2b extends BLAKE2 {
1454 constructor(opts = {}) {
1455 super(128, opts.dkLen === undefined ? 64 : opts.dkLen, opts, 64, 16, 16);
1456 this.v0l = IV$1[0] | 0;
1457 this.v0h = IV$1[1] | 0;
1458 this.v1l = IV$1[2] | 0;
1459 this.v1h = IV$1[3] | 0;
1460 this.v2l = IV$1[4] | 0;
1461 this.v2h = IV$1[5] | 0;
1462 this.v3l = IV$1[6] | 0;
1463 this.v3h = IV$1[7] | 0;
1464 this.v4l = IV$1[8] | 0;
1465 this.v4h = IV$1[9] | 0;
1466 this.v5l = IV$1[10] | 0;
1467 this.v5h = IV$1[11] | 0;
1468 this.v6l = IV$1[12] | 0;
1469 this.v6h = IV$1[13] | 0;
1470 this.v7l = IV$1[14] | 0;
1471 this.v7h = IV$1[15] | 0;
1472 const keyLength = opts.key ? opts.key.length : 0;
1473 this.v0l ^= this.outputLen | (keyLength << 8) | (0x01 << 16) | (0x01 << 24);
1474 if (opts.salt) {
1475 const salt = u32(toBytes(opts.salt));
1476 this.v4l ^= salt[0];
1477 this.v4h ^= salt[1];
1478 this.v5l ^= salt[2];
1479 this.v5h ^= salt[3];
1480 }
1481 if (opts.personalization) {
1482 const pers = u32(toBytes(opts.personalization));
1483 this.v6l ^= pers[0];
1484 this.v6h ^= pers[1];
1485 this.v7l ^= pers[2];
1486 this.v7h ^= pers[3];
1487 }
1488 if (opts.key) {
1489 const tmp = new Uint8Array(this.blockLen);
1490 tmp.set(toBytes(opts.key));
1491 this.update(tmp);
1492 }
1493 }
1494 get() {
1495 let { v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h } = this;
1496 return [v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h];
1497 }
1498 set(v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h) {
1499 this.v0l = v0l | 0;
1500 this.v0h = v0h | 0;
1501 this.v1l = v1l | 0;
1502 this.v1h = v1h | 0;
1503 this.v2l = v2l | 0;
1504 this.v2h = v2h | 0;
1505 this.v3l = v3l | 0;
1506 this.v3h = v3h | 0;
1507 this.v4l = v4l | 0;
1508 this.v4h = v4h | 0;
1509 this.v5l = v5l | 0;
1510 this.v5h = v5h | 0;
1511 this.v6l = v6l | 0;
1512 this.v6h = v6h | 0;
1513 this.v7l = v7l | 0;
1514 this.v7h = v7h | 0;
1515 }
1516 compress(msg, offset, isLast) {
1517 this.get().forEach((v, i) => (BUF[i] = v));
1518 BUF.set(IV$1, 16);
1519 let { h, l } = u64.fromBig(BigInt(this.length));
1520 BUF[24] = IV$1[8] ^ l;
1521 BUF[25] = IV$1[9] ^ h;
1522 if (isLast) {
1523 BUF[28] = ~BUF[28];
1524 BUF[29] = ~BUF[29];
1525 }
1526 let j = 0;
1527 const s = SIGMA;
1528 for (let i = 0; i < 12; i++) {
1529 G1(0, 4, 8, 12, msg, offset + 2 * s[j++]);
1530 G2(0, 4, 8, 12, msg, offset + 2 * s[j++]);
1531 G1(1, 5, 9, 13, msg, offset + 2 * s[j++]);
1532 G2(1, 5, 9, 13, msg, offset + 2 * s[j++]);
1533 G1(2, 6, 10, 14, msg, offset + 2 * s[j++]);
1534 G2(2, 6, 10, 14, msg, offset + 2 * s[j++]);
1535 G1(3, 7, 11, 15, msg, offset + 2 * s[j++]);
1536 G2(3, 7, 11, 15, msg, offset + 2 * s[j++]);
1537 G1(0, 5, 10, 15, msg, offset + 2 * s[j++]);
1538 G2(0, 5, 10, 15, msg, offset + 2 * s[j++]);
1539 G1(1, 6, 11, 12, msg, offset + 2 * s[j++]);
1540 G2(1, 6, 11, 12, msg, offset + 2 * s[j++]);
1541 G1(2, 7, 8, 13, msg, offset + 2 * s[j++]);
1542 G2(2, 7, 8, 13, msg, offset + 2 * s[j++]);
1543 G1(3, 4, 9, 14, msg, offset + 2 * s[j++]);
1544 G2(3, 4, 9, 14, msg, offset + 2 * s[j++]);
1545 }
1546 this.v0l ^= BUF[0] ^ BUF[16];
1547 this.v0h ^= BUF[1] ^ BUF[17];
1548 this.v1l ^= BUF[2] ^ BUF[18];
1549 this.v1h ^= BUF[3] ^ BUF[19];
1550 this.v2l ^= BUF[4] ^ BUF[20];
1551 this.v2h ^= BUF[5] ^ BUF[21];
1552 this.v3l ^= BUF[6] ^ BUF[22];
1553 this.v3h ^= BUF[7] ^ BUF[23];
1554 this.v4l ^= BUF[8] ^ BUF[24];
1555 this.v4h ^= BUF[9] ^ BUF[25];
1556 this.v5l ^= BUF[10] ^ BUF[26];
1557 this.v5h ^= BUF[11] ^ BUF[27];
1558 this.v6l ^= BUF[12] ^ BUF[28];
1559 this.v6h ^= BUF[13] ^ BUF[29];
1560 this.v7l ^= BUF[14] ^ BUF[30];
1561 this.v7h ^= BUF[15] ^ BUF[31];
1562 BUF.fill(0);
1563 }
1564 destroy() {
1565 this.destroyed = true;
1566 this.buffer32.fill(0);
1567 this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
1568 }
1569 }
1570 const blake2b = wrapConstructorWithOpts((opts) => new BLAKE2b(opts));
1571
1572 function createAsHex(fn) {
1573 return (...args) => util.u8aToHex(fn(...args));
1574 }
1575 function createBitHasher(bitLength, fn) {
1576 return (data, onlyJs) => fn(data, bitLength, onlyJs);
1577 }
1578 function createDualHasher(wa, js) {
1579 return (value, bitLength = 256, onlyJs) => {
1580 const u8a = util.u8aToU8a(value);
1581 return !util.hasBigInt || (!onlyJs && isReady())
1582 ? wa[bitLength](u8a)
1583 : js[bitLength](u8a);
1584 };
1585 }
1586
1587 function blake2AsU8a(data, bitLength = 256, key, onlyJs) {
1588 const byteLength = Math.ceil(bitLength / 8);
1589 const u8a = util.u8aToU8a(data);
1590 return !util.hasBigInt || (!onlyJs && isReady())
1591 ? blake2b$1(u8a, util.u8aToU8a(key), byteLength)
1592 : key
1593 ? blake2b(u8a, { dkLen: byteLength, key })
1594 : blake2b(u8a, { dkLen: byteLength });
1595 }
1596 const blake2AsHex = createAsHex(blake2AsU8a);
1597
1598 const SS58_PREFIX = util.stringToU8a('SS58PRE');
1599 function sshash(key) {
1600 return blake2AsU8a(util.u8aConcat(SS58_PREFIX, key), 512);
1601 }
1602
1603 function checkAddressChecksum(decoded) {
1604 const ss58Length = (decoded[0] & 0b0100_0000) ? 2 : 1;
1605 const ss58Decoded = ss58Length === 1
1606 ? decoded[0]
1607 : ((decoded[0] & 0b0011_1111) << 2) | (decoded[1] >> 6) | ((decoded[1] & 0b0011_1111) << 8);
1608 const isPublicKey = [34 + ss58Length, 35 + ss58Length].includes(decoded.length);
1609 const length = decoded.length - (isPublicKey ? 2 : 1);
1610 const hash = sshash(decoded.subarray(0, length));
1611 const isValid = (decoded[0] & 0b1000_0000) === 0 && ![46, 47].includes(decoded[0]) && (isPublicKey
1612 ? decoded[decoded.length - 2] === hash[0] && decoded[decoded.length - 1] === hash[1]
1613 : decoded[decoded.length - 1] === hash[0]);
1614 return [isValid, length, ss58Length, ss58Decoded];
1615 }
1616
1617 const knownSubstrate = [
1618 {
1619 "prefix": 0,
1620 "network": "polkadot",
1621 "displayName": "Polkadot Relay Chain",
1622 "symbols": [
1623 "DOT"
1624 ],
1625 "decimals": [
1626 10
1627 ],
1628 "standardAccount": "*25519",
1629 "website": "https://polkadot.network"
1630 },
1631 {
1632 "prefix": 1,
1633 "network": "BareSr25519",
1634 "displayName": "Bare 32-bit Schnorr/Ristretto (S/R 25519) public key.",
1635 "symbols": [],
1636 "decimals": [],
1637 "standardAccount": "Sr25519",
1638 "website": null
1639 },
1640 {
1641 "prefix": 2,
1642 "network": "kusama",
1643 "displayName": "Kusama Relay Chain",
1644 "symbols": [
1645 "KSM"
1646 ],
1647 "decimals": [
1648 12
1649 ],
1650 "standardAccount": "*25519",
1651 "website": "https://kusama.network"
1652 },
1653 {
1654 "prefix": 3,
1655 "network": "BareEd25519",
1656 "displayName": "Bare 32-bit Ed25519 public key.",
1657 "symbols": [],
1658 "decimals": [],
1659 "standardAccount": "Ed25519",
1660 "website": null
1661 },
1662 {
1663 "prefix": 4,
1664 "network": "katalchain",
1665 "displayName": "Katal Chain",
1666 "symbols": [],
1667 "decimals": [],
1668 "standardAccount": "*25519",
1669 "website": null
1670 },
1671 {
1672 "prefix": 5,
1673 "network": "astar",
1674 "displayName": "Astar Network",
1675 "symbols": [
1676 "ASTR"
1677 ],
1678 "decimals": [
1679 18
1680 ],
1681 "standardAccount": "*25519",
1682 "website": "https://astar.network"
1683 },
1684 {
1685 "prefix": 6,
1686 "network": "bifrost",
1687 "displayName": "Bifrost",
1688 "symbols": [
1689 "BNC"
1690 ],
1691 "decimals": [
1692 12
1693 ],
1694 "standardAccount": "*25519",
1695 "website": "https://bifrost.finance/"
1696 },
1697 {
1698 "prefix": 7,
1699 "network": "edgeware",
1700 "displayName": "Edgeware",
1701 "symbols": [
1702 "EDG"
1703 ],
1704 "decimals": [
1705 18
1706 ],
1707 "standardAccount": "*25519",
1708 "website": "https://edgewa.re"
1709 },
1710 {
1711 "prefix": 8,
1712 "network": "karura",
1713 "displayName": "Karura",
1714 "symbols": [
1715 "KAR"
1716 ],
1717 "decimals": [
1718 12
1719 ],
1720 "standardAccount": "*25519",
1721 "website": "https://karura.network/"
1722 },
1723 {
1724 "prefix": 9,
1725 "network": "reynolds",
1726 "displayName": "Laminar Reynolds Canary",
1727 "symbols": [
1728 "REY"
1729 ],
1730 "decimals": [
1731 18
1732 ],
1733 "standardAccount": "*25519",
1734 "website": "http://laminar.network/"
1735 },
1736 {
1737 "prefix": 10,
1738 "network": "acala",
1739 "displayName": "Acala",
1740 "symbols": [
1741 "ACA"
1742 ],
1743 "decimals": [
1744 12
1745 ],
1746 "standardAccount": "*25519",
1747 "website": "https://acala.network/"
1748 },
1749 {
1750 "prefix": 11,
1751 "network": "laminar",
1752 "displayName": "Laminar",
1753 "symbols": [
1754 "LAMI"
1755 ],
1756 "decimals": [
1757 18
1758 ],
1759 "standardAccount": "*25519",
1760 "website": "http://laminar.network/"
1761 },
1762 {
1763 "prefix": 12,
1764 "network": "polymesh",
1765 "displayName": "Polymesh",
1766 "symbols": [
1767 "POLYX"
1768 ],
1769 "decimals": [
1770 6
1771 ],
1772 "standardAccount": "*25519",
1773 "website": "https://polymath.network/"
1774 },
1775 {
1776 "prefix": 13,
1777 "network": "integritee",
1778 "displayName": "Integritee",
1779 "symbols": [
1780 "TEER"
1781 ],
1782 "decimals": [
1783 12
1784 ],
1785 "standardAccount": "*25519",
1786 "website": "https://integritee.network"
1787 },
1788 {
1789 "prefix": 14,
1790 "network": "totem",
1791 "displayName": "Totem",
1792 "symbols": [
1793 "TOTEM"
1794 ],
1795 "decimals": [
1796 0
1797 ],
1798 "standardAccount": "*25519",
1799 "website": "https://totemaccounting.com"
1800 },
1801 {
1802 "prefix": 15,
1803 "network": "synesthesia",
1804 "displayName": "Synesthesia",
1805 "symbols": [
1806 "SYN"
1807 ],
1808 "decimals": [
1809 12
1810 ],
1811 "standardAccount": "*25519",
1812 "website": "https://synesthesia.network/"
1813 },
1814 {
1815 "prefix": 16,
1816 "network": "kulupu",
1817 "displayName": "Kulupu",
1818 "symbols": [
1819 "KLP"
1820 ],
1821 "decimals": [
1822 12
1823 ],
1824 "standardAccount": "*25519",
1825 "website": "https://kulupu.network/"
1826 },
1827 {
1828 "prefix": 17,
1829 "network": "dark",
1830 "displayName": "Dark Mainnet",
1831 "symbols": [],
1832 "decimals": [],
1833 "standardAccount": "*25519",
1834 "website": null
1835 },
1836 {
1837 "prefix": 18,
1838 "network": "darwinia",
1839 "displayName": "Darwinia Network",
1840 "symbols": [
1841 "RING"
1842 ],
1843 "decimals": [
1844 18
1845 ],
1846 "standardAccount": "secp256k1",
1847 "website": "https://darwinia.network"
1848 },
1849 {
1850 "prefix": 19,
1851 "network": "watr",
1852 "displayName": "Watr Protocol",
1853 "symbols": [
1854 "WATR"
1855 ],
1856 "decimals": [
1857 18
1858 ],
1859 "standardAccount": "*25519",
1860 "website": "https://www.watr.org"
1861 },
1862 {
1863 "prefix": 20,
1864 "network": "stafi",
1865 "displayName": "Stafi",
1866 "symbols": [
1867 "FIS"
1868 ],
1869 "decimals": [
1870 12
1871 ],
1872 "standardAccount": "*25519",
1873 "website": "https://stafi.io"
1874 },
1875 {
1876 "prefix": 21,
1877 "network": "karmachain",
1878 "displayName": "Karmacoin",
1879 "symbols": [
1880 "KCOIN"
1881 ],
1882 "decimals": [
1883 6
1884 ],
1885 "standardAccount": "*25519",
1886 "website": "https://karmaco.in"
1887 },
1888 {
1889 "prefix": 22,
1890 "network": "dock-pos-mainnet",
1891 "displayName": "Dock Mainnet",
1892 "symbols": [
1893 "DCK"
1894 ],
1895 "decimals": [
1896 6
1897 ],
1898 "standardAccount": "*25519",
1899 "website": "https://dock.io"
1900 },
1901 {
1902 "prefix": 23,
1903 "network": "shift",
1904 "displayName": "ShiftNrg",
1905 "symbols": [],
1906 "decimals": [],
1907 "standardAccount": "*25519",
1908 "website": null
1909 },
1910 {
1911 "prefix": 24,
1912 "network": "zero",
1913 "displayName": "ZERO",
1914 "symbols": [
1915 "ZERO"
1916 ],
1917 "decimals": [
1918 18
1919 ],
1920 "standardAccount": "*25519",
1921 "website": "https://zero.io"
1922 },
1923 {
1924 "prefix": 25,
1925 "network": "zero-alphaville",
1926 "displayName": "ZERO Alphaville",
1927 "symbols": [
1928 "ZERO"
1929 ],
1930 "decimals": [
1931 18
1932 ],
1933 "standardAccount": "*25519",
1934 "website": "https://zero.io"
1935 },
1936 {
1937 "prefix": 26,
1938 "network": "jupiter",
1939 "displayName": "Jupiter",
1940 "symbols": [
1941 "jDOT"
1942 ],
1943 "decimals": [
1944 10
1945 ],
1946 "standardAccount": "*25519",
1947 "website": "https://jupiter.patract.io"
1948 },
1949 {
1950 "prefix": 27,
1951 "network": "kabocha",
1952 "displayName": "Kabocha",
1953 "symbols": [
1954 "KAB"
1955 ],
1956 "decimals": [
1957 12
1958 ],
1959 "standardAccount": "*25519",
1960 "website": "https://kabocha.network"
1961 },
1962 {
1963 "prefix": 28,
1964 "network": "subsocial",
1965 "displayName": "Subsocial",
1966 "symbols": [],
1967 "decimals": [],
1968 "standardAccount": "*25519",
1969 "website": null
1970 },
1971 {
1972 "prefix": 29,
1973 "network": "cord",
1974 "displayName": "CORD Network",
1975 "symbols": [
1976 "DHI",
1977 "WAY"
1978 ],
1979 "decimals": [
1980 12,
1981 12
1982 ],
1983 "standardAccount": "*25519",
1984 "website": "https://cord.network/"
1985 },
1986 {
1987 "prefix": 30,
1988 "network": "phala",
1989 "displayName": "Phala Network",
1990 "symbols": [
1991 "PHA"
1992 ],
1993 "decimals": [
1994 12
1995 ],
1996 "standardAccount": "*25519",
1997 "website": "https://phala.network"
1998 },
1999 {
2000 "prefix": 31,
2001 "network": "litentry",
2002 "displayName": "Litentry Network",
2003 "symbols": [
2004 "LIT"
2005 ],
2006 "decimals": [
2007 12
2008 ],
2009 "standardAccount": "*25519",
2010 "website": "https://litentry.com/"
2011 },
2012 {
2013 "prefix": 32,
2014 "network": "robonomics",
2015 "displayName": "Robonomics",
2016 "symbols": [
2017 "XRT"
2018 ],
2019 "decimals": [
2020 9
2021 ],
2022 "standardAccount": "*25519",
2023 "website": "https://robonomics.network"
2024 },
2025 {
2026 "prefix": 33,
2027 "network": "datahighway",
2028 "displayName": "DataHighway",
2029 "symbols": [],
2030 "decimals": [],
2031 "standardAccount": "*25519",
2032 "website": null
2033 },
2034 {
2035 "prefix": 34,
2036 "network": "ares",
2037 "displayName": "Ares Protocol",
2038 "symbols": [
2039 "ARES"
2040 ],
2041 "decimals": [
2042 12
2043 ],
2044 "standardAccount": "*25519",
2045 "website": "https://www.aresprotocol.com/"
2046 },
2047 {
2048 "prefix": 35,
2049 "network": "vln",
2050 "displayName": "Valiu Liquidity Network",
2051 "symbols": [
2052 "USDv"
2053 ],
2054 "decimals": [
2055 15
2056 ],
2057 "standardAccount": "*25519",
2058 "website": "https://valiu.com/"
2059 },
2060 {
2061 "prefix": 36,
2062 "network": "centrifuge",
2063 "displayName": "Centrifuge Chain",
2064 "symbols": [
2065 "CFG"
2066 ],
2067 "decimals": [
2068 18
2069 ],
2070 "standardAccount": "*25519",
2071 "website": "https://centrifuge.io/"
2072 },
2073 {
2074 "prefix": 37,
2075 "network": "nodle",
2076 "displayName": "Nodle Chain",
2077 "symbols": [
2078 "NODL"
2079 ],
2080 "decimals": [
2081 11
2082 ],
2083 "standardAccount": "*25519",
2084 "website": "https://nodle.io/"
2085 },
2086 {
2087 "prefix": 38,
2088 "network": "kilt",
2089 "displayName": "KILT Spiritnet",
2090 "symbols": [
2091 "KILT"
2092 ],
2093 "decimals": [
2094 15
2095 ],
2096 "standardAccount": "*25519",
2097 "website": "https://kilt.io/"
2098 },
2099 {
2100 "prefix": 39,
2101 "network": "mathchain",
2102 "displayName": "MathChain mainnet",
2103 "symbols": [
2104 "MATH"
2105 ],
2106 "decimals": [
2107 18
2108 ],
2109 "standardAccount": "*25519",
2110 "website": "https://mathwallet.org"
2111 },
2112 {
2113 "prefix": 40,
2114 "network": "mathchain-testnet",
2115 "displayName": "MathChain testnet",
2116 "symbols": [
2117 "MATH"
2118 ],
2119 "decimals": [
2120 18
2121 ],
2122 "standardAccount": "*25519",
2123 "website": "https://mathwallet.org"
2124 },
2125 {
2126 "prefix": 41,
2127 "network": "polimec",
2128 "displayName": "Polimec Protocol",
2129 "symbols": [
2130 "PLMC"
2131 ],
2132 "decimals": [
2133 10
2134 ],
2135 "standardAccount": "*25519",
2136 "website": "https://www.polimec.org/"
2137 },
2138 {
2139 "prefix": 42,
2140 "network": "substrate",
2141 "displayName": "Substrate",
2142 "symbols": [],
2143 "decimals": [],
2144 "standardAccount": "*25519",
2145 "website": "https://substrate.io/"
2146 },
2147 {
2148 "prefix": 43,
2149 "network": "BareSecp256k1",
2150 "displayName": "Bare 32-bit ECDSA SECP-256k1 public key.",
2151 "symbols": [],
2152 "decimals": [],
2153 "standardAccount": "secp256k1",
2154 "website": null
2155 },
2156 {
2157 "prefix": 44,
2158 "network": "chainx",
2159 "displayName": "ChainX",
2160 "symbols": [
2161 "PCX"
2162 ],
2163 "decimals": [
2164 8
2165 ],
2166 "standardAccount": "*25519",
2167 "website": "https://chainx.org/"
2168 },
2169 {
2170 "prefix": 45,
2171 "network": "uniarts",
2172 "displayName": "UniArts Network",
2173 "symbols": [
2174 "UART",
2175 "UINK"
2176 ],
2177 "decimals": [
2178 12,
2179 12
2180 ],
2181 "standardAccount": "*25519",
2182 "website": "https://uniarts.me"
2183 },
2184 {
2185 "prefix": 46,
2186 "network": "reserved46",
2187 "displayName": "This prefix is reserved.",
2188 "symbols": [],
2189 "decimals": [],
2190 "standardAccount": null,
2191 "website": null
2192 },
2193 {
2194 "prefix": 47,
2195 "network": "reserved47",
2196 "displayName": "This prefix is reserved.",
2197 "symbols": [],
2198 "decimals": [],
2199 "standardAccount": null,
2200 "website": null
2201 },
2202 {
2203 "prefix": 48,
2204 "network": "neatcoin",
2205 "displayName": "Neatcoin Mainnet",
2206 "symbols": [
2207 "NEAT"
2208 ],
2209 "decimals": [
2210 12
2211 ],
2212 "standardAccount": "*25519",
2213 "website": "https://neatcoin.org"
2214 },
2215 {
2216 "prefix": 49,
2217 "network": "picasso",
2218 "displayName": "Picasso",
2219 "symbols": [
2220 "PICA"
2221 ],
2222 "decimals": [
2223 12
2224 ],
2225 "standardAccount": "*25519",
2226 "website": "https://picasso.composable.finance"
2227 },
2228 {
2229 "prefix": 50,
2230 "network": "composable",
2231 "displayName": "Composable Finance",
2232 "symbols": [
2233 "LAYR"
2234 ],
2235 "decimals": [
2236 12
2237 ],
2238 "standardAccount": "*25519",
2239 "website": "https://composable.finance"
2240 },
2241 {
2242 "prefix": 51,
2243 "network": "oak",
2244 "displayName": "OAK Network",
2245 "symbols": [
2246 "OAK",
2247 "TUR"
2248 ],
2249 "decimals": [
2250 10,
2251 10
2252 ],
2253 "standardAccount": "*25519",
2254 "website": "https://oak.tech"
2255 },
2256 {
2257 "prefix": 52,
2258 "network": "KICO",
2259 "displayName": "KICO",
2260 "symbols": [
2261 "KICO"
2262 ],
2263 "decimals": [
2264 14
2265 ],
2266 "standardAccount": "*25519",
2267 "website": "https://dico.io"
2268 },
2269 {
2270 "prefix": 53,
2271 "network": "DICO",
2272 "displayName": "DICO",
2273 "symbols": [
2274 "DICO"
2275 ],
2276 "decimals": [
2277 14
2278 ],
2279 "standardAccount": "*25519",
2280 "website": "https://dico.io"
2281 },
2282 {
2283 "prefix": 54,
2284 "network": "cere",
2285 "displayName": "Cere Network",
2286 "symbols": [
2287 "CERE"
2288 ],
2289 "decimals": [
2290 10
2291 ],
2292 "standardAccount": "*25519",
2293 "website": "https://cere.network"
2294 },
2295 {
2296 "prefix": 55,
2297 "network": "xxnetwork",
2298 "displayName": "xx network",
2299 "symbols": [
2300 "XX"
2301 ],
2302 "decimals": [
2303 9
2304 ],
2305 "standardAccount": "*25519",
2306 "website": "https://xx.network"
2307 },
2308 {
2309 "prefix": 56,
2310 "network": "pendulum",
2311 "displayName": "Pendulum chain",
2312 "symbols": [
2313 "PEN"
2314 ],
2315 "decimals": [
2316 12
2317 ],
2318 "standardAccount": "*25519",
2319 "website": "https://pendulumchain.org/"
2320 },
2321 {
2322 "prefix": 57,
2323 "network": "amplitude",
2324 "displayName": "Amplitude chain",
2325 "symbols": [
2326 "AMPE"
2327 ],
2328 "decimals": [
2329 12
2330 ],
2331 "standardAccount": "*25519",
2332 "website": "https://pendulumchain.org/"
2333 },
2334 {
2335 "prefix": 58,
2336 "network": "eternal-civilization",
2337 "displayName": "Eternal Civilization",
2338 "symbols": [
2339 "ECC"
2340 ],
2341 "decimals": [
2342 12
2343 ],
2344 "standardAccount": "*25519",
2345 "website": "http://www.ysknfr.cn/"
2346 },
2347 {
2348 "prefix": 63,
2349 "network": "hydradx",
2350 "displayName": "Hydration",
2351 "symbols": [
2352 "HDX"
2353 ],
2354 "decimals": [
2355 12
2356 ],
2357 "standardAccount": "*25519",
2358 "website": "https://hydration.net"
2359 },
2360 {
2361 "prefix": 65,
2362 "network": "aventus",
2363 "displayName": "Aventus Mainnet",
2364 "symbols": [
2365 "AVT"
2366 ],
2367 "decimals": [
2368 18
2369 ],
2370 "standardAccount": "*25519",
2371 "website": "https://aventus.io"
2372 },
2373 {
2374 "prefix": 66,
2375 "network": "crust",
2376 "displayName": "Crust Network",
2377 "symbols": [
2378 "CRU"
2379 ],
2380 "decimals": [
2381 12
2382 ],
2383 "standardAccount": "*25519",
2384 "website": "https://crust.network"
2385 },
2386 {
2387 "prefix": 67,
2388 "network": "genshiro",
2389 "displayName": "Genshiro Network",
2390 "symbols": [
2391 "GENS",
2392 "EQD",
2393 "LPT0"
2394 ],
2395 "decimals": [
2396 9,
2397 9,
2398 9
2399 ],
2400 "standardAccount": "*25519",
2401 "website": "https://genshiro.equilibrium.io"
2402 },
2403 {
2404 "prefix": 68,
2405 "network": "equilibrium",
2406 "displayName": "Equilibrium Network",
2407 "symbols": [
2408 "EQ"
2409 ],
2410 "decimals": [
2411 9
2412 ],
2413 "standardAccount": "*25519",
2414 "website": "https://equilibrium.io"
2415 },
2416 {
2417 "prefix": 69,
2418 "network": "sora",
2419 "displayName": "SORA Network",
2420 "symbols": [
2421 "XOR"
2422 ],
2423 "decimals": [
2424 18
2425 ],
2426 "standardAccount": "*25519",
2427 "website": "https://sora.org"
2428 },
2429 {
2430 "prefix": 71,
2431 "network": "p3d",
2432 "displayName": "3DP network",
2433 "symbols": [
2434 "P3D"
2435 ],
2436 "decimals": [
2437 12
2438 ],
2439 "standardAccount": "*25519",
2440 "website": "https://3dpass.org"
2441 },
2442 {
2443 "prefix": 72,
2444 "network": "p3dt",
2445 "displayName": "3DP test network",
2446 "symbols": [
2447 "P3Dt"
2448 ],
2449 "decimals": [
2450 12
2451 ],
2452 "standardAccount": "*25519",
2453 "website": "https://3dpass.org"
2454 },
2455 {
2456 "prefix": 73,
2457 "network": "zeitgeist",
2458 "displayName": "Zeitgeist",
2459 "symbols": [
2460 "ZTG"
2461 ],
2462 "decimals": [
2463 10
2464 ],
2465 "standardAccount": "*25519",
2466 "website": "https://zeitgeist.pm"
2467 },
2468 {
2469 "prefix": 77,
2470 "network": "manta",
2471 "displayName": "Manta network",
2472 "symbols": [
2473 "MANTA"
2474 ],
2475 "decimals": [
2476 18
2477 ],
2478 "standardAccount": "*25519",
2479 "website": "https://manta.network"
2480 },
2481 {
2482 "prefix": 78,
2483 "network": "calamari",
2484 "displayName": "Calamari: Manta Canary Network",
2485 "symbols": [
2486 "KMA"
2487 ],
2488 "decimals": [
2489 12
2490 ],
2491 "standardAccount": "*25519",
2492 "website": "https://manta.network"
2493 },
2494 {
2495 "prefix": 81,
2496 "network": "sora_dot_para",
2497 "displayName": "SORA Polkadot Parachain",
2498 "symbols": [
2499 "XOR"
2500 ],
2501 "decimals": [
2502 18
2503 ],
2504 "standardAccount": "*25519",
2505 "website": "https://sora.org"
2506 },
2507 {
2508 "prefix": 88,
2509 "network": "polkadex",
2510 "displayName": "Polkadex Mainnet",
2511 "symbols": [
2512 "PDEX"
2513 ],
2514 "decimals": [
2515 12
2516 ],
2517 "standardAccount": "*25519",
2518 "website": "https://polkadex.trade"
2519 },
2520 {
2521 "prefix": 89,
2522 "network": "polkadexparachain",
2523 "displayName": "Polkadex Parachain",
2524 "symbols": [
2525 "PDEX"
2526 ],
2527 "decimals": [
2528 12
2529 ],
2530 "standardAccount": "*25519",
2531 "website": "https://polkadex.trade"
2532 },
2533 {
2534 "prefix": 90,
2535 "network": "frequency",
2536 "displayName": "Frequency",
2537 "symbols": [
2538 "FRQCY"
2539 ],
2540 "decimals": [
2541 8
2542 ],
2543 "standardAccount": "*25519",
2544 "website": "https://www.frequency.xyz"
2545 },
2546 {
2547 "prefix": 92,
2548 "network": "anmol",
2549 "displayName": "Anmol Network",
2550 "symbols": [
2551 "ANML"
2552 ],
2553 "decimals": [
2554 18
2555 ],
2556 "standardAccount": "*25519",
2557 "website": "https://anmol.network/"
2558 },
2559 {
2560 "prefix": 93,
2561 "network": "fragnova",
2562 "displayName": "Fragnova Network",
2563 "symbols": [
2564 "NOVA"
2565 ],
2566 "decimals": [
2567 12
2568 ],
2569 "standardAccount": "*25519",
2570 "website": "https://fragnova.com"
2571 },
2572 {
2573 "prefix": 98,
2574 "network": "polkasmith",
2575 "displayName": "PolkaSmith Canary Network",
2576 "symbols": [
2577 "PKS"
2578 ],
2579 "decimals": [
2580 18
2581 ],
2582 "standardAccount": "*25519",
2583 "website": "https://polkafoundry.com"
2584 },
2585 {
2586 "prefix": 99,
2587 "network": "polkafoundry",
2588 "displayName": "PolkaFoundry Network",
2589 "symbols": [
2590 "PKF"
2591 ],
2592 "decimals": [
2593 18
2594 ],
2595 "standardAccount": "*25519",
2596 "website": "https://polkafoundry.com"
2597 },
2598 {
2599 "prefix": 100,
2600 "network": "ibtida",
2601 "displayName": "Anmol Network Ibtida Canary network",
2602 "symbols": [
2603 "IANML"
2604 ],
2605 "decimals": [
2606 18
2607 ],
2608 "standardAccount": "*25519",
2609 "website": "https://anmol.network/"
2610 },
2611 {
2612 "prefix": 101,
2613 "network": "origintrail-parachain",
2614 "displayName": "OriginTrail Parachain",
2615 "symbols": [
2616 "OTP"
2617 ],
2618 "decimals": [
2619 12
2620 ],
2621 "standardAccount": "*25519",
2622 "website": "https://parachain.origintrail.io/"
2623 },
2624 {
2625 "prefix": 105,
2626 "network": "pontem-network",
2627 "displayName": "Pontem Network",
2628 "symbols": [
2629 "PONT"
2630 ],
2631 "decimals": [
2632 10
2633 ],
2634 "standardAccount": "*25519",
2635 "website": "https://pontem.network"
2636 },
2637 {
2638 "prefix": 110,
2639 "network": "heiko",
2640 "displayName": "Heiko",
2641 "symbols": [
2642 "HKO"
2643 ],
2644 "decimals": [
2645 12
2646 ],
2647 "standardAccount": "*25519",
2648 "website": "https://parallel.fi/"
2649 },
2650 {
2651 "prefix": 113,
2652 "network": "integritee-incognito",
2653 "displayName": "Integritee Incognito",
2654 "symbols": [],
2655 "decimals": [],
2656 "standardAccount": "*25519",
2657 "website": "https://integritee.network"
2658 },
2659 {
2660 "prefix": 117,
2661 "network": "tinker",
2662 "displayName": "Tinker",
2663 "symbols": [
2664 "TNKR"
2665 ],
2666 "decimals": [
2667 12
2668 ],
2669 "standardAccount": "*25519",
2670 "website": "https://invarch.network"
2671 },
2672 {
2673 "prefix": 126,
2674 "network": "joystream",
2675 "displayName": "Joystream",
2676 "symbols": [
2677 "JOY"
2678 ],
2679 "decimals": [
2680 10
2681 ],
2682 "standardAccount": "*25519",
2683 "website": "https://www.joystream.org"
2684 },
2685 {
2686 "prefix": 128,
2687 "network": "clover",
2688 "displayName": "Clover Finance",
2689 "symbols": [
2690 "CLV"
2691 ],
2692 "decimals": [
2693 18
2694 ],
2695 "standardAccount": "*25519",
2696 "website": "https://clover.finance"
2697 },
2698 {
2699 "prefix": 129,
2700 "network": "dorafactory-polkadot",
2701 "displayName": "Dorafactory Polkadot Network",
2702 "symbols": [
2703 "DORA"
2704 ],
2705 "decimals": [
2706 12
2707 ],
2708 "standardAccount": "*25519",
2709 "website": "https://dorafactory.org"
2710 },
2711 {
2712 "prefix": 131,
2713 "network": "litmus",
2714 "displayName": "Litmus Network",
2715 "symbols": [
2716 "LIT"
2717 ],
2718 "decimals": [
2719 12
2720 ],
2721 "standardAccount": "*25519",
2722 "website": "https://litentry.com/"
2723 },
2724 {
2725 "prefix": 136,
2726 "network": "altair",
2727 "displayName": "Altair",
2728 "symbols": [
2729 "AIR"
2730 ],
2731 "decimals": [
2732 18
2733 ],
2734 "standardAccount": "*25519",
2735 "website": "https://centrifuge.io/"
2736 },
2737 {
2738 "prefix": 137,
2739 "network": "vara",
2740 "displayName": "Vara Network",
2741 "symbols": [
2742 "VARA"
2743 ],
2744 "decimals": [
2745 12
2746 ],
2747 "standardAccount": "*25519",
2748 "website": "https://vara.network/"
2749 },
2750 {
2751 "prefix": 172,
2752 "network": "parallel",
2753 "displayName": "Parallel",
2754 "symbols": [
2755 "PARA"
2756 ],
2757 "decimals": [
2758 12
2759 ],
2760 "standardAccount": "*25519",
2761 "website": "https://parallel.fi/"
2762 },
2763 {
2764 "prefix": 252,
2765 "network": "social-network",
2766 "displayName": "Social Network",
2767 "symbols": [
2768 "NET"
2769 ],
2770 "decimals": [
2771 18
2772 ],
2773 "standardAccount": "*25519",
2774 "website": "https://social.network"
2775 },
2776 {
2777 "prefix": 255,
2778 "network": "quartz_mainnet",
2779 "displayName": "QUARTZ by UNIQUE",
2780 "symbols": [
2781 "QTZ"
2782 ],
2783 "decimals": [
2784 18
2785 ],
2786 "standardAccount": "*25519",
2787 "website": "https://unique.network"
2788 },
2789 {
2790 "prefix": 268,
2791 "network": "pioneer_network",
2792 "displayName": "Pioneer Network by Bit.Country",
2793 "symbols": [
2794 "NEER"
2795 ],
2796 "decimals": [
2797 18
2798 ],
2799 "standardAccount": "*25519",
2800 "website": "https://bit.country"
2801 },
2802 {
2803 "prefix": 420,
2804 "network": "sora_kusama_para",
2805 "displayName": "SORA Kusama Parachain",
2806 "symbols": [
2807 "XOR"
2808 ],
2809 "decimals": [
2810 18
2811 ],
2812 "standardAccount": "*25519",
2813 "website": "https://sora.org"
2814 },
2815 {
2816 "prefix": 440,
2817 "network": "allfeat_network",
2818 "displayName": "Allfeat Network",
2819 "symbols": [
2820 "AFT"
2821 ],
2822 "decimals": [
2823 12
2824 ],
2825 "standardAccount": "*25519",
2826 "website": "https://allfeat.network"
2827 },
2828 {
2829 "prefix": 666,
2830 "network": "metaquity_network",
2831 "displayName": "Metaquity Network",
2832 "symbols": [
2833 "MQTY"
2834 ],
2835 "decimals": [
2836 18
2837 ],
2838 "standardAccount": "*25519",
2839 "website": "https://metaquity.xyz/"
2840 },
2841 {
2842 "prefix": 777,
2843 "network": "curio",
2844 "displayName": "Curio",
2845 "symbols": [
2846 "CGT"
2847 ],
2848 "decimals": [
2849 18
2850 ],
2851 "standardAccount": "*25519",
2852 "website": "https://parachain.capitaldex.exchange/"
2853 },
2854 {
2855 "prefix": 789,
2856 "network": "geek",
2857 "displayName": "GEEK Network",
2858 "symbols": [
2859 "GEEK"
2860 ],
2861 "decimals": [
2862 18
2863 ],
2864 "standardAccount": "*25519",
2865 "website": "https://geek.gl"
2866 },
2867 {
2868 "prefix": 995,
2869 "network": "ternoa",
2870 "displayName": "Ternoa",
2871 "symbols": [
2872 "CAPS"
2873 ],
2874 "decimals": [
2875 18
2876 ],
2877 "standardAccount": "*25519",
2878 "website": "https://www.ternoa.network"
2879 },
2880 {
2881 "prefix": 1110,
2882 "network": "efinity",
2883 "displayName": "Efinity",
2884 "symbols": [
2885 "EFI"
2886 ],
2887 "decimals": [
2888 18
2889 ],
2890 "standardAccount": "*25519",
2891 "website": "https://efinity.io/"
2892 },
2893 {
2894 "prefix": 1221,
2895 "network": "peaq",
2896 "displayName": "Peaq Network",
2897 "symbols": [
2898 "PEAQ"
2899 ],
2900 "decimals": [
2901 18
2902 ],
2903 "standardAccount": "Sr25519",
2904 "website": "https://www.peaq.network/"
2905 },
2906 {
2907 "prefix": 1222,
2908 "network": "krest",
2909 "displayName": "Krest Network",
2910 "symbols": [
2911 "KREST"
2912 ],
2913 "decimals": [
2914 18
2915 ],
2916 "standardAccount": "Sr25519",
2917 "website": "https://www.peaq.network/"
2918 },
2919 {
2920 "prefix": 1284,
2921 "network": "moonbeam",
2922 "displayName": "Moonbeam",
2923 "symbols": [
2924 "GLMR"
2925 ],
2926 "decimals": [
2927 18
2928 ],
2929 "standardAccount": "secp256k1",
2930 "website": "https://moonbeam.network"
2931 },
2932 {
2933 "prefix": 1285,
2934 "network": "moonriver",
2935 "displayName": "Moonriver",
2936 "symbols": [
2937 "MOVR"
2938 ],
2939 "decimals": [
2940 18
2941 ],
2942 "standardAccount": "secp256k1",
2943 "website": "https://moonbeam.network"
2944 },
2945 {
2946 "prefix": 1328,
2947 "network": "ajuna",
2948 "displayName": "Ajuna Network",
2949 "symbols": [
2950 "AJUN"
2951 ],
2952 "decimals": [
2953 12
2954 ],
2955 "standardAccount": "*25519",
2956 "website": "https://ajuna.io"
2957 },
2958 {
2959 "prefix": 1337,
2960 "network": "bajun",
2961 "displayName": "Bajun Network",
2962 "symbols": [
2963 "BAJU"
2964 ],
2965 "decimals": [
2966 12
2967 ],
2968 "standardAccount": "*25519",
2969 "website": "https://ajuna.io"
2970 },
2971 {
2972 "prefix": 1516,
2973 "network": "societal",
2974 "displayName": "Societal",
2975 "symbols": [
2976 "SCTL"
2977 ],
2978 "decimals": [
2979 12
2980 ],
2981 "standardAccount": "*25519",
2982 "website": "https://www.sctl.xyz"
2983 },
2984 {
2985 "prefix": 1985,
2986 "network": "seals",
2987 "displayName": "Seals Network",
2988 "symbols": [
2989 "SEAL"
2990 ],
2991 "decimals": [
2992 9
2993 ],
2994 "standardAccount": "*25519",
2995 "website": "https://seals.app"
2996 },
2997 {
2998 "prefix": 2007,
2999 "network": "kapex",
3000 "displayName": "Kapex",
3001 "symbols": [
3002 "KAPEX"
3003 ],
3004 "decimals": [
3005 12
3006 ],
3007 "standardAccount": "*25519",
3008 "website": "https://totemaccounting.com"
3009 },
3010 {
3011 "prefix": 2009,
3012 "network": "cloudwalk_mainnet",
3013 "displayName": "CloudWalk Network Mainnet",
3014 "symbols": [
3015 "CWN"
3016 ],
3017 "decimals": [
3018 18
3019 ],
3020 "standardAccount": "*25519",
3021 "website": "https://explorer.mainnet.cloudwalk.io"
3022 },
3023 {
3024 "prefix": 2021,
3025 "network": "logion",
3026 "displayName": "logion network",
3027 "symbols": [
3028 "LGNT"
3029 ],
3030 "decimals": [
3031 18
3032 ],
3033 "standardAccount": "*25519",
3034 "website": "https://logion.network"
3035 },
3036 {
3037 "prefix": 2024,
3038 "network": "vow-chain",
3039 "displayName": "Enigmatic Smile",
3040 "symbols": [
3041 "VOW"
3042 ],
3043 "decimals": [
3044 18
3045 ],
3046 "standardAccount": "*25519",
3047 "website": "https://www.vow.foundation/"
3048 },
3049 {
3050 "prefix": 2032,
3051 "network": "interlay",
3052 "displayName": "Interlay",
3053 "symbols": [
3054 "INTR"
3055 ],
3056 "decimals": [
3057 10
3058 ],
3059 "standardAccount": "*25519",
3060 "website": "https://interlay.io/"
3061 },
3062 {
3063 "prefix": 2092,
3064 "network": "kintsugi",
3065 "displayName": "Kintsugi",
3066 "symbols": [
3067 "KINT"
3068 ],
3069 "decimals": [
3070 12
3071 ],
3072 "standardAccount": "*25519",
3073 "website": "https://interlay.io/"
3074 },
3075 {
3076 "prefix": 2106,
3077 "network": "bitgreen",
3078 "displayName": "Bitgreen",
3079 "symbols": [
3080 "BBB"
3081 ],
3082 "decimals": [
3083 18
3084 ],
3085 "standardAccount": "*25519",
3086 "website": "https://bitgreen.org/"
3087 },
3088 {
3089 "prefix": 2112,
3090 "network": "chainflip",
3091 "displayName": "Chainflip",
3092 "symbols": [
3093 "FLIP"
3094 ],
3095 "decimals": [
3096 18
3097 ],
3098 "standardAccount": "*25519",
3099 "website": "https://chainflip.io/"
3100 },
3101 {
3102 "prefix": 2199,
3103 "network": "moonsama",
3104 "displayName": "Moonsama",
3105 "symbols": [
3106 "SAMA"
3107 ],
3108 "decimals": [
3109 18
3110 ],
3111 "standardAccount": "secp256k1",
3112 "website": "https://moonsama.com"
3113 },
3114 {
3115 "prefix": 2206,
3116 "network": "ICE",
3117 "displayName": "ICE Network",
3118 "symbols": [
3119 "ICY"
3120 ],
3121 "decimals": [
3122 18
3123 ],
3124 "standardAccount": "*25519",
3125 "website": "https://icenetwork.io"
3126 },
3127 {
3128 "prefix": 2207,
3129 "network": "SNOW",
3130 "displayName": "SNOW: ICE Canary Network",
3131 "symbols": [
3132 "ICZ"
3133 ],
3134 "decimals": [
3135 18
3136 ],
3137 "standardAccount": "*25519",
3138 "website": "https://icenetwork.io"
3139 },
3140 {
3141 "prefix": 2254,
3142 "network": "subspace_testnet",
3143 "displayName": "Subspace testnet",
3144 "symbols": [
3145 "tSSC"
3146 ],
3147 "decimals": [
3148 18
3149 ],
3150 "standardAccount": "*25519",
3151 "website": "https://subspace.network"
3152 },
3153 {
3154 "prefix": 3333,
3155 "network": "peerplays",
3156 "displayName": "Peerplays",
3157 "symbols": [
3158 "PPY"
3159 ],
3160 "decimals": [
3161 18
3162 ],
3163 "standardAccount": "secp256k1",
3164 "website": "https://www.peerplays.com/"
3165 },
3166 {
3167 "prefix": 4450,
3168 "network": "g1",
3169 "displayName": "Ğ1",
3170 "symbols": [
3171 "G1"
3172 ],
3173 "decimals": [
3174 2
3175 ],
3176 "standardAccount": "*25519",
3177 "website": "https://duniter.org"
3178 },
3179 {
3180 "prefix": 5234,
3181 "network": "humanode",
3182 "displayName": "Humanode Network",
3183 "symbols": [
3184 "HMND"
3185 ],
3186 "decimals": [
3187 18
3188 ],
3189 "standardAccount": "*25519",
3190 "website": "https://humanode.io"
3191 },
3192 {
3193 "prefix": 5845,
3194 "network": "tangle",
3195 "displayName": "Tangle Network",
3196 "symbols": [
3197 "TNT"
3198 ],
3199 "decimals": [
3200 18
3201 ],
3202 "standardAccount": "*25519",
3203 "website": "https://www.tangle.tools/"
3204 },
3205 {
3206 "prefix": 6094,
3207 "network": "autonomys",
3208 "displayName": "Autonomys",
3209 "symbols": [
3210 "AI3"
3211 ],
3212 "decimals": [
3213 18
3214 ],
3215 "standardAccount": "*25519",
3216 "website": "https://autonomys.xyz"
3217 },
3218 {
3219 "prefix": 7007,
3220 "network": "tidefi",
3221 "displayName": "Tidefi",
3222 "symbols": [
3223 "TDFY"
3224 ],
3225 "decimals": [
3226 12
3227 ],
3228 "standardAccount": "*25519",
3229 "website": "https://tidefi.com"
3230 },
3231 {
3232 "prefix": 7013,
3233 "network": "gm",
3234 "displayName": "GM",
3235 "symbols": [
3236 "FREN",
3237 "GM",
3238 "GN"
3239 ],
3240 "decimals": [
3241 12,
3242 0,
3243 0
3244 ],
3245 "standardAccount": "*25519",
3246 "website": "https://gmordie.com"
3247 },
3248 {
3249 "prefix": 7306,
3250 "network": "krigan",
3251 "displayName": "Krigan Network",
3252 "symbols": [
3253 "KRGN"
3254 ],
3255 "decimals": [
3256 9
3257 ],
3258 "standardAccount": "*25519",
3259 "website": "https://krigan.network"
3260 },
3261 {
3262 "prefix": 7391,
3263 "network": "unique_mainnet",
3264 "displayName": "Unique Network",
3265 "symbols": [
3266 "UNQ"
3267 ],
3268 "decimals": [
3269 18
3270 ],
3271 "standardAccount": "*25519",
3272 "website": "https://unique.network"
3273 },
3274 {
3275 "prefix": 8866,
3276 "network": "golden_gate",
3277 "displayName": "Golden Gate",
3278 "symbols": [
3279 "GGX"
3280 ],
3281 "decimals": [
3282 18
3283 ],
3284 "standardAccount": "*25519",
3285 "website": "https://ggxchain.io/"
3286 },
3287 {
3288 "prefix": 8883,
3289 "network": "sapphire_mainnet",
3290 "displayName": "Sapphire by Unique",
3291 "symbols": [
3292 "QTZ"
3293 ],
3294 "decimals": [
3295 18
3296 ],
3297 "standardAccount": "*25519",
3298 "website": "https://unique.network"
3299 },
3300 {
3301 "prefix": 8886,
3302 "network": "golden_gate_sydney",
3303 "displayName": "Golden Gate Sydney",
3304 "symbols": [
3305 "GGXT"
3306 ],
3307 "decimals": [
3308 18
3309 ],
3310 "standardAccount": "*25519",
3311 "website": "https://ggxchain.io/"
3312 },
3313 {
3314 "prefix": 9072,
3315 "network": "hashed",
3316 "displayName": "Hashed Network",
3317 "symbols": [
3318 "HASH"
3319 ],
3320 "decimals": [
3321 18
3322 ],
3323 "standardAccount": "*25519",
3324 "website": "https://hashed.network"
3325 },
3326 {
3327 "prefix": 9807,
3328 "network": "dentnet",
3329 "displayName": "DENTNet",
3330 "symbols": [
3331 "DENTX"
3332 ],
3333 "decimals": [
3334 18
3335 ],
3336 "standardAccount": "*25519",
3337 "website": "https://www.dentnet.io"
3338 },
3339 {
3340 "prefix": 9935,
3341 "network": "t3rn",
3342 "displayName": "t3rn",
3343 "symbols": [
3344 "TRN"
3345 ],
3346 "decimals": [
3347 12
3348 ],
3349 "standardAccount": "*25519",
3350 "website": "https://t3rn.io/"
3351 },
3352 {
3353 "prefix": 10041,
3354 "network": "basilisk",
3355 "displayName": "Basilisk",
3356 "symbols": [
3357 "BSX"
3358 ],
3359 "decimals": [
3360 12
3361 ],
3362 "standardAccount": "*25519",
3363 "website": "https://bsx.fi"
3364 },
3365 {
3366 "prefix": 11330,
3367 "network": "cess-testnet",
3368 "displayName": "CESS Testnet",
3369 "symbols": [
3370 "TCESS"
3371 ],
3372 "decimals": [
3373 18
3374 ],
3375 "standardAccount": "*25519",
3376 "website": "https://cess.cloud"
3377 },
3378 {
3379 "prefix": 11331,
3380 "network": "cess",
3381 "displayName": "CESS",
3382 "symbols": [
3383 "CESS"
3384 ],
3385 "decimals": [
3386 18
3387 ],
3388 "standardAccount": "*25519",
3389 "website": "https://cess.cloud"
3390 },
3391 {
3392 "prefix": 11486,
3393 "network": "luhn",
3394 "displayName": "Luhn Network",
3395 "symbols": [
3396 "LUHN"
3397 ],
3398 "decimals": [
3399 18
3400 ],
3401 "standardAccount": "*25519",
3402 "website": "https://luhn.network"
3403 },
3404 {
3405 "prefix": 11820,
3406 "network": "contextfree",
3407 "displayName": "Automata ContextFree",
3408 "symbols": [
3409 "CTX"
3410 ],
3411 "decimals": [
3412 18
3413 ],
3414 "standardAccount": "*25519",
3415 "website": "https://ata.network"
3416 },
3417 {
3418 "prefix": 12155,
3419 "network": "impact",
3420 "displayName": "Impact Protocol Network",
3421 "symbols": [
3422 "BSTY"
3423 ],
3424 "decimals": [
3425 18
3426 ],
3427 "standardAccount": "*25519",
3428 "website": "https://impactprotocol.network/"
3429 },
3430 {
3431 "prefix": 12191,
3432 "network": "nftmart",
3433 "displayName": "NFTMart",
3434 "symbols": [
3435 "NMT"
3436 ],
3437 "decimals": [
3438 12
3439 ],
3440 "standardAccount": "*25519",
3441 "website": "https://nftmart.io"
3442 },
3443 {
3444 "prefix": 12850,
3445 "network": "analog-timechain",
3446 "displayName": "Analog Timechain",
3447 "symbols": [
3448 "ANLOG"
3449 ],
3450 "decimals": [
3451 12
3452 ],
3453 "standardAccount": "*25519",
3454 "website": "https://analog.one"
3455 },
3456 {
3457 "prefix": 13116,
3458 "network": "bittensor",
3459 "displayName": "Bittensor",
3460 "symbols": [
3461 "TAO"
3462 ],
3463 "decimals": [
3464 9
3465 ],
3466 "standardAccount": "*25519",
3467 "website": "https://bittensor.com"
3468 },
3469 {
3470 "prefix": 14697,
3471 "network": "goro",
3472 "displayName": "GORO Network",
3473 "symbols": [
3474 "GORO"
3475 ],
3476 "decimals": [
3477 9
3478 ],
3479 "standardAccount": "*25519",
3480 "website": "https://goro.network"
3481 },
3482 {
3483 "prefix": 14998,
3484 "network": "mosaic-chain",
3485 "displayName": "Mosaic Chain",
3486 "symbols": [
3487 "MOS"
3488 ],
3489 "decimals": [
3490 18
3491 ],
3492 "standardAccount": "*25519",
3493 "website": "https://mosaicchain.io"
3494 },
3495 {
3496 "prefix": 29972,
3497 "network": "mythos",
3498 "displayName": "Mythos",
3499 "symbols": [
3500 "MYTH"
3501 ],
3502 "decimals": [
3503 18
3504 ],
3505 "standardAccount": "secp256k1",
3506 "website": "https://mythos.foundation"
3507 },
3508 {
3509 "prefix": 8888,
3510 "network": "xcavate",
3511 "displayName": "Xcavate Protocol",
3512 "symbols": [
3513 "XCAV"
3514 ],
3515 "decimals": [
3516 12
3517 ],
3518 "standardAccount": "*25519",
3519 "website": "https://xcavate.io/"
3520 }
3521 ];
3522
3523 const knownGenesis = {
3524 acala: [
3525 '0xfc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c'
3526 ],
3527 ajuna: [
3528 '0xe358eb1d11b31255a286c12e44fe6780b7edb171d657905a97e39f71d9c6c3ee'
3529 ],
3530 'aleph-node': [
3531 '0x70255b4d28de0fc4e1a193d7e175ad1ccef431598211c55538f1018651a0344e'
3532 ],
3533 astar: [
3534 '0x9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6'
3535 ],
3536 basilisk: [
3537 '0xa85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755'
3538 ],
3539 bifrost: [
3540 '0x262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b'
3541 ],
3542 'bifrost-kusama': [
3543 '0x9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed'
3544 ],
3545 bittensor: [
3546 '0x2f0555cc76fc2840a25a6ea3b9637146806f1f44b090c175ffde2a7e5ab36c03'
3547 ],
3548 centrifuge: [
3549 '0xb3db41421702df9a7fcac62b53ffeac85f7853cc4e689e0b93aeb3db18c09d82',
3550 '0x67dddf2673b69e5f875f6f25277495834398eafd67f492e09f3f3345e003d1b5'
3551 ],
3552 cere: [
3553 '0x81443836a9a24caaa23f1241897d1235717535711d1d3fe24eae4fdc942c092c'
3554 ],
3555 composable: [
3556 '0xdaab8df776eb52ec604a5df5d388bb62a050a0aaec4556a64265b9d42755552d'
3557 ],
3558 darwinia: [
3559 '0xe71578b37a7c799b0ab4ee87ffa6f059a6b98f71f06fb8c84a8d88013a548ad6'
3560 ],
3561 'dock-mainnet': [
3562 '0x6bfe24dca2a3be10f22212678ac13a6446ec764103c0f3471c71609eac384aae',
3563 '0xf73467c6544aa68df2ee546b135f955c46b90fa627e9b5d7935f41061bb8a5a9'
3564 ],
3565 edgeware: [
3566 '0x742a2ca70c2fda6cee4f8df98d64c4c670a052d9568058982dad9d5a7a135c5b'
3567 ],
3568 encointer: [
3569 '0x7dd99936c1e9e6d1ce7d90eb6f33bea8393b4bf87677d675aa63c9cb3e8c5b5b'
3570 ],
3571 enjin: [
3572 '0xd8761d3c88f26dc12875c00d3165f7d67243d56fc85b4cf19937601a7916e5a9'
3573 ],
3574 equilibrium: [
3575 '0x6f1a800de3daff7f5e037ddf66ab22ce03ab91874debeddb1086f5f7dbd48925'
3576 ],
3577 frequency: [
3578 '0x4a587bf17a404e3572747add7aab7bbe56e805a5479c6c436f07f36fcc8d3ae1'
3579 ],
3580 genshiro: [
3581 '0x9b8cefc0eb5c568b527998bdd76c184e2b76ae561be76e4667072230217ea243'
3582 ],
3583 hydradx: [
3584 '0xafdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d',
3585 '0xd2a620c27ec5cbc5621ff9a522689895074f7cca0d08e7134a7804e1a3ba86fc',
3586 '0x10af6e84234477d84dc572bac0789813b254aa490767ed06fb9591191d1073f9',
3587 '0x3d75507dd46301767e601265791da1d9cb47b6ebc94e87347b635e5bf58bd047',
3588 '0x0ed32bfcab4a83517fac88f2aa7cbc2f88d3ab93be9a12b6188a036bf8a943c2'
3589 ],
3590 integritee: [
3591 '0xcdedc8eadbfa209d3f207bba541e57c3c58a667b05a2e1d1e86353c9000758da',
3592 '0xe13e7af377c64e83f95e0d70d5e5c3c01d697a84538776c5b9bbe0e7d7b6034c'
3593 ],
3594 'interlay-parachain': [
3595 '0xbf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72'
3596 ],
3597 karura: [
3598 '0xbaf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b'
3599 ],
3600 khala: [
3601 '0xd43540ba6d3eb4897c28a77d48cb5b729fea37603cbbfc7a86a73b72adb3be8d'
3602 ],
3603 kulupu: [
3604 '0xf7a99d3cb92853d00d5275c971c132c074636256583fee53b3bbe60d7b8769ba'
3605 ],
3606 kusama: [
3607 '0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe',
3608 '0xe3777fa922cafbff200cadeaea1a76bd7898ad5b89f7848999058b50e715f636',
3609 '0x3fd7b9eb6a00376e5be61f01abb429ffb0b104be05eaff4d458da48fcd425baf'
3610 ],
3611 matrixchain: [
3612 '0x3af4ff48ec76d2efc8476730f423ac07e25ad48f5f4c9dc39c778b164d808615'
3613 ],
3614 nodle: [
3615 '0x97da7ede98d7bad4e36b4d734b6055425a3be036da2a332ea5a7037656427a21'
3616 ],
3617 origintrail: [
3618 '0xe7e0962324a3b86c83404dbea483f25fb5dab4c224791c81b756cfc948006174'
3619 ],
3620 p3d: [
3621 '0x6c5894837ad89b6d92b114a2fb3eafa8fe3d26a54848e3447015442cd6ef4e66'
3622 ],
3623 parallel: [
3624 '0xe61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97'
3625 ],
3626 peaq: [
3627 '0xd2a5d385932d1f650dae03ef8e2748983779ee342c614f80854d32b8cd8fa48c'
3628 ],
3629 pendulum: [
3630 '0x5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86'
3631 ],
3632 phala: [
3633 '0x1bb969d85965e4bb5a651abbedf21a54b6b31a21f66b5401cc3f1e286268d736'
3634 ],
3635 picasso: [
3636 '0x6811a339673c9daa897944dcdac99c6e2939cc88245ed21951a0a3c9a2be75bc',
3637 '0xe8e7f0f4c4f5a00720b4821dbfddefea7490bcf0b19009961cc46957984e2c1c'
3638 ],
3639 polimec: [
3640 '0x7eb9354488318e7549c722669dcbdcdc526f1fef1420e7944667212f3601fdbd'
3641 ],
3642 polkadex: [
3643 '0x3920bcb4960a1eef5580cd5367ff3f430eef052774f78468852f7b9cb39f8a3c'
3644 ],
3645 polkadot: [
3646 '0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3'
3647 ],
3648 polymesh: [
3649 '0x6fbd74e5e1d0a61d52ccfe9d4adaed16dd3a7caa37c6bc4d0c2fa12e8b2f4063'
3650 ],
3651 quartz: [
3652 '0xcd4d732201ebe5d6b014edda071c4203e16867305332301dc8d092044b28e554'
3653 ],
3654 rococo: [
3655 '0x6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e',
3656 '0xaaf2cd1b74b5f726895921259421b534124726263982522174147046b8827897',
3657 '0x037f5f3c8e67b314062025fc886fcd6238ea25a4a9b45dce8d246815c9ebe770',
3658 '0xc196f81260cf1686172b47a79cf002120735d7cb0eb1474e8adce56618456fff',
3659 '0xf6e9983c37baf68846fedafe21e56718790e39fb1c582abc408b81bc7b208f9a',
3660 '0x5fce687da39305dfe682b117f0820b319348e8bb37eb16cf34acbf6a202de9d9',
3661 '0xe7c3d5edde7db964317cd9b51a3a059d7cd99f81bdbce14990047354334c9779',
3662 '0x1611e1dbf0405379b861e2e27daa90f480b2e6d3682414a80835a52e8cb8a215',
3663 '0x343442f12fa715489a8714e79a7b264ea88c0d5b8c66b684a7788a516032f6b9',
3664 '0x78bcd530c6b3a068bc17473cf5d2aff9c287102bed9af3ae3c41c33b9d6c6147',
3665 '0x47381ee0697153d64404fc578392c8fd5cba9073391908f46c888498415647bd',
3666 '0x19c0e4fa8ab75f5ac7865e0b8f74ff91eb9a100d336f423cd013a8befba40299'
3667 ],
3668 sora: [
3669 '0x7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5'
3670 ],
3671 stafi: [
3672 '0x290a4149f09ea0e402c74c1c7e96ae4239588577fe78932f94f5404c68243d80'
3673 ],
3674 statemine: [
3675 '0x48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a'
3676 ],
3677 statemint: [
3678 '0x68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f'
3679 ],
3680 subsocial: [
3681 '0x0bd72c1c305172e1275278aaeb3f161e02eccb7a819e63f62d47bd53a28189f8'
3682 ],
3683 ternoa: [
3684 '0x6859c81ca95ef624c9dfe4dc6e3381c33e5d6509e35e147092bfbc780f777c4e'
3685 ],
3686 unique: [
3687 '0x84322d9cddbf35088f1e54e9a85c967a41a56a4f43445768125e61af166c7d31'
3688 ],
3689 vara: [
3690 '0xfe1b4c55fd4d668101126434206571a7838a8b6b93a6d1b95d607e78e6c53763'
3691 ],
3692 vtb: [
3693 '0x286bc8414c7000ce1d6ee6a834e29a54c1784814b76243eb77ed0b2c5573c60f',
3694 '0x7483b89572fb2bd687c7b9a93b242d0b237f9aba463aba07ec24503931038aaa'
3695 ],
3696 westend: [
3697 '0xe143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e'
3698 ],
3699 xxnetwork: [
3700 '0x50dd5d206917bf10502c68fb4d18a59fc8aa31586f4e8856b493e43544aa82aa'
3701 ],
3702 zeitgeist: [
3703 '0x1bf2a2ecb4a868de66ea8610f2ce7c8c43706561b6476031315f6640fe38e060'
3704 ]
3705 };
3706
3707 const knownIcon = {
3708 centrifuge: 'polkadot',
3709 kusama: 'polkadot',
3710 polkadot: 'polkadot',
3711 sora: 'polkadot',
3712 statemine: 'polkadot',
3713 statemint: 'polkadot',
3714 westmint: 'polkadot'
3715 };
3716
3717 const knownLedger = {
3718 acala: 0x00000313,
3719 ajuna: 0x00000162,
3720 'aleph-node': 0x00000283,
3721 astar: 0x0000032a,
3722 bifrost: 0x00000314,
3723 'bifrost-kusama': 0x00000314,
3724 bittensor: 0x00000162,
3725 centrifuge: 0x000002eb,
3726 composable: 0x00000162,
3727 darwinia: 0x00000162,
3728 'dock-mainnet': 0x00000252,
3729 edgeware: 0x0000020b,
3730 encointer: 0x000001b2,
3731 enjin: 0x00000483,
3732 equilibrium: 0x05f5e0fd,
3733 frequency: 0x0000082b,
3734 genshiro: 0x05f5e0fc,
3735 hydradx: 0x00000162,
3736 integritee: 0x000007df,
3737 'interlay-parachain': 0x00000162,
3738 karura: 0x000002ae,
3739 khala: 0x000001b2,
3740 kusama: 0x000001b2,
3741 matrixchain: 0x00000483,
3742 nodle: 0x000003eb,
3743 origintrail: 0x00000162,
3744 parallel: 0x00000162,
3745 peaq: 0x00000d0a,
3746 pendulum: 0x00000162,
3747 phala: 0x00000162,
3748 picasso: 0x000001b2,
3749 polimec: 0x00000d10,
3750 polkadex: 0x0000031f,
3751 polkadot: 0x00000162,
3752 polymesh: 0x00000253,
3753 quartz: 0x00000277,
3754 sora: 0x00000269,
3755 stafi: 0x0000038b,
3756 statemine: 0x000001b2,
3757 statemint: 0x00000162,
3758 ternoa: 0x00003e3,
3759 unique: 0x00000295,
3760 vara: 0x00001370,
3761 vtb: 0x000002b6,
3762 xxnetwork: 0x000007a3,
3763 zeitgeist: 0x00000162
3764 };
3765
3766 const knownTestnet = {
3767 '': true,
3768 'cess-testnet': true,
3769 'dock-testnet': true,
3770 jupiter: true,
3771 'mathchain-testnet': true,
3772 p3dt: true,
3773 subspace_testnet: true,
3774 'zero-alphaville': true
3775 };
3776
3777 const UNSORTED = [0, 2, 42];
3778 const TESTNETS = ['testnet'];
3779 function toExpanded(o) {
3780 const network = o.network || '';
3781 const nameParts = network.replace(/_/g, '-').split('-');
3782 const n = o;
3783 n.slip44 = knownLedger[network];
3784 n.hasLedgerSupport = !!n.slip44;
3785 n.genesisHash = knownGenesis[network] || [];
3786 n.icon = knownIcon[network] || 'substrate';
3787 n.isTestnet = !!knownTestnet[network] || TESTNETS.includes(nameParts[nameParts.length - 1]);
3788 n.isIgnored = n.isTestnet || (!(o.standardAccount &&
3789 o.decimals?.length &&
3790 o.symbols?.length) &&
3791 o.prefix !== 42);
3792 return n;
3793 }
3794 function filterSelectable({ genesisHash, prefix }) {
3795 return !!genesisHash.length || prefix === 42;
3796 }
3797 function filterAvailable(n) {
3798 return !n.isIgnored && !!n.network;
3799 }
3800 function sortNetworks(a, b) {
3801 const isUnSortedA = UNSORTED.includes(a.prefix);
3802 const isUnSortedB = UNSORTED.includes(b.prefix);
3803 return isUnSortedA === isUnSortedB
3804 ? isUnSortedA
3805 ? 0
3806 : a.displayName.localeCompare(b.displayName)
3807 : isUnSortedA
3808 ? -1
3809 : 1;
3810 }
3811 const allNetworks = knownSubstrate.map(toExpanded);
3812 const availableNetworks = allNetworks.filter(filterAvailable).sort(sortNetworks);
3813 const selectableNetworks = availableNetworks.filter(filterSelectable);
3814
3815 const defaults = {
3816 allowedDecodedLengths: [1, 2, 4, 8, 32, 33],
3817 allowedEncodedLengths: [3, 4, 6, 10, 35, 36, 37, 38],
3818 allowedPrefix: availableNetworks.map(({ prefix }) => prefix),
3819 prefix: 42
3820 };
3821
3822 function decodeAddress(encoded, ignoreChecksum, ss58Format = -1) {
3823 if (!encoded) {
3824 throw new Error('Invalid empty address passed');
3825 }
3826 if (util.isU8a(encoded) || util.isHex(encoded)) {
3827 return util.u8aToU8a(encoded);
3828 }
3829 try {
3830 const decoded = base58Decode(encoded);
3831 if (!defaults.allowedEncodedLengths.includes(decoded.length)) {
3832 throw new Error('Invalid decoded address length');
3833 }
3834 const [isValid, endPos, ss58Length, ss58Decoded] = checkAddressChecksum(decoded);
3835 if (!isValid && !ignoreChecksum) {
3836 throw new Error('Invalid decoded address checksum');
3837 }
3838 else if (ss58Format !== -1 && ss58Format !== ss58Decoded) {
3839 throw new Error(`Expected ss58Format ${ss58Format}, received ${ss58Decoded}`);
3840 }
3841 return decoded.slice(ss58Length, endPos);
3842 }
3843 catch (error) {
3844 throw new Error(`Decoding ${encoded}: ${error.message}`);
3845 }
3846 }
3847
3848 function addressToEvm(address, ignoreChecksum) {
3849 return decodeAddress(address, ignoreChecksum).subarray(0, 20);
3850 }
3851
3852 function checkAddress(address, prefix) {
3853 let decoded;
3854 try {
3855 decoded = base58Decode(address);
3856 }
3857 catch (error) {
3858 return [false, error.message];
3859 }
3860 const [isValid, , , ss58Decoded] = checkAddressChecksum(decoded);
3861 if (ss58Decoded !== prefix) {
3862 return [false, `Prefix mismatch, expected ${prefix}, found ${ss58Decoded}`];
3863 }
3864 else if (!defaults.allowedEncodedLengths.includes(decoded.length)) {
3865 return [false, 'Invalid decoded address length'];
3866 }
3867 return [isValid, isValid ? null : 'Invalid decoded address checksum'];
3868 }
3869
3870 const BN_BE_OPTS = { isLe: false };
3871 const BN_LE_OPTS = { isLe: true };
3872 const BN_LE_16_OPTS = { bitLength: 16, isLe: true };
3873 const BN_BE_32_OPTS = { bitLength: 32, isLe: false };
3874 const BN_LE_32_OPTS = { bitLength: 32, isLe: true };
3875 const BN_BE_256_OPTS = { bitLength: 256, isLe: false };
3876 const BN_LE_256_OPTS = { bitLength: 256, isLe: true };
3877 const BN_LE_512_OPTS = { bitLength: 512, isLe: true };
3878
3879 const RE_NUMBER = /^\d+$/;
3880 const JUNCTION_ID_LEN = 32;
3881 class DeriveJunction {
3882 __internal__chainCode = new Uint8Array(32);
3883 __internal__isHard = false;
3884 static from(value) {
3885 const result = new DeriveJunction();
3886 const [code, isHard] = value.startsWith('/')
3887 ? [value.substring(1), true]
3888 : [value, false];
3889 result.soft(RE_NUMBER.test(code)
3890 ? new util.BN(code, 10)
3891 : code);
3892 return isHard
3893 ? result.harden()
3894 : result;
3895 }
3896 get chainCode() {
3897 return this.__internal__chainCode;
3898 }
3899 get isHard() {
3900 return this.__internal__isHard;
3901 }
3902 get isSoft() {
3903 return !this.__internal__isHard;
3904 }
3905 hard(value) {
3906 return this.soft(value).harden();
3907 }
3908 harden() {
3909 this.__internal__isHard = true;
3910 return this;
3911 }
3912 soft(value) {
3913 if (util.isNumber(value) || util.isBn(value) || util.isBigInt(value)) {
3914 return this.soft(util.bnToU8a(value, BN_LE_256_OPTS));
3915 }
3916 else if (util.isHex(value)) {
3917 return this.soft(util.hexToU8a(value));
3918 }
3919 else if (util.isString(value)) {
3920 return this.soft(util.compactAddLength(util.stringToU8a(value)));
3921 }
3922 else if (value.length > JUNCTION_ID_LEN) {
3923 return this.soft(blake2AsU8a(value));
3924 }
3925 this.__internal__chainCode.fill(0);
3926 this.__internal__chainCode.set(value, 0);
3927 return this;
3928 }
3929 soften() {
3930 this.__internal__isHard = false;
3931 return this;
3932 }
3933 }
3934
3935 const RE_JUNCTION = /\/(\/?)([^/]+)/g;
3936 function keyExtractPath(derivePath) {
3937 const parts = derivePath.match(RE_JUNCTION);
3938 const path = [];
3939 let constructed = '';
3940 if (parts) {
3941 constructed = parts.join('');
3942 for (const p of parts) {
3943 path.push(DeriveJunction.from(p.substring(1)));
3944 }
3945 }
3946 if (constructed !== derivePath) {
3947 throw new Error(`Re-constructed path "${constructed}" does not match input`);
3948 }
3949 return {
3950 parts,
3951 path
3952 };
3953 }
3954
3955 const RE_CAPTURE = /^(\w+( \w+)*)((\/\/?[^/]+)*)(\/\/\/(.*))?$/;
3956 function keyExtractSuri(suri) {
3957 const matches = suri.match(RE_CAPTURE);
3958 if (matches === null) {
3959 throw new Error('Unable to match provided value to a secret URI');
3960 }
3961 const [, phrase, , derivePath, , , password] = matches;
3962 const { path } = keyExtractPath(derivePath);
3963 return {
3964 derivePath,
3965 password,
3966 path,
3967 phrase
3968 };
3969 }
3970
3971 const HDKD$1 = util.compactAddLength(util.stringToU8a('Secp256k1HDKD'));
3972 function secp256k1DeriveHard(seed, chainCode) {
3973 if (!util.isU8a(chainCode) || chainCode.length !== 32) {
3974 throw new Error('Invalid chainCode passed to derive');
3975 }
3976 return blake2AsU8a(util.u8aConcat(HDKD$1, seed, chainCode), 256);
3977 }
3978
3979 function setBigUint64(view, byteOffset, value, isLE) {
3980 if (typeof view.setBigUint64 === 'function')
3981 return view.setBigUint64(byteOffset, value, isLE);
3982 const _32n = BigInt(32);
3983 const _u32_max = BigInt(0xffffffff);
3984 const wh = Number((value >> _32n) & _u32_max);
3985 const wl = Number(value & _u32_max);
3986 const h = isLE ? 4 : 0;
3987 const l = isLE ? 0 : 4;
3988 view.setUint32(byteOffset + h, wh, isLE);
3989 view.setUint32(byteOffset + l, wl, isLE);
3990 }
3991 class SHA2 extends Hash {
3992 constructor(blockLen, outputLen, padOffset, isLE) {
3993 super();
3994 this.blockLen = blockLen;
3995 this.outputLen = outputLen;
3996 this.padOffset = padOffset;
3997 this.isLE = isLE;
3998 this.finished = false;
3999 this.length = 0;
4000 this.pos = 0;
4001 this.destroyed = false;
4002 this.buffer = new Uint8Array(blockLen);
4003 this.view = createView(this.buffer);
4004 }
4005 update(data) {
4006 exists(this);
4007 const { view, buffer, blockLen } = this;
4008 data = toBytes(data);
4009 const len = data.length;
4010 for (let pos = 0; pos < len;) {
4011 const take = Math.min(blockLen - this.pos, len - pos);
4012 if (take === blockLen) {
4013 const dataView = createView(data);
4014 for (; blockLen <= len - pos; pos += blockLen)
4015 this.process(dataView, pos);
4016 continue;
4017 }
4018 buffer.set(data.subarray(pos, pos + take), this.pos);
4019 this.pos += take;
4020 pos += take;
4021 if (this.pos === blockLen) {
4022 this.process(view, 0);
4023 this.pos = 0;
4024 }
4025 }
4026 this.length += data.length;
4027 this.roundClean();
4028 return this;
4029 }
4030 digestInto(out) {
4031 exists(this);
4032 output(out, this);
4033 this.finished = true;
4034 const { buffer, view, blockLen, isLE } = this;
4035 let { pos } = this;
4036 buffer[pos++] = 0b10000000;
4037 this.buffer.subarray(pos).fill(0);
4038 if (this.padOffset > blockLen - pos) {
4039 this.process(view, 0);
4040 pos = 0;
4041 }
4042 for (let i = pos; i < blockLen; i++)
4043 buffer[i] = 0;
4044 setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);
4045 this.process(view, 0);
4046 const oview = createView(out);
4047 const len = this.outputLen;
4048 if (len % 4)
4049 throw new Error('_sha2: outputLen should be aligned to 32bit');
4050 const outLen = len / 4;
4051 const state = this.get();
4052 if (outLen > state.length)
4053 throw new Error('_sha2: outputLen bigger than state');
4054 for (let i = 0; i < outLen; i++)
4055 oview.setUint32(4 * i, state[i], isLE);
4056 }
4057 digest() {
4058 const { buffer, outputLen } = this;
4059 this.digestInto(buffer);
4060 const res = buffer.slice(0, outputLen);
4061 this.destroy();
4062 return res;
4063 }
4064 _cloneInto(to) {
4065 to || (to = new this.constructor());
4066 to.set(...this.get());
4067 const { blockLen, buffer, length, finished, destroyed, pos } = this;
4068 to.length = length;
4069 to.pos = pos;
4070 to.finished = finished;
4071 to.destroyed = destroyed;
4072 if (length % blockLen)
4073 to.buffer.set(buffer);
4074 return to;
4075 }
4076 }
4077
4078 const Chi = (a, b, c) => (a & b) ^ (~a & c);
4079 const Maj = (a, b, c) => (a & b) ^ (a & c) ^ (b & c);
4080 const SHA256_K = new Uint32Array([
4081 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
4082 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
4083 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
4084 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
4085 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
4086 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
4087 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
4088 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
4089 ]);
4090 const IV = new Uint32Array([
4091 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
4092 ]);
4093 const SHA256_W = new Uint32Array(64);
4094 class SHA256 extends SHA2 {
4095 constructor() {
4096 super(64, 32, 8, false);
4097 this.A = IV[0] | 0;
4098 this.B = IV[1] | 0;
4099 this.C = IV[2] | 0;
4100 this.D = IV[3] | 0;
4101 this.E = IV[4] | 0;
4102 this.F = IV[5] | 0;
4103 this.G = IV[6] | 0;
4104 this.H = IV[7] | 0;
4105 }
4106 get() {
4107 const { A, B, C, D, E, F, G, H } = this;
4108 return [A, B, C, D, E, F, G, H];
4109 }
4110 set(A, B, C, D, E, F, G, H) {
4111 this.A = A | 0;
4112 this.B = B | 0;
4113 this.C = C | 0;
4114 this.D = D | 0;
4115 this.E = E | 0;
4116 this.F = F | 0;
4117 this.G = G | 0;
4118 this.H = H | 0;
4119 }
4120 process(view, offset) {
4121 for (let i = 0; i < 16; i++, offset += 4)
4122 SHA256_W[i] = view.getUint32(offset, false);
4123 for (let i = 16; i < 64; i++) {
4124 const W15 = SHA256_W[i - 15];
4125 const W2 = SHA256_W[i - 2];
4126 const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);
4127 const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);
4128 SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;
4129 }
4130 let { A, B, C, D, E, F, G, H } = this;
4131 for (let i = 0; i < 64; i++) {
4132 const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);
4133 const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;
4134 const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);
4135 const T2 = (sigma0 + Maj(A, B, C)) | 0;
4136 H = G;
4137 G = F;
4138 F = E;
4139 E = (D + T1) | 0;
4140 D = C;
4141 C = B;
4142 B = A;
4143 A = (T1 + T2) | 0;
4144 }
4145 A = (A + this.A) | 0;
4146 B = (B + this.B) | 0;
4147 C = (C + this.C) | 0;
4148 D = (D + this.D) | 0;
4149 E = (E + this.E) | 0;
4150 F = (F + this.F) | 0;
4151 G = (G + this.G) | 0;
4152 H = (H + this.H) | 0;
4153 this.set(A, B, C, D, E, F, G, H);
4154 }
4155 roundClean() {
4156 SHA256_W.fill(0);
4157 }
4158 destroy() {
4159 this.set(0, 0, 0, 0, 0, 0, 0, 0);
4160 this.buffer.fill(0);
4161 }
4162 }
4163 class SHA224 extends SHA256 {
4164 constructor() {
4165 super();
4166 this.A = 0xc1059ed8 | 0;
4167 this.B = 0x367cd507 | 0;
4168 this.C = 0x3070dd17 | 0;
4169 this.D = 0xf70e5939 | 0;
4170 this.E = 0xffc00b31 | 0;
4171 this.F = 0x68581511 | 0;
4172 this.G = 0x64f98fa7 | 0;
4173 this.H = 0xbefa4fa4 | 0;
4174 this.outputLen = 28;
4175 }
4176 }
4177 const sha256 = wrapConstructor(() => new SHA256());
4178 wrapConstructor(() => new SHA224());
4179
4180 /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
4181 const _0n$8 = BigInt(0);
4182 const _1n$8 = BigInt(1);
4183 const _2n$6 = BigInt(2);
4184 function isBytes(a) {
4185 return (a instanceof Uint8Array ||
4186 (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array'));
4187 }
4188 const hexes = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));
4189 function bytesToHex(bytes) {
4190 if (!isBytes(bytes))
4191 throw new Error('Uint8Array expected');
4192 let hex = '';
4193 for (let i = 0; i < bytes.length; i++) {
4194 hex += hexes[bytes[i]];
4195 }
4196 return hex;
4197 }
4198 function numberToHexUnpadded(num) {
4199 const hex = num.toString(16);
4200 return hex.length & 1 ? `0${hex}` : hex;
4201 }
4202 function hexToNumber(hex) {
4203 if (typeof hex !== 'string')
4204 throw new Error('hex string expected, got ' + typeof hex);
4205 return BigInt(hex === '' ? '0' : `0x${hex}`);
4206 }
4207 const asciis = { _0: 48, _9: 57, _A: 65, _F: 70, _a: 97, _f: 102 };
4208 function asciiToBase16(char) {
4209 if (char >= asciis._0 && char <= asciis._9)
4210 return char - asciis._0;
4211 if (char >= asciis._A && char <= asciis._F)
4212 return char - (asciis._A - 10);
4213 if (char >= asciis._a && char <= asciis._f)
4214 return char - (asciis._a - 10);
4215 return;
4216 }
4217 function hexToBytes(hex) {
4218 if (typeof hex !== 'string')
4219 throw new Error('hex string expected, got ' + typeof hex);
4220 const hl = hex.length;
4221 const al = hl / 2;
4222 if (hl % 2)
4223 throw new Error('padded hex string expected, got unpadded hex of length ' + hl);
4224 const array = new Uint8Array(al);
4225 for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {
4226 const n1 = asciiToBase16(hex.charCodeAt(hi));
4227 const n2 = asciiToBase16(hex.charCodeAt(hi + 1));
4228 if (n1 === undefined || n2 === undefined) {
4229 const char = hex[hi] + hex[hi + 1];
4230 throw new Error('hex string expected, got non-hex character "' + char + '" at index ' + hi);
4231 }
4232 array[ai] = n1 * 16 + n2;
4233 }
4234 return array;
4235 }
4236 function bytesToNumberBE(bytes) {
4237 return hexToNumber(bytesToHex(bytes));
4238 }
4239 function bytesToNumberLE(bytes) {
4240 if (!isBytes(bytes))
4241 throw new Error('Uint8Array expected');
4242 return hexToNumber(bytesToHex(Uint8Array.from(bytes).reverse()));
4243 }
4244 function numberToBytesBE(n, len) {
4245 return hexToBytes(n.toString(16).padStart(len * 2, '0'));
4246 }
4247 function numberToBytesLE(n, len) {
4248 return numberToBytesBE(n, len).reverse();
4249 }
4250 function numberToVarBytesBE(n) {
4251 return hexToBytes(numberToHexUnpadded(n));
4252 }
4253 function ensureBytes(title, hex, expectedLength) {
4254 let res;
4255 if (typeof hex === 'string') {
4256 try {
4257 res = hexToBytes(hex);
4258 }
4259 catch (e) {
4260 throw new Error(`${title} must be valid hex string, got "${hex}". Cause: ${e}`);
4261 }
4262 }
4263 else if (isBytes(hex)) {
4264 res = Uint8Array.from(hex);
4265 }
4266 else {
4267 throw new Error(`${title} must be hex string or Uint8Array`);
4268 }
4269 const len = res.length;
4270 if (typeof expectedLength === 'number' && len !== expectedLength)
4271 throw new Error(`${title} expected ${expectedLength} bytes, got ${len}`);
4272 return res;
4273 }
4274 function concatBytes(...arrays) {
4275 let sum = 0;
4276 for (let i = 0; i < arrays.length; i++) {
4277 const a = arrays[i];
4278 if (!isBytes(a))
4279 throw new Error('Uint8Array expected');
4280 sum += a.length;
4281 }
4282 let res = new Uint8Array(sum);
4283 let pad = 0;
4284 for (let i = 0; i < arrays.length; i++) {
4285 const a = arrays[i];
4286 res.set(a, pad);
4287 pad += a.length;
4288 }
4289 return res;
4290 }
4291 function equalBytes(a, b) {
4292 if (a.length !== b.length)
4293 return false;
4294 let diff = 0;
4295 for (let i = 0; i < a.length; i++)
4296 diff |= a[i] ^ b[i];
4297 return diff === 0;
4298 }
4299 function utf8ToBytes(str) {
4300 if (typeof str !== 'string')
4301 throw new Error(`utf8ToBytes expected string, got ${typeof str}`);
4302 return new Uint8Array(new TextEncoder().encode(str));
4303 }
4304 function bitLen(n) {
4305 let len;
4306 for (len = 0; n > _0n$8; n >>= _1n$8, len += 1)
4307 ;
4308 return len;
4309 }
4310 function bitGet(n, pos) {
4311 return (n >> BigInt(pos)) & _1n$8;
4312 }
4313 const bitSet = (n, pos, value) => {
4314 return n | ((value ? _1n$8 : _0n$8) << BigInt(pos));
4315 };
4316 const bitMask = (n) => (_2n$6 << BigInt(n - 1)) - _1n$8;
4317 const u8n = (data) => new Uint8Array(data);
4318 const u8fr = (arr) => Uint8Array.from(arr);
4319 function createHmacDrbg(hashLen, qByteLen, hmacFn) {
4320 if (typeof hashLen !== 'number' || hashLen < 2)
4321 throw new Error('hashLen must be a number');
4322 if (typeof qByteLen !== 'number' || qByteLen < 2)
4323 throw new Error('qByteLen must be a number');
4324 if (typeof hmacFn !== 'function')
4325 throw new Error('hmacFn must be a function');
4326 let v = u8n(hashLen);
4327 let k = u8n(hashLen);
4328 let i = 0;
4329 const reset = () => {
4330 v.fill(1);
4331 k.fill(0);
4332 i = 0;
4333 };
4334 const h = (...b) => hmacFn(k, v, ...b);
4335 const reseed = (seed = u8n()) => {
4336 k = h(u8fr([0x00]), seed);
4337 v = h();
4338 if (seed.length === 0)
4339 return;
4340 k = h(u8fr([0x01]), seed);
4341 v = h();
4342 };
4343 const gen = () => {
4344 if (i++ >= 1000)
4345 throw new Error('drbg: tried 1000 values');
4346 let len = 0;
4347 const out = [];
4348 while (len < qByteLen) {
4349 v = h();
4350 const sl = v.slice();
4351 out.push(sl);
4352 len += v.length;
4353 }
4354 return concatBytes(...out);
4355 };
4356 const genUntil = (seed, pred) => {
4357 reset();
4358 reseed(seed);
4359 let res = undefined;
4360 while (!(res = pred(gen())))
4361 reseed();
4362 reset();
4363 return res;
4364 };
4365 return genUntil;
4366 }
4367 const validatorFns = {
4368 bigint: (val) => typeof val === 'bigint',
4369 function: (val) => typeof val === 'function',
4370 boolean: (val) => typeof val === 'boolean',
4371 string: (val) => typeof val === 'string',
4372 stringOrUint8Array: (val) => typeof val === 'string' || isBytes(val),
4373 isSafeInteger: (val) => Number.isSafeInteger(val),
4374 array: (val) => Array.isArray(val),
4375 field: (val, object) => object.Fp.isValid(val),
4376 hash: (val) => typeof val === 'function' && Number.isSafeInteger(val.outputLen),
4377 };
4378 function validateObject(object, validators, optValidators = {}) {
4379 const checkField = (fieldName, type, isOptional) => {
4380 const checkVal = validatorFns[type];
4381 if (typeof checkVal !== 'function')
4382 throw new Error(`Invalid validator "${type}", expected function`);
4383 const val = object[fieldName];
4384 if (isOptional && val === undefined)
4385 return;
4386 if (!checkVal(val, object)) {
4387 throw new Error(`Invalid param ${String(fieldName)}=${val} (${typeof val}), expected ${type}`);
4388 }
4389 };
4390 for (const [fieldName, type] of Object.entries(validators))
4391 checkField(fieldName, type, false);
4392 for (const [fieldName, type] of Object.entries(optValidators))
4393 checkField(fieldName, type, true);
4394 return object;
4395 }
4396
4397 const ut = /*#__PURE__*/Object.freeze({
4398 __proto__: null,
4399 bitGet: bitGet,
4400 bitLen: bitLen,
4401 bitMask: bitMask,
4402 bitSet: bitSet,
4403 bytesToHex: bytesToHex,
4404 bytesToNumberBE: bytesToNumberBE,
4405 bytesToNumberLE: bytesToNumberLE,
4406 concatBytes: concatBytes,
4407 createHmacDrbg: createHmacDrbg,
4408 ensureBytes: ensureBytes,
4409 equalBytes: equalBytes,
4410 hexToBytes: hexToBytes,
4411 hexToNumber: hexToNumber,
4412 isBytes: isBytes,
4413 numberToBytesBE: numberToBytesBE,
4414 numberToBytesLE: numberToBytesLE,
4415 numberToHexUnpadded: numberToHexUnpadded,
4416 numberToVarBytesBE: numberToVarBytesBE,
4417 utf8ToBytes: utf8ToBytes,
4418 validateObject: validateObject
4419 });
4420
4421 /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
4422 const _0n$7 = BigInt(0), _1n$7 = BigInt(1), _2n$5 = BigInt(2), _3n$1 = BigInt(3);
4423 const _4n$1 = BigInt(4), _5n$1 = BigInt(5), _8n$1 = BigInt(8);
4424 BigInt(9); BigInt(16);
4425 function mod(a, b) {
4426 const result = a % b;
4427 return result >= _0n$7 ? result : b + result;
4428 }
4429 function pow(num, power, modulo) {
4430 if (modulo <= _0n$7 || power < _0n$7)
4431 throw new Error('Expected power/modulo > 0');
4432 if (modulo === _1n$7)
4433 return _0n$7;
4434 let res = _1n$7;
4435 while (power > _0n$7) {
4436 if (power & _1n$7)
4437 res = (res * num) % modulo;
4438 num = (num * num) % modulo;
4439 power >>= _1n$7;
4440 }
4441 return res;
4442 }
4443 function pow2(x, power, modulo) {
4444 let res = x;
4445 while (power-- > _0n$7) {
4446 res *= res;
4447 res %= modulo;
4448 }
4449 return res;
4450 }
4451 function invert(number, modulo) {
4452 if (number === _0n$7 || modulo <= _0n$7) {
4453 throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);
4454 }
4455 let a = mod(number, modulo);
4456 let b = modulo;
4457 let x = _0n$7, u = _1n$7;
4458 while (a !== _0n$7) {
4459 const q = b / a;
4460 const r = b % a;
4461 const m = x - u * q;
4462 b = a, a = r, x = u, u = m;
4463 }
4464 const gcd = b;
4465 if (gcd !== _1n$7)
4466 throw new Error('invert: does not exist');
4467 return mod(x, modulo);
4468 }
4469 function tonelliShanks(P) {
4470 const legendreC = (P - _1n$7) / _2n$5;
4471 let Q, S, Z;
4472 for (Q = P - _1n$7, S = 0; Q % _2n$5 === _0n$7; Q /= _2n$5, S++)
4473 ;
4474 for (Z = _2n$5; Z < P && pow(Z, legendreC, P) !== P - _1n$7; Z++)
4475 ;
4476 if (S === 1) {
4477 const p1div4 = (P + _1n$7) / _4n$1;
4478 return function tonelliFast(Fp, n) {
4479 const root = Fp.pow(n, p1div4);
4480 if (!Fp.eql(Fp.sqr(root), n))
4481 throw new Error('Cannot find square root');
4482 return root;
4483 };
4484 }
4485 const Q1div2 = (Q + _1n$7) / _2n$5;
4486 return function tonelliSlow(Fp, n) {
4487 if (Fp.pow(n, legendreC) === Fp.neg(Fp.ONE))
4488 throw new Error('Cannot find square root');
4489 let r = S;
4490 let g = Fp.pow(Fp.mul(Fp.ONE, Z), Q);
4491 let x = Fp.pow(n, Q1div2);
4492 let b = Fp.pow(n, Q);
4493 while (!Fp.eql(b, Fp.ONE)) {
4494 if (Fp.eql(b, Fp.ZERO))
4495 return Fp.ZERO;
4496 let m = 1;
4497 for (let t2 = Fp.sqr(b); m < r; m++) {
4498 if (Fp.eql(t2, Fp.ONE))
4499 break;
4500 t2 = Fp.sqr(t2);
4501 }
4502 const ge = Fp.pow(g, _1n$7 << BigInt(r - m - 1));
4503 g = Fp.sqr(ge);
4504 x = Fp.mul(x, ge);
4505 b = Fp.mul(b, g);
4506 r = m;
4507 }
4508 return x;
4509 };
4510 }
4511 function FpSqrt(P) {
4512 if (P % _4n$1 === _3n$1) {
4513 const p1div4 = (P + _1n$7) / _4n$1;
4514 return function sqrt3mod4(Fp, n) {
4515 const root = Fp.pow(n, p1div4);
4516 if (!Fp.eql(Fp.sqr(root), n))
4517 throw new Error('Cannot find square root');
4518 return root;
4519 };
4520 }
4521 if (P % _8n$1 === _5n$1) {
4522 const c1 = (P - _5n$1) / _8n$1;
4523 return function sqrt5mod8(Fp, n) {
4524 const n2 = Fp.mul(n, _2n$5);
4525 const v = Fp.pow(n2, c1);
4526 const nv = Fp.mul(n, v);
4527 const i = Fp.mul(Fp.mul(nv, _2n$5), v);
4528 const root = Fp.mul(nv, Fp.sub(i, Fp.ONE));
4529 if (!Fp.eql(Fp.sqr(root), n))
4530 throw new Error('Cannot find square root');
4531 return root;
4532 };
4533 }
4534 return tonelliShanks(P);
4535 }
4536 const isNegativeLE = (num, modulo) => (mod(num, modulo) & _1n$7) === _1n$7;
4537 const FIELD_FIELDS = [
4538 'create', 'isValid', 'is0', 'neg', 'inv', 'sqrt', 'sqr',
4539 'eql', 'add', 'sub', 'mul', 'pow', 'div',
4540 'addN', 'subN', 'mulN', 'sqrN'
4541 ];
4542 function validateField(field) {
4543 const initial = {
4544 ORDER: 'bigint',
4545 MASK: 'bigint',
4546 BYTES: 'isSafeInteger',
4547 BITS: 'isSafeInteger',
4548 };
4549 const opts = FIELD_FIELDS.reduce((map, val) => {
4550 map[val] = 'function';
4551 return map;
4552 }, initial);
4553 return validateObject(field, opts);
4554 }
4555 function FpPow(f, num, power) {
4556 if (power < _0n$7)
4557 throw new Error('Expected power > 0');
4558 if (power === _0n$7)
4559 return f.ONE;
4560 if (power === _1n$7)
4561 return num;
4562 let p = f.ONE;
4563 let d = num;
4564 while (power > _0n$7) {
4565 if (power & _1n$7)
4566 p = f.mul(p, d);
4567 d = f.sqr(d);
4568 power >>= _1n$7;
4569 }
4570 return p;
4571 }
4572 function FpInvertBatch(f, nums) {
4573 const tmp = new Array(nums.length);
4574 const lastMultiplied = nums.reduce((acc, num, i) => {
4575 if (f.is0(num))
4576 return acc;
4577 tmp[i] = acc;
4578 return f.mul(acc, num);
4579 }, f.ONE);
4580 const inverted = f.inv(lastMultiplied);
4581 nums.reduceRight((acc, num, i) => {
4582 if (f.is0(num))
4583 return acc;
4584 tmp[i] = f.mul(acc, tmp[i]);
4585 return f.mul(acc, num);
4586 }, inverted);
4587 return tmp;
4588 }
4589 function nLength(n, nBitLength) {
4590 const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length;
4591 const nByteLength = Math.ceil(_nBitLength / 8);
4592 return { nBitLength: _nBitLength, nByteLength };
4593 }
4594 function Field(ORDER, bitLen, isLE = false, redef = {}) {
4595 if (ORDER <= _0n$7)
4596 throw new Error(`Expected Field ORDER > 0, got ${ORDER}`);
4597 const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, bitLen);
4598 if (BYTES > 2048)
4599 throw new Error('Field lengths over 2048 bytes are not supported');
4600 const sqrtP = FpSqrt(ORDER);
4601 const f = Object.freeze({
4602 ORDER,
4603 BITS,
4604 BYTES,
4605 MASK: bitMask(BITS),
4606 ZERO: _0n$7,
4607 ONE: _1n$7,
4608 create: (num) => mod(num, ORDER),
4609 isValid: (num) => {
4610 if (typeof num !== 'bigint')
4611 throw new Error(`Invalid field element: expected bigint, got ${typeof num}`);
4612 return _0n$7 <= num && num < ORDER;
4613 },
4614 is0: (num) => num === _0n$7,
4615 isOdd: (num) => (num & _1n$7) === _1n$7,
4616 neg: (num) => mod(-num, ORDER),
4617 eql: (lhs, rhs) => lhs === rhs,
4618 sqr: (num) => mod(num * num, ORDER),
4619 add: (lhs, rhs) => mod(lhs + rhs, ORDER),
4620 sub: (lhs, rhs) => mod(lhs - rhs, ORDER),
4621 mul: (lhs, rhs) => mod(lhs * rhs, ORDER),
4622 pow: (num, power) => FpPow(f, num, power),
4623 div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER),
4624 sqrN: (num) => num * num,
4625 addN: (lhs, rhs) => lhs + rhs,
4626 subN: (lhs, rhs) => lhs - rhs,
4627 mulN: (lhs, rhs) => lhs * rhs,
4628 inv: (num) => invert(num, ORDER),
4629 sqrt: redef.sqrt || ((n) => sqrtP(f, n)),
4630 invertBatch: (lst) => FpInvertBatch(f, lst),
4631 cmov: (a, b, c) => (c ? b : a),
4632 toBytes: (num) => (isLE ? numberToBytesLE(num, BYTES) : numberToBytesBE(num, BYTES)),
4633 fromBytes: (bytes) => {
4634 if (bytes.length !== BYTES)
4635 throw new Error(`Fp.fromBytes: expected ${BYTES}, got ${bytes.length}`);
4636 return isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);
4637 },
4638 });
4639 return Object.freeze(f);
4640 }
4641 function FpSqrtEven(Fp, elm) {
4642 if (!Fp.isOdd)
4643 throw new Error(`Field doesn't have isOdd`);
4644 const root = Fp.sqrt(elm);
4645 return Fp.isOdd(root) ? Fp.neg(root) : root;
4646 }
4647 function getFieldBytesLength(fieldOrder) {
4648 if (typeof fieldOrder !== 'bigint')
4649 throw new Error('field order must be bigint');
4650 const bitLength = fieldOrder.toString(2).length;
4651 return Math.ceil(bitLength / 8);
4652 }
4653 function getMinHashLength(fieldOrder) {
4654 const length = getFieldBytesLength(fieldOrder);
4655 return length + Math.ceil(length / 2);
4656 }
4657 function mapHashToField(key, fieldOrder, isLE = false) {
4658 const len = key.length;
4659 const fieldLen = getFieldBytesLength(fieldOrder);
4660 const minLen = getMinHashLength(fieldOrder);
4661 if (len < 16 || len < minLen || len > 1024)
4662 throw new Error(`expected ${minLen}-1024 bytes of input, got ${len}`);
4663 const num = isLE ? bytesToNumberBE(key) : bytesToNumberLE(key);
4664 const reduced = mod(num, fieldOrder - _1n$7) + _1n$7;
4665 return isLE ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE(reduced, fieldLen);
4666 }
4667
4668 /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
4669 const _0n$6 = BigInt(0);
4670 const _1n$6 = BigInt(1);
4671 function wNAF(c, bits) {
4672 const constTimeNegate = (condition, item) => {
4673 const neg = item.negate();
4674 return condition ? neg : item;
4675 };
4676 const opts = (W) => {
4677 const windows = Math.ceil(bits / W) + 1;
4678 const windowSize = 2 ** (W - 1);
4679 return { windows, windowSize };
4680 };
4681 return {
4682 constTimeNegate,
4683 unsafeLadder(elm, n) {
4684 let p = c.ZERO;
4685 let d = elm;
4686 while (n > _0n$6) {
4687 if (n & _1n$6)
4688 p = p.add(d);
4689 d = d.double();
4690 n >>= _1n$6;
4691 }
4692 return p;
4693 },
4694 precomputeWindow(elm, W) {
4695 const { windows, windowSize } = opts(W);
4696 const points = [];
4697 let p = elm;
4698 let base = p;
4699 for (let window = 0; window < windows; window++) {
4700 base = p;
4701 points.push(base);
4702 for (let i = 1; i < windowSize; i++) {
4703 base = base.add(p);
4704 points.push(base);
4705 }
4706 p = base.double();
4707 }
4708 return points;
4709 },
4710 wNAF(W, precomputes, n) {
4711 const { windows, windowSize } = opts(W);
4712 let p = c.ZERO;
4713 let f = c.BASE;
4714 const mask = BigInt(2 ** W - 1);
4715 const maxNumber = 2 ** W;
4716 const shiftBy = BigInt(W);
4717 for (let window = 0; window < windows; window++) {
4718 const offset = window * windowSize;
4719 let wbits = Number(n & mask);
4720 n >>= shiftBy;
4721 if (wbits > windowSize) {
4722 wbits -= maxNumber;
4723 n += _1n$6;
4724 }
4725 const offset1 = offset;
4726 const offset2 = offset + Math.abs(wbits) - 1;
4727 const cond1 = window % 2 !== 0;
4728 const cond2 = wbits < 0;
4729 if (wbits === 0) {
4730 f = f.add(constTimeNegate(cond1, precomputes[offset1]));
4731 }
4732 else {
4733 p = p.add(constTimeNegate(cond2, precomputes[offset2]));
4734 }
4735 }
4736 return { p, f };
4737 },
4738 wNAFCached(P, precomputesMap, n, transform) {
4739 const W = P._WINDOW_SIZE || 1;
4740 let comp = precomputesMap.get(P);
4741 if (!comp) {
4742 comp = this.precomputeWindow(P, W);
4743 if (W !== 1) {
4744 precomputesMap.set(P, transform(comp));
4745 }
4746 }
4747 return this.wNAF(W, comp, n);
4748 },
4749 };
4750 }
4751 function validateBasic(curve) {
4752 validateField(curve.Fp);
4753 validateObject(curve, {
4754 n: 'bigint',
4755 h: 'bigint',
4756 Gx: 'field',
4757 Gy: 'field',
4758 }, {
4759 nBitLength: 'isSafeInteger',
4760 nByteLength: 'isSafeInteger',
4761 });
4762 return Object.freeze({
4763 ...nLength(curve.n, curve.nBitLength),
4764 ...curve,
4765 ...{ p: curve.Fp.ORDER },
4766 });
4767 }
4768
4769 /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
4770 function validatePointOpts(curve) {
4771 const opts = validateBasic(curve);
4772 validateObject(opts, {
4773 a: 'field',
4774 b: 'field',
4775 }, {
4776 allowedPrivateKeyLengths: 'array',
4777 wrapPrivateKey: 'boolean',
4778 isTorsionFree: 'function',
4779 clearCofactor: 'function',
4780 allowInfinityPoint: 'boolean',
4781 fromBytes: 'function',
4782 toBytes: 'function',
4783 });
4784 const { endo, Fp, a } = opts;
4785 if (endo) {
4786 if (!Fp.eql(a, Fp.ZERO)) {
4787 throw new Error('Endomorphism can only be defined for Koblitz curves that have a=0');
4788 }
4789 if (typeof endo !== 'object' ||
4790 typeof endo.beta !== 'bigint' ||
4791 typeof endo.splitScalar !== 'function') {
4792 throw new Error('Expected endomorphism with beta: bigint and splitScalar: function');
4793 }
4794 }
4795 return Object.freeze({ ...opts });
4796 }
4797 const { bytesToNumberBE: b2n, hexToBytes: h2b } = ut;
4798 const DER = {
4799 Err: class DERErr extends Error {
4800 constructor(m = '') {
4801 super(m);
4802 }
4803 },
4804 _parseInt(data) {
4805 const { Err: E } = DER;
4806 if (data.length < 2 || data[0] !== 0x02)
4807 throw new E('Invalid signature integer tag');
4808 const len = data[1];
4809 const res = data.subarray(2, len + 2);
4810 if (!len || res.length !== len)
4811 throw new E('Invalid signature integer: wrong length');
4812 if (res[0] & 0b10000000)
4813 throw new E('Invalid signature integer: negative');
4814 if (res[0] === 0x00 && !(res[1] & 0b10000000))
4815 throw new E('Invalid signature integer: unnecessary leading zero');
4816 return { d: b2n(res), l: data.subarray(len + 2) };
4817 },
4818 toSig(hex) {
4819 const { Err: E } = DER;
4820 const data = typeof hex === 'string' ? h2b(hex) : hex;
4821 if (!isBytes(data))
4822 throw new Error('ui8a expected');
4823 let l = data.length;
4824 if (l < 2 || data[0] != 0x30)
4825 throw new E('Invalid signature tag');
4826 if (data[1] !== l - 2)
4827 throw new E('Invalid signature: incorrect length');
4828 const { d: r, l: sBytes } = DER._parseInt(data.subarray(2));
4829 const { d: s, l: rBytesLeft } = DER._parseInt(sBytes);
4830 if (rBytesLeft.length)
4831 throw new E('Invalid signature: left bytes after parsing');
4832 return { r, s };
4833 },
4834 hexFromSig(sig) {
4835 const slice = (s) => (Number.parseInt(s[0], 16) & 0b1000 ? '00' + s : s);
4836 const h = (num) => {
4837 const hex = num.toString(16);
4838 return hex.length & 1 ? `0${hex}` : hex;
4839 };
4840 const s = slice(h(sig.s));
4841 const r = slice(h(sig.r));
4842 const shl = s.length / 2;
4843 const rhl = r.length / 2;
4844 const sl = h(shl);
4845 const rl = h(rhl);
4846 return `30${h(rhl + shl + 4)}02${rl}${r}02${sl}${s}`;
4847 },
4848 };
4849 const _0n$5 = BigInt(0), _1n$5 = BigInt(1), _2n$4 = BigInt(2), _3n = BigInt(3), _4n = BigInt(4);
4850 function weierstrassPoints(opts) {
4851 const CURVE = validatePointOpts(opts);
4852 const { Fp } = CURVE;
4853 const toBytes = CURVE.toBytes ||
4854 ((_c, point, _isCompressed) => {
4855 const a = point.toAffine();
4856 return concatBytes(Uint8Array.from([0x04]), Fp.toBytes(a.x), Fp.toBytes(a.y));
4857 });
4858 const fromBytes = CURVE.fromBytes ||
4859 ((bytes) => {
4860 const tail = bytes.subarray(1);
4861 const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));
4862 const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));
4863 return { x, y };
4864 });
4865 function weierstrassEquation(x) {
4866 const { a, b } = CURVE;
4867 const x2 = Fp.sqr(x);
4868 const x3 = Fp.mul(x2, x);
4869 return Fp.add(Fp.add(x3, Fp.mul(x, a)), b);
4870 }
4871 if (!Fp.eql(Fp.sqr(CURVE.Gy), weierstrassEquation(CURVE.Gx)))
4872 throw new Error('bad generator point: equation left != right');
4873 function isWithinCurveOrder(num) {
4874 return typeof num === 'bigint' && _0n$5 < num && num < CURVE.n;
4875 }
4876 function assertGE(num) {
4877 if (!isWithinCurveOrder(num))
4878 throw new Error('Expected valid bigint: 0 < bigint < curve.n');
4879 }
4880 function normPrivateKeyToScalar(key) {
4881 const { allowedPrivateKeyLengths: lengths, nByteLength, wrapPrivateKey, n } = CURVE;
4882 if (lengths && typeof key !== 'bigint') {
4883 if (isBytes(key))
4884 key = bytesToHex(key);
4885 if (typeof key !== 'string' || !lengths.includes(key.length))
4886 throw new Error('Invalid key');
4887 key = key.padStart(nByteLength * 2, '0');
4888 }
4889 let num;
4890 try {
4891 num =
4892 typeof key === 'bigint'
4893 ? key
4894 : bytesToNumberBE(ensureBytes('private key', key, nByteLength));
4895 }
4896 catch (error) {
4897 throw new Error(`private key must be ${nByteLength} bytes, hex or bigint, not ${typeof key}`);
4898 }
4899 if (wrapPrivateKey)
4900 num = mod(num, n);
4901 assertGE(num);
4902 return num;
4903 }
4904 const pointPrecomputes = new Map();
4905 function assertPrjPoint(other) {
4906 if (!(other instanceof Point))
4907 throw new Error('ProjectivePoint expected');
4908 }
4909 class Point {
4910 constructor(px, py, pz) {
4911 this.px = px;
4912 this.py = py;
4913 this.pz = pz;
4914 if (px == null || !Fp.isValid(px))
4915 throw new Error('x required');
4916 if (py == null || !Fp.isValid(py))
4917 throw new Error('y required');
4918 if (pz == null || !Fp.isValid(pz))
4919 throw new Error('z required');
4920 }
4921 static fromAffine(p) {
4922 const { x, y } = p || {};
4923 if (!p || !Fp.isValid(x) || !Fp.isValid(y))
4924 throw new Error('invalid affine point');
4925 if (p instanceof Point)
4926 throw new Error('projective point not allowed');
4927 const is0 = (i) => Fp.eql(i, Fp.ZERO);
4928 if (is0(x) && is0(y))
4929 return Point.ZERO;
4930 return new Point(x, y, Fp.ONE);
4931 }
4932 get x() {
4933 return this.toAffine().x;
4934 }
4935 get y() {
4936 return this.toAffine().y;
4937 }
4938 static normalizeZ(points) {
4939 const toInv = Fp.invertBatch(points.map((p) => p.pz));
4940 return points.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);
4941 }
4942 static fromHex(hex) {
4943 const P = Point.fromAffine(fromBytes(ensureBytes('pointHex', hex)));
4944 P.assertValidity();
4945 return P;
4946 }
4947 static fromPrivateKey(privateKey) {
4948 return Point.BASE.multiply(normPrivateKeyToScalar(privateKey));
4949 }
4950 _setWindowSize(windowSize) {
4951 this._WINDOW_SIZE = windowSize;
4952 pointPrecomputes.delete(this);
4953 }
4954 assertValidity() {
4955 if (this.is0()) {
4956 if (CURVE.allowInfinityPoint && !Fp.is0(this.py))
4957 return;
4958 throw new Error('bad point: ZERO');
4959 }
4960 const { x, y } = this.toAffine();
4961 if (!Fp.isValid(x) || !Fp.isValid(y))
4962 throw new Error('bad point: x or y not FE');
4963 const left = Fp.sqr(y);
4964 const right = weierstrassEquation(x);
4965 if (!Fp.eql(left, right))
4966 throw new Error('bad point: equation left != right');
4967 if (!this.isTorsionFree())
4968 throw new Error('bad point: not in prime-order subgroup');
4969 }
4970 hasEvenY() {
4971 const { y } = this.toAffine();
4972 if (Fp.isOdd)
4973 return !Fp.isOdd(y);
4974 throw new Error("Field doesn't support isOdd");
4975 }
4976 equals(other) {
4977 assertPrjPoint(other);
4978 const { px: X1, py: Y1, pz: Z1 } = this;
4979 const { px: X2, py: Y2, pz: Z2 } = other;
4980 const U1 = Fp.eql(Fp.mul(X1, Z2), Fp.mul(X2, Z1));
4981 const U2 = Fp.eql(Fp.mul(Y1, Z2), Fp.mul(Y2, Z1));
4982 return U1 && U2;
4983 }
4984 negate() {
4985 return new Point(this.px, Fp.neg(this.py), this.pz);
4986 }
4987 double() {
4988 const { a, b } = CURVE;
4989 const b3 = Fp.mul(b, _3n);
4990 const { px: X1, py: Y1, pz: Z1 } = this;
4991 let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO;
4992 let t0 = Fp.mul(X1, X1);
4993 let t1 = Fp.mul(Y1, Y1);
4994 let t2 = Fp.mul(Z1, Z1);
4995 let t3 = Fp.mul(X1, Y1);
4996 t3 = Fp.add(t3, t3);
4997 Z3 = Fp.mul(X1, Z1);
4998 Z3 = Fp.add(Z3, Z3);
4999 X3 = Fp.mul(a, Z3);
5000 Y3 = Fp.mul(b3, t2);
5001 Y3 = Fp.add(X3, Y3);
5002 X3 = Fp.sub(t1, Y3);
5003 Y3 = Fp.add(t1, Y3);
5004 Y3 = Fp.mul(X3, Y3);
5005 X3 = Fp.mul(t3, X3);
5006 Z3 = Fp.mul(b3, Z3);
5007 t2 = Fp.mul(a, t2);
5008 t3 = Fp.sub(t0, t2);
5009 t3 = Fp.mul(a, t3);
5010 t3 = Fp.add(t3, Z3);
5011 Z3 = Fp.add(t0, t0);
5012 t0 = Fp.add(Z3, t0);
5013 t0 = Fp.add(t0, t2);
5014 t0 = Fp.mul(t0, t3);
5015 Y3 = Fp.add(Y3, t0);
5016 t2 = Fp.mul(Y1, Z1);
5017 t2 = Fp.add(t2, t2);
5018 t0 = Fp.mul(t2, t3);
5019 X3 = Fp.sub(X3, t0);
5020 Z3 = Fp.mul(t2, t1);
5021 Z3 = Fp.add(Z3, Z3);
5022 Z3 = Fp.add(Z3, Z3);
5023 return new Point(X3, Y3, Z3);
5024 }
5025 add(other) {
5026 assertPrjPoint(other);
5027 const { px: X1, py: Y1, pz: Z1 } = this;
5028 const { px: X2, py: Y2, pz: Z2 } = other;
5029 let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO;
5030 const a = CURVE.a;
5031 const b3 = Fp.mul(CURVE.b, _3n);
5032 let t0 = Fp.mul(X1, X2);
5033 let t1 = Fp.mul(Y1, Y2);
5034 let t2 = Fp.mul(Z1, Z2);
5035 let t3 = Fp.add(X1, Y1);
5036 let t4 = Fp.add(X2, Y2);
5037 t3 = Fp.mul(t3, t4);
5038 t4 = Fp.add(t0, t1);
5039 t3 = Fp.sub(t3, t4);
5040 t4 = Fp.add(X1, Z1);
5041 let t5 = Fp.add(X2, Z2);
5042 t4 = Fp.mul(t4, t5);
5043 t5 = Fp.add(t0, t2);
5044 t4 = Fp.sub(t4, t5);
5045 t5 = Fp.add(Y1, Z1);
5046 X3 = Fp.add(Y2, Z2);
5047 t5 = Fp.mul(t5, X3);
5048 X3 = Fp.add(t1, t2);
5049 t5 = Fp.sub(t5, X3);
5050 Z3 = Fp.mul(a, t4);
5051 X3 = Fp.mul(b3, t2);
5052 Z3 = Fp.add(X3, Z3);
5053 X3 = Fp.sub(t1, Z3);
5054 Z3 = Fp.add(t1, Z3);
5055 Y3 = Fp.mul(X3, Z3);
5056 t1 = Fp.add(t0, t0);
5057 t1 = Fp.add(t1, t0);
5058 t2 = Fp.mul(a, t2);
5059 t4 = Fp.mul(b3, t4);
5060 t1 = Fp.add(t1, t2);
5061 t2 = Fp.sub(t0, t2);
5062 t2 = Fp.mul(a, t2);
5063 t4 = Fp.add(t4, t2);
5064 t0 = Fp.mul(t1, t4);
5065 Y3 = Fp.add(Y3, t0);
5066 t0 = Fp.mul(t5, t4);
5067 X3 = Fp.mul(t3, X3);
5068 X3 = Fp.sub(X3, t0);
5069 t0 = Fp.mul(t3, t1);
5070 Z3 = Fp.mul(t5, Z3);
5071 Z3 = Fp.add(Z3, t0);
5072 return new Point(X3, Y3, Z3);
5073 }
5074 subtract(other) {
5075 return this.add(other.negate());
5076 }
5077 is0() {
5078 return this.equals(Point.ZERO);
5079 }
5080 wNAF(n) {
5081 return wnaf.wNAFCached(this, pointPrecomputes, n, (comp) => {
5082 const toInv = Fp.invertBatch(comp.map((p) => p.pz));
5083 return comp.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);
5084 });
5085 }
5086 multiplyUnsafe(n) {
5087 const I = Point.ZERO;
5088 if (n === _0n$5)
5089 return I;
5090 assertGE(n);
5091 if (n === _1n$5)
5092 return this;
5093 const { endo } = CURVE;
5094 if (!endo)
5095 return wnaf.unsafeLadder(this, n);
5096 let { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);
5097 let k1p = I;
5098 let k2p = I;
5099 let d = this;
5100 while (k1 > _0n$5 || k2 > _0n$5) {
5101 if (k1 & _1n$5)
5102 k1p = k1p.add(d);
5103 if (k2 & _1n$5)
5104 k2p = k2p.add(d);
5105 d = d.double();
5106 k1 >>= _1n$5;
5107 k2 >>= _1n$5;
5108 }
5109 if (k1neg)
5110 k1p = k1p.negate();
5111 if (k2neg)
5112 k2p = k2p.negate();
5113 k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);
5114 return k1p.add(k2p);
5115 }
5116 multiply(scalar) {
5117 assertGE(scalar);
5118 let n = scalar;
5119 let point, fake;
5120 const { endo } = CURVE;
5121 if (endo) {
5122 const { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);
5123 let { p: k1p, f: f1p } = this.wNAF(k1);
5124 let { p: k2p, f: f2p } = this.wNAF(k2);
5125 k1p = wnaf.constTimeNegate(k1neg, k1p);
5126 k2p = wnaf.constTimeNegate(k2neg, k2p);
5127 k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);
5128 point = k1p.add(k2p);
5129 fake = f1p.add(f2p);
5130 }
5131 else {
5132 const { p, f } = this.wNAF(n);
5133 point = p;
5134 fake = f;
5135 }
5136 return Point.normalizeZ([point, fake])[0];
5137 }
5138 multiplyAndAddUnsafe(Q, a, b) {
5139 const G = Point.BASE;
5140 const mul = (P, a
5141 ) => (a === _0n$5 || a === _1n$5 || !P.equals(G) ? P.multiplyUnsafe(a) : P.multiply(a));
5142 const sum = mul(this, a).add(mul(Q, b));
5143 return sum.is0() ? undefined : sum;
5144 }
5145 toAffine(iz) {
5146 const { px: x, py: y, pz: z } = this;
5147 const is0 = this.is0();
5148 if (iz == null)
5149 iz = is0 ? Fp.ONE : Fp.inv(z);
5150 const ax = Fp.mul(x, iz);
5151 const ay = Fp.mul(y, iz);
5152 const zz = Fp.mul(z, iz);
5153 if (is0)
5154 return { x: Fp.ZERO, y: Fp.ZERO };
5155 if (!Fp.eql(zz, Fp.ONE))
5156 throw new Error('invZ was invalid');
5157 return { x: ax, y: ay };
5158 }
5159 isTorsionFree() {
5160 const { h: cofactor, isTorsionFree } = CURVE;
5161 if (cofactor === _1n$5)
5162 return true;
5163 if (isTorsionFree)
5164 return isTorsionFree(Point, this);
5165 throw new Error('isTorsionFree() has not been declared for the elliptic curve');
5166 }
5167 clearCofactor() {
5168 const { h: cofactor, clearCofactor } = CURVE;
5169 if (cofactor === _1n$5)
5170 return this;
5171 if (clearCofactor)
5172 return clearCofactor(Point, this);
5173 return this.multiplyUnsafe(CURVE.h);
5174 }
5175 toRawBytes(isCompressed = true) {
5176 this.assertValidity();
5177 return toBytes(Point, this, isCompressed);
5178 }
5179 toHex(isCompressed = true) {
5180 return bytesToHex(this.toRawBytes(isCompressed));
5181 }
5182 }
5183 Point.BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);
5184 Point.ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO);
5185 const _bits = CURVE.nBitLength;
5186 const wnaf = wNAF(Point, CURVE.endo ? Math.ceil(_bits / 2) : _bits);
5187 return {
5188 CURVE,
5189 ProjectivePoint: Point,
5190 normPrivateKeyToScalar,
5191 weierstrassEquation,
5192 isWithinCurveOrder,
5193 };
5194 }
5195 function validateOpts$2(curve) {
5196 const opts = validateBasic(curve);
5197 validateObject(opts, {
5198 hash: 'hash',
5199 hmac: 'function',
5200 randomBytes: 'function',
5201 }, {
5202 bits2int: 'function',
5203 bits2int_modN: 'function',
5204 lowS: 'boolean',
5205 });
5206 return Object.freeze({ lowS: true, ...opts });
5207 }
5208 function weierstrass(curveDef) {
5209 const CURVE = validateOpts$2(curveDef);
5210 const { Fp, n: CURVE_ORDER } = CURVE;
5211 const compressedLen = Fp.BYTES + 1;
5212 const uncompressedLen = 2 * Fp.BYTES + 1;
5213 function isValidFieldElement(num) {
5214 return _0n$5 < num && num < Fp.ORDER;
5215 }
5216 function modN(a) {
5217 return mod(a, CURVE_ORDER);
5218 }
5219 function invN(a) {
5220 return invert(a, CURVE_ORDER);
5221 }
5222 const { ProjectivePoint: Point, normPrivateKeyToScalar, weierstrassEquation, isWithinCurveOrder, } = weierstrassPoints({
5223 ...CURVE,
5224 toBytes(_c, point, isCompressed) {
5225 const a = point.toAffine();
5226 const x = Fp.toBytes(a.x);
5227 const cat = concatBytes;
5228 if (isCompressed) {
5229 return cat(Uint8Array.from([point.hasEvenY() ? 0x02 : 0x03]), x);
5230 }
5231 else {
5232 return cat(Uint8Array.from([0x04]), x, Fp.toBytes(a.y));
5233 }
5234 },
5235 fromBytes(bytes) {
5236 const len = bytes.length;
5237 const head = bytes[0];
5238 const tail = bytes.subarray(1);
5239 if (len === compressedLen && (head === 0x02 || head === 0x03)) {
5240 const x = bytesToNumberBE(tail);
5241 if (!isValidFieldElement(x))
5242 throw new Error('Point is not on curve');
5243 const y2 = weierstrassEquation(x);
5244 let y = Fp.sqrt(y2);
5245 const isYOdd = (y & _1n$5) === _1n$5;
5246 const isHeadOdd = (head & 1) === 1;
5247 if (isHeadOdd !== isYOdd)
5248 y = Fp.neg(y);
5249 return { x, y };
5250 }
5251 else if (len === uncompressedLen && head === 0x04) {
5252 const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));
5253 const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));
5254 return { x, y };
5255 }
5256 else {
5257 throw new Error(`Point of length ${len} was invalid. Expected ${compressedLen} compressed bytes or ${uncompressedLen} uncompressed bytes`);
5258 }
5259 },
5260 });
5261 const numToNByteStr = (num) => bytesToHex(numberToBytesBE(num, CURVE.nByteLength));
5262 function isBiggerThanHalfOrder(number) {
5263 const HALF = CURVE_ORDER >> _1n$5;
5264 return number > HALF;
5265 }
5266 function normalizeS(s) {
5267 return isBiggerThanHalfOrder(s) ? modN(-s) : s;
5268 }
5269 const slcNum = (b, from, to) => bytesToNumberBE(b.slice(from, to));
5270 class Signature {
5271 constructor(r, s, recovery) {
5272 this.r = r;
5273 this.s = s;
5274 this.recovery = recovery;
5275 this.assertValidity();
5276 }
5277 static fromCompact(hex) {
5278 const l = CURVE.nByteLength;
5279 hex = ensureBytes('compactSignature', hex, l * 2);
5280 return new Signature(slcNum(hex, 0, l), slcNum(hex, l, 2 * l));
5281 }
5282 static fromDER(hex) {
5283 const { r, s } = DER.toSig(ensureBytes('DER', hex));
5284 return new Signature(r, s);
5285 }
5286 assertValidity() {
5287 if (!isWithinCurveOrder(this.r))
5288 throw new Error('r must be 0 < r < CURVE.n');
5289 if (!isWithinCurveOrder(this.s))
5290 throw new Error('s must be 0 < s < CURVE.n');
5291 }
5292 addRecoveryBit(recovery) {
5293 return new Signature(this.r, this.s, recovery);
5294 }
5295 recoverPublicKey(msgHash) {
5296 const { r, s, recovery: rec } = this;
5297 const h = bits2int_modN(ensureBytes('msgHash', msgHash));
5298 if (rec == null || ![0, 1, 2, 3].includes(rec))
5299 throw new Error('recovery id invalid');
5300 const radj = rec === 2 || rec === 3 ? r + CURVE.n : r;
5301 if (radj >= Fp.ORDER)
5302 throw new Error('recovery id 2 or 3 invalid');
5303 const prefix = (rec & 1) === 0 ? '02' : '03';
5304 const R = Point.fromHex(prefix + numToNByteStr(radj));
5305 const ir = invN(radj);
5306 const u1 = modN(-h * ir);
5307 const u2 = modN(s * ir);
5308 const Q = Point.BASE.multiplyAndAddUnsafe(R, u1, u2);
5309 if (!Q)
5310 throw new Error('point at infinify');
5311 Q.assertValidity();
5312 return Q;
5313 }
5314 hasHighS() {
5315 return isBiggerThanHalfOrder(this.s);
5316 }
5317 normalizeS() {
5318 return this.hasHighS() ? new Signature(this.r, modN(-this.s), this.recovery) : this;
5319 }
5320 toDERRawBytes() {
5321 return hexToBytes(this.toDERHex());
5322 }
5323 toDERHex() {
5324 return DER.hexFromSig({ r: this.r, s: this.s });
5325 }
5326 toCompactRawBytes() {
5327 return hexToBytes(this.toCompactHex());
5328 }
5329 toCompactHex() {
5330 return numToNByteStr(this.r) + numToNByteStr(this.s);
5331 }
5332 }
5333 const utils = {
5334 isValidPrivateKey(privateKey) {
5335 try {
5336 normPrivateKeyToScalar(privateKey);
5337 return true;
5338 }
5339 catch (error) {
5340 return false;
5341 }
5342 },
5343 normPrivateKeyToScalar: normPrivateKeyToScalar,
5344 randomPrivateKey: () => {
5345 const length = getMinHashLength(CURVE.n);
5346 return mapHashToField(CURVE.randomBytes(length), CURVE.n);
5347 },
5348 precompute(windowSize = 8, point = Point.BASE) {
5349 point._setWindowSize(windowSize);
5350 point.multiply(BigInt(3));
5351 return point;
5352 },
5353 };
5354 function getPublicKey(privateKey, isCompressed = true) {
5355 return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);
5356 }
5357 function isProbPub(item) {
5358 const arr = isBytes(item);
5359 const str = typeof item === 'string';
5360 const len = (arr || str) && item.length;
5361 if (arr)
5362 return len === compressedLen || len === uncompressedLen;
5363 if (str)
5364 return len === 2 * compressedLen || len === 2 * uncompressedLen;
5365 if (item instanceof Point)
5366 return true;
5367 return false;
5368 }
5369 function getSharedSecret(privateA, publicB, isCompressed = true) {
5370 if (isProbPub(privateA))
5371 throw new Error('first arg must be private key');
5372 if (!isProbPub(publicB))
5373 throw new Error('second arg must be public key');
5374 const b = Point.fromHex(publicB);
5375 return b.multiply(normPrivateKeyToScalar(privateA)).toRawBytes(isCompressed);
5376 }
5377 const bits2int = CURVE.bits2int ||
5378 function (bytes) {
5379 const num = bytesToNumberBE(bytes);
5380 const delta = bytes.length * 8 - CURVE.nBitLength;
5381 return delta > 0 ? num >> BigInt(delta) : num;
5382 };
5383 const bits2int_modN = CURVE.bits2int_modN ||
5384 function (bytes) {
5385 return modN(bits2int(bytes));
5386 };
5387 const ORDER_MASK = bitMask(CURVE.nBitLength);
5388 function int2octets(num) {
5389 if (typeof num !== 'bigint')
5390 throw new Error('bigint expected');
5391 if (!(_0n$5 <= num && num < ORDER_MASK))
5392 throw new Error(`bigint expected < 2^${CURVE.nBitLength}`);
5393 return numberToBytesBE(num, CURVE.nByteLength);
5394 }
5395 function prepSig(msgHash, privateKey, opts = defaultSigOpts) {
5396 if (['recovered', 'canonical'].some((k) => k in opts))
5397 throw new Error('sign() legacy options not supported');
5398 const { hash, randomBytes } = CURVE;
5399 let { lowS, prehash, extraEntropy: ent } = opts;
5400 if (lowS == null)
5401 lowS = true;
5402 msgHash = ensureBytes('msgHash', msgHash);
5403 if (prehash)
5404 msgHash = ensureBytes('prehashed msgHash', hash(msgHash));
5405 const h1int = bits2int_modN(msgHash);
5406 const d = normPrivateKeyToScalar(privateKey);
5407 const seedArgs = [int2octets(d), int2octets(h1int)];
5408 if (ent != null) {
5409 const e = ent === true ? randomBytes(Fp.BYTES) : ent;
5410 seedArgs.push(ensureBytes('extraEntropy', e));
5411 }
5412 const seed = concatBytes(...seedArgs);
5413 const m = h1int;
5414 function k2sig(kBytes) {
5415 const k = bits2int(kBytes);
5416 if (!isWithinCurveOrder(k))
5417 return;
5418 const ik = invN(k);
5419 const q = Point.BASE.multiply(k).toAffine();
5420 const r = modN(q.x);
5421 if (r === _0n$5)
5422 return;
5423 const s = modN(ik * modN(m + r * d));
5424 if (s === _0n$5)
5425 return;
5426 let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n$5);
5427 let normS = s;
5428 if (lowS && isBiggerThanHalfOrder(s)) {
5429 normS = normalizeS(s);
5430 recovery ^= 1;
5431 }
5432 return new Signature(r, normS, recovery);
5433 }
5434 return { seed, k2sig };
5435 }
5436 const defaultSigOpts = { lowS: CURVE.lowS, prehash: false };
5437 const defaultVerOpts = { lowS: CURVE.lowS, prehash: false };
5438 function sign(msgHash, privKey, opts = defaultSigOpts) {
5439 const { seed, k2sig } = prepSig(msgHash, privKey, opts);
5440 const C = CURVE;
5441 const drbg = createHmacDrbg(C.hash.outputLen, C.nByteLength, C.hmac);
5442 return drbg(seed, k2sig);
5443 }
5444 Point.BASE._setWindowSize(8);
5445 function verify(signature, msgHash, publicKey, opts = defaultVerOpts) {
5446 const sg = signature;
5447 msgHash = ensureBytes('msgHash', msgHash);
5448 publicKey = ensureBytes('publicKey', publicKey);
5449 if ('strict' in opts)
5450 throw new Error('options.strict was renamed to lowS');
5451 const { lowS, prehash } = opts;
5452 let _sig = undefined;
5453 let P;
5454 try {
5455 if (typeof sg === 'string' || isBytes(sg)) {
5456 try {
5457 _sig = Signature.fromDER(sg);
5458 }
5459 catch (derError) {
5460 if (!(derError instanceof DER.Err))
5461 throw derError;
5462 _sig = Signature.fromCompact(sg);
5463 }
5464 }
5465 else if (typeof sg === 'object' && typeof sg.r === 'bigint' && typeof sg.s === 'bigint') {
5466 const { r, s } = sg;
5467 _sig = new Signature(r, s);
5468 }
5469 else {
5470 throw new Error('PARSE');
5471 }
5472 P = Point.fromHex(publicKey);
5473 }
5474 catch (error) {
5475 if (error.message === 'PARSE')
5476 throw new Error(`signature must be Signature instance, Uint8Array or hex string`);
5477 return false;
5478 }
5479 if (lowS && _sig.hasHighS())
5480 return false;
5481 if (prehash)
5482 msgHash = CURVE.hash(msgHash);
5483 const { r, s } = _sig;
5484 const h = bits2int_modN(msgHash);
5485 const is = invN(s);
5486 const u1 = modN(h * is);
5487 const u2 = modN(r * is);
5488 const R = Point.BASE.multiplyAndAddUnsafe(P, u1, u2)?.toAffine();
5489 if (!R)
5490 return false;
5491 const v = modN(R.x);
5492 return v === r;
5493 }
5494 return {
5495 CURVE,
5496 getPublicKey,
5497 getSharedSecret,
5498 sign,
5499 verify,
5500 ProjectivePoint: Point,
5501 Signature,
5502 utils,
5503 };
5504 }
5505 function SWUFpSqrtRatio(Fp, Z) {
5506 const q = Fp.ORDER;
5507 let l = _0n$5;
5508 for (let o = q - _1n$5; o % _2n$4 === _0n$5; o /= _2n$4)
5509 l += _1n$5;
5510 const c1 = l;
5511 const _2n_pow_c1_1 = _2n$4 << (c1 - _1n$5 - _1n$5);
5512 const _2n_pow_c1 = _2n_pow_c1_1 * _2n$4;
5513 const c2 = (q - _1n$5) / _2n_pow_c1;
5514 const c3 = (c2 - _1n$5) / _2n$4;
5515 const c4 = _2n_pow_c1 - _1n$5;
5516 const c5 = _2n_pow_c1_1;
5517 const c6 = Fp.pow(Z, c2);
5518 const c7 = Fp.pow(Z, (c2 + _1n$5) / _2n$4);
5519 let sqrtRatio = (u, v) => {
5520 let tv1 = c6;
5521 let tv2 = Fp.pow(v, c4);
5522 let tv3 = Fp.sqr(tv2);
5523 tv3 = Fp.mul(tv3, v);
5524 let tv5 = Fp.mul(u, tv3);
5525 tv5 = Fp.pow(tv5, c3);
5526 tv5 = Fp.mul(tv5, tv2);
5527 tv2 = Fp.mul(tv5, v);
5528 tv3 = Fp.mul(tv5, u);
5529 let tv4 = Fp.mul(tv3, tv2);
5530 tv5 = Fp.pow(tv4, c5);
5531 let isQR = Fp.eql(tv5, Fp.ONE);
5532 tv2 = Fp.mul(tv3, c7);
5533 tv5 = Fp.mul(tv4, tv1);
5534 tv3 = Fp.cmov(tv2, tv3, isQR);
5535 tv4 = Fp.cmov(tv5, tv4, isQR);
5536 for (let i = c1; i > _1n$5; i--) {
5537 let tv5 = i - _2n$4;
5538 tv5 = _2n$4 << (tv5 - _1n$5);
5539 let tvv5 = Fp.pow(tv4, tv5);
5540 const e1 = Fp.eql(tvv5, Fp.ONE);
5541 tv2 = Fp.mul(tv3, tv1);
5542 tv1 = Fp.mul(tv1, tv1);
5543 tvv5 = Fp.mul(tv4, tv1);
5544 tv3 = Fp.cmov(tv2, tv3, e1);
5545 tv4 = Fp.cmov(tvv5, tv4, e1);
5546 }
5547 return { isValid: isQR, value: tv3 };
5548 };
5549 if (Fp.ORDER % _4n === _3n) {
5550 const c1 = (Fp.ORDER - _3n) / _4n;
5551 const c2 = Fp.sqrt(Fp.neg(Z));
5552 sqrtRatio = (u, v) => {
5553 let tv1 = Fp.sqr(v);
5554 const tv2 = Fp.mul(u, v);
5555 tv1 = Fp.mul(tv1, tv2);
5556 let y1 = Fp.pow(tv1, c1);
5557 y1 = Fp.mul(y1, tv2);
5558 const y2 = Fp.mul(y1, c2);
5559 const tv3 = Fp.mul(Fp.sqr(y1), v);
5560 const isQR = Fp.eql(tv3, u);
5561 let y = Fp.cmov(y2, y1, isQR);
5562 return { isValid: isQR, value: y };
5563 };
5564 }
5565 return sqrtRatio;
5566 }
5567 function mapToCurveSimpleSWU(Fp, opts) {
5568 validateField(Fp);
5569 if (!Fp.isValid(opts.A) || !Fp.isValid(opts.B) || !Fp.isValid(opts.Z))
5570 throw new Error('mapToCurveSimpleSWU: invalid opts');
5571 const sqrtRatio = SWUFpSqrtRatio(Fp, opts.Z);
5572 if (!Fp.isOdd)
5573 throw new Error('Fp.isOdd is not implemented!');
5574 return (u) => {
5575 let tv1, tv2, tv3, tv4, tv5, tv6, x, y;
5576 tv1 = Fp.sqr(u);
5577 tv1 = Fp.mul(tv1, opts.Z);
5578 tv2 = Fp.sqr(tv1);
5579 tv2 = Fp.add(tv2, tv1);
5580 tv3 = Fp.add(tv2, Fp.ONE);
5581 tv3 = Fp.mul(tv3, opts.B);
5582 tv4 = Fp.cmov(opts.Z, Fp.neg(tv2), !Fp.eql(tv2, Fp.ZERO));
5583 tv4 = Fp.mul(tv4, opts.A);
5584 tv2 = Fp.sqr(tv3);
5585 tv6 = Fp.sqr(tv4);
5586 tv5 = Fp.mul(tv6, opts.A);
5587 tv2 = Fp.add(tv2, tv5);
5588 tv2 = Fp.mul(tv2, tv3);
5589 tv6 = Fp.mul(tv6, tv4);
5590 tv5 = Fp.mul(tv6, opts.B);
5591 tv2 = Fp.add(tv2, tv5);
5592 x = Fp.mul(tv1, tv3);
5593 const { isValid, value } = sqrtRatio(tv2, tv6);
5594 y = Fp.mul(tv1, u);
5595 y = Fp.mul(y, value);
5596 x = Fp.cmov(x, tv3, isValid);
5597 y = Fp.cmov(y, value, isValid);
5598 const e1 = Fp.isOdd(u) === Fp.isOdd(y);
5599 y = Fp.cmov(Fp.neg(y), y, e1);
5600 x = Fp.div(x, tv4);
5601 return { x, y };
5602 };
5603 }
5604
5605 function validateDST(dst) {
5606 if (isBytes(dst))
5607 return dst;
5608 if (typeof dst === 'string')
5609 return utf8ToBytes(dst);
5610 throw new Error('DST must be Uint8Array or string');
5611 }
5612 const os2ip = bytesToNumberBE;
5613 function i2osp(value, length) {
5614 if (value < 0 || value >= 1 << (8 * length)) {
5615 throw new Error(`bad I2OSP call: value=${value} length=${length}`);
5616 }
5617 const res = Array.from({ length }).fill(0);
5618 for (let i = length - 1; i >= 0; i--) {
5619 res[i] = value & 0xff;
5620 value >>>= 8;
5621 }
5622 return new Uint8Array(res);
5623 }
5624 function strxor(a, b) {
5625 const arr = new Uint8Array(a.length);
5626 for (let i = 0; i < a.length; i++) {
5627 arr[i] = a[i] ^ b[i];
5628 }
5629 return arr;
5630 }
5631 function abytes(item) {
5632 if (!isBytes(item))
5633 throw new Error('Uint8Array expected');
5634 }
5635 function isNum(item) {
5636 if (!Number.isSafeInteger(item))
5637 throw new Error('number expected');
5638 }
5639 function expand_message_xmd(msg, DST, lenInBytes, H) {
5640 abytes(msg);
5641 abytes(DST);
5642 isNum(lenInBytes);
5643 if (DST.length > 255)
5644 DST = H(concatBytes(utf8ToBytes('H2C-OVERSIZE-DST-'), DST));
5645 const { outputLen: b_in_bytes, blockLen: r_in_bytes } = H;
5646 const ell = Math.ceil(lenInBytes / b_in_bytes);
5647 if (ell > 255)
5648 throw new Error('Invalid xmd length');
5649 const DST_prime = concatBytes(DST, i2osp(DST.length, 1));
5650 const Z_pad = i2osp(0, r_in_bytes);
5651 const l_i_b_str = i2osp(lenInBytes, 2);
5652 const b = new Array(ell);
5653 const b_0 = H(concatBytes(Z_pad, msg, l_i_b_str, i2osp(0, 1), DST_prime));
5654 b[0] = H(concatBytes(b_0, i2osp(1, 1), DST_prime));
5655 for (let i = 1; i <= ell; i++) {
5656 const args = [strxor(b_0, b[i - 1]), i2osp(i + 1, 1), DST_prime];
5657 b[i] = H(concatBytes(...args));
5658 }
5659 const pseudo_random_bytes = concatBytes(...b);
5660 return pseudo_random_bytes.slice(0, lenInBytes);
5661 }
5662 function expand_message_xof(msg, DST, lenInBytes, k, H) {
5663 abytes(msg);
5664 abytes(DST);
5665 isNum(lenInBytes);
5666 if (DST.length > 255) {
5667 const dkLen = Math.ceil((2 * k) / 8);
5668 DST = H.create({ dkLen }).update(utf8ToBytes('H2C-OVERSIZE-DST-')).update(DST).digest();
5669 }
5670 if (lenInBytes > 65535 || DST.length > 255)
5671 throw new Error('expand_message_xof: invalid lenInBytes');
5672 return (H.create({ dkLen: lenInBytes })
5673 .update(msg)
5674 .update(i2osp(lenInBytes, 2))
5675 .update(DST)
5676 .update(i2osp(DST.length, 1))
5677 .digest());
5678 }
5679 function hash_to_field(msg, count, options) {
5680 validateObject(options, {
5681 DST: 'stringOrUint8Array',
5682 p: 'bigint',
5683 m: 'isSafeInteger',
5684 k: 'isSafeInteger',
5685 hash: 'hash',
5686 });
5687 const { p, k, m, hash, expand, DST: _DST } = options;
5688 abytes(msg);
5689 isNum(count);
5690 const DST = validateDST(_DST);
5691 const log2p = p.toString(2).length;
5692 const L = Math.ceil((log2p + k) / 8);
5693 const len_in_bytes = count * m * L;
5694 let prb;
5695 if (expand === 'xmd') {
5696 prb = expand_message_xmd(msg, DST, len_in_bytes, hash);
5697 }
5698 else if (expand === 'xof') {
5699 prb = expand_message_xof(msg, DST, len_in_bytes, k, hash);
5700 }
5701 else if (expand === '_internal_pass') {
5702 prb = msg;
5703 }
5704 else {
5705 throw new Error('expand must be "xmd" or "xof"');
5706 }
5707 const u = new Array(count);
5708 for (let i = 0; i < count; i++) {
5709 const e = new Array(m);
5710 for (let j = 0; j < m; j++) {
5711 const elm_offset = L * (j + i * m);
5712 const tv = prb.subarray(elm_offset, elm_offset + L);
5713 e[j] = mod(os2ip(tv), p);
5714 }
5715 u[i] = e;
5716 }
5717 return u;
5718 }
5719 function isogenyMap(field, map) {
5720 const COEFF = map.map((i) => Array.from(i).reverse());
5721 return (x, y) => {
5722 const [xNum, xDen, yNum, yDen] = COEFF.map((val) => val.reduce((acc, i) => field.add(field.mul(acc, x), i)));
5723 x = field.div(xNum, xDen);
5724 y = field.mul(y, field.div(yNum, yDen));
5725 return { x, y };
5726 };
5727 }
5728 function createHasher(Point, mapToCurve, def) {
5729 if (typeof mapToCurve !== 'function')
5730 throw new Error('mapToCurve() must be defined');
5731 return {
5732 hashToCurve(msg, options) {
5733 const u = hash_to_field(msg, 2, { ...def, DST: def.DST, ...options });
5734 const u0 = Point.fromAffine(mapToCurve(u[0]));
5735 const u1 = Point.fromAffine(mapToCurve(u[1]));
5736 const P = u0.add(u1).clearCofactor();
5737 P.assertValidity();
5738 return P;
5739 },
5740 encodeToCurve(msg, options) {
5741 const u = hash_to_field(msg, 1, { ...def, DST: def.encodeDST, ...options });
5742 const P = Point.fromAffine(mapToCurve(u[0])).clearCofactor();
5743 P.assertValidity();
5744 return P;
5745 },
5746 };
5747 }
5748
5749 class HMAC extends Hash {
5750 constructor(hash$1, _key) {
5751 super();
5752 this.finished = false;
5753 this.destroyed = false;
5754 hash(hash$1);
5755 const key = toBytes(_key);
5756 this.iHash = hash$1.create();
5757 if (typeof this.iHash.update !== 'function')
5758 throw new Error('Expected instance of class which extends utils.Hash');
5759 this.blockLen = this.iHash.blockLen;
5760 this.outputLen = this.iHash.outputLen;
5761 const blockLen = this.blockLen;
5762 const pad = new Uint8Array(blockLen);
5763 pad.set(key.length > blockLen ? hash$1.create().update(key).digest() : key);
5764 for (let i = 0; i < pad.length; i++)
5765 pad[i] ^= 0x36;
5766 this.iHash.update(pad);
5767 this.oHash = hash$1.create();
5768 for (let i = 0; i < pad.length; i++)
5769 pad[i] ^= 0x36 ^ 0x5c;
5770 this.oHash.update(pad);
5771 pad.fill(0);
5772 }
5773 update(buf) {
5774 exists(this);
5775 this.iHash.update(buf);
5776 return this;
5777 }
5778 digestInto(out) {
5779 exists(this);
5780 bytes(out, this.outputLen);
5781 this.finished = true;
5782 this.iHash.digestInto(out);
5783 this.oHash.update(out);
5784 this.oHash.digestInto(out);
5785 this.destroy();
5786 }
5787 digest() {
5788 const out = new Uint8Array(this.oHash.outputLen);
5789 this.digestInto(out);
5790 return out;
5791 }
5792 _cloneInto(to) {
5793 to || (to = Object.create(Object.getPrototypeOf(this), {}));
5794 const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;
5795 to = to;
5796 to.finished = finished;
5797 to.destroyed = destroyed;
5798 to.blockLen = blockLen;
5799 to.outputLen = outputLen;
5800 to.oHash = oHash._cloneInto(to.oHash);
5801 to.iHash = iHash._cloneInto(to.iHash);
5802 return to;
5803 }
5804 destroy() {
5805 this.destroyed = true;
5806 this.oHash.destroy();
5807 this.iHash.destroy();
5808 }
5809 }
5810 const hmac = (hash, key, message) => new HMAC(hash, key).update(message).digest();
5811 hmac.create = (hash, key) => new HMAC(hash, key);
5812
5813 /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
5814 function getHash(hash) {
5815 return {
5816 hash,
5817 hmac: (key, ...msgs) => hmac(hash, key, concatBytes$1(...msgs)),
5818 randomBytes,
5819 };
5820 }
5821 function createCurve(curveDef, defHash) {
5822 const create = (hash) => weierstrass({ ...curveDef, ...getHash(hash) });
5823 return Object.freeze({ ...create(defHash), create });
5824 }
5825
5826 /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
5827 const secp256k1P = BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f');
5828 const secp256k1N = BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141');
5829 const _1n$4 = BigInt(1);
5830 const _2n$3 = BigInt(2);
5831 const divNearest = (a, b) => (a + b / _2n$3) / b;
5832 function sqrtMod(y) {
5833 const P = secp256k1P;
5834 const _3n = BigInt(3), _6n = BigInt(6), _11n = BigInt(11), _22n = BigInt(22);
5835 const _23n = BigInt(23), _44n = BigInt(44), _88n = BigInt(88);
5836 const b2 = (y * y * y) % P;
5837 const b3 = (b2 * b2 * y) % P;
5838 const b6 = (pow2(b3, _3n, P) * b3) % P;
5839 const b9 = (pow2(b6, _3n, P) * b3) % P;
5840 const b11 = (pow2(b9, _2n$3, P) * b2) % P;
5841 const b22 = (pow2(b11, _11n, P) * b11) % P;
5842 const b44 = (pow2(b22, _22n, P) * b22) % P;
5843 const b88 = (pow2(b44, _44n, P) * b44) % P;
5844 const b176 = (pow2(b88, _88n, P) * b88) % P;
5845 const b220 = (pow2(b176, _44n, P) * b44) % P;
5846 const b223 = (pow2(b220, _3n, P) * b3) % P;
5847 const t1 = (pow2(b223, _23n, P) * b22) % P;
5848 const t2 = (pow2(t1, _6n, P) * b2) % P;
5849 const root = pow2(t2, _2n$3, P);
5850 if (!Fp$1.eql(Fp$1.sqr(root), y))
5851 throw new Error('Cannot find square root');
5852 return root;
5853 }
5854 const Fp$1 = Field(secp256k1P, undefined, undefined, { sqrt: sqrtMod });
5855 const secp256k1 = createCurve({
5856 a: BigInt(0),
5857 b: BigInt(7),
5858 Fp: Fp$1,
5859 n: secp256k1N,
5860 Gx: BigInt('55066263022277343669578718895168534326250603453777594175500187360389116729240'),
5861 Gy: BigInt('32670510020758816978083085130507043184471273380659243275938904335757337482424'),
5862 h: BigInt(1),
5863 lowS: true,
5864 endo: {
5865 beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),
5866 splitScalar: (k) => {
5867 const n = secp256k1N;
5868 const a1 = BigInt('0x3086d221a7d46bcde86c90e49284eb15');
5869 const b1 = -_1n$4 * BigInt('0xe4437ed6010e88286f547fa90abfe4c3');
5870 const a2 = BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8');
5871 const b2 = a1;
5872 const POW_2_128 = BigInt('0x100000000000000000000000000000000');
5873 const c1 = divNearest(b2 * k, n);
5874 const c2 = divNearest(-b1 * k, n);
5875 let k1 = mod(k - c1 * a1 - c2 * a2, n);
5876 let k2 = mod(-c1 * b1 - c2 * b2, n);
5877 const k1neg = k1 > POW_2_128;
5878 const k2neg = k2 > POW_2_128;
5879 if (k1neg)
5880 k1 = n - k1;
5881 if (k2neg)
5882 k2 = n - k2;
5883 if (k1 > POW_2_128 || k2 > POW_2_128) {
5884 throw new Error('splitScalar: Endomorphism failed, k=' + k);
5885 }
5886 return { k1neg, k1, k2neg, k2 };
5887 },
5888 },
5889 }, sha256);
5890 const _0n$4 = BigInt(0);
5891 const fe = (x) => typeof x === 'bigint' && _0n$4 < x && x < secp256k1P;
5892 const ge = (x) => typeof x === 'bigint' && _0n$4 < x && x < secp256k1N;
5893 const TAGGED_HASH_PREFIXES = {};
5894 function taggedHash(tag, ...messages) {
5895 let tagP = TAGGED_HASH_PREFIXES[tag];
5896 if (tagP === undefined) {
5897 const tagH = sha256(Uint8Array.from(tag, (c) => c.charCodeAt(0)));
5898 tagP = concatBytes(tagH, tagH);
5899 TAGGED_HASH_PREFIXES[tag] = tagP;
5900 }
5901 return sha256(concatBytes(tagP, ...messages));
5902 }
5903 const pointToBytes = (point) => point.toRawBytes(true).slice(1);
5904 const numTo32b = (n) => numberToBytesBE(n, 32);
5905 const modP = (x) => mod(x, secp256k1P);
5906 const modN = (x) => mod(x, secp256k1N);
5907 const Point = secp256k1.ProjectivePoint;
5908 const GmulAdd = (Q, a, b) => Point.BASE.multiplyAndAddUnsafe(Q, a, b);
5909 function schnorrGetExtPubKey(priv) {
5910 let d_ = secp256k1.utils.normPrivateKeyToScalar(priv);
5911 let p = Point.fromPrivateKey(d_);
5912 const scalar = p.hasEvenY() ? d_ : modN(-d_);
5913 return { scalar: scalar, bytes: pointToBytes(p) };
5914 }
5915 function lift_x(x) {
5916 if (!fe(x))
5917 throw new Error('bad x: need 0 < x < p');
5918 const xx = modP(x * x);
5919 const c = modP(xx * x + BigInt(7));
5920 let y = sqrtMod(c);
5921 if (y % _2n$3 !== _0n$4)
5922 y = modP(-y);
5923 const p = new Point(x, y, _1n$4);
5924 p.assertValidity();
5925 return p;
5926 }
5927 function challenge(...args) {
5928 return modN(bytesToNumberBE(taggedHash('BIP0340/challenge', ...args)));
5929 }
5930 function schnorrGetPublicKey(privateKey) {
5931 return schnorrGetExtPubKey(privateKey).bytes;
5932 }
5933 function schnorrSign(message, privateKey, auxRand = randomBytes(32)) {
5934 const m = ensureBytes('message', message);
5935 const { bytes: px, scalar: d } = schnorrGetExtPubKey(privateKey);
5936 const a = ensureBytes('auxRand', auxRand, 32);
5937 const t = numTo32b(d ^ bytesToNumberBE(taggedHash('BIP0340/aux', a)));
5938 const rand = taggedHash('BIP0340/nonce', t, px, m);
5939 const k_ = modN(bytesToNumberBE(rand));
5940 if (k_ === _0n$4)
5941 throw new Error('sign failed: k is zero');
5942 const { bytes: rx, scalar: k } = schnorrGetExtPubKey(k_);
5943 const e = challenge(rx, px, m);
5944 const sig = new Uint8Array(64);
5945 sig.set(rx, 0);
5946 sig.set(numTo32b(modN(k + e * d)), 32);
5947 if (!schnorrVerify(sig, m, px))
5948 throw new Error('sign: Invalid signature produced');
5949 return sig;
5950 }
5951 function schnorrVerify(signature, message, publicKey) {
5952 const sig = ensureBytes('signature', signature, 64);
5953 const m = ensureBytes('message', message);
5954 const pub = ensureBytes('publicKey', publicKey, 32);
5955 try {
5956 const P = lift_x(bytesToNumberBE(pub));
5957 const r = bytesToNumberBE(sig.subarray(0, 32));
5958 if (!fe(r))
5959 return false;
5960 const s = bytesToNumberBE(sig.subarray(32, 64));
5961 if (!ge(s))
5962 return false;
5963 const e = challenge(numTo32b(r), pointToBytes(P), m);
5964 const R = GmulAdd(P, s, modN(-e));
5965 if (!R || !R.hasEvenY() || R.toAffine().x !== r)
5966 return false;
5967 return true;
5968 }
5969 catch (error) {
5970 return false;
5971 }
5972 }
5973 (() => ({
5974 getPublicKey: schnorrGetPublicKey,
5975 sign: schnorrSign,
5976 verify: schnorrVerify,
5977 utils: {
5978 randomPrivateKey: secp256k1.utils.randomPrivateKey,
5979 lift_x,
5980 pointToBytes,
5981 numberToBytesBE,
5982 bytesToNumberBE,
5983 taggedHash,
5984 mod,
5985 },
5986 }))();
5987 const isoMap = (() => isogenyMap(Fp$1, [
5988 [
5989 '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa8c7',
5990 '0x7d3d4c80bc321d5b9f315cea7fd44c5d595d2fc0bf63b92dfff1044f17c6581',
5991 '0x534c328d23f234e6e2a413deca25caece4506144037c40314ecbd0b53d9dd262',
5992 '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa88c',
5993 ],
5994 [
5995 '0xd35771193d94918a9ca34ccbb7b640dd86cd409542f8487d9fe6b745781eb49b',
5996 '0xedadc6f64383dc1df7c4b2d51b54225406d36b641f5e41bbc52a56612a8c6d14',
5997 '0x0000000000000000000000000000000000000000000000000000000000000001',
5998 ],
5999 [
6000 '0x4bda12f684bda12f684bda12f684bda12f684bda12f684bda12f684b8e38e23c',
6001 '0xc75e0c32d5cb7c0fa9d0a54b12a0a6d5647ab046d686da6fdffc90fc201d71a3',
6002 '0x29a6194691f91a73715209ef6512e576722830a201be2018a765e85a9ecee931',
6003 '0x2f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12f38e38d84',
6004 ],
6005 [
6006 '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffff93b',
6007 '0x7a06534bb8bdb49fd5e9e6632722c2989467c1bfc8e8d978dfb425d2685c2573',
6008 '0x6484aa716545ca2cf3a70c3fa8fe337e0a3d21162f0d6299a7bf8192bfd2a76f',
6009 '0x0000000000000000000000000000000000000000000000000000000000000001',
6010 ],
6011 ].map((i) => i.map((j) => BigInt(j)))))();
6012 const mapSWU = (() => mapToCurveSimpleSWU(Fp$1, {
6013 A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'),
6014 B: BigInt('1771'),
6015 Z: Fp$1.create(BigInt('-11')),
6016 }))();
6017 (() => createHasher(secp256k1.ProjectivePoint, (scalars) => {
6018 const { x, y } = mapSWU(Fp$1.create(scalars[0]));
6019 return isoMap(x, y);
6020 }, {
6021 DST: 'secp256k1_XMD:SHA-256_SSWU_RO_',
6022 encodeDST: 'secp256k1_XMD:SHA-256_SSWU_NU_',
6023 p: Fp$1.ORDER,
6024 m: 1,
6025 k: 128,
6026 expand: 'xmd',
6027 hash: sha256,
6028 }))();
6029
6030 function secp256k1PairFromSeed(seed, onlyJs) {
6031 if (seed.length !== 32) {
6032 throw new Error('Expected valid 32-byte private key as a seed');
6033 }
6034 if (!util.hasBigInt || (!onlyJs && isReady())) {
6035 const full = secp256k1FromSeed(seed);
6036 const publicKey = full.slice(32);
6037 if (util.u8aEmpty(publicKey)) {
6038 throw new Error('Invalid publicKey generated from WASM interface');
6039 }
6040 return {
6041 publicKey,
6042 secretKey: full.slice(0, 32)
6043 };
6044 }
6045 return {
6046 publicKey: secp256k1.getPublicKey(seed, true),
6047 secretKey: seed
6048 };
6049 }
6050
6051 function createSeedDeriveFn(fromSeed, derive) {
6052 return (keypair, { chainCode, isHard }) => {
6053 if (!isHard) {
6054 throw new Error('A soft key was found in the path and is not supported');
6055 }
6056 return fromSeed(derive(keypair.secretKey.subarray(0, 32), chainCode));
6057 };
6058 }
6059
6060 const keyHdkdEcdsa = createSeedDeriveFn(secp256k1PairFromSeed, secp256k1DeriveHard);
6061
6062 const HDKD = util.compactAddLength(util.stringToU8a('Ed25519HDKD'));
6063 function ed25519DeriveHard(seed, chainCode) {
6064 if (!util.isU8a(chainCode) || chainCode.length !== 32) {
6065 throw new Error('Invalid chainCode passed to derive');
6066 }
6067 return blake2AsU8a(util.u8aConcat(HDKD, seed, chainCode));
6068 }
6069
6070 function randomAsU8a(length = 32) {
6071 return browser.getRandomValues(new Uint8Array(length));
6072 }
6073 const randomAsHex = createAsHex(randomAsU8a);
6074
6075 const BN_53 = new util.BN(0b11111111111111111111111111111111111111111111111111111);
6076 function randomAsNumber() {
6077 return util.hexToBn(randomAsHex(8)).and(BN_53).toNumber();
6078 }
6079
6080 const [SHA512_Kh, SHA512_Kl] = (() => u64.split([
6081 '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',
6082 '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',
6083 '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',
6084 '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',
6085 '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',
6086 '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',
6087 '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',
6088 '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',
6089 '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',
6090 '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',
6091 '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',
6092 '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',
6093 '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',
6094 '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',
6095 '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',
6096 '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',
6097 '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',
6098 '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',
6099 '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',
6100 '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'
6101 ].map(n => BigInt(n))))();
6102 const SHA512_W_H = new Uint32Array(80);
6103 const SHA512_W_L = new Uint32Array(80);
6104 class SHA512 extends SHA2 {
6105 constructor() {
6106 super(128, 64, 16, false);
6107 this.Ah = 0x6a09e667 | 0;
6108 this.Al = 0xf3bcc908 | 0;
6109 this.Bh = 0xbb67ae85 | 0;
6110 this.Bl = 0x84caa73b | 0;
6111 this.Ch = 0x3c6ef372 | 0;
6112 this.Cl = 0xfe94f82b | 0;
6113 this.Dh = 0xa54ff53a | 0;
6114 this.Dl = 0x5f1d36f1 | 0;
6115 this.Eh = 0x510e527f | 0;
6116 this.El = 0xade682d1 | 0;
6117 this.Fh = 0x9b05688c | 0;
6118 this.Fl = 0x2b3e6c1f | 0;
6119 this.Gh = 0x1f83d9ab | 0;
6120 this.Gl = 0xfb41bd6b | 0;
6121 this.Hh = 0x5be0cd19 | 0;
6122 this.Hl = 0x137e2179 | 0;
6123 }
6124 get() {
6125 const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;
6126 return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];
6127 }
6128 set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) {
6129 this.Ah = Ah | 0;
6130 this.Al = Al | 0;
6131 this.Bh = Bh | 0;
6132 this.Bl = Bl | 0;
6133 this.Ch = Ch | 0;
6134 this.Cl = Cl | 0;
6135 this.Dh = Dh | 0;
6136 this.Dl = Dl | 0;
6137 this.Eh = Eh | 0;
6138 this.El = El | 0;
6139 this.Fh = Fh | 0;
6140 this.Fl = Fl | 0;
6141 this.Gh = Gh | 0;
6142 this.Gl = Gl | 0;
6143 this.Hh = Hh | 0;
6144 this.Hl = Hl | 0;
6145 }
6146 process(view, offset) {
6147 for (let i = 0; i < 16; i++, offset += 4) {
6148 SHA512_W_H[i] = view.getUint32(offset);
6149 SHA512_W_L[i] = view.getUint32((offset += 4));
6150 }
6151 for (let i = 16; i < 80; i++) {
6152 const W15h = SHA512_W_H[i - 15] | 0;
6153 const W15l = SHA512_W_L[i - 15] | 0;
6154 const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);
6155 const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);
6156 const W2h = SHA512_W_H[i - 2] | 0;
6157 const W2l = SHA512_W_L[i - 2] | 0;
6158 const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);
6159 const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);
6160 const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);
6161 const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);
6162 SHA512_W_H[i] = SUMh | 0;
6163 SHA512_W_L[i] = SUMl | 0;
6164 }
6165 let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;
6166 for (let i = 0; i < 80; i++) {
6167 const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);
6168 const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);
6169 const CHIh = (Eh & Fh) ^ (~Eh & Gh);
6170 const CHIl = (El & Fl) ^ (~El & Gl);
6171 const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);
6172 const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);
6173 const T1l = T1ll | 0;
6174 const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);
6175 const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);
6176 const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);
6177 const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);
6178 Hh = Gh | 0;
6179 Hl = Gl | 0;
6180 Gh = Fh | 0;
6181 Gl = Fl | 0;
6182 Fh = Eh | 0;
6183 Fl = El | 0;
6184 ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));
6185 Dh = Ch | 0;
6186 Dl = Cl | 0;
6187 Ch = Bh | 0;
6188 Cl = Bl | 0;
6189 Bh = Ah | 0;
6190 Bl = Al | 0;
6191 const All = u64.add3L(T1l, sigma0l, MAJl);
6192 Ah = u64.add3H(All, T1h, sigma0h, MAJh);
6193 Al = All | 0;
6194 }
6195 ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));
6196 ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));
6197 ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));
6198 ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));
6199 ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));
6200 ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));
6201 ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));
6202 ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));
6203 this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);
6204 }
6205 roundClean() {
6206 SHA512_W_H.fill(0);
6207 SHA512_W_L.fill(0);
6208 }
6209 destroy() {
6210 this.buffer.fill(0);
6211 this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
6212 }
6213 }
6214 class SHA512_224 extends SHA512 {
6215 constructor() {
6216 super();
6217 this.Ah = 0x8c3d37c8 | 0;
6218 this.Al = 0x19544da2 | 0;
6219 this.Bh = 0x73e19966 | 0;
6220 this.Bl = 0x89dcd4d6 | 0;
6221 this.Ch = 0x1dfab7ae | 0;
6222 this.Cl = 0x32ff9c82 | 0;
6223 this.Dh = 0x679dd514 | 0;
6224 this.Dl = 0x582f9fcf | 0;
6225 this.Eh = 0x0f6d2b69 | 0;
6226 this.El = 0x7bd44da8 | 0;
6227 this.Fh = 0x77e36f73 | 0;
6228 this.Fl = 0x04c48942 | 0;
6229 this.Gh = 0x3f9d85a8 | 0;
6230 this.Gl = 0x6a1d36c8 | 0;
6231 this.Hh = 0x1112e6ad | 0;
6232 this.Hl = 0x91d692a1 | 0;
6233 this.outputLen = 28;
6234 }
6235 }
6236 class SHA512_256 extends SHA512 {
6237 constructor() {
6238 super();
6239 this.Ah = 0x22312194 | 0;
6240 this.Al = 0xfc2bf72c | 0;
6241 this.Bh = 0x9f555fa3 | 0;
6242 this.Bl = 0xc84c64c2 | 0;
6243 this.Ch = 0x2393b86b | 0;
6244 this.Cl = 0x6f53b151 | 0;
6245 this.Dh = 0x96387719 | 0;
6246 this.Dl = 0x5940eabd | 0;
6247 this.Eh = 0x96283ee2 | 0;
6248 this.El = 0xa88effe3 | 0;
6249 this.Fh = 0xbe5e1e25 | 0;
6250 this.Fl = 0x53863992 | 0;
6251 this.Gh = 0x2b0199fc | 0;
6252 this.Gl = 0x2c85b8aa | 0;
6253 this.Hh = 0x0eb72ddc | 0;
6254 this.Hl = 0x81c52ca2 | 0;
6255 this.outputLen = 32;
6256 }
6257 }
6258 class SHA384 extends SHA512 {
6259 constructor() {
6260 super();
6261 this.Ah = 0xcbbb9d5d | 0;
6262 this.Al = 0xc1059ed8 | 0;
6263 this.Bh = 0x629a292a | 0;
6264 this.Bl = 0x367cd507 | 0;
6265 this.Ch = 0x9159015a | 0;
6266 this.Cl = 0x3070dd17 | 0;
6267 this.Dh = 0x152fecd8 | 0;
6268 this.Dl = 0xf70e5939 | 0;
6269 this.Eh = 0x67332667 | 0;
6270 this.El = 0xffc00b31 | 0;
6271 this.Fh = 0x8eb44a87 | 0;
6272 this.Fl = 0x68581511 | 0;
6273 this.Gh = 0xdb0c2e0d | 0;
6274 this.Gl = 0x64f98fa7 | 0;
6275 this.Hh = 0x47b5481d | 0;
6276 this.Hl = 0xbefa4fa4 | 0;
6277 this.outputLen = 48;
6278 }
6279 }
6280 const sha512 = wrapConstructor(() => new SHA512());
6281 wrapConstructor(() => new SHA512_224());
6282 wrapConstructor(() => new SHA512_256());
6283 wrapConstructor(() => new SHA384());
6284
6285 /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
6286 const _0n$3 = BigInt(0), _1n$3 = BigInt(1), _2n$2 = BigInt(2), _8n = BigInt(8);
6287 const VERIFY_DEFAULT = { zip215: true };
6288 function validateOpts$1(curve) {
6289 const opts = validateBasic(curve);
6290 validateObject(curve, {
6291 hash: 'function',
6292 a: 'bigint',
6293 d: 'bigint',
6294 randomBytes: 'function',
6295 }, {
6296 adjustScalarBytes: 'function',
6297 domain: 'function',
6298 uvRatio: 'function',
6299 mapToCurve: 'function',
6300 });
6301 return Object.freeze({ ...opts });
6302 }
6303 function twistedEdwards(curveDef) {
6304 const CURVE = validateOpts$1(curveDef);
6305 const { Fp, n: CURVE_ORDER, prehash: prehash, hash: cHash, randomBytes, nByteLength, h: cofactor, } = CURVE;
6306 const MASK = _2n$2 << (BigInt(nByteLength * 8) - _1n$3);
6307 const modP = Fp.create;
6308 const uvRatio = CURVE.uvRatio ||
6309 ((u, v) => {
6310 try {
6311 return { isValid: true, value: Fp.sqrt(u * Fp.inv(v)) };
6312 }
6313 catch (e) {
6314 return { isValid: false, value: _0n$3 };
6315 }
6316 });
6317 const adjustScalarBytes = CURVE.adjustScalarBytes || ((bytes) => bytes);
6318 const domain = CURVE.domain ||
6319 ((data, ctx, phflag) => {
6320 if (ctx.length || phflag)
6321 throw new Error('Contexts/pre-hash are not supported');
6322 return data;
6323 });
6324 const inBig = (n) => typeof n === 'bigint' && _0n$3 < n;
6325 const inRange = (n, max) => inBig(n) && inBig(max) && n < max;
6326 const in0MaskRange = (n) => n === _0n$3 || inRange(n, MASK);
6327 function assertInRange(n, max) {
6328 if (inRange(n, max))
6329 return n;
6330 throw new Error(`Expected valid scalar < ${max}, got ${typeof n} ${n}`);
6331 }
6332 function assertGE0(n) {
6333 return n === _0n$3 ? n : assertInRange(n, CURVE_ORDER);
6334 }
6335 const pointPrecomputes = new Map();
6336 function isPoint(other) {
6337 if (!(other instanceof Point))
6338 throw new Error('ExtendedPoint expected');
6339 }
6340 class Point {
6341 constructor(ex, ey, ez, et) {
6342 this.ex = ex;
6343 this.ey = ey;
6344 this.ez = ez;
6345 this.et = et;
6346 if (!in0MaskRange(ex))
6347 throw new Error('x required');
6348 if (!in0MaskRange(ey))
6349 throw new Error('y required');
6350 if (!in0MaskRange(ez))
6351 throw new Error('z required');
6352 if (!in0MaskRange(et))
6353 throw new Error('t required');
6354 }
6355 get x() {
6356 return this.toAffine().x;
6357 }
6358 get y() {
6359 return this.toAffine().y;
6360 }
6361 static fromAffine(p) {
6362 if (p instanceof Point)
6363 throw new Error('extended point not allowed');
6364 const { x, y } = p || {};
6365 if (!in0MaskRange(x) || !in0MaskRange(y))
6366 throw new Error('invalid affine point');
6367 return new Point(x, y, _1n$3, modP(x * y));
6368 }
6369 static normalizeZ(points) {
6370 const toInv = Fp.invertBatch(points.map((p) => p.ez));
6371 return points.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);
6372 }
6373 _setWindowSize(windowSize) {
6374 this._WINDOW_SIZE = windowSize;
6375 pointPrecomputes.delete(this);
6376 }
6377 assertValidity() {
6378 const { a, d } = CURVE;
6379 if (this.is0())
6380 throw new Error('bad point: ZERO');
6381 const { ex: X, ey: Y, ez: Z, et: T } = this;
6382 const X2 = modP(X * X);
6383 const Y2 = modP(Y * Y);
6384 const Z2 = modP(Z * Z);
6385 const Z4 = modP(Z2 * Z2);
6386 const aX2 = modP(X2 * a);
6387 const left = modP(Z2 * modP(aX2 + Y2));
6388 const right = modP(Z4 + modP(d * modP(X2 * Y2)));
6389 if (left !== right)
6390 throw new Error('bad point: equation left != right (1)');
6391 const XY = modP(X * Y);
6392 const ZT = modP(Z * T);
6393 if (XY !== ZT)
6394 throw new Error('bad point: equation left != right (2)');
6395 }
6396 equals(other) {
6397 isPoint(other);
6398 const { ex: X1, ey: Y1, ez: Z1 } = this;
6399 const { ex: X2, ey: Y2, ez: Z2 } = other;
6400 const X1Z2 = modP(X1 * Z2);
6401 const X2Z1 = modP(X2 * Z1);
6402 const Y1Z2 = modP(Y1 * Z2);
6403 const Y2Z1 = modP(Y2 * Z1);
6404 return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;
6405 }
6406 is0() {
6407 return this.equals(Point.ZERO);
6408 }
6409 negate() {
6410 return new Point(modP(-this.ex), this.ey, this.ez, modP(-this.et));
6411 }
6412 double() {
6413 const { a } = CURVE;
6414 const { ex: X1, ey: Y1, ez: Z1 } = this;
6415 const A = modP(X1 * X1);
6416 const B = modP(Y1 * Y1);
6417 const C = modP(_2n$2 * modP(Z1 * Z1));
6418 const D = modP(a * A);
6419 const x1y1 = X1 + Y1;
6420 const E = modP(modP(x1y1 * x1y1) - A - B);
6421 const G = D + B;
6422 const F = G - C;
6423 const H = D - B;
6424 const X3 = modP(E * F);
6425 const Y3 = modP(G * H);
6426 const T3 = modP(E * H);
6427 const Z3 = modP(F * G);
6428 return new Point(X3, Y3, Z3, T3);
6429 }
6430 add(other) {
6431 isPoint(other);
6432 const { a, d } = CURVE;
6433 const { ex: X1, ey: Y1, ez: Z1, et: T1 } = this;
6434 const { ex: X2, ey: Y2, ez: Z2, et: T2 } = other;
6435 if (a === BigInt(-1)) {
6436 const A = modP((Y1 - X1) * (Y2 + X2));
6437 const B = modP((Y1 + X1) * (Y2 - X2));
6438 const F = modP(B - A);
6439 if (F === _0n$3)
6440 return this.double();
6441 const C = modP(Z1 * _2n$2 * T2);
6442 const D = modP(T1 * _2n$2 * Z2);
6443 const E = D + C;
6444 const G = B + A;
6445 const H = D - C;
6446 const X3 = modP(E * F);
6447 const Y3 = modP(G * H);
6448 const T3 = modP(E * H);
6449 const Z3 = modP(F * G);
6450 return new Point(X3, Y3, Z3, T3);
6451 }
6452 const A = modP(X1 * X2);
6453 const B = modP(Y1 * Y2);
6454 const C = modP(T1 * d * T2);
6455 const D = modP(Z1 * Z2);
6456 const E = modP((X1 + Y1) * (X2 + Y2) - A - B);
6457 const F = D - C;
6458 const G = D + C;
6459 const H = modP(B - a * A);
6460 const X3 = modP(E * F);
6461 const Y3 = modP(G * H);
6462 const T3 = modP(E * H);
6463 const Z3 = modP(F * G);
6464 return new Point(X3, Y3, Z3, T3);
6465 }
6466 subtract(other) {
6467 return this.add(other.negate());
6468 }
6469 wNAF(n) {
6470 return wnaf.wNAFCached(this, pointPrecomputes, n, Point.normalizeZ);
6471 }
6472 multiply(scalar) {
6473 const { p, f } = this.wNAF(assertInRange(scalar, CURVE_ORDER));
6474 return Point.normalizeZ([p, f])[0];
6475 }
6476 multiplyUnsafe(scalar) {
6477 let n = assertGE0(scalar);
6478 if (n === _0n$3)
6479 return I;
6480 if (this.equals(I) || n === _1n$3)
6481 return this;
6482 if (this.equals(G))
6483 return this.wNAF(n).p;
6484 return wnaf.unsafeLadder(this, n);
6485 }
6486 isSmallOrder() {
6487 return this.multiplyUnsafe(cofactor).is0();
6488 }
6489 isTorsionFree() {
6490 return wnaf.unsafeLadder(this, CURVE_ORDER).is0();
6491 }
6492 toAffine(iz) {
6493 const { ex: x, ey: y, ez: z } = this;
6494 const is0 = this.is0();
6495 if (iz == null)
6496 iz = is0 ? _8n : Fp.inv(z);
6497 const ax = modP(x * iz);
6498 const ay = modP(y * iz);
6499 const zz = modP(z * iz);
6500 if (is0)
6501 return { x: _0n$3, y: _1n$3 };
6502 if (zz !== _1n$3)
6503 throw new Error('invZ was invalid');
6504 return { x: ax, y: ay };
6505 }
6506 clearCofactor() {
6507 const { h: cofactor } = CURVE;
6508 if (cofactor === _1n$3)
6509 return this;
6510 return this.multiplyUnsafe(cofactor);
6511 }
6512 static fromHex(hex, zip215 = false) {
6513 const { d, a } = CURVE;
6514 const len = Fp.BYTES;
6515 hex = ensureBytes('pointHex', hex, len);
6516 const normed = hex.slice();
6517 const lastByte = hex[len - 1];
6518 normed[len - 1] = lastByte & ~0x80;
6519 const y = bytesToNumberLE(normed);
6520 if (y === _0n$3) ;
6521 else {
6522 if (zip215)
6523 assertInRange(y, MASK);
6524 else
6525 assertInRange(y, Fp.ORDER);
6526 }
6527 const y2 = modP(y * y);
6528 const u = modP(y2 - _1n$3);
6529 const v = modP(d * y2 - a);
6530 let { isValid, value: x } = uvRatio(u, v);
6531 if (!isValid)
6532 throw new Error('Point.fromHex: invalid y coordinate');
6533 const isXOdd = (x & _1n$3) === _1n$3;
6534 const isLastByteOdd = (lastByte & 0x80) !== 0;
6535 if (!zip215 && x === _0n$3 && isLastByteOdd)
6536 throw new Error('Point.fromHex: x=0 and x_0=1');
6537 if (isLastByteOdd !== isXOdd)
6538 x = modP(-x);
6539 return Point.fromAffine({ x, y });
6540 }
6541 static fromPrivateKey(privKey) {
6542 return getExtendedPublicKey(privKey).point;
6543 }
6544 toRawBytes() {
6545 const { x, y } = this.toAffine();
6546 const bytes = numberToBytesLE(y, Fp.BYTES);
6547 bytes[bytes.length - 1] |= x & _1n$3 ? 0x80 : 0;
6548 return bytes;
6549 }
6550 toHex() {
6551 return bytesToHex(this.toRawBytes());
6552 }
6553 }
6554 Point.BASE = new Point(CURVE.Gx, CURVE.Gy, _1n$3, modP(CURVE.Gx * CURVE.Gy));
6555 Point.ZERO = new Point(_0n$3, _1n$3, _1n$3, _0n$3);
6556 const { BASE: G, ZERO: I } = Point;
6557 const wnaf = wNAF(Point, nByteLength * 8);
6558 function modN(a) {
6559 return mod(a, CURVE_ORDER);
6560 }
6561 function modN_LE(hash) {
6562 return modN(bytesToNumberLE(hash));
6563 }
6564 function getExtendedPublicKey(key) {
6565 const len = nByteLength;
6566 key = ensureBytes('private key', key, len);
6567 const hashed = ensureBytes('hashed private key', cHash(key), 2 * len);
6568 const head = adjustScalarBytes(hashed.slice(0, len));
6569 const prefix = hashed.slice(len, 2 * len);
6570 const scalar = modN_LE(head);
6571 const point = G.multiply(scalar);
6572 const pointBytes = point.toRawBytes();
6573 return { head, prefix, scalar, point, pointBytes };
6574 }
6575 function getPublicKey(privKey) {
6576 return getExtendedPublicKey(privKey).pointBytes;
6577 }
6578 function hashDomainToScalar(context = new Uint8Array(), ...msgs) {
6579 const msg = concatBytes(...msgs);
6580 return modN_LE(cHash(domain(msg, ensureBytes('context', context), !!prehash)));
6581 }
6582 function sign(msg, privKey, options = {}) {
6583 msg = ensureBytes('message', msg);
6584 if (prehash)
6585 msg = prehash(msg);
6586 const { prefix, scalar, pointBytes } = getExtendedPublicKey(privKey);
6587 const r = hashDomainToScalar(options.context, prefix, msg);
6588 const R = G.multiply(r).toRawBytes();
6589 const k = hashDomainToScalar(options.context, R, pointBytes, msg);
6590 const s = modN(r + k * scalar);
6591 assertGE0(s);
6592 const res = concatBytes(R, numberToBytesLE(s, Fp.BYTES));
6593 return ensureBytes('result', res, nByteLength * 2);
6594 }
6595 const verifyOpts = VERIFY_DEFAULT;
6596 function verify(sig, msg, publicKey, options = verifyOpts) {
6597 const { context, zip215 } = options;
6598 const len = Fp.BYTES;
6599 sig = ensureBytes('signature', sig, 2 * len);
6600 msg = ensureBytes('message', msg);
6601 if (prehash)
6602 msg = prehash(msg);
6603 const s = bytesToNumberLE(sig.slice(len, 2 * len));
6604 let A, R, SB;
6605 try {
6606 A = Point.fromHex(publicKey, zip215);
6607 R = Point.fromHex(sig.slice(0, len), zip215);
6608 SB = G.multiplyUnsafe(s);
6609 }
6610 catch (error) {
6611 return false;
6612 }
6613 if (!zip215 && A.isSmallOrder())
6614 return false;
6615 const k = hashDomainToScalar(context, R.toRawBytes(), A.toRawBytes(), msg);
6616 const RkA = R.add(A.multiplyUnsafe(k));
6617 return RkA.subtract(SB).clearCofactor().equals(Point.ZERO);
6618 }
6619 G._setWindowSize(8);
6620 const utils = {
6621 getExtendedPublicKey,
6622 randomPrivateKey: () => randomBytes(Fp.BYTES),
6623 precompute(windowSize = 8, point = Point.BASE) {
6624 point._setWindowSize(windowSize);
6625 point.multiply(BigInt(3));
6626 return point;
6627 },
6628 };
6629 return {
6630 CURVE,
6631 getPublicKey,
6632 sign,
6633 verify,
6634 ExtendedPoint: Point,
6635 utils,
6636 };
6637 }
6638
6639 /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
6640 const _0n$2 = BigInt(0);
6641 const _1n$2 = BigInt(1);
6642 function validateOpts(curve) {
6643 validateObject(curve, {
6644 a: 'bigint',
6645 }, {
6646 montgomeryBits: 'isSafeInteger',
6647 nByteLength: 'isSafeInteger',
6648 adjustScalarBytes: 'function',
6649 domain: 'function',
6650 powPminus2: 'function',
6651 Gu: 'bigint',
6652 });
6653 return Object.freeze({ ...curve });
6654 }
6655 function montgomery(curveDef) {
6656 const CURVE = validateOpts(curveDef);
6657 const { P } = CURVE;
6658 const modP = (n) => mod(n, P);
6659 const montgomeryBits = CURVE.montgomeryBits;
6660 const montgomeryBytes = Math.ceil(montgomeryBits / 8);
6661 const fieldLen = CURVE.nByteLength;
6662 const adjustScalarBytes = CURVE.adjustScalarBytes || ((bytes) => bytes);
6663 const powPminus2 = CURVE.powPminus2 || ((x) => pow(x, P - BigInt(2), P));
6664 function cswap(swap, x_2, x_3) {
6665 const dummy = modP(swap * (x_2 - x_3));
6666 x_2 = modP(x_2 - dummy);
6667 x_3 = modP(x_3 + dummy);
6668 return [x_2, x_3];
6669 }
6670 function assertFieldElement(n) {
6671 if (typeof n === 'bigint' && _0n$2 <= n && n < P)
6672 return n;
6673 throw new Error('Expected valid scalar 0 < scalar < CURVE.P');
6674 }
6675 const a24 = (CURVE.a - BigInt(2)) / BigInt(4);
6676 function montgomeryLadder(pointU, scalar) {
6677 const u = assertFieldElement(pointU);
6678 const k = assertFieldElement(scalar);
6679 const x_1 = u;
6680 let x_2 = _1n$2;
6681 let z_2 = _0n$2;
6682 let x_3 = u;
6683 let z_3 = _1n$2;
6684 let swap = _0n$2;
6685 let sw;
6686 for (let t = BigInt(montgomeryBits - 1); t >= _0n$2; t--) {
6687 const k_t = (k >> t) & _1n$2;
6688 swap ^= k_t;
6689 sw = cswap(swap, x_2, x_3);
6690 x_2 = sw[0];
6691 x_3 = sw[1];
6692 sw = cswap(swap, z_2, z_3);
6693 z_2 = sw[0];
6694 z_3 = sw[1];
6695 swap = k_t;
6696 const A = x_2 + z_2;
6697 const AA = modP(A * A);
6698 const B = x_2 - z_2;
6699 const BB = modP(B * B);
6700 const E = AA - BB;
6701 const C = x_3 + z_3;
6702 const D = x_3 - z_3;
6703 const DA = modP(D * A);
6704 const CB = modP(C * B);
6705 const dacb = DA + CB;
6706 const da_cb = DA - CB;
6707 x_3 = modP(dacb * dacb);
6708 z_3 = modP(x_1 * modP(da_cb * da_cb));
6709 x_2 = modP(AA * BB);
6710 z_2 = modP(E * (AA + modP(a24 * E)));
6711 }
6712 sw = cswap(swap, x_2, x_3);
6713 x_2 = sw[0];
6714 x_3 = sw[1];
6715 sw = cswap(swap, z_2, z_3);
6716 z_2 = sw[0];
6717 z_3 = sw[1];
6718 const z2 = powPminus2(z_2);
6719 return modP(x_2 * z2);
6720 }
6721 function encodeUCoordinate(u) {
6722 return numberToBytesLE(modP(u), montgomeryBytes);
6723 }
6724 function decodeUCoordinate(uEnc) {
6725 const u = ensureBytes('u coordinate', uEnc, montgomeryBytes);
6726 if (fieldLen === 32)
6727 u[31] &= 127;
6728 return bytesToNumberLE(u);
6729 }
6730 function decodeScalar(n) {
6731 const bytes = ensureBytes('scalar', n);
6732 const len = bytes.length;
6733 if (len !== montgomeryBytes && len !== fieldLen)
6734 throw new Error(`Expected ${montgomeryBytes} or ${fieldLen} bytes, got ${len}`);
6735 return bytesToNumberLE(adjustScalarBytes(bytes));
6736 }
6737 function scalarMult(scalar, u) {
6738 const pointU = decodeUCoordinate(u);
6739 const _scalar = decodeScalar(scalar);
6740 const pu = montgomeryLadder(pointU, _scalar);
6741 if (pu === _0n$2)
6742 throw new Error('Invalid private or public key received');
6743 return encodeUCoordinate(pu);
6744 }
6745 const GuBytes = encodeUCoordinate(CURVE.Gu);
6746 function scalarMultBase(scalar) {
6747 return scalarMult(scalar, GuBytes);
6748 }
6749 return {
6750 scalarMult,
6751 scalarMultBase,
6752 getSharedSecret: (privateKey, publicKey) => scalarMult(privateKey, publicKey),
6753 getPublicKey: (privateKey) => scalarMultBase(privateKey),
6754 utils: { randomPrivateKey: () => CURVE.randomBytes(CURVE.nByteLength) },
6755 GuBytes: GuBytes,
6756 };
6757 }
6758
6759 /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
6760 const ED25519_P = BigInt('57896044618658097711785492504343953926634992332820282019728792003956564819949');
6761 const ED25519_SQRT_M1 = BigInt('19681161376707505956807079304988542015446066515923890162744021073123829784752');
6762 const _0n$1 = BigInt(0), _1n$1 = BigInt(1), _2n$1 = BigInt(2), _5n = BigInt(5);
6763 const _10n = BigInt(10), _20n = BigInt(20), _40n = BigInt(40), _80n = BigInt(80);
6764 function ed25519_pow_2_252_3(x) {
6765 const P = ED25519_P;
6766 const x2 = (x * x) % P;
6767 const b2 = (x2 * x) % P;
6768 const b4 = (pow2(b2, _2n$1, P) * b2) % P;
6769 const b5 = (pow2(b4, _1n$1, P) * x) % P;
6770 const b10 = (pow2(b5, _5n, P) * b5) % P;
6771 const b20 = (pow2(b10, _10n, P) * b10) % P;
6772 const b40 = (pow2(b20, _20n, P) * b20) % P;
6773 const b80 = (pow2(b40, _40n, P) * b40) % P;
6774 const b160 = (pow2(b80, _80n, P) * b80) % P;
6775 const b240 = (pow2(b160, _80n, P) * b80) % P;
6776 const b250 = (pow2(b240, _10n, P) * b10) % P;
6777 const pow_p_5_8 = (pow2(b250, _2n$1, P) * x) % P;
6778 return { pow_p_5_8, b2 };
6779 }
6780 function adjustScalarBytes(bytes) {
6781 bytes[0] &= 248;
6782 bytes[31] &= 127;
6783 bytes[31] |= 64;
6784 return bytes;
6785 }
6786 function uvRatio(u, v) {
6787 const P = ED25519_P;
6788 const v3 = mod(v * v * v, P);
6789 const v7 = mod(v3 * v3 * v, P);
6790 const pow = ed25519_pow_2_252_3(u * v7).pow_p_5_8;
6791 let x = mod(u * v3 * pow, P);
6792 const vx2 = mod(v * x * x, P);
6793 const root1 = x;
6794 const root2 = mod(x * ED25519_SQRT_M1, P);
6795 const useRoot1 = vx2 === u;
6796 const useRoot2 = vx2 === mod(-u, P);
6797 const noRoot = vx2 === mod(-u * ED25519_SQRT_M1, P);
6798 if (useRoot1)
6799 x = root1;
6800 if (useRoot2 || noRoot)
6801 x = root2;
6802 if (isNegativeLE(x, P))
6803 x = mod(-x, P);
6804 return { isValid: useRoot1 || useRoot2, value: x };
6805 }
6806 const Fp = Field(ED25519_P, undefined, true);
6807 const ed25519Defaults = {
6808 a: BigInt(-1),
6809 d: BigInt('37095705934669439343138083508754565189542113879843219016388785533085940283555'),
6810 Fp,
6811 n: BigInt('7237005577332262213973186563042994240857116359379907606001950938285454250989'),
6812 h: BigInt(8),
6813 Gx: BigInt('15112221349535400772501151409588531511454012693041857206046113283949847762202'),
6814 Gy: BigInt('46316835694926478169428394003475163141307993866256225615783033603165251855960'),
6815 hash: sha512,
6816 randomBytes,
6817 adjustScalarBytes,
6818 uvRatio,
6819 };
6820 const ed25519 = twistedEdwards(ed25519Defaults);
6821 function ed25519_domain(data, ctx, phflag) {
6822 if (ctx.length > 255)
6823 throw new Error('Context is too big');
6824 return concatBytes$1(utf8ToBytes$1('SigEd25519 no Ed25519 collisions'), new Uint8Array([phflag ? 1 : 0, ctx.length]), ctx, data);
6825 }
6826 twistedEdwards({
6827 ...ed25519Defaults,
6828 domain: ed25519_domain,
6829 });
6830 twistedEdwards({
6831 ...ed25519Defaults,
6832 domain: ed25519_domain,
6833 prehash: sha512,
6834 });
6835 (() => montgomery({
6836 P: ED25519_P,
6837 a: BigInt(486662),
6838 montgomeryBits: 255,
6839 nByteLength: 32,
6840 Gu: BigInt(9),
6841 powPminus2: (x) => {
6842 const P = ED25519_P;
6843 const { pow_p_5_8, b2 } = ed25519_pow_2_252_3(x);
6844 return mod(pow2(pow_p_5_8, BigInt(3), P) * b2, P);
6845 },
6846 adjustScalarBytes,
6847 randomBytes,
6848 }))();
6849 const ELL2_C1 = (Fp.ORDER + BigInt(3)) / BigInt(8);
6850 const ELL2_C2 = Fp.pow(_2n$1, ELL2_C1);
6851 const ELL2_C3 = Fp.sqrt(Fp.neg(Fp.ONE));
6852 const ELL2_C4 = (Fp.ORDER - BigInt(5)) / BigInt(8);
6853 const ELL2_J = BigInt(486662);
6854 function map_to_curve_elligator2_curve25519(u) {
6855 let tv1 = Fp.sqr(u);
6856 tv1 = Fp.mul(tv1, _2n$1);
6857 let xd = Fp.add(tv1, Fp.ONE);
6858 let x1n = Fp.neg(ELL2_J);
6859 let tv2 = Fp.sqr(xd);
6860 let gxd = Fp.mul(tv2, xd);
6861 let gx1 = Fp.mul(tv1, ELL2_J);
6862 gx1 = Fp.mul(gx1, x1n);
6863 gx1 = Fp.add(gx1, tv2);
6864 gx1 = Fp.mul(gx1, x1n);
6865 let tv3 = Fp.sqr(gxd);
6866 tv2 = Fp.sqr(tv3);
6867 tv3 = Fp.mul(tv3, gxd);
6868 tv3 = Fp.mul(tv3, gx1);
6869 tv2 = Fp.mul(tv2, tv3);
6870 let y11 = Fp.pow(tv2, ELL2_C4);
6871 y11 = Fp.mul(y11, tv3);
6872 let y12 = Fp.mul(y11, ELL2_C3);
6873 tv2 = Fp.sqr(y11);
6874 tv2 = Fp.mul(tv2, gxd);
6875 let e1 = Fp.eql(tv2, gx1);
6876 let y1 = Fp.cmov(y12, y11, e1);
6877 let x2n = Fp.mul(x1n, tv1);
6878 let y21 = Fp.mul(y11, u);
6879 y21 = Fp.mul(y21, ELL2_C2);
6880 let y22 = Fp.mul(y21, ELL2_C3);
6881 let gx2 = Fp.mul(gx1, tv1);
6882 tv2 = Fp.sqr(y21);
6883 tv2 = Fp.mul(tv2, gxd);
6884 let e2 = Fp.eql(tv2, gx2);
6885 let y2 = Fp.cmov(y22, y21, e2);
6886 tv2 = Fp.sqr(y1);
6887 tv2 = Fp.mul(tv2, gxd);
6888 let e3 = Fp.eql(tv2, gx1);
6889 let xn = Fp.cmov(x2n, x1n, e3);
6890 let y = Fp.cmov(y2, y1, e3);
6891 let e4 = Fp.isOdd(y);
6892 y = Fp.cmov(y, Fp.neg(y), e3 !== e4);
6893 return { xMn: xn, xMd: xd, yMn: y, yMd: _1n$1 };
6894 }
6895 const ELL2_C1_EDWARDS = FpSqrtEven(Fp, Fp.neg(BigInt(486664)));
6896 function map_to_curve_elligator2_edwards25519(u) {
6897 const { xMn, xMd, yMn, yMd } = map_to_curve_elligator2_curve25519(u);
6898 let xn = Fp.mul(xMn, yMd);
6899 xn = Fp.mul(xn, ELL2_C1_EDWARDS);
6900 let xd = Fp.mul(xMd, yMn);
6901 let yn = Fp.sub(xMn, xMd);
6902 let yd = Fp.add(xMn, xMd);
6903 let tv1 = Fp.mul(xd, yd);
6904 let e = Fp.eql(tv1, Fp.ZERO);
6905 xn = Fp.cmov(xn, Fp.ZERO, e);
6906 xd = Fp.cmov(xd, Fp.ONE, e);
6907 yn = Fp.cmov(yn, Fp.ONE, e);
6908 yd = Fp.cmov(yd, Fp.ONE, e);
6909 const inv = Fp.invertBatch([xd, yd]);
6910 return { x: Fp.mul(xn, inv[0]), y: Fp.mul(yn, inv[1]) };
6911 }
6912 (() => createHasher(ed25519.ExtendedPoint, (scalars) => map_to_curve_elligator2_edwards25519(scalars[0]), {
6913 DST: 'edwards25519_XMD:SHA-512_ELL2_RO_',
6914 encodeDST: 'edwards25519_XMD:SHA-512_ELL2_NU_',
6915 p: Fp.ORDER,
6916 m: 1,
6917 k: 128,
6918 expand: 'xmd',
6919 hash: sha512,
6920 }))();
6921 function assertRstPoint(other) {
6922 if (!(other instanceof RistPoint))
6923 throw new Error('RistrettoPoint expected');
6924 }
6925 const SQRT_M1 = ED25519_SQRT_M1;
6926 const SQRT_AD_MINUS_ONE = BigInt('25063068953384623474111414158702152701244531502492656460079210482610430750235');
6927 const INVSQRT_A_MINUS_D = BigInt('54469307008909316920995813868745141605393597292927456921205312896311721017578');
6928 const ONE_MINUS_D_SQ = BigInt('1159843021668779879193775521855586647937357759715417654439879720876111806838');
6929 const D_MINUS_ONE_SQ = BigInt('40440834346308536858101042469323190826248399146238708352240133220865137265952');
6930 const invertSqrt = (number) => uvRatio(_1n$1, number);
6931 const MAX_255B = BigInt('0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff');
6932 const bytes255ToNumberLE = (bytes) => ed25519.CURVE.Fp.create(bytesToNumberLE(bytes) & MAX_255B);
6933 function calcElligatorRistrettoMap(r0) {
6934 const { d } = ed25519.CURVE;
6935 const P = ed25519.CURVE.Fp.ORDER;
6936 const mod = ed25519.CURVE.Fp.create;
6937 const r = mod(SQRT_M1 * r0 * r0);
6938 const Ns = mod((r + _1n$1) * ONE_MINUS_D_SQ);
6939 let c = BigInt(-1);
6940 const D = mod((c - d * r) * mod(r + d));
6941 let { isValid: Ns_D_is_sq, value: s } = uvRatio(Ns, D);
6942 let s_ = mod(s * r0);
6943 if (!isNegativeLE(s_, P))
6944 s_ = mod(-s_);
6945 if (!Ns_D_is_sq)
6946 s = s_;
6947 if (!Ns_D_is_sq)
6948 c = r;
6949 const Nt = mod(c * (r - _1n$1) * D_MINUS_ONE_SQ - D);
6950 const s2 = s * s;
6951 const W0 = mod((s + s) * D);
6952 const W1 = mod(Nt * SQRT_AD_MINUS_ONE);
6953 const W2 = mod(_1n$1 - s2);
6954 const W3 = mod(_1n$1 + s2);
6955 return new ed25519.ExtendedPoint(mod(W0 * W3), mod(W2 * W1), mod(W1 * W3), mod(W0 * W2));
6956 }
6957 class RistPoint {
6958 constructor(ep) {
6959 this.ep = ep;
6960 }
6961 static fromAffine(ap) {
6962 return new RistPoint(ed25519.ExtendedPoint.fromAffine(ap));
6963 }
6964 static hashToCurve(hex) {
6965 hex = ensureBytes('ristrettoHash', hex, 64);
6966 const r1 = bytes255ToNumberLE(hex.slice(0, 32));
6967 const R1 = calcElligatorRistrettoMap(r1);
6968 const r2 = bytes255ToNumberLE(hex.slice(32, 64));
6969 const R2 = calcElligatorRistrettoMap(r2);
6970 return new RistPoint(R1.add(R2));
6971 }
6972 static fromHex(hex) {
6973 hex = ensureBytes('ristrettoHex', hex, 32);
6974 const { a, d } = ed25519.CURVE;
6975 const P = ed25519.CURVE.Fp.ORDER;
6976 const mod = ed25519.CURVE.Fp.create;
6977 const emsg = 'RistrettoPoint.fromHex: the hex is not valid encoding of RistrettoPoint';
6978 const s = bytes255ToNumberLE(hex);
6979 if (!equalBytes(numberToBytesLE(s, 32), hex) || isNegativeLE(s, P))
6980 throw new Error(emsg);
6981 const s2 = mod(s * s);
6982 const u1 = mod(_1n$1 + a * s2);
6983 const u2 = mod(_1n$1 - a * s2);
6984 const u1_2 = mod(u1 * u1);
6985 const u2_2 = mod(u2 * u2);
6986 const v = mod(a * d * u1_2 - u2_2);
6987 const { isValid, value: I } = invertSqrt(mod(v * u2_2));
6988 const Dx = mod(I * u2);
6989 const Dy = mod(I * Dx * v);
6990 let x = mod((s + s) * Dx);
6991 if (isNegativeLE(x, P))
6992 x = mod(-x);
6993 const y = mod(u1 * Dy);
6994 const t = mod(x * y);
6995 if (!isValid || isNegativeLE(t, P) || y === _0n$1)
6996 throw new Error(emsg);
6997 return new RistPoint(new ed25519.ExtendedPoint(x, y, _1n$1, t));
6998 }
6999 toRawBytes() {
7000 let { ex: x, ey: y, ez: z, et: t } = this.ep;
7001 const P = ed25519.CURVE.Fp.ORDER;
7002 const mod = ed25519.CURVE.Fp.create;
7003 const u1 = mod(mod(z + y) * mod(z - y));
7004 const u2 = mod(x * y);
7005 const u2sq = mod(u2 * u2);
7006 const { value: invsqrt } = invertSqrt(mod(u1 * u2sq));
7007 const D1 = mod(invsqrt * u1);
7008 const D2 = mod(invsqrt * u2);
7009 const zInv = mod(D1 * D2 * t);
7010 let D;
7011 if (isNegativeLE(t * zInv, P)) {
7012 let _x = mod(y * SQRT_M1);
7013 let _y = mod(x * SQRT_M1);
7014 x = _x;
7015 y = _y;
7016 D = mod(D1 * INVSQRT_A_MINUS_D);
7017 }
7018 else {
7019 D = D2;
7020 }
7021 if (isNegativeLE(x * zInv, P))
7022 y = mod(-y);
7023 let s = mod((z - y) * D);
7024 if (isNegativeLE(s, P))
7025 s = mod(-s);
7026 return numberToBytesLE(s, 32);
7027 }
7028 toHex() {
7029 return bytesToHex(this.toRawBytes());
7030 }
7031 toString() {
7032 return this.toHex();
7033 }
7034 equals(other) {
7035 assertRstPoint(other);
7036 const { ex: X1, ey: Y1 } = this.ep;
7037 const { ex: X2, ey: Y2 } = other.ep;
7038 const mod = ed25519.CURVE.Fp.create;
7039 const one = mod(X1 * Y2) === mod(Y1 * X2);
7040 const two = mod(Y1 * Y2) === mod(X1 * X2);
7041 return one || two;
7042 }
7043 add(other) {
7044 assertRstPoint(other);
7045 return new RistPoint(this.ep.add(other.ep));
7046 }
7047 subtract(other) {
7048 assertRstPoint(other);
7049 return new RistPoint(this.ep.subtract(other.ep));
7050 }
7051 multiply(scalar) {
7052 return new RistPoint(this.ep.multiply(scalar));
7053 }
7054 multiplyUnsafe(scalar) {
7055 return new RistPoint(this.ep.multiplyUnsafe(scalar));
7056 }
7057 double() {
7058 return new RistPoint(this.ep.double());
7059 }
7060 negate() {
7061 return new RistPoint(this.ep.negate());
7062 }
7063 }
7064 (() => {
7065 if (!RistPoint.BASE)
7066 RistPoint.BASE = new RistPoint(ed25519.ExtendedPoint.BASE);
7067 if (!RistPoint.ZERO)
7068 RistPoint.ZERO = new RistPoint(ed25519.ExtendedPoint.ZERO);
7069 return RistPoint;
7070 })();
7071
7072 function ed25519PairFromSeed(seed, onlyJs) {
7073 if (!util.hasBigInt || (!onlyJs && isReady())) {
7074 const full = ed25519KeypairFromSeed(seed);
7075 return {
7076 publicKey: full.slice(32),
7077 secretKey: full.slice(0, 64)
7078 };
7079 }
7080 const publicKey = ed25519.getPublicKey(seed);
7081 return {
7082 publicKey,
7083 secretKey: util.u8aConcatStrict([seed, publicKey])
7084 };
7085 }
7086
7087 function ed25519PairFromRandom() {
7088 return ed25519PairFromSeed(randomAsU8a());
7089 }
7090
7091 function ed25519PairFromSecret(secretKey) {
7092 if (secretKey.length !== 64) {
7093 throw new Error('Invalid secretKey provided');
7094 }
7095 return {
7096 publicKey: secretKey.slice(32),
7097 secretKey
7098 };
7099 }
7100
7101 function ed25519PairFromString(value) {
7102 return ed25519PairFromSeed(blake2AsU8a(util.stringToU8a(value)));
7103 }
7104
7105 function ed25519Sign(message, { publicKey, secretKey }, onlyJs) {
7106 if (!secretKey) {
7107 throw new Error('Expected a valid secretKey');
7108 }
7109 else if (!publicKey) {
7110 throw new Error('Expected a valid publicKey');
7111 }
7112 const messageU8a = util.u8aToU8a(message);
7113 const privateU8a = secretKey.subarray(0, 32);
7114 return !util.hasBigInt || (!onlyJs && isReady())
7115 ? ed25519Sign$1(publicKey, privateU8a, messageU8a)
7116 : ed25519.sign(messageU8a, privateU8a);
7117 }
7118
7119 function ed25519Verify(message, signature, publicKey, onlyJs) {
7120 const messageU8a = util.u8aToU8a(message);
7121 const publicKeyU8a = util.u8aToU8a(publicKey);
7122 const signatureU8a = util.u8aToU8a(signature);
7123 if (publicKeyU8a.length !== 32) {
7124 throw new Error(`Invalid publicKey, received ${publicKeyU8a.length}, expected 32`);
7125 }
7126 else if (signatureU8a.length !== 64) {
7127 throw new Error(`Invalid signature, received ${signatureU8a.length} bytes, expected 64`);
7128 }
7129 try {
7130 return !util.hasBigInt || (!onlyJs && isReady())
7131 ? ed25519Verify$1(signatureU8a, messageU8a, publicKeyU8a)
7132 : ed25519.verify(signatureU8a, messageU8a, publicKeyU8a);
7133 }
7134 catch {
7135 return false;
7136 }
7137 }
7138
7139 const keyHdkdEd25519 = createSeedDeriveFn(ed25519PairFromSeed, ed25519DeriveHard);
7140
7141 const SEC_LEN = 64;
7142 const PUB_LEN = 32;
7143 const TOT_LEN = SEC_LEN + PUB_LEN;
7144 function sr25519PairFromU8a(full) {
7145 const fullU8a = util.u8aToU8a(full);
7146 if (fullU8a.length !== TOT_LEN) {
7147 throw new Error(`Expected keypair with ${TOT_LEN} bytes, found ${fullU8a.length}`);
7148 }
7149 return {
7150 publicKey: fullU8a.slice(SEC_LEN, TOT_LEN),
7151 secretKey: fullU8a.slice(0, SEC_LEN)
7152 };
7153 }
7154
7155 function sr25519KeypairToU8a({ publicKey, secretKey }) {
7156 return util.u8aConcat(secretKey, publicKey).slice();
7157 }
7158
7159 function createDeriveFn(derive) {
7160 return (keypair, chainCode) => {
7161 if (!util.isU8a(chainCode) || chainCode.length !== 32) {
7162 throw new Error('Invalid chainCode passed to derive');
7163 }
7164 return sr25519PairFromU8a(derive(sr25519KeypairToU8a(keypair), chainCode));
7165 };
7166 }
7167
7168 const sr25519DeriveHard = createDeriveFn(sr25519DeriveKeypairHard);
7169
7170 const sr25519DeriveSoft = createDeriveFn(sr25519DeriveKeypairSoft);
7171
7172 function keyHdkdSr25519(keypair, { chainCode, isSoft }) {
7173 return isSoft
7174 ? sr25519DeriveSoft(keypair, chainCode)
7175 : sr25519DeriveHard(keypair, chainCode);
7176 }
7177
7178 const generators = {
7179 ecdsa: keyHdkdEcdsa,
7180 ed25519: keyHdkdEd25519,
7181 ethereum: keyHdkdEcdsa,
7182 sr25519: keyHdkdSr25519
7183 };
7184 function keyFromPath(pair, path, type) {
7185 const keyHdkd = generators[type];
7186 let result = pair;
7187 for (const junction of path) {
7188 result = keyHdkd(result, junction);
7189 }
7190 return result;
7191 }
7192
7193 function sr25519Agreement(secretKey, publicKey) {
7194 const secretKeyU8a = util.u8aToU8a(secretKey);
7195 const publicKeyU8a = util.u8aToU8a(publicKey);
7196 if (publicKeyU8a.length !== 32) {
7197 throw new Error(`Invalid publicKey, received ${publicKeyU8a.length} bytes, expected 32`);
7198 }
7199 else if (secretKeyU8a.length !== 64) {
7200 throw new Error(`Invalid secretKey, received ${secretKeyU8a.length} bytes, expected 64`);
7201 }
7202 return sr25519Agree(publicKeyU8a, secretKeyU8a);
7203 }
7204
7205 function sr25519DerivePublic(publicKey, chainCode) {
7206 const publicKeyU8a = util.u8aToU8a(publicKey);
7207 if (!util.isU8a(chainCode) || chainCode.length !== 32) {
7208 throw new Error('Invalid chainCode passed to derive');
7209 }
7210 else if (publicKeyU8a.length !== 32) {
7211 throw new Error(`Invalid publicKey, received ${publicKeyU8a.length} bytes, expected 32`);
7212 }
7213 return sr25519DerivePublicSoft(publicKeyU8a, chainCode);
7214 }
7215
7216 function sr25519PairFromSeed(seed) {
7217 const seedU8a = util.u8aToU8a(seed);
7218 if (seedU8a.length !== 32) {
7219 throw new Error(`Expected a seed matching 32 bytes, found ${seedU8a.length}`);
7220 }
7221 return sr25519PairFromU8a(sr25519KeypairFromSeed(seedU8a));
7222 }
7223
7224 function sr25519Sign(message, { publicKey, secretKey }) {
7225 if (publicKey?.length !== 32) {
7226 throw new Error('Expected a valid publicKey, 32-bytes');
7227 }
7228 else if (secretKey?.length !== 64) {
7229 throw new Error('Expected a valid secretKey, 64-bytes');
7230 }
7231 return sr25519Sign$1(publicKey, secretKey, util.u8aToU8a(message));
7232 }
7233
7234 function sr25519Verify(message, signature, publicKey) {
7235 const publicKeyU8a = util.u8aToU8a(publicKey);
7236 const signatureU8a = util.u8aToU8a(signature);
7237 if (publicKeyU8a.length !== 32) {
7238 throw new Error(`Invalid publicKey, received ${publicKeyU8a.length} bytes, expected 32`);
7239 }
7240 else if (signatureU8a.length !== 64) {
7241 throw new Error(`Invalid signature, received ${signatureU8a.length} bytes, expected 64`);
7242 }
7243 return sr25519Verify$1(signatureU8a, util.u8aToU8a(message), publicKeyU8a);
7244 }
7245
7246 const EMPTY_U8A$1 = new Uint8Array();
7247 function sr25519VrfSign(message, { secretKey }, context = EMPTY_U8A$1, extra = EMPTY_U8A$1) {
7248 if (secretKey?.length !== 64) {
7249 throw new Error('Invalid secretKey, expected 64-bytes');
7250 }
7251 return vrfSign(secretKey, util.u8aToU8a(context), util.u8aToU8a(message), util.u8aToU8a(extra));
7252 }
7253
7254 const EMPTY_U8A = new Uint8Array();
7255 function sr25519VrfVerify(message, signOutput, publicKey, context = EMPTY_U8A, extra = EMPTY_U8A) {
7256 const publicKeyU8a = util.u8aToU8a(publicKey);
7257 const proofU8a = util.u8aToU8a(signOutput);
7258 if (publicKeyU8a.length !== 32) {
7259 throw new Error('Invalid publicKey, expected 32-bytes');
7260 }
7261 else if (proofU8a.length !== 96) {
7262 throw new Error('Invalid vrfSign output, expected 96 bytes');
7263 }
7264 return vrfVerify(publicKeyU8a, util.u8aToU8a(context), util.u8aToU8a(message), util.u8aToU8a(extra), proofU8a);
7265 }
7266
7267 function encodeAddress(key, ss58Format = defaults.prefix) {
7268 const u8a = decodeAddress(key);
7269 if ((ss58Format < 0) || (ss58Format > 16383) || [46, 47].includes(ss58Format)) {
7270 throw new Error('Out of range ss58Format specified');
7271 }
7272 else if (!defaults.allowedDecodedLengths.includes(u8a.length)) {
7273 throw new Error(`Expected a valid key to convert, with length ${defaults.allowedDecodedLengths.join(', ')}`);
7274 }
7275 const input = util.u8aConcat(ss58Format < 64
7276 ? [ss58Format]
7277 : [
7278 ((ss58Format & 0b0000_0000_1111_1100) >> 2) | 0b0100_0000,
7279 (ss58Format >> 8) | ((ss58Format & 0b0000_0000_0000_0011) << 6)
7280 ], u8a);
7281 return base58Encode(util.u8aConcat(input, sshash(input).subarray(0, [32, 33].includes(u8a.length) ? 2 : 1)));
7282 }
7283
7284 function filterHard({ isHard }) {
7285 return isHard;
7286 }
7287 function deriveAddress(who, suri, ss58Format) {
7288 const { path } = keyExtractPath(suri);
7289 if (!path.length || path.every(filterHard)) {
7290 throw new Error('Expected suri to contain a combination of non-hard paths');
7291 }
7292 let publicKey = decodeAddress(who);
7293 for (const { chainCode } of path) {
7294 publicKey = sr25519DerivePublic(publicKey, chainCode);
7295 }
7296 return encodeAddress(publicKey, ss58Format);
7297 }
7298
7299 const PREFIX$1 = util.stringToU8a('modlpy/utilisuba');
7300 function createKeyDerived(who, index) {
7301 return blake2AsU8a(util.u8aConcat(PREFIX$1, decodeAddress(who), util.bnToU8a(index, BN_LE_16_OPTS)));
7302 }
7303
7304 function encodeDerivedAddress(who, index, ss58Format) {
7305 return encodeAddress(createKeyDerived(decodeAddress(who), index), ss58Format);
7306 }
7307
7308 function addressToU8a(who) {
7309 return decodeAddress(who);
7310 }
7311
7312 const PREFIX = util.stringToU8a('modlpy/utilisuba');
7313 function createKeyMulti(who, threshold) {
7314 return blake2AsU8a(util.u8aConcat(PREFIX, util.compactToU8a(who.length), ...util.u8aSorted(who.map(addressToU8a)), util.bnToU8a(threshold, BN_LE_16_OPTS)));
7315 }
7316
7317 function encodeMultiAddress(who, threshold, ss58Format) {
7318 return encodeAddress(createKeyMulti(who, threshold), ss58Format);
7319 }
7320
7321 function addressEq(a, b) {
7322 return util.u8aEq(decodeAddress(a), decodeAddress(b));
7323 }
7324
7325 const [SHA3_PI, SHA3_ROTL, _SHA3_IOTA] = [[], [], []];
7326 const _0n = BigInt(0);
7327 const _1n = BigInt(1);
7328 const _2n = BigInt(2);
7329 const _7n$1 = BigInt(7);
7330 const _256n$1 = BigInt(256);
7331 const _0x71n = BigInt(0x71);
7332 for (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {
7333 [x, y] = [y, (2 * x + 3 * y) % 5];
7334 SHA3_PI.push(2 * (5 * y + x));
7335 SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);
7336 let t = _0n;
7337 for (let j = 0; j < 7; j++) {
7338 R = ((R << _1n) ^ ((R >> _7n$1) * _0x71n)) % _256n$1;
7339 if (R & _2n)
7340 t ^= _1n << ((_1n << BigInt(j)) - _1n);
7341 }
7342 _SHA3_IOTA.push(t);
7343 }
7344 const [SHA3_IOTA_H, SHA3_IOTA_L] = split(_SHA3_IOTA, true);
7345 const rotlH = (h, l, s) => (s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s));
7346 const rotlL = (h, l, s) => (s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s));
7347 function keccakP(s, rounds = 24) {
7348 const B = new Uint32Array(5 * 2);
7349 for (let round = 24 - rounds; round < 24; round++) {
7350 for (let x = 0; x < 10; x++)
7351 B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];
7352 for (let x = 0; x < 10; x += 2) {
7353 const idx1 = (x + 8) % 10;
7354 const idx0 = (x + 2) % 10;
7355 const B0 = B[idx0];
7356 const B1 = B[idx0 + 1];
7357 const Th = rotlH(B0, B1, 1) ^ B[idx1];
7358 const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];
7359 for (let y = 0; y < 50; y += 10) {
7360 s[x + y] ^= Th;
7361 s[x + y + 1] ^= Tl;
7362 }
7363 }
7364 let curH = s[2];
7365 let curL = s[3];
7366 for (let t = 0; t < 24; t++) {
7367 const shift = SHA3_ROTL[t];
7368 const Th = rotlH(curH, curL, shift);
7369 const Tl = rotlL(curH, curL, shift);
7370 const PI = SHA3_PI[t];
7371 curH = s[PI];
7372 curL = s[PI + 1];
7373 s[PI] = Th;
7374 s[PI + 1] = Tl;
7375 }
7376 for (let y = 0; y < 50; y += 10) {
7377 for (let x = 0; x < 10; x++)
7378 B[x] = s[y + x];
7379 for (let x = 0; x < 10; x++)
7380 s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];
7381 }
7382 s[0] ^= SHA3_IOTA_H[round];
7383 s[1] ^= SHA3_IOTA_L[round];
7384 }
7385 B.fill(0);
7386 }
7387 class Keccak extends Hash {
7388 constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) {
7389 super();
7390 this.blockLen = blockLen;
7391 this.suffix = suffix;
7392 this.outputLen = outputLen;
7393 this.enableXOF = enableXOF;
7394 this.rounds = rounds;
7395 this.pos = 0;
7396 this.posOut = 0;
7397 this.finished = false;
7398 this.destroyed = false;
7399 number(outputLen);
7400 if (0 >= this.blockLen || this.blockLen >= 200)
7401 throw new Error('Sha3 supports only keccak-f1600 function');
7402 this.state = new Uint8Array(200);
7403 this.state32 = u32(this.state);
7404 }
7405 keccak() {
7406 keccakP(this.state32, this.rounds);
7407 this.posOut = 0;
7408 this.pos = 0;
7409 }
7410 update(data) {
7411 exists(this);
7412 const { blockLen, state } = this;
7413 data = toBytes(data);
7414 const len = data.length;
7415 for (let pos = 0; pos < len;) {
7416 const take = Math.min(blockLen - this.pos, len - pos);
7417 for (let i = 0; i < take; i++)
7418 state[this.pos++] ^= data[pos++];
7419 if (this.pos === blockLen)
7420 this.keccak();
7421 }
7422 return this;
7423 }
7424 finish() {
7425 if (this.finished)
7426 return;
7427 this.finished = true;
7428 const { state, suffix, pos, blockLen } = this;
7429 state[pos] ^= suffix;
7430 if ((suffix & 0x80) !== 0 && pos === blockLen - 1)
7431 this.keccak();
7432 state[blockLen - 1] ^= 0x80;
7433 this.keccak();
7434 }
7435 writeInto(out) {
7436 exists(this, false);
7437 bytes(out);
7438 this.finish();
7439 const bufferOut = this.state;
7440 const { blockLen } = this;
7441 for (let pos = 0, len = out.length; pos < len;) {
7442 if (this.posOut >= blockLen)
7443 this.keccak();
7444 const take = Math.min(blockLen - this.posOut, len - pos);
7445 out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);
7446 this.posOut += take;
7447 pos += take;
7448 }
7449 return out;
7450 }
7451 xofInto(out) {
7452 if (!this.enableXOF)
7453 throw new Error('XOF is not possible for this instance');
7454 return this.writeInto(out);
7455 }
7456 xof(bytes) {
7457 number(bytes);
7458 return this.xofInto(new Uint8Array(bytes));
7459 }
7460 digestInto(out) {
7461 output(out, this);
7462 if (this.finished)
7463 throw new Error('digest() was already called');
7464 this.writeInto(out);
7465 this.destroy();
7466 return out;
7467 }
7468 digest() {
7469 return this.digestInto(new Uint8Array(this.outputLen));
7470 }
7471 destroy() {
7472 this.destroyed = true;
7473 this.state.fill(0);
7474 }
7475 _cloneInto(to) {
7476 const { blockLen, suffix, outputLen, rounds, enableXOF } = this;
7477 to || (to = new Keccak(blockLen, suffix, outputLen, enableXOF, rounds));
7478 to.state32.set(this.state32);
7479 to.pos = this.pos;
7480 to.posOut = this.posOut;
7481 to.finished = this.finished;
7482 to.rounds = rounds;
7483 to.suffix = suffix;
7484 to.outputLen = outputLen;
7485 to.enableXOF = enableXOF;
7486 to.destroyed = this.destroyed;
7487 return to;
7488 }
7489 }
7490 const gen = (suffix, blockLen, outputLen) => wrapConstructor(() => new Keccak(blockLen, suffix, outputLen));
7491 gen(0x06, 144, 224 / 8);
7492 gen(0x06, 136, 256 / 8);
7493 gen(0x06, 104, 384 / 8);
7494 gen(0x06, 72, 512 / 8);
7495 gen(0x01, 144, 224 / 8);
7496 const keccak_256 = gen(0x01, 136, 256 / 8);
7497 gen(0x01, 104, 384 / 8);
7498 const keccak_512 = gen(0x01, 72, 512 / 8);
7499 const genShake = (suffix, blockLen, outputLen) => wrapXOFConstructorWithOpts((opts = {}) => new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true));
7500 genShake(0x1f, 168, 128 / 8);
7501 genShake(0x1f, 136, 256 / 8);
7502
7503 const keccakAsU8a = createDualHasher({ 256: keccak256, 512: keccak512 }, { 256: keccak_256, 512: keccak_512 });
7504 const keccak256AsU8a = createBitHasher(256, keccakAsU8a);
7505 const keccak512AsU8a = createBitHasher(512, keccakAsU8a);
7506 const keccakAsHex = createAsHex(keccakAsU8a);
7507
7508 function hasher(hashType, data, onlyJs) {
7509 return hashType === 'keccak'
7510 ? keccakAsU8a(data, undefined, onlyJs)
7511 : blake2AsU8a(data, undefined, undefined, onlyJs);
7512 }
7513
7514 function evmToAddress(evmAddress, ss58Format, hashType = 'blake2') {
7515 const message = util.u8aConcat('evm:', evmAddress);
7516 if (message.length !== 24) {
7517 throw new Error(`Converting ${evmAddress}: Invalid evm address length`);
7518 }
7519 return encodeAddress(hasher(hashType, message), ss58Format);
7520 }
7521
7522 function validateAddress(encoded, ignoreChecksum, ss58Format) {
7523 return !!decodeAddress(encoded, ignoreChecksum, ss58Format);
7524 }
7525
7526 function isAddress(address, ignoreChecksum, ss58Format) {
7527 try {
7528 return validateAddress(address, ignoreChecksum, ss58Format);
7529 }
7530 catch {
7531 return false;
7532 }
7533 }
7534
7535 function sortAddresses(addresses, ss58Format) {
7536 const u8aToAddress = (u8a) => encodeAddress(u8a, ss58Format);
7537 return util.u8aSorted(addresses.map(addressToU8a)).map(u8aToAddress);
7538 }
7539
7540 const l = util.logger('setSS58Format');
7541 function setSS58Format(prefix) {
7542 l.warn('Global setting of the ss58Format is deprecated and not recommended. Set format on the keyring (if used) or as part of the address encode function');
7543 defaults.prefix = prefix;
7544 }
7545
7546 const chars = 'abcdefghijklmnopqrstuvwxyz234567';
7547 const config$1 = {
7548 chars,
7549 coder: utils.chain(
7550 utils.radix2(5), utils.alphabet(chars), {
7551 decode: (input) => input.split(''),
7552 encode: (input) => input.join('')
7553 }),
7554 ipfs: 'b',
7555 type: 'base32'
7556 };
7557 const base32Validate = createValidate(config$1);
7558 const isBase32 = createIs(base32Validate);
7559 const base32Decode = createDecode(config$1, base32Validate);
7560 const base32Encode = createEncode(config$1);
7561
7562 const config = {
7563 chars: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
7564 coder: base64,
7565 type: 'base64',
7566 withPadding: true
7567 };
7568 const base64Validate = createValidate(config);
7569 const isBase64 = createIs(base64Validate);
7570 const base64Decode = createDecode(config, base64Validate);
7571 const base64Encode = createEncode(config);
7572
7573 function base64Pad(value) {
7574 return value.padEnd(value.length + (value.length % 4), '=');
7575 }
7576
7577 function base64Trim(value) {
7578 while (value.length && value.endsWith('=')) {
7579 value = value.slice(0, -1);
7580 }
7581 return value;
7582 }
7583
7584 function secp256k1Compress(publicKey, onlyJs) {
7585 if (![33, 65].includes(publicKey.length)) {
7586 throw new Error(`Invalid publicKey provided, received ${publicKey.length} bytes input`);
7587 }
7588 if (publicKey.length === 33) {
7589 return publicKey;
7590 }
7591 return !util.hasBigInt || (!onlyJs && isReady())
7592 ? secp256k1Compress$1(publicKey)
7593 : secp256k1.ProjectivePoint.fromHex(publicKey).toRawBytes(true);
7594 }
7595
7596 function secp256k1Expand(publicKey, onlyJs) {
7597 if (![33, 65].includes(publicKey.length)) {
7598 throw new Error(`Invalid publicKey provided, received ${publicKey.length} bytes input`);
7599 }
7600 if (publicKey.length === 65) {
7601 return publicKey.subarray(1);
7602 }
7603 if (!util.hasBigInt || (!onlyJs && isReady())) {
7604 return secp256k1Expand$1(publicKey).subarray(1);
7605 }
7606 const { px, py } = secp256k1.ProjectivePoint.fromHex(publicKey);
7607 return util.u8aConcat(util.bnToU8a(px, BN_BE_256_OPTS), util.bnToU8a(py, BN_BE_256_OPTS));
7608 }
7609
7610 function secp256k1Recover(msgHash, signature, recovery, hashType = 'blake2', onlyJs) {
7611 const sig = util.u8aToU8a(signature).subarray(0, 64);
7612 const msg = util.u8aToU8a(msgHash);
7613 const publicKey = !util.hasBigInt || (!onlyJs && isReady())
7614 ? secp256k1Recover$1(msg, sig, recovery)
7615 : secp256k1.Signature
7616 .fromCompact(sig)
7617 .addRecoveryBit(recovery)
7618 .recoverPublicKey(msg)
7619 .toRawBytes();
7620 if (!publicKey) {
7621 throw new Error('Unable to recover publicKey from signature');
7622 }
7623 return hashType === 'keccak'
7624 ? secp256k1Expand(publicKey, onlyJs)
7625 : secp256k1Compress(publicKey, onlyJs);
7626 }
7627
7628 function secp256k1Sign(message, { secretKey }, hashType = 'blake2', onlyJs) {
7629 if (secretKey?.length !== 32) {
7630 throw new Error('Expected valid secp256k1 secretKey, 32-bytes');
7631 }
7632 const data = hasher(hashType, message, onlyJs);
7633 if (!util.hasBigInt || (!onlyJs && isReady())) {
7634 return secp256k1Sign$1(data, secretKey);
7635 }
7636 const signature = secp256k1.sign(data, secretKey, { lowS: true });
7637 return util.u8aConcat(util.bnToU8a(signature.r, BN_BE_256_OPTS), util.bnToU8a(signature.s, BN_BE_256_OPTS), new Uint8Array([signature.recovery || 0]));
7638 }
7639
7640 const N = 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141'.replace(/ /g, '');
7641 const N_BI = BigInt$1(`0x${N}`);
7642 const N_BN = new util.BN(N, 'hex');
7643 function addBi(seckey, tweak) {
7644 let res = util.u8aToBigInt(tweak, BN_BE_OPTS);
7645 if (res >= N_BI) {
7646 throw new Error('Tweak parameter is out of range');
7647 }
7648 res += util.u8aToBigInt(seckey, BN_BE_OPTS);
7649 if (res >= N_BI) {
7650 res -= N_BI;
7651 }
7652 if (res === util._0n) {
7653 throw new Error('Invalid resulting private key');
7654 }
7655 return util.nToU8a(res, BN_BE_256_OPTS);
7656 }
7657 function addBn(seckey, tweak) {
7658 const res = new util.BN(tweak);
7659 if (res.cmp(N_BN) >= 0) {
7660 throw new Error('Tweak parameter is out of range');
7661 }
7662 res.iadd(new util.BN(seckey));
7663 if (res.cmp(N_BN) >= 0) {
7664 res.isub(N_BN);
7665 }
7666 if (res.isZero()) {
7667 throw new Error('Invalid resulting private key');
7668 }
7669 return util.bnToU8a(res, BN_BE_256_OPTS);
7670 }
7671 function secp256k1PrivateKeyTweakAdd(seckey, tweak, onlyBn) {
7672 if (!util.isU8a(seckey) || seckey.length !== 32) {
7673 throw new Error('Expected seckey to be an Uint8Array with length 32');
7674 }
7675 else if (!util.isU8a(tweak) || tweak.length !== 32) {
7676 throw new Error('Expected tweak to be an Uint8Array with length 32');
7677 }
7678 return !util.hasBigInt || onlyBn
7679 ? addBn(seckey, tweak)
7680 : addBi(seckey, tweak);
7681 }
7682
7683 function secp256k1Verify(msgHash, signature, address, hashType = 'blake2', onlyJs) {
7684 const sig = util.u8aToU8a(signature);
7685 if (sig.length !== 65) {
7686 throw new Error(`Expected signature with 65 bytes, ${sig.length} found instead`);
7687 }
7688 const publicKey = secp256k1Recover(hasher(hashType, msgHash), sig, sig[64], hashType, onlyJs);
7689 const signerAddr = hasher(hashType, publicKey, onlyJs);
7690 const inputAddr = util.u8aToU8a(address);
7691 return util.u8aEq(publicKey, inputAddr) || (hashType === 'keccak'
7692 ? util.u8aEq(signerAddr.slice(-20), inputAddr.slice(-20))
7693 : util.u8aEq(signerAddr, inputAddr));
7694 }
7695
7696 function getH160(u8a) {
7697 if ([33, 65].includes(u8a.length)) {
7698 u8a = keccakAsU8a(secp256k1Expand(u8a));
7699 }
7700 return u8a.slice(-20);
7701 }
7702 function ethereumEncode(addressOrPublic) {
7703 if (!addressOrPublic) {
7704 return '0x';
7705 }
7706 const u8aAddress = util.u8aToU8a(addressOrPublic);
7707 if (![20, 32, 33, 65].includes(u8aAddress.length)) {
7708 throw new Error(`Invalid address or publicKey provided, received ${u8aAddress.length} bytes input`);
7709 }
7710 const address = util.u8aToHex(getH160(u8aAddress), -1, false);
7711 const hash = util.u8aToHex(keccakAsU8a(address), -1, false);
7712 let result = '';
7713 for (let i = 0; i < 40; i++) {
7714 result = `${result}${parseInt(hash[i], 16) > 7 ? address[i].toUpperCase() : address[i]}`;
7715 }
7716 return `0x${result}`;
7717 }
7718
7719 function isInvalidChar(char, byte) {
7720 return char !== (byte > 7
7721 ? char.toUpperCase()
7722 : char.toLowerCase());
7723 }
7724 function isEthereumChecksum(_address) {
7725 const address = _address.replace('0x', '');
7726 const hash = util.u8aToHex(keccakAsU8a(address.toLowerCase()), -1, false);
7727 for (let i = 0; i < 40; i++) {
7728 if (isInvalidChar(address[i], parseInt(hash[i], 16))) {
7729 return false;
7730 }
7731 }
7732 return true;
7733 }
7734
7735 function isEthereumAddress(address) {
7736 if (!address || address.length !== 42 || !util.isHex(address)) {
7737 return false;
7738 }
7739 else if (/^(0x)?[0-9a-f]{40}$/.test(address) || /^(0x)?[0-9A-F]{40}$/.test(address)) {
7740 return true;
7741 }
7742 return isEthereumChecksum(address);
7743 }
7744
7745 const JS_HASH = {
7746 256: sha256,
7747 512: sha512
7748 };
7749 const WA_MHAC = {
7750 256: hmacSha256,
7751 512: hmacSha512
7752 };
7753 function createSha(bitLength) {
7754 return (key, data, onlyJs) => hmacShaAsU8a(key, data, bitLength, onlyJs);
7755 }
7756 function hmacShaAsU8a(key, data, bitLength = 256, onlyJs) {
7757 const u8aKey = util.u8aToU8a(key);
7758 return !util.hasBigInt || (!onlyJs && isReady())
7759 ? WA_MHAC[bitLength](u8aKey, data)
7760 : hmac(JS_HASH[bitLength], u8aKey, data);
7761 }
7762 const hmacSha256AsU8a = createSha(256);
7763 const hmacSha512AsU8a = createSha(512);
7764
7765 const HARDENED = 0x80000000;
7766 function hdValidatePath(path) {
7767 if (!path.startsWith('m/')) {
7768 return false;
7769 }
7770 const parts = path.split('/').slice(1);
7771 for (const p of parts) {
7772 const n = /^\d+'?$/.test(p)
7773 ? parseInt(p.replace(/'$/, ''), 10)
7774 : Number.NaN;
7775 if (isNaN(n) || (n >= HARDENED) || (n < 0)) {
7776 return false;
7777 }
7778 }
7779 return true;
7780 }
7781
7782 const MASTER_SECRET = util.stringToU8a('Bitcoin seed');
7783 function createCoded(secretKey, chainCode) {
7784 return {
7785 chainCode,
7786 publicKey: secp256k1PairFromSeed(secretKey).publicKey,
7787 secretKey
7788 };
7789 }
7790 function deriveChild(hd, index) {
7791 const indexBuffer = util.bnToU8a(index, BN_BE_32_OPTS);
7792 const data = index >= HARDENED
7793 ? util.u8aConcat(new Uint8Array(1), hd.secretKey, indexBuffer)
7794 : util.u8aConcat(hd.publicKey, indexBuffer);
7795 try {
7796 const I = hmacShaAsU8a(hd.chainCode, data, 512);
7797 return createCoded(secp256k1PrivateKeyTweakAdd(hd.secretKey, I.slice(0, 32)), I.slice(32));
7798 }
7799 catch {
7800 return deriveChild(hd, index + 1);
7801 }
7802 }
7803 function hdEthereum(seed, path = '') {
7804 const I = hmacShaAsU8a(MASTER_SECRET, seed, 512);
7805 let hd = createCoded(I.slice(0, 32), I.slice(32));
7806 if (!path || path === 'm' || path === 'M' || path === "m'" || path === "M'") {
7807 return hd;
7808 }
7809 if (!hdValidatePath(path)) {
7810 throw new Error('Invalid derivation path');
7811 }
7812 const parts = path.split('/').slice(1);
7813 for (const p of parts) {
7814 hd = deriveChild(hd, parseInt(p, 10) + ((p.length > 1) && p.endsWith("'")
7815 ? HARDENED
7816 : 0));
7817 }
7818 return hd;
7819 }
7820
7821 function pbkdf2Init(hash$1, _password, _salt, _opts) {
7822 hash(hash$1);
7823 const opts = checkOpts({ dkLen: 32, asyncTick: 10 }, _opts);
7824 const { c, dkLen, asyncTick } = opts;
7825 number(c);
7826 number(dkLen);
7827 number(asyncTick);
7828 if (c < 1)
7829 throw new Error('PBKDF2: iterations (c) should be >= 1');
7830 const password = toBytes(_password);
7831 const salt = toBytes(_salt);
7832 const DK = new Uint8Array(dkLen);
7833 const PRF = hmac.create(hash$1, password);
7834 const PRFSalt = PRF._cloneInto().update(salt);
7835 return { c, dkLen, asyncTick, DK, PRF, PRFSalt };
7836 }
7837 function pbkdf2Output(PRF, PRFSalt, DK, prfW, u) {
7838 PRF.destroy();
7839 PRFSalt.destroy();
7840 if (prfW)
7841 prfW.destroy();
7842 u.fill(0);
7843 return DK;
7844 }
7845 function pbkdf2(hash, password, salt, opts) {
7846 const { c, dkLen, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);
7847 let prfW;
7848 const arr = new Uint8Array(4);
7849 const view = createView(arr);
7850 const u = new Uint8Array(PRF.outputLen);
7851 for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {
7852 const Ti = DK.subarray(pos, pos + PRF.outputLen);
7853 view.setInt32(0, ti, false);
7854 (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);
7855 Ti.set(u.subarray(0, Ti.length));
7856 for (let ui = 1; ui < c; ui++) {
7857 PRF._cloneInto(prfW).update(u).digestInto(u);
7858 for (let i = 0; i < Ti.length; i++)
7859 Ti[i] ^= u[i];
7860 }
7861 }
7862 return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);
7863 }
7864
7865 function pbkdf2Encode(passphrase, salt = randomAsU8a(), rounds = 2048, onlyJs) {
7866 const u8aPass = util.u8aToU8a(passphrase);
7867 const u8aSalt = util.u8aToU8a(salt);
7868 return {
7869 password: !util.hasBigInt || (!onlyJs && isReady())
7870 ? pbkdf2$1(u8aPass, u8aSalt, rounds)
7871 : pbkdf2(sha512, u8aPass, u8aSalt, { c: rounds, dkLen: 64 }),
7872 rounds,
7873 salt
7874 };
7875 }
7876
7877 const shaAsU8a = createDualHasher({ 256: sha256$1, 512: sha512$1 }, { 256: sha256, 512: sha512 });
7878 const sha256AsU8a = createBitHasher(256, shaAsU8a);
7879 const sha512AsU8a = createBitHasher(512, shaAsU8a);
7880
7881 const DEFAULT_WORDLIST = 'abandon|ability|able|about|above|absent|absorb|abstract|absurd|abuse|access|accident|account|accuse|achieve|acid|acoustic|acquire|across|act|action|actor|actress|actual|adapt|add|addict|address|adjust|admit|adult|advance|advice|aerobic|affair|afford|afraid|again|age|agent|agree|ahead|aim|air|airport|aisle|alarm|album|alcohol|alert|alien|all|alley|allow|almost|alone|alpha|already|also|alter|always|amateur|amazing|among|amount|amused|analyst|anchor|ancient|anger|angle|angry|animal|ankle|announce|annual|another|answer|antenna|antique|anxiety|any|apart|apology|appear|apple|approve|april|arch|arctic|area|arena|argue|arm|armed|armor|army|around|arrange|arrest|arrive|arrow|art|artefact|artist|artwork|ask|aspect|assault|asset|assist|assume|asthma|athlete|atom|attack|attend|attitude|attract|auction|audit|august|aunt|author|auto|autumn|average|avocado|avoid|awake|aware|away|awesome|awful|awkward|axis|baby|bachelor|bacon|badge|bag|balance|balcony|ball|bamboo|banana|banner|bar|barely|bargain|barrel|base|basic|basket|battle|beach|bean|beauty|because|become|beef|before|begin|behave|behind|believe|below|belt|bench|benefit|best|betray|better|between|beyond|bicycle|bid|bike|bind|biology|bird|birth|bitter|black|blade|blame|blanket|blast|bleak|bless|blind|blood|blossom|blouse|blue|blur|blush|board|boat|body|boil|bomb|bone|bonus|book|boost|border|boring|borrow|boss|bottom|bounce|box|boy|bracket|brain|brand|brass|brave|bread|breeze|brick|bridge|brief|bright|bring|brisk|broccoli|broken|bronze|broom|brother|brown|brush|bubble|buddy|budget|buffalo|build|bulb|bulk|bullet|bundle|bunker|burden|burger|burst|bus|business|busy|butter|buyer|buzz|cabbage|cabin|cable|cactus|cage|cake|call|calm|camera|camp|can|canal|cancel|candy|cannon|canoe|canvas|canyon|capable|capital|captain|car|carbon|card|cargo|carpet|carry|cart|case|cash|casino|castle|casual|cat|catalog|catch|category|cattle|caught|cause|caution|cave|ceiling|celery|cement|census|century|cereal|certain|chair|chalk|champion|change|chaos|chapter|charge|chase|chat|cheap|check|cheese|chef|cherry|chest|chicken|chief|child|chimney|choice|choose|chronic|chuckle|chunk|churn|cigar|cinnamon|circle|citizen|city|civil|claim|clap|clarify|claw|clay|clean|clerk|clever|click|client|cliff|climb|clinic|clip|clock|clog|close|cloth|cloud|clown|club|clump|cluster|clutch|coach|coast|coconut|code|coffee|coil|coin|collect|color|column|combine|come|comfort|comic|common|company|concert|conduct|confirm|congress|connect|consider|control|convince|cook|cool|copper|copy|coral|core|corn|correct|cost|cotton|couch|country|couple|course|cousin|cover|coyote|crack|cradle|craft|cram|crane|crash|crater|crawl|crazy|cream|credit|creek|crew|cricket|crime|crisp|critic|crop|cross|crouch|crowd|crucial|cruel|cruise|crumble|crunch|crush|cry|crystal|cube|culture|cup|cupboard|curious|current|curtain|curve|cushion|custom|cute|cycle|dad|damage|damp|dance|danger|daring|dash|daughter|dawn|day|deal|debate|debris|decade|december|decide|decline|decorate|decrease|deer|defense|define|defy|degree|delay|deliver|demand|demise|denial|dentist|deny|depart|depend|deposit|depth|deputy|derive|describe|desert|design|desk|despair|destroy|detail|detect|develop|device|devote|diagram|dial|diamond|diary|dice|diesel|diet|differ|digital|dignity|dilemma|dinner|dinosaur|direct|dirt|disagree|discover|disease|dish|dismiss|disorder|display|distance|divert|divide|divorce|dizzy|doctor|document|dog|doll|dolphin|domain|donate|donkey|donor|door|dose|double|dove|draft|dragon|drama|drastic|draw|dream|dress|drift|drill|drink|drip|drive|drop|drum|dry|duck|dumb|dune|during|dust|dutch|duty|dwarf|dynamic|eager|eagle|early|earn|earth|easily|east|easy|echo|ecology|economy|edge|edit|educate|effort|egg|eight|either|elbow|elder|electric|elegant|element|elephant|elevator|elite|else|embark|embody|embrace|emerge|emotion|employ|empower|empty|enable|enact|end|endless|endorse|enemy|energy|enforce|engage|engine|enhance|enjoy|enlist|enough|enrich|enroll|ensure|enter|entire|entry|envelope|episode|equal|equip|era|erase|erode|erosion|error|erupt|escape|essay|essence|estate|eternal|ethics|evidence|evil|evoke|evolve|exact|example|excess|exchange|excite|exclude|excuse|execute|exercise|exhaust|exhibit|exile|exist|exit|exotic|expand|expect|expire|explain|expose|express|extend|extra|eye|eyebrow|fabric|face|faculty|fade|faint|faith|fall|false|fame|family|famous|fan|fancy|fantasy|farm|fashion|fat|fatal|father|fatigue|fault|favorite|feature|february|federal|fee|feed|feel|female|fence|festival|fetch|fever|few|fiber|fiction|field|figure|file|film|filter|final|find|fine|finger|finish|fire|firm|first|fiscal|fish|fit|fitness|fix|flag|flame|flash|flat|flavor|flee|flight|flip|float|flock|floor|flower|fluid|flush|fly|foam|focus|fog|foil|fold|follow|food|foot|force|forest|forget|fork|fortune|forum|forward|fossil|foster|found|fox|fragile|frame|frequent|fresh|friend|fringe|frog|front|frost|frown|frozen|fruit|fuel|fun|funny|furnace|fury|future|gadget|gain|galaxy|gallery|game|gap|garage|garbage|garden|garlic|garment|gas|gasp|gate|gather|gauge|gaze|general|genius|genre|gentle|genuine|gesture|ghost|giant|gift|giggle|ginger|giraffe|girl|give|glad|glance|glare|glass|glide|glimpse|globe|gloom|glory|glove|glow|glue|goat|goddess|gold|good|goose|gorilla|gospel|gossip|govern|gown|grab|grace|grain|grant|grape|grass|gravity|great|green|grid|grief|grit|grocery|group|grow|grunt|guard|guess|guide|guilt|guitar|gun|gym|habit|hair|half|hammer|hamster|hand|happy|harbor|hard|harsh|harvest|hat|have|hawk|hazard|head|health|heart|heavy|hedgehog|height|hello|helmet|help|hen|hero|hidden|high|hill|hint|hip|hire|history|hobby|hockey|hold|hole|holiday|hollow|home|honey|hood|hope|horn|horror|horse|hospital|host|hotel|hour|hover|hub|huge|human|humble|humor|hundred|hungry|hunt|hurdle|hurry|hurt|husband|hybrid|ice|icon|idea|identify|idle|ignore|ill|illegal|illness|image|imitate|immense|immune|impact|impose|improve|impulse|inch|include|income|increase|index|indicate|indoor|industry|infant|inflict|inform|inhale|inherit|initial|inject|injury|inmate|inner|innocent|input|inquiry|insane|insect|inside|inspire|install|intact|interest|into|invest|invite|involve|iron|island|isolate|issue|item|ivory|jacket|jaguar|jar|jazz|jealous|jeans|jelly|jewel|job|join|joke|journey|joy|judge|juice|jump|jungle|junior|junk|just|kangaroo|keen|keep|ketchup|key|kick|kid|kidney|kind|kingdom|kiss|kit|kitchen|kite|kitten|kiwi|knee|knife|knock|know|lab|label|labor|ladder|lady|lake|lamp|language|laptop|large|later|latin|laugh|laundry|lava|law|lawn|lawsuit|layer|lazy|leader|leaf|learn|leave|lecture|left|leg|legal|legend|leisure|lemon|lend|length|lens|leopard|lesson|letter|level|liar|liberty|library|license|life|lift|light|like|limb|limit|link|lion|liquid|list|little|live|lizard|load|loan|lobster|local|lock|logic|lonely|long|loop|lottery|loud|lounge|love|loyal|lucky|luggage|lumber|lunar|lunch|luxury|lyrics|machine|mad|magic|magnet|maid|mail|main|major|make|mammal|man|manage|mandate|mango|mansion|manual|maple|marble|march|margin|marine|market|marriage|mask|mass|master|match|material|math|matrix|matter|maximum|maze|meadow|mean|measure|meat|mechanic|medal|media|melody|melt|member|memory|mention|menu|mercy|merge|merit|merry|mesh|message|metal|method|middle|midnight|milk|million|mimic|mind|minimum|minor|minute|miracle|mirror|misery|miss|mistake|mix|mixed|mixture|mobile|model|modify|mom|moment|monitor|monkey|monster|month|moon|moral|more|morning|mosquito|mother|motion|motor|mountain|mouse|move|movie|much|muffin|mule|multiply|muscle|museum|mushroom|music|must|mutual|myself|mystery|myth|naive|name|napkin|narrow|nasty|nation|nature|near|neck|need|negative|neglect|neither|nephew|nerve|nest|net|network|neutral|never|news|next|nice|night|noble|noise|nominee|noodle|normal|north|nose|notable|note|nothing|notice|novel|now|nuclear|number|nurse|nut|oak|obey|object|oblige|obscure|observe|obtain|obvious|occur|ocean|october|odor|off|offer|office|often|oil|okay|old|olive|olympic|omit|once|one|onion|online|only|open|opera|opinion|oppose|option|orange|orbit|orchard|order|ordinary|organ|orient|original|orphan|ostrich|other|outdoor|outer|output|outside|oval|oven|over|own|owner|oxygen|oyster|ozone|pact|paddle|page|pair|palace|palm|panda|panel|panic|panther|paper|parade|parent|park|parrot|party|pass|patch|path|patient|patrol|pattern|pause|pave|payment|peace|peanut|pear|peasant|pelican|pen|penalty|pencil|people|pepper|perfect|permit|person|pet|phone|photo|phrase|physical|piano|picnic|picture|piece|pig|pigeon|pill|pilot|pink|pioneer|pipe|pistol|pitch|pizza|place|planet|plastic|plate|play|please|pledge|pluck|plug|plunge|poem|poet|point|polar|pole|police|pond|pony|pool|popular|portion|position|possible|post|potato|pottery|poverty|powder|power|practice|praise|predict|prefer|prepare|present|pretty|prevent|price|pride|primary|print|priority|prison|private|prize|problem|process|produce|profit|program|project|promote|proof|property|prosper|protect|proud|provide|public|pudding|pull|pulp|pulse|pumpkin|punch|pupil|puppy|purchase|purity|purpose|purse|push|put|puzzle|pyramid|quality|quantum|quarter|question|quick|quit|quiz|quote|rabbit|raccoon|race|rack|radar|radio|rail|rain|raise|rally|ramp|ranch|random|range|rapid|rare|rate|rather|raven|raw|razor|ready|real|reason|rebel|rebuild|recall|receive|recipe|record|recycle|reduce|reflect|reform|refuse|region|regret|regular|reject|relax|release|relief|rely|remain|remember|remind|remove|render|renew|rent|reopen|repair|repeat|replace|report|require|rescue|resemble|resist|resource|response|result|retire|retreat|return|reunion|reveal|review|reward|rhythm|rib|ribbon|rice|rich|ride|ridge|rifle|right|rigid|ring|riot|ripple|risk|ritual|rival|river|road|roast|robot|robust|rocket|romance|roof|rookie|room|rose|rotate|rough|round|route|royal|rubber|rude|rug|rule|run|runway|rural|sad|saddle|sadness|safe|sail|salad|salmon|salon|salt|salute|same|sample|sand|satisfy|satoshi|sauce|sausage|save|say|scale|scan|scare|scatter|scene|scheme|school|science|scissors|scorpion|scout|scrap|screen|script|scrub|sea|search|season|seat|second|secret|section|security|seed|seek|segment|select|sell|seminar|senior|sense|sentence|series|service|session|settle|setup|seven|shadow|shaft|shallow|share|shed|shell|sheriff|shield|shift|shine|ship|shiver|shock|shoe|shoot|shop|short|shoulder|shove|shrimp|shrug|shuffle|shy|sibling|sick|side|siege|sight|sign|silent|silk|silly|silver|similar|simple|since|sing|siren|sister|situate|six|size|skate|sketch|ski|skill|skin|skirt|skull|slab|slam|sleep|slender|slice|slide|slight|slim|slogan|slot|slow|slush|small|smart|smile|smoke|smooth|snack|snake|snap|sniff|snow|soap|soccer|social|sock|soda|soft|solar|soldier|solid|solution|solve|someone|song|soon|sorry|sort|soul|sound|soup|source|south|space|spare|spatial|spawn|speak|special|speed|spell|spend|sphere|spice|spider|spike|spin|spirit|split|spoil|sponsor|spoon|sport|spot|spray|spread|spring|spy|square|squeeze|squirrel|stable|stadium|staff|stage|stairs|stamp|stand|start|state|stay|steak|steel|stem|step|stereo|stick|still|sting|stock|stomach|stone|stool|story|stove|strategy|street|strike|strong|struggle|student|stuff|stumble|style|subject|submit|subway|success|such|sudden|suffer|sugar|suggest|suit|summer|sun|sunny|sunset|super|supply|supreme|sure|surface|surge|surprise|surround|survey|suspect|sustain|swallow|swamp|swap|swarm|swear|sweet|swift|swim|swing|switch|sword|symbol|symptom|syrup|system|table|tackle|tag|tail|talent|talk|tank|tape|target|task|taste|tattoo|taxi|teach|team|tell|ten|tenant|tennis|tent|term|test|text|thank|that|theme|then|theory|there|they|thing|this|thought|three|thrive|throw|thumb|thunder|ticket|tide|tiger|tilt|timber|time|tiny|tip|tired|tissue|title|toast|tobacco|today|toddler|toe|together|toilet|token|tomato|tomorrow|tone|tongue|tonight|tool|tooth|top|topic|topple|torch|tornado|tortoise|toss|total|tourist|toward|tower|town|toy|track|trade|traffic|tragic|train|transfer|trap|trash|travel|tray|treat|tree|trend|trial|tribe|trick|trigger|trim|trip|trophy|trouble|truck|true|truly|trumpet|trust|truth|try|tube|tuition|tumble|tuna|tunnel|turkey|turn|turtle|twelve|twenty|twice|twin|twist|two|type|typical|ugly|umbrella|unable|unaware|uncle|uncover|under|undo|unfair|unfold|unhappy|uniform|unique|unit|universe|unknown|unlock|until|unusual|unveil|update|upgrade|uphold|upon|upper|upset|urban|urge|usage|use|used|useful|useless|usual|utility|vacant|vacuum|vague|valid|valley|valve|van|vanish|vapor|various|vast|vault|vehicle|velvet|vendor|venture|venue|verb|verify|version|very|vessel|veteran|viable|vibrant|vicious|victory|video|view|village|vintage|violin|virtual|virus|visa|visit|visual|vital|vivid|vocal|voice|void|volcano|volume|vote|voyage|wage|wagon|wait|walk|wall|walnut|want|warfare|warm|warrior|wash|wasp|waste|water|wave|way|wealth|weapon|wear|weasel|weather|web|wedding|weekend|weird|welcome|west|wet|whale|what|wheat|wheel|when|where|whip|whisper|wide|width|wife|wild|will|win|window|wine|wing|wink|winner|winter|wire|wisdom|wise|wish|witness|wolf|woman|wonder|wood|wool|word|work|world|worry|worth|wrap|wreck|wrestle|wrist|write|wrong|yard|year|yellow|you|young|youth|zebra|zero|zone|zoo'.split('|');
7882
7883 const INVALID_MNEMONIC = 'Invalid mnemonic';
7884 const INVALID_ENTROPY = 'Invalid entropy';
7885 const INVALID_CHECKSUM = 'Invalid mnemonic checksum';
7886 function normalize(str) {
7887 return (str || '').normalize('NFKD');
7888 }
7889 function binaryToByte(bin) {
7890 return parseInt(bin, 2);
7891 }
7892 function bytesToBinary(bytes) {
7893 return bytes.map((x) => x.toString(2).padStart(8, '0')).join('');
7894 }
7895 function deriveChecksumBits(entropyBuffer) {
7896 return bytesToBinary(Array.from(sha256AsU8a(entropyBuffer))).slice(0, (entropyBuffer.length * 8) / 32);
7897 }
7898 function mnemonicToSeedSync(mnemonic, password) {
7899 return pbkdf2Encode(util.stringToU8a(normalize(mnemonic)), util.stringToU8a(`mnemonic${normalize(password)}`)).password;
7900 }
7901 function mnemonicToEntropy$1(mnemonic, wordlist = DEFAULT_WORDLIST) {
7902 const words = normalize(mnemonic).split(' ');
7903 if (words.length % 3 !== 0) {
7904 throw new Error(INVALID_MNEMONIC);
7905 }
7906 const bits = words
7907 .map((word) => {
7908 const index = wordlist.indexOf(word);
7909 if (index === -1) {
7910 throw new Error(INVALID_MNEMONIC);
7911 }
7912 return index.toString(2).padStart(11, '0');
7913 })
7914 .join('');
7915 const dividerIndex = Math.floor(bits.length / 33) * 32;
7916 const entropyBits = bits.slice(0, dividerIndex);
7917 const checksumBits = bits.slice(dividerIndex);
7918 const matched = entropyBits.match(/(.{1,8})/g);
7919 const entropyBytes = matched?.map(binaryToByte);
7920 if (!entropyBytes || (entropyBytes.length % 4 !== 0) || (entropyBytes.length < 16) || (entropyBytes.length > 32)) {
7921 throw new Error(INVALID_ENTROPY);
7922 }
7923 const entropy = util.u8aToU8a(entropyBytes);
7924 if (deriveChecksumBits(entropy) !== checksumBits) {
7925 throw new Error(INVALID_CHECKSUM);
7926 }
7927 return entropy;
7928 }
7929 function entropyToMnemonic(entropy, wordlist = DEFAULT_WORDLIST) {
7930 if ((entropy.length % 4 !== 0) || (entropy.length < 16) || (entropy.length > 32)) {
7931 throw new Error(INVALID_ENTROPY);
7932 }
7933 const matched = `${bytesToBinary(Array.from(entropy))}${deriveChecksumBits(entropy)}`.match(/(.{1,11})/g);
7934 const mapped = matched?.map((b) => wordlist[binaryToByte(b)]);
7935 if (!mapped || (mapped.length < 12)) {
7936 throw new Error('Unable to map entropy to mnemonic');
7937 }
7938 return mapped.join(' ');
7939 }
7940 function generateMnemonic(numWords, wordlist) {
7941 return entropyToMnemonic(randomAsU8a((numWords / 3) * 4), wordlist);
7942 }
7943 function validateMnemonic(mnemonic, wordlist) {
7944 try {
7945 mnemonicToEntropy$1(mnemonic, wordlist);
7946 }
7947 catch {
7948 return false;
7949 }
7950 return true;
7951 }
7952
7953 function mnemonicGenerate(numWords = 12, wordlist, onlyJs) {
7954 return !util.hasBigInt || (!wordlist && !onlyJs && isReady())
7955 ? bip39Generate(numWords)
7956 : generateMnemonic(numWords, wordlist);
7957 }
7958
7959 function mnemonicToEntropy(mnemonic, wordlist, onlyJs) {
7960 return !util.hasBigInt || (!wordlist && !onlyJs && isReady())
7961 ? bip39ToEntropy(mnemonic)
7962 : mnemonicToEntropy$1(mnemonic, wordlist);
7963 }
7964
7965 function mnemonicValidate(mnemonic, wordlist, onlyJs) {
7966 return !util.hasBigInt || (!wordlist && !onlyJs && isReady())
7967 ? bip39Validate(mnemonic)
7968 : validateMnemonic(mnemonic, wordlist);
7969 }
7970
7971 function mnemonicToLegacySeed(mnemonic, password = '', onlyJs, byteLength = 32) {
7972 if (!mnemonicValidate(mnemonic)) {
7973 throw new Error('Invalid bip39 mnemonic specified');
7974 }
7975 else if (![32, 64].includes(byteLength)) {
7976 throw new Error(`Invalid seed length ${byteLength}, expected 32 or 64`);
7977 }
7978 return byteLength === 32
7979 ? !util.hasBigInt || (!onlyJs && isReady())
7980 ? bip39ToSeed(mnemonic, password)
7981 : mnemonicToSeedSync(mnemonic, password).subarray(0, 32)
7982 : mnemonicToSeedSync(mnemonic, password);
7983 }
7984
7985 function mnemonicToMiniSecret(mnemonic, password = '', wordlist, onlyJs) {
7986 if (!mnemonicValidate(mnemonic, wordlist, onlyJs)) {
7987 throw new Error('Invalid bip39 mnemonic specified');
7988 }
7989 else if (!wordlist && !onlyJs && isReady()) {
7990 return bip39ToMiniSecret(mnemonic, password);
7991 }
7992 const entropy = mnemonicToEntropy(mnemonic, wordlist);
7993 const salt = util.stringToU8a(`mnemonic${password}`);
7994 return pbkdf2Encode(entropy, salt).password.slice(0, 32);
7995 }
7996
7997 function ledgerDerivePrivate(xprv, index) {
7998 const kl = xprv.subarray(0, 32);
7999 const kr = xprv.subarray(32, 64);
8000 const cc = xprv.subarray(64, 96);
8001 const data = util.u8aConcat([0], kl, kr, util.bnToU8a(index, BN_LE_32_OPTS));
8002 const z = hmacShaAsU8a(cc, data, 512);
8003 data[0] = 0x01;
8004 return util.u8aConcat(util.bnToU8a(util.u8aToBn(kl, BN_LE_OPTS).iadd(util.u8aToBn(z.subarray(0, 28), BN_LE_OPTS).imul(util.BN_EIGHT)), BN_LE_512_OPTS).subarray(0, 32), util.bnToU8a(util.u8aToBn(kr, BN_LE_OPTS).iadd(util.u8aToBn(z.subarray(32, 64), BN_LE_OPTS)), BN_LE_512_OPTS).subarray(0, 32), hmacShaAsU8a(cc, data, 512).subarray(32, 64));
8005 }
8006
8007 const ED25519_CRYPTO = 'ed25519 seed';
8008 function ledgerMaster(mnemonic, password) {
8009 const seed = mnemonicToSeedSync(mnemonic, password);
8010 const chainCode = hmacShaAsU8a(ED25519_CRYPTO, new Uint8Array([1, ...seed]), 256);
8011 let priv;
8012 while (!priv || (priv[31] & 0b0010_0000)) {
8013 priv = hmacShaAsU8a(ED25519_CRYPTO, priv || seed, 512);
8014 }
8015 priv[0] &= 0b1111_1000;
8016 priv[31] &= 0b0111_1111;
8017 priv[31] |= 0b0100_0000;
8018 return util.u8aConcat(priv, chainCode);
8019 }
8020
8021 function hdLedger(_mnemonic, path) {
8022 const words = _mnemonic
8023 .split(' ')
8024 .map((s) => s.trim())
8025 .filter((s) => s);
8026 if (![12, 24, 25].includes(words.length)) {
8027 throw new Error('Expected a mnemonic with 24 words (or 25 including a password)');
8028 }
8029 const [mnemonic, password] = words.length === 25
8030 ? [words.slice(0, 24).join(' '), words[24]]
8031 : [words.join(' '), ''];
8032 if (!mnemonicValidate(mnemonic)) {
8033 throw new Error('Invalid mnemonic passed to ledger derivation');
8034 }
8035 else if (!hdValidatePath(path)) {
8036 throw new Error('Invalid derivation path');
8037 }
8038 const parts = path.split('/').slice(1);
8039 let seed = ledgerMaster(mnemonic, password);
8040 for (const p of parts) {
8041 const n = parseInt(p.replace(/'$/, ''), 10);
8042 seed = ledgerDerivePrivate(seed, (n < HARDENED) ? (n + HARDENED) : n);
8043 }
8044 return ed25519PairFromSeed(seed.slice(0, 32));
8045 }
8046
8047 function L32(x, c) { return (x << c) | (x >>> (32 - c)); }
8048 function ld32(x, i) {
8049 let u = x[i + 3] & 0xff;
8050 u = (u << 8) | (x[i + 2] & 0xff);
8051 u = (u << 8) | (x[i + 1] & 0xff);
8052 return (u << 8) | (x[i + 0] & 0xff);
8053 }
8054 function st32(x, j, u) {
8055 for (let i = 0; i < 4; i++) {
8056 x[j + i] = u & 255;
8057 u >>>= 8;
8058 }
8059 }
8060 function vn(x, xi, y, yi, n) {
8061 let d = 0;
8062 for (let i = 0; i < n; i++)
8063 d |= x[xi + i] ^ y[yi + i];
8064 return (1 & ((d - 1) >>> 8)) - 1;
8065 }
8066 function core(out, inp, k, c, h) {
8067 const w = new Uint32Array(16), x = new Uint32Array(16), y = new Uint32Array(16), t = new Uint32Array(4);
8068 let i, j, m;
8069 for (i = 0; i < 4; i++) {
8070 x[5 * i] = ld32(c, 4 * i);
8071 x[1 + i] = ld32(k, 4 * i);
8072 x[6 + i] = ld32(inp, 4 * i);
8073 x[11 + i] = ld32(k, 16 + 4 * i);
8074 }
8075 for (i = 0; i < 16; i++)
8076 y[i] = x[i];
8077 for (i = 0; i < 20; i++) {
8078 for (j = 0; j < 4; j++) {
8079 for (m = 0; m < 4; m++)
8080 t[m] = x[(5 * j + 4 * m) % 16];
8081 t[1] ^= L32((t[0] + t[3]) | 0, 7);
8082 t[2] ^= L32((t[1] + t[0]) | 0, 9);
8083 t[3] ^= L32((t[2] + t[1]) | 0, 13);
8084 t[0] ^= L32((t[3] + t[2]) | 0, 18);
8085 for (m = 0; m < 4; m++)
8086 w[4 * j + (j + m) % 4] = t[m];
8087 }
8088 for (m = 0; m < 16; m++)
8089 x[m] = w[m];
8090 }
8091 if (h) {
8092 for (i = 0; i < 16; i++)
8093 x[i] = (x[i] + y[i]) | 0;
8094 for (i = 0; i < 4; i++) {
8095 x[5 * i] = (x[5 * i] - ld32(c, 4 * i)) | 0;
8096 x[6 + i] = (x[6 + i] - ld32(inp, 4 * i)) | 0;
8097 }
8098 for (i = 0; i < 4; i++) {
8099 st32(out, 4 * i, x[5 * i]);
8100 st32(out, 16 + 4 * i, x[6 + i]);
8101 }
8102 }
8103 else {
8104 for (i = 0; i < 16; i++)
8105 st32(out, 4 * i, (x[i] + y[i]) | 0);
8106 }
8107 }
8108 const sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);
8109 function crypto_stream_salsa20_xor(c, cpos, m, mpos, b, n, k) {
8110 const z = new Uint8Array(16), x = new Uint8Array(64);
8111 let u, i;
8112 if (!b)
8113 return 0;
8114 for (i = 0; i < 16; i++)
8115 z[i] = 0;
8116 for (i = 0; i < 8; i++)
8117 z[i] = n[i];
8118 while (b >= 64) {
8119 core(x, z, k, sigma, false);
8120 for (i = 0; i < 64; i++)
8121 c[cpos + i] = (m ? m[mpos + i] : 0) ^ x[i];
8122 u = 1;
8123 for (i = 8; i < 16; i++) {
8124 u = u + (z[i] & 0xff) | 0;
8125 z[i] = u & 0xff;
8126 u >>>= 8;
8127 }
8128 b -= 64;
8129 cpos += 64;
8130 if (m)
8131 mpos += 64;
8132 }
8133 if (b > 0) {
8134 core(x, z, k, sigma, false);
8135 for (i = 0; i < b; i++)
8136 c[cpos + i] = (m ? m[mpos + i] : 0) ^ x[i];
8137 }
8138 return 0;
8139 }
8140 function crypto_stream_xor(c, cpos, m, mpos, d, n, k) {
8141 const s = new Uint8Array(32);
8142 core(s, n, k, sigma, true);
8143 return crypto_stream_salsa20_xor(c, cpos, m, mpos, d, n.subarray(16), s);
8144 }
8145 function add1305(h, c) {
8146 let u = 0;
8147 for (let j = 0; j < 17; j++) {
8148 u = (u + ((h[j] + c[j]) | 0)) | 0;
8149 h[j] = u & 255;
8150 u >>>= 8;
8151 }
8152 }
8153 const minusp = new Uint32Array([5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252]);
8154 function crypto_onetimeauth(out, outpos, m, mpos, n, k) {
8155 let i, j, u;
8156 const x = new Uint32Array(17), r = new Uint32Array(17), h = new Uint32Array(17), c = new Uint32Array(17), g = new Uint32Array(17);
8157 for (j = 0; j < 17; j++)
8158 r[j] = h[j] = 0;
8159 for (j = 0; j < 16; j++)
8160 r[j] = k[j];
8161 r[3] &= 15;
8162 r[4] &= 252;
8163 r[7] &= 15;
8164 r[8] &= 252;
8165 r[11] &= 15;
8166 r[12] &= 252;
8167 r[15] &= 15;
8168 while (n > 0) {
8169 for (j = 0; j < 17; j++)
8170 c[j] = 0;
8171 for (j = 0; (j < 16) && (j < n); ++j)
8172 c[j] = m[mpos + j];
8173 c[j] = 1;
8174 mpos += j;
8175 n -= j;
8176 add1305(h, c);
8177 for (i = 0; i < 17; i++) {
8178 x[i] = 0;
8179 for (j = 0; j < 17; j++)
8180 x[i] = (x[i] + (h[j] * ((j <= i) ? r[i - j] : ((320 * r[i + 17 - j]) | 0))) | 0) | 0;
8181 }
8182 for (i = 0; i < 17; i++)
8183 h[i] = x[i];
8184 u = 0;
8185 for (j = 0; j < 16; j++) {
8186 u = (u + h[j]) | 0;
8187 h[j] = u & 255;
8188 u >>>= 8;
8189 }
8190 u = (u + h[16]) | 0;
8191 h[16] = u & 3;
8192 u = (5 * (u >>> 2)) | 0;
8193 for (j = 0; j < 16; j++) {
8194 u = (u + h[j]) | 0;
8195 h[j] = u & 255;
8196 u >>>= 8;
8197 }
8198 u = (u + h[16]) | 0;
8199 h[16] = u;
8200 }
8201 for (j = 0; j < 17; j++)
8202 g[j] = h[j];
8203 add1305(h, minusp);
8204 const s = (-(h[16] >>> 7) | 0);
8205 for (j = 0; j < 17; j++)
8206 h[j] ^= s & (g[j] ^ h[j]);
8207 for (j = 0; j < 16; j++)
8208 c[j] = k[j + 16];
8209 c[16] = 0;
8210 add1305(h, c);
8211 for (j = 0; j < 16; j++)
8212 out[outpos + j] = h[j];
8213 return 0;
8214 }
8215 function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {
8216 const x = new Uint8Array(16);
8217 crypto_onetimeauth(x, 0, m, mpos, n, k);
8218 return vn(h, hpos, x, 0, 16);
8219 }
8220 function crypto_secretbox(c, m, d, n, k) {
8221 if (d < 32)
8222 return -1;
8223 crypto_stream_xor(c, 0, m, 0, d, n, k);
8224 crypto_onetimeauth(c, 16, c, 32, d - 32, c);
8225 for (let i = 0; i < 16; i++)
8226 c[i] = 0;
8227 return 0;
8228 }
8229 function crypto_secretbox_open(m, c, d, n, k) {
8230 const x = new Uint8Array(32);
8231 if (d < 32)
8232 return -1;
8233 crypto_stream_xor(x, 0, null, 0, 32, n, k);
8234 if (crypto_onetimeauth_verify(c, 16, c, 32, d - 32, x) !== 0)
8235 return -1;
8236 crypto_stream_xor(m, 0, c, 0, d, n, k);
8237 for (let i = 0; i < 32; i++)
8238 m[i] = 0;
8239 return 0;
8240 }
8241 const crypto_secretbox_KEYBYTES = 32;
8242 const crypto_secretbox_NONCEBYTES = 24;
8243 const crypto_secretbox_ZEROBYTES = 32;
8244 const crypto_secretbox_BOXZEROBYTES = 16;
8245 function checkLengths(k, n) {
8246 if (k.length !== crypto_secretbox_KEYBYTES)
8247 throw new Error('bad key size');
8248 if (n.length !== crypto_secretbox_NONCEBYTES)
8249 throw new Error('bad nonce size');
8250 }
8251 function checkArrayTypes(...args) {
8252 for (let i = 0, count = args.length; i < count; i++) {
8253 if (!(args[i] instanceof Uint8Array))
8254 throw new TypeError('unexpected type, use Uint8Array');
8255 }
8256 }
8257 function naclSecretbox(msg, nonce, key) {
8258 checkArrayTypes(msg, nonce, key);
8259 checkLengths(key, nonce);
8260 const m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);
8261 const c = new Uint8Array(m.length);
8262 for (let i = 0; i < msg.length; i++)
8263 m[i + crypto_secretbox_ZEROBYTES] = msg[i];
8264 crypto_secretbox(c, m, m.length, nonce, key);
8265 return c.subarray(crypto_secretbox_BOXZEROBYTES);
8266 }
8267 function naclSecretboxOpen(box, nonce, key) {
8268 checkArrayTypes(box, nonce, key);
8269 checkLengths(key, nonce);
8270 const c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);
8271 const m = new Uint8Array(c.length);
8272 for (let i = 0; i < box.length; i++)
8273 c[i + crypto_secretbox_BOXZEROBYTES] = box[i];
8274 if (c.length < 32)
8275 return null;
8276 if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0)
8277 return null;
8278 return m.subarray(crypto_secretbox_ZEROBYTES);
8279 }
8280
8281 function naclDecrypt(encrypted, nonce, secret) {
8282 return naclSecretboxOpen(encrypted, nonce, secret);
8283 }
8284
8285 function naclEncrypt(message, secret, nonce = randomAsU8a(24)) {
8286 return {
8287 encrypted: naclSecretbox(message, nonce, secret),
8288 nonce
8289 };
8290 }
8291
8292 const rotl$1 = (a, b) => (a << b) | (a >>> (32 - b));
8293 function XorAndSalsa(prev, pi, input, ii, out, oi) {
8294 let y00 = prev[pi++] ^ input[ii++], y01 = prev[pi++] ^ input[ii++];
8295 let y02 = prev[pi++] ^ input[ii++], y03 = prev[pi++] ^ input[ii++];
8296 let y04 = prev[pi++] ^ input[ii++], y05 = prev[pi++] ^ input[ii++];
8297 let y06 = prev[pi++] ^ input[ii++], y07 = prev[pi++] ^ input[ii++];
8298 let y08 = prev[pi++] ^ input[ii++], y09 = prev[pi++] ^ input[ii++];
8299 let y10 = prev[pi++] ^ input[ii++], y11 = prev[pi++] ^ input[ii++];
8300 let y12 = prev[pi++] ^ input[ii++], y13 = prev[pi++] ^ input[ii++];
8301 let y14 = prev[pi++] ^ input[ii++], y15 = prev[pi++] ^ input[ii++];
8302 let x00 = y00, x01 = y01, x02 = y02, x03 = y03, x04 = y04, x05 = y05, x06 = y06, x07 = y07, x08 = y08, x09 = y09, x10 = y10, x11 = y11, x12 = y12, x13 = y13, x14 = y14, x15 = y15;
8303 for (let i = 0; i < 8; i += 2) {
8304 x04 ^= rotl$1(x00 + x12 | 0, 7);
8305 x08 ^= rotl$1(x04 + x00 | 0, 9);
8306 x12 ^= rotl$1(x08 + x04 | 0, 13);
8307 x00 ^= rotl$1(x12 + x08 | 0, 18);
8308 x09 ^= rotl$1(x05 + x01 | 0, 7);
8309 x13 ^= rotl$1(x09 + x05 | 0, 9);
8310 x01 ^= rotl$1(x13 + x09 | 0, 13);
8311 x05 ^= rotl$1(x01 + x13 | 0, 18);
8312 x14 ^= rotl$1(x10 + x06 | 0, 7);
8313 x02 ^= rotl$1(x14 + x10 | 0, 9);
8314 x06 ^= rotl$1(x02 + x14 | 0, 13);
8315 x10 ^= rotl$1(x06 + x02 | 0, 18);
8316 x03 ^= rotl$1(x15 + x11 | 0, 7);
8317 x07 ^= rotl$1(x03 + x15 | 0, 9);
8318 x11 ^= rotl$1(x07 + x03 | 0, 13);
8319 x15 ^= rotl$1(x11 + x07 | 0, 18);
8320 x01 ^= rotl$1(x00 + x03 | 0, 7);
8321 x02 ^= rotl$1(x01 + x00 | 0, 9);
8322 x03 ^= rotl$1(x02 + x01 | 0, 13);
8323 x00 ^= rotl$1(x03 + x02 | 0, 18);
8324 x06 ^= rotl$1(x05 + x04 | 0, 7);
8325 x07 ^= rotl$1(x06 + x05 | 0, 9);
8326 x04 ^= rotl$1(x07 + x06 | 0, 13);
8327 x05 ^= rotl$1(x04 + x07 | 0, 18);
8328 x11 ^= rotl$1(x10 + x09 | 0, 7);
8329 x08 ^= rotl$1(x11 + x10 | 0, 9);
8330 x09 ^= rotl$1(x08 + x11 | 0, 13);
8331 x10 ^= rotl$1(x09 + x08 | 0, 18);
8332 x12 ^= rotl$1(x15 + x14 | 0, 7);
8333 x13 ^= rotl$1(x12 + x15 | 0, 9);
8334 x14 ^= rotl$1(x13 + x12 | 0, 13);
8335 x15 ^= rotl$1(x14 + x13 | 0, 18);
8336 }
8337 out[oi++] = (y00 + x00) | 0;
8338 out[oi++] = (y01 + x01) | 0;
8339 out[oi++] = (y02 + x02) | 0;
8340 out[oi++] = (y03 + x03) | 0;
8341 out[oi++] = (y04 + x04) | 0;
8342 out[oi++] = (y05 + x05) | 0;
8343 out[oi++] = (y06 + x06) | 0;
8344 out[oi++] = (y07 + x07) | 0;
8345 out[oi++] = (y08 + x08) | 0;
8346 out[oi++] = (y09 + x09) | 0;
8347 out[oi++] = (y10 + x10) | 0;
8348 out[oi++] = (y11 + x11) | 0;
8349 out[oi++] = (y12 + x12) | 0;
8350 out[oi++] = (y13 + x13) | 0;
8351 out[oi++] = (y14 + x14) | 0;
8352 out[oi++] = (y15 + x15) | 0;
8353 }
8354 function BlockMix(input, ii, out, oi, r) {
8355 let head = oi + 0;
8356 let tail = oi + 16 * r;
8357 for (let i = 0; i < 16; i++)
8358 out[tail + i] = input[ii + (2 * r - 1) * 16 + i];
8359 for (let i = 0; i < r; i++, head += 16, ii += 16) {
8360 XorAndSalsa(out, tail, input, ii, out, head);
8361 if (i > 0)
8362 tail += 16;
8363 XorAndSalsa(out, head, input, (ii += 16), out, tail);
8364 }
8365 }
8366 function scryptInit(password, salt, _opts) {
8367 const opts = checkOpts({
8368 dkLen: 32,
8369 asyncTick: 10,
8370 maxmem: 1024 ** 3 + 1024,
8371 }, _opts);
8372 const { N, r, p, dkLen, asyncTick, maxmem, onProgress } = opts;
8373 number(N);
8374 number(r);
8375 number(p);
8376 number(dkLen);
8377 number(asyncTick);
8378 number(maxmem);
8379 if (onProgress !== undefined && typeof onProgress !== 'function')
8380 throw new Error('progressCb should be function');
8381 const blockSize = 128 * r;
8382 const blockSize32 = blockSize / 4;
8383 if (N <= 1 || (N & (N - 1)) !== 0 || N >= 2 ** (blockSize / 8) || N > 2 ** 32) {
8384 throw new Error('Scrypt: N must be larger than 1, a power of 2, less than 2^(128 * r / 8) and less than 2^32');
8385 }
8386 if (p < 0 || p > ((2 ** 32 - 1) * 32) / blockSize) {
8387 throw new Error('Scrypt: p must be a positive integer less than or equal to ((2^32 - 1) * 32) / (128 * r)');
8388 }
8389 if (dkLen < 0 || dkLen > (2 ** 32 - 1) * 32) {
8390 throw new Error('Scrypt: dkLen should be positive integer less than or equal to (2^32 - 1) * 32');
8391 }
8392 const memUsed = blockSize * (N + p);
8393 if (memUsed > maxmem) {
8394 throw new Error(`Scrypt: parameters too large, ${memUsed} (128 * r * (N + p)) > ${maxmem} (maxmem)`);
8395 }
8396 const B = pbkdf2(sha256, password, salt, { c: 1, dkLen: blockSize * p });
8397 const B32 = u32(B);
8398 const V = u32(new Uint8Array(blockSize * N));
8399 const tmp = u32(new Uint8Array(blockSize));
8400 let blockMixCb = () => { };
8401 if (onProgress) {
8402 const totalBlockMix = 2 * N * p;
8403 const callbackPer = Math.max(Math.floor(totalBlockMix / 10000), 1);
8404 let blockMixCnt = 0;
8405 blockMixCb = () => {
8406 blockMixCnt++;
8407 if (onProgress && (!(blockMixCnt % callbackPer) || blockMixCnt === totalBlockMix))
8408 onProgress(blockMixCnt / totalBlockMix);
8409 };
8410 }
8411 return { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb, asyncTick };
8412 }
8413 function scryptOutput(password, dkLen, B, V, tmp) {
8414 const res = pbkdf2(sha256, password, B, { c: 1, dkLen });
8415 B.fill(0);
8416 V.fill(0);
8417 tmp.fill(0);
8418 return res;
8419 }
8420 function scrypt(password, salt, opts) {
8421 const { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb } = scryptInit(password, salt, opts);
8422 for (let pi = 0; pi < p; pi++) {
8423 const Pi = blockSize32 * pi;
8424 for (let i = 0; i < blockSize32; i++)
8425 V[i] = B32[Pi + i];
8426 for (let i = 0, pos = 0; i < N - 1; i++) {
8427 BlockMix(V, pos, V, (pos += blockSize32), r);
8428 blockMixCb();
8429 }
8430 BlockMix(V, (N - 1) * blockSize32, B32, Pi, r);
8431 blockMixCb();
8432 for (let i = 0; i < N; i++) {
8433 const j = B32[Pi + blockSize32 - 16] % N;
8434 for (let k = 0; k < blockSize32; k++)
8435 tmp[k] = B32[Pi + k] ^ V[j * blockSize32 + k];
8436 BlockMix(tmp, 0, B32, Pi, r);
8437 blockMixCb();
8438 }
8439 }
8440 return scryptOutput(password, dkLen, B, V, tmp);
8441 }
8442
8443 const DEFAULT_PARAMS = {
8444 N: 1 << 15,
8445 p: 1,
8446 r: 8
8447 };
8448
8449 function scryptEncode(passphrase, salt = randomAsU8a(), params = DEFAULT_PARAMS, onlyJs) {
8450 const u8a = util.u8aToU8a(passphrase);
8451 return {
8452 params,
8453 password: !util.hasBigInt || (!onlyJs && isReady())
8454 ? scrypt$1(u8a, salt, Math.log2(params.N), params.r, params.p)
8455 : scrypt(u8a, salt, util.objectSpread({ dkLen: 64 }, params)),
8456 salt
8457 };
8458 }
8459
8460 function scryptFromU8a(data) {
8461 const salt = data.subarray(0, 32);
8462 const N = util.u8aToBn(data.subarray(32 + 0, 32 + 4), BN_LE_OPTS).toNumber();
8463 const p = util.u8aToBn(data.subarray(32 + 4, 32 + 8), BN_LE_OPTS).toNumber();
8464 const r = util.u8aToBn(data.subarray(32 + 8, 32 + 12), BN_LE_OPTS).toNumber();
8465 if (N !== DEFAULT_PARAMS.N || p !== DEFAULT_PARAMS.p || r !== DEFAULT_PARAMS.r) {
8466 throw new Error('Invalid injected scrypt params found');
8467 }
8468 return { params: { N, p, r }, salt };
8469 }
8470
8471 function scryptToU8a(salt, { N, p, r }) {
8472 return util.u8aConcat(salt, util.bnToU8a(N, BN_LE_32_OPTS), util.bnToU8a(p, BN_LE_32_OPTS), util.bnToU8a(r, BN_LE_32_OPTS));
8473 }
8474
8475 const ENCODING = ['scrypt', 'xsalsa20-poly1305'];
8476 const ENCODING_NONE = ['none'];
8477 const ENCODING_VERSION = '3';
8478 const NONCE_LENGTH = 24;
8479 const SCRYPT_LENGTH = 32 + (3 * 4);
8480
8481 function jsonDecryptData(encrypted, passphrase, encType = ENCODING) {
8482 if (!encrypted) {
8483 throw new Error('No encrypted data available to decode');
8484 }
8485 else if (encType.includes('xsalsa20-poly1305') && !passphrase) {
8486 throw new Error('Password required to decode encrypted data');
8487 }
8488 let encoded = encrypted;
8489 if (passphrase) {
8490 let password;
8491 if (encType.includes('scrypt')) {
8492 const { params, salt } = scryptFromU8a(encrypted);
8493 password = scryptEncode(passphrase, salt, params).password;
8494 encrypted = encrypted.subarray(SCRYPT_LENGTH);
8495 }
8496 else {
8497 password = util.stringToU8a(passphrase);
8498 }
8499 encoded = naclDecrypt(encrypted.subarray(NONCE_LENGTH), encrypted.subarray(0, NONCE_LENGTH), util.u8aFixLength(password, 256, true));
8500 }
8501 if (!encoded) {
8502 throw new Error('Unable to decode using the supplied passphrase');
8503 }
8504 return encoded;
8505 }
8506
8507 function jsonDecrypt({ encoded, encoding }, passphrase) {
8508 if (!encoded) {
8509 throw new Error('No encrypted data available to decode');
8510 }
8511 return jsonDecryptData(util.isHex(encoded)
8512 ? util.hexToU8a(encoded)
8513 : base64Decode(encoded), passphrase, Array.isArray(encoding.type)
8514 ? encoding.type
8515 : [encoding.type]);
8516 }
8517
8518 function jsonEncryptFormat(encoded, contentType, isEncrypted) {
8519 return {
8520 encoded: base64Encode(encoded),
8521 encoding: {
8522 content: contentType,
8523 type: isEncrypted
8524 ? ENCODING
8525 : ENCODING_NONE,
8526 version: ENCODING_VERSION
8527 }
8528 };
8529 }
8530
8531 function jsonEncrypt(data, contentType, passphrase) {
8532 let isEncrypted = false;
8533 let encoded = data;
8534 if (passphrase) {
8535 const { params, password, salt } = scryptEncode(passphrase);
8536 const { encrypted, nonce } = naclEncrypt(encoded, password.subarray(0, 32));
8537 isEncrypted = true;
8538 encoded = util.u8aConcat(scryptToU8a(salt, params), nonce, encrypted);
8539 }
8540 return jsonEncryptFormat(encoded, contentType, isEncrypted);
8541 }
8542
8543 const secp256k1VerifyHasher = (hashType) => (message, signature, publicKey) => secp256k1Verify(message, signature, publicKey, hashType);
8544 const VERIFIERS_ECDSA = [
8545 ['ecdsa', secp256k1VerifyHasher('blake2')],
8546 ['ethereum', secp256k1VerifyHasher('keccak')]
8547 ];
8548 const VERIFIERS = [
8549 ['ed25519', ed25519Verify],
8550 ['sr25519', sr25519Verify],
8551 ...VERIFIERS_ECDSA
8552 ];
8553 const CRYPTO_TYPES = ['ed25519', 'sr25519', 'ecdsa'];
8554 function verifyDetect(result, { message, publicKey, signature }, verifiers = VERIFIERS) {
8555 result.isValid = verifiers.some(([crypto, verify]) => {
8556 try {
8557 if (verify(message, signature, publicKey)) {
8558 result.crypto = crypto;
8559 return true;
8560 }
8561 }
8562 catch {
8563 }
8564 return false;
8565 });
8566 return result;
8567 }
8568 function verifyMultisig(result, { message, publicKey, signature }) {
8569 if (![0, 1, 2].includes(signature[0])) {
8570 throw new Error(`Unknown crypto type, expected signature prefix [0..2], found ${signature[0]}`);
8571 }
8572 const type = CRYPTO_TYPES[signature[0]] || 'none';
8573 result.crypto = type;
8574 try {
8575 result.isValid = {
8576 ecdsa: () => verifyDetect(result, { message, publicKey, signature: signature.subarray(1) }, VERIFIERS_ECDSA).isValid,
8577 ed25519: () => ed25519Verify(message, signature.subarray(1), publicKey),
8578 none: () => {
8579 throw Error('no verify for `none` crypto type');
8580 },
8581 sr25519: () => sr25519Verify(message, signature.subarray(1), publicKey)
8582 }[type]();
8583 }
8584 catch {
8585 }
8586 return result;
8587 }
8588 function getVerifyFn(signature) {
8589 return [0, 1, 2].includes(signature[0]) && [65, 66].includes(signature.length)
8590 ? verifyMultisig
8591 : verifyDetect;
8592 }
8593 function signatureVerify(message, signature, addressOrPublicKey) {
8594 const signatureU8a = util.u8aToU8a(signature);
8595 if (![64, 65, 66].includes(signatureU8a.length)) {
8596 throw new Error(`Invalid signature length, expected [64..66] bytes, found ${signatureU8a.length}`);
8597 }
8598 const publicKey = decodeAddress(addressOrPublicKey);
8599 const input = { message: util.u8aToU8a(message), publicKey, signature: signatureU8a };
8600 const result = { crypto: 'none', isValid: false, isWrapped: util.u8aIsWrapped(input.message, true), publicKey };
8601 const isWrappedBytes = util.u8aIsWrapped(input.message, false);
8602 const verifyFn = getVerifyFn(signatureU8a);
8603 verifyFn(result, input);
8604 if (result.crypto !== 'none' || (result.isWrapped && !isWrappedBytes)) {
8605 return result;
8606 }
8607 input.message = isWrappedBytes
8608 ? util.u8aUnwrapBytes(input.message)
8609 : util.u8aWrapBytes(input.message);
8610 return verifyFn(result, input);
8611 }
8612
8613 const P64_1 = BigInt$1('11400714785074694791');
8614 const P64_2 = BigInt$1('14029467366897019727');
8615 const P64_3 = BigInt$1('1609587929392839161');
8616 const P64_4 = BigInt$1('9650029242287828579');
8617 const P64_5 = BigInt$1('2870177450012600261');
8618 const U64 = BigInt$1('0xffffffffffffffff');
8619 const _7n = BigInt$1(7);
8620 const _11n = BigInt$1(11);
8621 const _12n = BigInt$1(12);
8622 const _16n = BigInt$1(16);
8623 const _18n = BigInt$1(18);
8624 const _23n = BigInt$1(23);
8625 const _27n = BigInt$1(27);
8626 const _29n = BigInt$1(29);
8627 const _31n = BigInt$1(31);
8628 const _32n = BigInt$1(32);
8629 const _33n = BigInt$1(33);
8630 const _64n = BigInt$1(64);
8631 const _256n = BigInt$1(256);
8632 function rotl(a, b) {
8633 const c = a & U64;
8634 return ((c << b) | (c >> (_64n - b))) & U64;
8635 }
8636 function fromU8a(u8a, p, count) {
8637 const bigints = new Array(count);
8638 let offset = 0;
8639 for (let i = 0; i < count; i++, offset += 2) {
8640 bigints[i] = BigInt$1(u8a[p + offset] | (u8a[p + 1 + offset] << 8));
8641 }
8642 let result = util._0n;
8643 for (let i = count - 1; i >= 0; i--) {
8644 result = (result << _16n) + bigints[i];
8645 }
8646 return result;
8647 }
8648 function init(seed, input) {
8649 const state = {
8650 seed,
8651 u8a: new Uint8Array(32),
8652 u8asize: 0,
8653 v1: seed + P64_1 + P64_2,
8654 v2: seed + P64_2,
8655 v3: seed,
8656 v4: seed - P64_1
8657 };
8658 if (input.length < 32) {
8659 state.u8a.set(input);
8660 state.u8asize = input.length;
8661 return state;
8662 }
8663 const limit = input.length - 32;
8664 let p = 0;
8665 if (limit >= 0) {
8666 const adjustV = (v) => P64_1 * rotl(v + P64_2 * fromU8a(input, p, 4), _31n);
8667 do {
8668 state.v1 = adjustV(state.v1);
8669 p += 8;
8670 state.v2 = adjustV(state.v2);
8671 p += 8;
8672 state.v3 = adjustV(state.v3);
8673 p += 8;
8674 state.v4 = adjustV(state.v4);
8675 p += 8;
8676 } while (p <= limit);
8677 }
8678 if (p < input.length) {
8679 state.u8a.set(input.subarray(p, input.length));
8680 state.u8asize = input.length - p;
8681 }
8682 return state;
8683 }
8684 function xxhash64(input, initSeed) {
8685 const { seed, u8a, u8asize, v1, v2, v3, v4 } = init(BigInt$1(initSeed), input);
8686 let p = 0;
8687 let h64 = U64 & (BigInt$1(input.length) + (input.length >= 32
8688 ? (((((((((rotl(v1, util._1n) + rotl(v2, _7n) + rotl(v3, _12n) + rotl(v4, _18n)) ^ (P64_1 * rotl(v1 * P64_2, _31n))) * P64_1 + P64_4) ^ (P64_1 * rotl(v2 * P64_2, _31n))) * P64_1 + P64_4) ^ (P64_1 * rotl(v3 * P64_2, _31n))) * P64_1 + P64_4) ^ (P64_1 * rotl(v4 * P64_2, _31n))) * P64_1 + P64_4)
8689 : (seed + P64_5)));
8690 while (p <= (u8asize - 8)) {
8691 h64 = U64 & (P64_4 + P64_1 * rotl(h64 ^ (P64_1 * rotl(P64_2 * fromU8a(u8a, p, 4), _31n)), _27n));
8692 p += 8;
8693 }
8694 if ((p + 4) <= u8asize) {
8695 h64 = U64 & (P64_3 + P64_2 * rotl(h64 ^ (P64_1 * fromU8a(u8a, p, 2)), _23n));
8696 p += 4;
8697 }
8698 while (p < u8asize) {
8699 h64 = U64 & (P64_1 * rotl(h64 ^ (P64_5 * BigInt$1(u8a[p++])), _11n));
8700 }
8701 h64 = U64 & (P64_2 * (h64 ^ (h64 >> _33n)));
8702 h64 = U64 & (P64_3 * (h64 ^ (h64 >> _29n)));
8703 h64 = U64 & (h64 ^ (h64 >> _32n));
8704 const result = new Uint8Array(8);
8705 for (let i = 7; i >= 0; i--) {
8706 result[i] = Number(h64 % _256n);
8707 h64 = h64 / _256n;
8708 }
8709 return result;
8710 }
8711
8712 function xxhashAsU8a(data, bitLength = 64, onlyJs) {
8713 const rounds = Math.ceil(bitLength / 64);
8714 const u8a = util.u8aToU8a(data);
8715 if (!util.hasBigInt || (!onlyJs && isReady())) {
8716 return twox(u8a, rounds);
8717 }
8718 const result = new Uint8Array(rounds * 8);
8719 for (let seed = 0; seed < rounds; seed++) {
8720 result.set(xxhash64(u8a, seed).reverse(), seed * 8);
8721 }
8722 return result;
8723 }
8724 const xxhashAsHex = createAsHex(xxhashAsU8a);
8725
8726 exports.addressEq = addressEq;
8727 exports.addressToEvm = addressToEvm;
8728 exports.allNetworks = allNetworks;
8729 exports.availableNetworks = availableNetworks;
8730 exports.base32Decode = base32Decode;
8731 exports.base32Encode = base32Encode;
8732 exports.base32Validate = base32Validate;
8733 exports.base58Decode = base58Decode;
8734 exports.base58Encode = base58Encode;
8735 exports.base58Validate = base58Validate;
8736 exports.base64Decode = base64Decode;
8737 exports.base64Encode = base64Encode;
8738 exports.base64Pad = base64Pad;
8739 exports.base64Trim = base64Trim;
8740 exports.base64Validate = base64Validate;
8741 exports.blake2AsHex = blake2AsHex;
8742 exports.blake2AsU8a = blake2AsU8a;
8743 exports.checkAddress = checkAddress;
8744 exports.checkAddressChecksum = checkAddressChecksum;
8745 exports.createKeyDerived = createKeyDerived;
8746 exports.createKeyMulti = createKeyMulti;
8747 exports.cryptoIsReady = cryptoIsReady;
8748 exports.cryptoWaitReady = cryptoWaitReady;
8749 exports.decodeAddress = decodeAddress;
8750 exports.deriveAddress = deriveAddress;
8751 exports.ed25519DeriveHard = ed25519DeriveHard;
8752 exports.ed25519PairFromRandom = ed25519PairFromRandom;
8753 exports.ed25519PairFromSecret = ed25519PairFromSecret;
8754 exports.ed25519PairFromSeed = ed25519PairFromSeed;
8755 exports.ed25519PairFromString = ed25519PairFromString;
8756 exports.ed25519Sign = ed25519Sign;
8757 exports.ed25519Verify = ed25519Verify;
8758 exports.encodeAddress = encodeAddress;
8759 exports.encodeDerivedAddress = encodeDerivedAddress;
8760 exports.encodeMultiAddress = encodeMultiAddress;
8761 exports.ethereumEncode = ethereumEncode;
8762 exports.evmToAddress = evmToAddress;
8763 exports.hdEthereum = hdEthereum;
8764 exports.hdLedger = hdLedger;
8765 exports.hdValidatePath = hdValidatePath;
8766 exports.hmacSha256AsU8a = hmacSha256AsU8a;
8767 exports.hmacSha512AsU8a = hmacSha512AsU8a;
8768 exports.hmacShaAsU8a = hmacShaAsU8a;
8769 exports.isAddress = isAddress;
8770 exports.isBase32 = isBase32;
8771 exports.isBase58 = isBase58;
8772 exports.isBase64 = isBase64;
8773 exports.isEthereumAddress = isEthereumAddress;
8774 exports.isEthereumChecksum = isEthereumChecksum;
8775 exports.jsonDecrypt = jsonDecrypt;
8776 exports.jsonDecryptData = jsonDecryptData;
8777 exports.jsonEncrypt = jsonEncrypt;
8778 exports.jsonEncryptFormat = jsonEncryptFormat;
8779 exports.keccak256AsU8a = keccak256AsU8a;
8780 exports.keccak512AsU8a = keccak512AsU8a;
8781 exports.keccakAsHex = keccakAsHex;
8782 exports.keccakAsU8a = keccakAsU8a;
8783 exports.keyExtractPath = keyExtractPath;
8784 exports.keyExtractSuri = keyExtractSuri;
8785 exports.keyFromPath = keyFromPath;
8786 exports.keyHdkdEcdsa = keyHdkdEcdsa;
8787 exports.keyHdkdEd25519 = keyHdkdEd25519;
8788 exports.keyHdkdSr25519 = keyHdkdSr25519;
8789 exports.mnemonicGenerate = mnemonicGenerate;
8790 exports.mnemonicToEntropy = mnemonicToEntropy;
8791 exports.mnemonicToLegacySeed = mnemonicToLegacySeed;
8792 exports.mnemonicToMiniSecret = mnemonicToMiniSecret;
8793 exports.mnemonicValidate = mnemonicValidate;
8794 exports.naclDecrypt = naclDecrypt;
8795 exports.naclEncrypt = naclEncrypt;
8796 exports.packageInfo = packageInfo;
8797 exports.pbkdf2Encode = pbkdf2Encode;
8798 exports.randomAsHex = randomAsHex;
8799 exports.randomAsNumber = randomAsNumber;
8800 exports.randomAsU8a = randomAsU8a;
8801 exports.scryptEncode = scryptEncode;
8802 exports.scryptFromU8a = scryptFromU8a;
8803 exports.scryptToU8a = scryptToU8a;
8804 exports.secp256k1Compress = secp256k1Compress;
8805 exports.secp256k1Expand = secp256k1Expand;
8806 exports.secp256k1PairFromSeed = secp256k1PairFromSeed;
8807 exports.secp256k1PrivateKeyTweakAdd = secp256k1PrivateKeyTweakAdd;
8808 exports.secp256k1Recover = secp256k1Recover;
8809 exports.secp256k1Sign = secp256k1Sign;
8810 exports.secp256k1Verify = secp256k1Verify;
8811 exports.selectableNetworks = selectableNetworks;
8812 exports.setSS58Format = setSS58Format;
8813 exports.sha256AsU8a = sha256AsU8a;
8814 exports.sha512AsU8a = sha512AsU8a;
8815 exports.shaAsU8a = shaAsU8a;
8816 exports.signatureVerify = signatureVerify;
8817 exports.sortAddresses = sortAddresses;
8818 exports.sr25519Agreement = sr25519Agreement;
8819 exports.sr25519DeriveHard = sr25519DeriveHard;
8820 exports.sr25519DerivePublic = sr25519DerivePublic;
8821 exports.sr25519DeriveSoft = sr25519DeriveSoft;
8822 exports.sr25519PairFromSeed = sr25519PairFromSeed;
8823 exports.sr25519Sign = sr25519Sign;
8824 exports.sr25519Verify = sr25519Verify;
8825 exports.sr25519VrfSign = sr25519VrfSign;
8826 exports.sr25519VrfVerify = sr25519VrfVerify;
8827 exports.validateAddress = validateAddress;
8828 exports.xxhashAsHex = xxhashAsHex;
8829 exports.xxhashAsU8a = xxhashAsU8a;
8830
8831}));
8832
\No newline at end of file