UNPKG

556 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: '12.6.2' };
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: '12.6.2' };
88
89 (function (exports) {
90 Object.defineProperty(exports, "__esModule", { value: true });
91 exports.getRandomValues = exports.crypto = exports.packageInfo = void 0;
92 const x_global_1 = require$$0;
93 var packageInfo_js_1 = packageInfo$1;
94 Object.defineProperty(exports, "packageInfo", { enumerable: true, get: function () { return packageInfo_js_1.packageInfo; } });
95 exports.crypto = x_global_1.xglobal.crypto;
96 function getRandomValues(arr) {
97 return exports.crypto.getRandomValues(arr);
98 }
99 exports.getRandomValues = getRandomValues;
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: '12.6.2' };
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('0123456789ABCDEFGHIJKLMNOPQRSTUV'), padding(5), join(''));
988 chain(radix2(5), alphabet('0123456789ABCDEFGHJKMNPQRSTVWXYZ'), join(''), normalize$1((s) => s.toUpperCase().replace(/O/g, '0').replace(/[IL]/g, '1')));
989 const base64 = chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'), padding(6), join(''));
990 chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'), padding(6), join(''));
991 chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'), join(''));
992 const genBase58 = (abc) => chain(radix(58), alphabet(abc), join(''));
993 const base58 = genBase58('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz');
994 genBase58('123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ');
995 genBase58('rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz');
996 const BECH_ALPHABET = chain(alphabet('qpzry9x8gf2tvdw0s3jn54khce6mua7l'), join(''));
997 const POLYMOD_GENERATORS = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];
998 function bech32Polymod(pre) {
999 const b = pre >> 25;
1000 let chk = (pre & 0x1ffffff) << 5;
1001 for (let i = 0; i < POLYMOD_GENERATORS.length; i++) {
1002 if (((b >> i) & 1) === 1)
1003 chk ^= POLYMOD_GENERATORS[i];
1004 }
1005 return chk;
1006 }
1007 function bechChecksum(prefix, words, encodingConst = 1) {
1008 const len = prefix.length;
1009 let chk = 1;
1010 for (let i = 0; i < len; i++) {
1011 const c = prefix.charCodeAt(i);
1012 if (c < 33 || c > 126)
1013 throw new Error(`Invalid prefix (${prefix})`);
1014 chk = bech32Polymod(chk) ^ (c >> 5);
1015 }
1016 chk = bech32Polymod(chk);
1017 for (let i = 0; i < len; i++)
1018 chk = bech32Polymod(chk) ^ (prefix.charCodeAt(i) & 0x1f);
1019 for (let v of words)
1020 chk = bech32Polymod(chk) ^ v;
1021 for (let i = 0; i < 6; i++)
1022 chk = bech32Polymod(chk);
1023 chk ^= encodingConst;
1024 return BECH_ALPHABET.encode(convertRadix2([chk % 2 ** 30], 30, 5, false));
1025 }
1026 function genBech32(encoding) {
1027 const ENCODING_CONST = encoding === 'bech32' ? 1 : 0x2bc830a3;
1028 const _words = radix2(5);
1029 const fromWords = _words.decode;
1030 const toWords = _words.encode;
1031 const fromWordsUnsafe = unsafeWrapper(fromWords);
1032 function encode(prefix, words, limit = 90) {
1033 if (typeof prefix !== 'string')
1034 throw new Error(`bech32.encode prefix should be string, not ${typeof prefix}`);
1035 if (!Array.isArray(words) || (words.length && typeof words[0] !== 'number'))
1036 throw new Error(`bech32.encode words should be array of numbers, not ${typeof words}`);
1037 const actualLength = prefix.length + 7 + words.length;
1038 if (limit !== false && actualLength > limit)
1039 throw new TypeError(`Length ${actualLength} exceeds limit ${limit}`);
1040 const lowered = prefix.toLowerCase();
1041 const sum = bechChecksum(lowered, words, ENCODING_CONST);
1042 return `${lowered}1${BECH_ALPHABET.encode(words)}${sum}`;
1043 }
1044 function decode(str, limit = 90) {
1045 if (typeof str !== 'string')
1046 throw new Error(`bech32.decode input should be string, not ${typeof str}`);
1047 if (str.length < 8 || (limit !== false && str.length > limit))
1048 throw new TypeError(`Wrong string length: ${str.length} (${str}). Expected (8..${limit})`);
1049 const lowered = str.toLowerCase();
1050 if (str !== lowered && str !== str.toUpperCase())
1051 throw new Error(`String must be lowercase or uppercase`);
1052 str = lowered;
1053 const sepIndex = str.lastIndexOf('1');
1054 if (sepIndex === 0 || sepIndex === -1)
1055 throw new Error(`Letter "1" must be present between prefix and data only`);
1056 const prefix = str.slice(0, sepIndex);
1057 const _words = str.slice(sepIndex + 1);
1058 if (_words.length < 6)
1059 throw new Error('Data must be at least 6 characters long');
1060 const words = BECH_ALPHABET.decode(_words).slice(0, -6);
1061 const sum = bechChecksum(prefix, words, ENCODING_CONST);
1062 if (!_words.endsWith(sum))
1063 throw new Error(`Invalid checksum in ${str}: expected "${sum}"`);
1064 return { prefix, words };
1065 }
1066 const decodeUnsafe = unsafeWrapper(decode);
1067 function decodeToBytes(str) {
1068 const { prefix, words } = decode(str, false);
1069 return { prefix, words, bytes: fromWords(words) };
1070 }
1071 return { encode, decode, decodeToBytes, decodeUnsafe, fromWords, fromWordsUnsafe, toWords };
1072 }
1073 genBech32('bech32');
1074 genBech32('bech32m');
1075 chain(radix2(4), alphabet('0123456789abcdef'), join(''), normalize$1((s) => {
1076 if (typeof s !== 'string' || s.length % 2)
1077 throw new TypeError(`hex.decode: expected string, got ${typeof s} with length ${s.length}`);
1078 return s.toLowerCase();
1079 }));
1080
1081 function createDecode({ coder, ipfs }, validate) {
1082 return (value, ipfsCompat) => {
1083 validate(value, ipfsCompat);
1084 return coder.decode(ipfs && ipfsCompat
1085 ? value.substring(1)
1086 : value);
1087 };
1088 }
1089 function createEncode({ coder, ipfs }) {
1090 return (value, ipfsCompat) => {
1091 const out = coder.encode(util.u8aToU8a(value));
1092 return ipfs && ipfsCompat
1093 ? `${ipfs}${out}`
1094 : out;
1095 };
1096 }
1097 function createIs(validate) {
1098 return (value, ipfsCompat) => {
1099 try {
1100 return validate(value, ipfsCompat);
1101 }
1102 catch {
1103 return false;
1104 }
1105 };
1106 }
1107 function createValidate({ chars, ipfs, type, withPadding }) {
1108 return (value, ipfsCompat) => {
1109 if (typeof value !== 'string') {
1110 throw new Error(`Expected ${type} string input`);
1111 }
1112 else if (ipfs && ipfsCompat && !value.startsWith(ipfs)) {
1113 throw new Error(`Expected ipfs-compatible ${type} to start with '${ipfs}'`);
1114 }
1115 for (let i = (ipfsCompat ? 1 : 0), count = value.length; i < count; i++) {
1116 if (chars.includes(value[i])) ;
1117 else if (withPadding && value[i] === '=') {
1118 if (i === count - 1) ;
1119 else if (value[i + 1] === '=') ;
1120 else {
1121 throw new Error(`Invalid ${type} padding sequence "${value[i]}${value[i + 1]}" at index ${i}`);
1122 }
1123 }
1124 else {
1125 throw new Error(`Invalid ${type} character "${value[i]}" (0x${value.charCodeAt(i).toString(16)}) at index ${i}`);
1126 }
1127 }
1128 return true;
1129 };
1130 }
1131
1132 const config$2 = {
1133 chars: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz',
1134 coder: base58,
1135 ipfs: 'z',
1136 type: 'base58'
1137 };
1138 const base58Validate = createValidate(config$2);
1139 const base58Decode = createDecode(config$2, base58Validate);
1140 const base58Encode = createEncode(config$2);
1141 const isBase58 = createIs(base58Validate);
1142
1143 function number(n) {
1144 if (!Number.isSafeInteger(n) || n < 0)
1145 throw new Error(`Wrong positive integer: ${n}`);
1146 }
1147 function isBytes$2(a) {
1148 return (a instanceof Uint8Array ||
1149 (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array'));
1150 }
1151 function bytes(b, ...lengths) {
1152 if (!isBytes$2(b))
1153 throw new Error('Expected Uint8Array');
1154 if (lengths.length > 0 && !lengths.includes(b.length))
1155 throw new Error(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);
1156 }
1157 function hash(hash) {
1158 if (typeof hash !== 'function' || typeof hash.create !== 'function')
1159 throw new Error('Hash should be wrapped by utils.wrapConstructor');
1160 number(hash.outputLen);
1161 number(hash.blockLen);
1162 }
1163 function exists(instance, checkFinished = true) {
1164 if (instance.destroyed)
1165 throw new Error('Hash instance has been destroyed');
1166 if (checkFinished && instance.finished)
1167 throw new Error('Hash#digest() has already been called');
1168 }
1169 function output(out, instance) {
1170 bytes(out);
1171 const min = instance.outputLen;
1172 if (out.length < min) {
1173 throw new Error(`digestInto() expects output buffer of length at least ${min}`);
1174 }
1175 }
1176
1177 const crypto = typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;
1178
1179 /*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
1180 const u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));
1181 function isBytes$1(a) {
1182 return (a instanceof Uint8Array ||
1183 (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array'));
1184 }
1185 const createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);
1186 const rotr = (word, shift) => (word << (32 - shift)) | (word >>> shift);
1187 const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;
1188 if (!isLE)
1189 throw new Error('Non little-endian hardware is not supported');
1190 Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));
1191 function utf8ToBytes$1(str) {
1192 if (typeof str !== 'string')
1193 throw new Error(`utf8ToBytes expected string, got ${typeof str}`);
1194 return new Uint8Array(new TextEncoder().encode(str));
1195 }
1196 function toBytes(data) {
1197 if (typeof data === 'string')
1198 data = utf8ToBytes$1(data);
1199 if (!isBytes$1(data))
1200 throw new Error(`expected Uint8Array, got ${typeof data}`);
1201 return data;
1202 }
1203 function concatBytes$1(...arrays) {
1204 let sum = 0;
1205 for (let i = 0; i < arrays.length; i++) {
1206 const a = arrays[i];
1207 if (!isBytes$1(a))
1208 throw new Error('Uint8Array expected');
1209 sum += a.length;
1210 }
1211 const res = new Uint8Array(sum);
1212 for (let i = 0, pad = 0; i < arrays.length; i++) {
1213 const a = arrays[i];
1214 res.set(a, pad);
1215 pad += a.length;
1216 }
1217 return res;
1218 }
1219 class Hash {
1220 clone() {
1221 return this._cloneInto();
1222 }
1223 }
1224 const toStr = {}.toString;
1225 function checkOpts(defaults, opts) {
1226 if (opts !== undefined && toStr.call(opts) !== '[object Object]')
1227 throw new Error('Options should be object or undefined');
1228 const merged = Object.assign(defaults, opts);
1229 return merged;
1230 }
1231 function wrapConstructor(hashCons) {
1232 const hashC = (msg) => hashCons().update(toBytes(msg)).digest();
1233 const tmp = hashCons();
1234 hashC.outputLen = tmp.outputLen;
1235 hashC.blockLen = tmp.blockLen;
1236 hashC.create = () => hashCons();
1237 return hashC;
1238 }
1239 function wrapConstructorWithOpts(hashCons) {
1240 const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();
1241 const tmp = hashCons({});
1242 hashC.outputLen = tmp.outputLen;
1243 hashC.blockLen = tmp.blockLen;
1244 hashC.create = (opts) => hashCons(opts);
1245 return hashC;
1246 }
1247 function wrapXOFConstructorWithOpts(hashCons) {
1248 const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();
1249 const tmp = hashCons({});
1250 hashC.outputLen = tmp.outputLen;
1251 hashC.blockLen = tmp.blockLen;
1252 hashC.create = (opts) => hashCons(opts);
1253 return hashC;
1254 }
1255 function randomBytes(bytesLength = 32) {
1256 if (crypto && typeof crypto.getRandomValues === 'function') {
1257 return crypto.getRandomValues(new Uint8Array(bytesLength));
1258 }
1259 throw new Error('crypto.getRandomValues must be defined');
1260 }
1261
1262 const SIGMA = new Uint8Array([
1263 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
1264 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,
1265 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4,
1266 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8,
1267 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13,
1268 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9,
1269 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11,
1270 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10,
1271 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5,
1272 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0,
1273 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
1274 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,
1275 ]);
1276 class BLAKE2 extends Hash {
1277 constructor(blockLen, outputLen, opts = {}, keyLen, saltLen, persLen) {
1278 super();
1279 this.blockLen = blockLen;
1280 this.outputLen = outputLen;
1281 this.length = 0;
1282 this.pos = 0;
1283 this.finished = false;
1284 this.destroyed = false;
1285 number(blockLen);
1286 number(outputLen);
1287 number(keyLen);
1288 if (outputLen < 0 || outputLen > keyLen)
1289 throw new Error('outputLen bigger than keyLen');
1290 if (opts.key !== undefined && (opts.key.length < 1 || opts.key.length > keyLen))
1291 throw new Error(`key must be up 1..${keyLen} byte long or undefined`);
1292 if (opts.salt !== undefined && opts.salt.length !== saltLen)
1293 throw new Error(`salt must be ${saltLen} byte long or undefined`);
1294 if (opts.personalization !== undefined && opts.personalization.length !== persLen)
1295 throw new Error(`personalization must be ${persLen} byte long or undefined`);
1296 this.buffer32 = u32((this.buffer = new Uint8Array(blockLen)));
1297 }
1298 update(data) {
1299 exists(this);
1300 const { blockLen, buffer, buffer32 } = this;
1301 data = toBytes(data);
1302 const len = data.length;
1303 const offset = data.byteOffset;
1304 const buf = data.buffer;
1305 for (let pos = 0; pos < len;) {
1306 if (this.pos === blockLen) {
1307 this.compress(buffer32, 0, false);
1308 this.pos = 0;
1309 }
1310 const take = Math.min(blockLen - this.pos, len - pos);
1311 const dataOffset = offset + pos;
1312 if (take === blockLen && !(dataOffset % 4) && pos + take < len) {
1313 const data32 = new Uint32Array(buf, dataOffset, Math.floor((len - pos) / 4));
1314 for (let pos32 = 0; pos + blockLen < len; pos32 += buffer32.length, pos += blockLen) {
1315 this.length += blockLen;
1316 this.compress(data32, pos32, false);
1317 }
1318 continue;
1319 }
1320 buffer.set(data.subarray(pos, pos + take), this.pos);
1321 this.pos += take;
1322 this.length += take;
1323 pos += take;
1324 }
1325 return this;
1326 }
1327 digestInto(out) {
1328 exists(this);
1329 output(out, this);
1330 const { pos, buffer32 } = this;
1331 this.finished = true;
1332 this.buffer.subarray(pos).fill(0);
1333 this.compress(buffer32, 0, true);
1334 const out32 = u32(out);
1335 this.get().forEach((v, i) => (out32[i] = v));
1336 }
1337 digest() {
1338 const { buffer, outputLen } = this;
1339 this.digestInto(buffer);
1340 const res = buffer.slice(0, outputLen);
1341 this.destroy();
1342 return res;
1343 }
1344 _cloneInto(to) {
1345 const { buffer, length, finished, destroyed, outputLen, pos } = this;
1346 to || (to = new this.constructor({ dkLen: outputLen }));
1347 to.set(...this.get());
1348 to.length = length;
1349 to.finished = finished;
1350 to.destroyed = destroyed;
1351 to.outputLen = outputLen;
1352 to.buffer.set(buffer);
1353 to.pos = pos;
1354 return to;
1355 }
1356 }
1357
1358 const U32_MASK64 = BigInt(2 ** 32 - 1);
1359 const _32n$1 = BigInt(32);
1360 function fromBig(n, le = false) {
1361 if (le)
1362 return { h: Number(n & U32_MASK64), l: Number((n >> _32n$1) & U32_MASK64) };
1363 return { h: Number((n >> _32n$1) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };
1364 }
1365 function split(lst, le = false) {
1366 let Ah = new Uint32Array(lst.length);
1367 let Al = new Uint32Array(lst.length);
1368 for (let i = 0; i < lst.length; i++) {
1369 const { h, l } = fromBig(lst[i], le);
1370 [Ah[i], Al[i]] = [h, l];
1371 }
1372 return [Ah, Al];
1373 }
1374 const toBig = (h, l) => (BigInt(h >>> 0) << _32n$1) | BigInt(l >>> 0);
1375 const shrSH = (h, _l, s) => h >>> s;
1376 const shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);
1377 const rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));
1378 const rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);
1379 const rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));
1380 const rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));
1381 const rotr32H = (_h, l) => l;
1382 const rotr32L = (h, _l) => h;
1383 const rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));
1384 const rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));
1385 const rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));
1386 const rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));
1387 function add(Ah, Al, Bh, Bl) {
1388 const l = (Al >>> 0) + (Bl >>> 0);
1389 return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };
1390 }
1391 const add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);
1392 const add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;
1393 const add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);
1394 const add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;
1395 const add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);
1396 const add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;
1397 const u64 = {
1398 fromBig, split, toBig,
1399 shrSH, shrSL,
1400 rotrSH, rotrSL, rotrBH, rotrBL,
1401 rotr32H, rotr32L,
1402 rotlSH, rotlSL, rotlBH, rotlBL,
1403 add, add3L, add3H, add4L, add4H, add5H, add5L,
1404 };
1405 const u64$1 = u64;
1406
1407 const IV$1 = new Uint32Array([
1408 0xf3bcc908, 0x6a09e667, 0x84caa73b, 0xbb67ae85, 0xfe94f82b, 0x3c6ef372, 0x5f1d36f1, 0xa54ff53a,
1409 0xade682d1, 0x510e527f, 0x2b3e6c1f, 0x9b05688c, 0xfb41bd6b, 0x1f83d9ab, 0x137e2179, 0x5be0cd19
1410 ]);
1411 const BUF = new Uint32Array(32);
1412 function G1(a, b, c, d, msg, x) {
1413 const Xl = msg[x], Xh = msg[x + 1];
1414 let Al = BUF[2 * a], Ah = BUF[2 * a + 1];
1415 let Bl = BUF[2 * b], Bh = BUF[2 * b + 1];
1416 let Cl = BUF[2 * c], Ch = BUF[2 * c + 1];
1417 let Dl = BUF[2 * d], Dh = BUF[2 * d + 1];
1418 let ll = u64$1.add3L(Al, Bl, Xl);
1419 Ah = u64$1.add3H(ll, Ah, Bh, Xh);
1420 Al = ll | 0;
1421 ({ Dh, Dl } = { Dh: Dh ^ Ah, Dl: Dl ^ Al });
1422 ({ Dh, Dl } = { Dh: u64$1.rotr32H(Dh, Dl), Dl: u64$1.rotr32L(Dh, Dl) });
1423 ({ h: Ch, l: Cl } = u64$1.add(Ch, Cl, Dh, Dl));
1424 ({ Bh, Bl } = { Bh: Bh ^ Ch, Bl: Bl ^ Cl });
1425 ({ Bh, Bl } = { Bh: u64$1.rotrSH(Bh, Bl, 24), Bl: u64$1.rotrSL(Bh, Bl, 24) });
1426 (BUF[2 * a] = Al), (BUF[2 * a + 1] = Ah);
1427 (BUF[2 * b] = Bl), (BUF[2 * b + 1] = Bh);
1428 (BUF[2 * c] = Cl), (BUF[2 * c + 1] = Ch);
1429 (BUF[2 * d] = Dl), (BUF[2 * d + 1] = Dh);
1430 }
1431 function G2(a, b, c, d, msg, x) {
1432 const Xl = msg[x], Xh = msg[x + 1];
1433 let Al = BUF[2 * a], Ah = BUF[2 * a + 1];
1434 let Bl = BUF[2 * b], Bh = BUF[2 * b + 1];
1435 let Cl = BUF[2 * c], Ch = BUF[2 * c + 1];
1436 let Dl = BUF[2 * d], Dh = BUF[2 * d + 1];
1437 let ll = u64$1.add3L(Al, Bl, Xl);
1438 Ah = u64$1.add3H(ll, Ah, Bh, Xh);
1439 Al = ll | 0;
1440 ({ Dh, Dl } = { Dh: Dh ^ Ah, Dl: Dl ^ Al });
1441 ({ Dh, Dl } = { Dh: u64$1.rotrSH(Dh, Dl, 16), Dl: u64$1.rotrSL(Dh, Dl, 16) });
1442 ({ h: Ch, l: Cl } = u64$1.add(Ch, Cl, Dh, Dl));
1443 ({ Bh, Bl } = { Bh: Bh ^ Ch, Bl: Bl ^ Cl });
1444 ({ Bh, Bl } = { Bh: u64$1.rotrBH(Bh, Bl, 63), Bl: u64$1.rotrBL(Bh, Bl, 63) });
1445 (BUF[2 * a] = Al), (BUF[2 * a + 1] = Ah);
1446 (BUF[2 * b] = Bl), (BUF[2 * b + 1] = Bh);
1447 (BUF[2 * c] = Cl), (BUF[2 * c + 1] = Ch);
1448 (BUF[2 * d] = Dl), (BUF[2 * d + 1] = Dh);
1449 }
1450 class BLAKE2b extends BLAKE2 {
1451 constructor(opts = {}) {
1452 super(128, opts.dkLen === undefined ? 64 : opts.dkLen, opts, 64, 16, 16);
1453 this.v0l = IV$1[0] | 0;
1454 this.v0h = IV$1[1] | 0;
1455 this.v1l = IV$1[2] | 0;
1456 this.v1h = IV$1[3] | 0;
1457 this.v2l = IV$1[4] | 0;
1458 this.v2h = IV$1[5] | 0;
1459 this.v3l = IV$1[6] | 0;
1460 this.v3h = IV$1[7] | 0;
1461 this.v4l = IV$1[8] | 0;
1462 this.v4h = IV$1[9] | 0;
1463 this.v5l = IV$1[10] | 0;
1464 this.v5h = IV$1[11] | 0;
1465 this.v6l = IV$1[12] | 0;
1466 this.v6h = IV$1[13] | 0;
1467 this.v7l = IV$1[14] | 0;
1468 this.v7h = IV$1[15] | 0;
1469 const keyLength = opts.key ? opts.key.length : 0;
1470 this.v0l ^= this.outputLen | (keyLength << 8) | (0x01 << 16) | (0x01 << 24);
1471 if (opts.salt) {
1472 const salt = u32(toBytes(opts.salt));
1473 this.v4l ^= salt[0];
1474 this.v4h ^= salt[1];
1475 this.v5l ^= salt[2];
1476 this.v5h ^= salt[3];
1477 }
1478 if (opts.personalization) {
1479 const pers = u32(toBytes(opts.personalization));
1480 this.v6l ^= pers[0];
1481 this.v6h ^= pers[1];
1482 this.v7l ^= pers[2];
1483 this.v7h ^= pers[3];
1484 }
1485 if (opts.key) {
1486 const tmp = new Uint8Array(this.blockLen);
1487 tmp.set(toBytes(opts.key));
1488 this.update(tmp);
1489 }
1490 }
1491 get() {
1492 let { v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h } = this;
1493 return [v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h];
1494 }
1495 set(v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h) {
1496 this.v0l = v0l | 0;
1497 this.v0h = v0h | 0;
1498 this.v1l = v1l | 0;
1499 this.v1h = v1h | 0;
1500 this.v2l = v2l | 0;
1501 this.v2h = v2h | 0;
1502 this.v3l = v3l | 0;
1503 this.v3h = v3h | 0;
1504 this.v4l = v4l | 0;
1505 this.v4h = v4h | 0;
1506 this.v5l = v5l | 0;
1507 this.v5h = v5h | 0;
1508 this.v6l = v6l | 0;
1509 this.v6h = v6h | 0;
1510 this.v7l = v7l | 0;
1511 this.v7h = v7h | 0;
1512 }
1513 compress(msg, offset, isLast) {
1514 this.get().forEach((v, i) => (BUF[i] = v));
1515 BUF.set(IV$1, 16);
1516 let { h, l } = u64$1.fromBig(BigInt(this.length));
1517 BUF[24] = IV$1[8] ^ l;
1518 BUF[25] = IV$1[9] ^ h;
1519 if (isLast) {
1520 BUF[28] = ~BUF[28];
1521 BUF[29] = ~BUF[29];
1522 }
1523 let j = 0;
1524 const s = SIGMA;
1525 for (let i = 0; i < 12; i++) {
1526 G1(0, 4, 8, 12, msg, offset + 2 * s[j++]);
1527 G2(0, 4, 8, 12, msg, offset + 2 * s[j++]);
1528 G1(1, 5, 9, 13, msg, offset + 2 * s[j++]);
1529 G2(1, 5, 9, 13, msg, offset + 2 * s[j++]);
1530 G1(2, 6, 10, 14, msg, offset + 2 * s[j++]);
1531 G2(2, 6, 10, 14, msg, offset + 2 * s[j++]);
1532 G1(3, 7, 11, 15, msg, offset + 2 * s[j++]);
1533 G2(3, 7, 11, 15, msg, offset + 2 * s[j++]);
1534 G1(0, 5, 10, 15, msg, offset + 2 * s[j++]);
1535 G2(0, 5, 10, 15, msg, offset + 2 * s[j++]);
1536 G1(1, 6, 11, 12, msg, offset + 2 * s[j++]);
1537 G2(1, 6, 11, 12, msg, offset + 2 * s[j++]);
1538 G1(2, 7, 8, 13, msg, offset + 2 * s[j++]);
1539 G2(2, 7, 8, 13, msg, offset + 2 * s[j++]);
1540 G1(3, 4, 9, 14, msg, offset + 2 * s[j++]);
1541 G2(3, 4, 9, 14, msg, offset + 2 * s[j++]);
1542 }
1543 this.v0l ^= BUF[0] ^ BUF[16];
1544 this.v0h ^= BUF[1] ^ BUF[17];
1545 this.v1l ^= BUF[2] ^ BUF[18];
1546 this.v1h ^= BUF[3] ^ BUF[19];
1547 this.v2l ^= BUF[4] ^ BUF[20];
1548 this.v2h ^= BUF[5] ^ BUF[21];
1549 this.v3l ^= BUF[6] ^ BUF[22];
1550 this.v3h ^= BUF[7] ^ BUF[23];
1551 this.v4l ^= BUF[8] ^ BUF[24];
1552 this.v4h ^= BUF[9] ^ BUF[25];
1553 this.v5l ^= BUF[10] ^ BUF[26];
1554 this.v5h ^= BUF[11] ^ BUF[27];
1555 this.v6l ^= BUF[12] ^ BUF[28];
1556 this.v6h ^= BUF[13] ^ BUF[29];
1557 this.v7l ^= BUF[14] ^ BUF[30];
1558 this.v7h ^= BUF[15] ^ BUF[31];
1559 BUF.fill(0);
1560 }
1561 destroy() {
1562 this.destroyed = true;
1563 this.buffer32.fill(0);
1564 this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
1565 }
1566 }
1567 const blake2b = wrapConstructorWithOpts((opts) => new BLAKE2b(opts));
1568
1569 function createAsHex(fn) {
1570 return (...args) => util.u8aToHex(fn(...args));
1571 }
1572 function createBitHasher(bitLength, fn) {
1573 return (data, onlyJs) => fn(data, bitLength, onlyJs);
1574 }
1575 function createDualHasher(wa, js) {
1576 return (value, bitLength = 256, onlyJs) => {
1577 const u8a = util.u8aToU8a(value);
1578 return !util.hasBigInt || (!onlyJs && isReady())
1579 ? wa[bitLength](u8a)
1580 : js[bitLength](u8a);
1581 };
1582 }
1583
1584 function blake2AsU8a(data, bitLength = 256, key, onlyJs) {
1585 const byteLength = Math.ceil(bitLength / 8);
1586 const u8a = util.u8aToU8a(data);
1587 return !util.hasBigInt || (!onlyJs && isReady())
1588 ? blake2b$1(u8a, util.u8aToU8a(key), byteLength)
1589 : key
1590 ? blake2b(u8a, { dkLen: byteLength, key })
1591 : blake2b(u8a, { dkLen: byteLength });
1592 }
1593 const blake2AsHex = createAsHex(blake2AsU8a);
1594
1595 const SS58_PREFIX = util.stringToU8a('SS58PRE');
1596 function sshash(key) {
1597 return blake2AsU8a(util.u8aConcat(SS58_PREFIX, key), 512);
1598 }
1599
1600 function checkAddressChecksum(decoded) {
1601 const ss58Length = (decoded[0] & 64) ? 2 : 1;
1602 const ss58Decoded = ss58Length === 1
1603 ? decoded[0]
1604 : ((decoded[0] & 63) << 2) | (decoded[1] >> 6) | ((decoded[1] & 63) << 8);
1605 const isPublicKey = [34 + ss58Length, 35 + ss58Length].includes(decoded.length);
1606 const length = decoded.length - (isPublicKey ? 2 : 1);
1607 const hash = sshash(decoded.subarray(0, length));
1608 const isValid = (decoded[0] & 128) === 0 && ![46, 47].includes(decoded[0]) && (isPublicKey
1609 ? decoded[decoded.length - 2] === hash[0] && decoded[decoded.length - 1] === hash[1]
1610 : decoded[decoded.length - 1] === hash[0]);
1611 return [isValid, length, ss58Length, ss58Decoded];
1612 }
1613
1614 const knownSubstrate = [
1615 {
1616 "prefix": 0,
1617 "network": "polkadot",
1618 "displayName": "Polkadot Relay Chain",
1619 "symbols": [
1620 "DOT"
1621 ],
1622 "decimals": [
1623 10
1624 ],
1625 "standardAccount": "*25519",
1626 "website": "https://polkadot.network"
1627 },
1628 {
1629 "prefix": 1,
1630 "network": "BareSr25519",
1631 "displayName": "Bare 32-bit Schnorr/Ristretto (S/R 25519) public key.",
1632 "symbols": [],
1633 "decimals": [],
1634 "standardAccount": "Sr25519",
1635 "website": null
1636 },
1637 {
1638 "prefix": 2,
1639 "network": "kusama",
1640 "displayName": "Kusama Relay Chain",
1641 "symbols": [
1642 "KSM"
1643 ],
1644 "decimals": [
1645 12
1646 ],
1647 "standardAccount": "*25519",
1648 "website": "https://kusama.network"
1649 },
1650 {
1651 "prefix": 3,
1652 "network": "BareEd25519",
1653 "displayName": "Bare 32-bit Ed25519 public key.",
1654 "symbols": [],
1655 "decimals": [],
1656 "standardAccount": "Ed25519",
1657 "website": null
1658 },
1659 {
1660 "prefix": 4,
1661 "network": "katalchain",
1662 "displayName": "Katal Chain",
1663 "symbols": [],
1664 "decimals": [],
1665 "standardAccount": "*25519",
1666 "website": null
1667 },
1668 {
1669 "prefix": 5,
1670 "network": "astar",
1671 "displayName": "Astar Network",
1672 "symbols": [
1673 "ASTR"
1674 ],
1675 "decimals": [
1676 18
1677 ],
1678 "standardAccount": "*25519",
1679 "website": "https://astar.network"
1680 },
1681 {
1682 "prefix": 6,
1683 "network": "bifrost",
1684 "displayName": "Bifrost",
1685 "symbols": [
1686 "BNC"
1687 ],
1688 "decimals": [
1689 12
1690 ],
1691 "standardAccount": "*25519",
1692 "website": "https://bifrost.finance/"
1693 },
1694 {
1695 "prefix": 7,
1696 "network": "edgeware",
1697 "displayName": "Edgeware",
1698 "symbols": [
1699 "EDG"
1700 ],
1701 "decimals": [
1702 18
1703 ],
1704 "standardAccount": "*25519",
1705 "website": "https://edgewa.re"
1706 },
1707 {
1708 "prefix": 8,
1709 "network": "karura",
1710 "displayName": "Karura",
1711 "symbols": [
1712 "KAR"
1713 ],
1714 "decimals": [
1715 12
1716 ],
1717 "standardAccount": "*25519",
1718 "website": "https://karura.network/"
1719 },
1720 {
1721 "prefix": 9,
1722 "network": "reynolds",
1723 "displayName": "Laminar Reynolds Canary",
1724 "symbols": [
1725 "REY"
1726 ],
1727 "decimals": [
1728 18
1729 ],
1730 "standardAccount": "*25519",
1731 "website": "http://laminar.network/"
1732 },
1733 {
1734 "prefix": 10,
1735 "network": "acala",
1736 "displayName": "Acala",
1737 "symbols": [
1738 "ACA"
1739 ],
1740 "decimals": [
1741 12
1742 ],
1743 "standardAccount": "*25519",
1744 "website": "https://acala.network/"
1745 },
1746 {
1747 "prefix": 11,
1748 "network": "laminar",
1749 "displayName": "Laminar",
1750 "symbols": [
1751 "LAMI"
1752 ],
1753 "decimals": [
1754 18
1755 ],
1756 "standardAccount": "*25519",
1757 "website": "http://laminar.network/"
1758 },
1759 {
1760 "prefix": 12,
1761 "network": "polymesh",
1762 "displayName": "Polymesh",
1763 "symbols": [
1764 "POLYX"
1765 ],
1766 "decimals": [
1767 6
1768 ],
1769 "standardAccount": "*25519",
1770 "website": "https://polymath.network/"
1771 },
1772 {
1773 "prefix": 13,
1774 "network": "integritee",
1775 "displayName": "Integritee",
1776 "symbols": [
1777 "TEER"
1778 ],
1779 "decimals": [
1780 12
1781 ],
1782 "standardAccount": "*25519",
1783 "website": "https://integritee.network"
1784 },
1785 {
1786 "prefix": 14,
1787 "network": "totem",
1788 "displayName": "Totem",
1789 "symbols": [
1790 "TOTEM"
1791 ],
1792 "decimals": [
1793 0
1794 ],
1795 "standardAccount": "*25519",
1796 "website": "https://totemaccounting.com"
1797 },
1798 {
1799 "prefix": 15,
1800 "network": "synesthesia",
1801 "displayName": "Synesthesia",
1802 "symbols": [
1803 "SYN"
1804 ],
1805 "decimals": [
1806 12
1807 ],
1808 "standardAccount": "*25519",
1809 "website": "https://synesthesia.network/"
1810 },
1811 {
1812 "prefix": 16,
1813 "network": "kulupu",
1814 "displayName": "Kulupu",
1815 "symbols": [
1816 "KLP"
1817 ],
1818 "decimals": [
1819 12
1820 ],
1821 "standardAccount": "*25519",
1822 "website": "https://kulupu.network/"
1823 },
1824 {
1825 "prefix": 17,
1826 "network": "dark",
1827 "displayName": "Dark Mainnet",
1828 "symbols": [],
1829 "decimals": [],
1830 "standardAccount": "*25519",
1831 "website": null
1832 },
1833 {
1834 "prefix": 18,
1835 "network": "darwinia",
1836 "displayName": "Darwinia Network",
1837 "symbols": [
1838 "RING"
1839 ],
1840 "decimals": [
1841 18
1842 ],
1843 "standardAccount": "secp256k1",
1844 "website": "https://darwinia.network"
1845 },
1846 {
1847 "prefix": 19,
1848 "network": "watr",
1849 "displayName": "Watr Protocol",
1850 "symbols": [
1851 "WATR"
1852 ],
1853 "decimals": [
1854 18
1855 ],
1856 "standardAccount": "*25519",
1857 "website": "https://www.watr.org"
1858 },
1859 {
1860 "prefix": 20,
1861 "network": "stafi",
1862 "displayName": "Stafi",
1863 "symbols": [
1864 "FIS"
1865 ],
1866 "decimals": [
1867 12
1868 ],
1869 "standardAccount": "*25519",
1870 "website": "https://stafi.io"
1871 },
1872 {
1873 "prefix": 21,
1874 "network": "karmachain",
1875 "displayName": "Karmacoin",
1876 "symbols": [
1877 "KCOIN"
1878 ],
1879 "decimals": [
1880 6
1881 ],
1882 "standardAccount": "*25519",
1883 "website": "https://karmaco.in"
1884 },
1885 {
1886 "prefix": 22,
1887 "network": "dock-pos-mainnet",
1888 "displayName": "Dock Mainnet",
1889 "symbols": [
1890 "DCK"
1891 ],
1892 "decimals": [
1893 6
1894 ],
1895 "standardAccount": "*25519",
1896 "website": "https://dock.io"
1897 },
1898 {
1899 "prefix": 23,
1900 "network": "shift",
1901 "displayName": "ShiftNrg",
1902 "symbols": [],
1903 "decimals": [],
1904 "standardAccount": "*25519",
1905 "website": null
1906 },
1907 {
1908 "prefix": 24,
1909 "network": "zero",
1910 "displayName": "ZERO",
1911 "symbols": [
1912 "ZERO"
1913 ],
1914 "decimals": [
1915 18
1916 ],
1917 "standardAccount": "*25519",
1918 "website": "https://zero.io"
1919 },
1920 {
1921 "prefix": 25,
1922 "network": "zero-alphaville",
1923 "displayName": "ZERO Alphaville",
1924 "symbols": [
1925 "ZERO"
1926 ],
1927 "decimals": [
1928 18
1929 ],
1930 "standardAccount": "*25519",
1931 "website": "https://zero.io"
1932 },
1933 {
1934 "prefix": 26,
1935 "network": "jupiter",
1936 "displayName": "Jupiter",
1937 "symbols": [
1938 "jDOT"
1939 ],
1940 "decimals": [
1941 10
1942 ],
1943 "standardAccount": "*25519",
1944 "website": "https://jupiter.patract.io"
1945 },
1946 {
1947 "prefix": 27,
1948 "network": "kabocha",
1949 "displayName": "Kabocha",
1950 "symbols": [
1951 "KAB"
1952 ],
1953 "decimals": [
1954 12
1955 ],
1956 "standardAccount": "*25519",
1957 "website": "https://kabocha.network"
1958 },
1959 {
1960 "prefix": 28,
1961 "network": "subsocial",
1962 "displayName": "Subsocial",
1963 "symbols": [],
1964 "decimals": [],
1965 "standardAccount": "*25519",
1966 "website": null
1967 },
1968 {
1969 "prefix": 29,
1970 "network": "cord",
1971 "displayName": "CORD Network",
1972 "symbols": [
1973 "DHI",
1974 "WAY"
1975 ],
1976 "decimals": [
1977 12,
1978 12
1979 ],
1980 "standardAccount": "*25519",
1981 "website": "https://cord.network/"
1982 },
1983 {
1984 "prefix": 30,
1985 "network": "phala",
1986 "displayName": "Phala Network",
1987 "symbols": [
1988 "PHA"
1989 ],
1990 "decimals": [
1991 12
1992 ],
1993 "standardAccount": "*25519",
1994 "website": "https://phala.network"
1995 },
1996 {
1997 "prefix": 31,
1998 "network": "litentry",
1999 "displayName": "Litentry Network",
2000 "symbols": [
2001 "LIT"
2002 ],
2003 "decimals": [
2004 12
2005 ],
2006 "standardAccount": "*25519",
2007 "website": "https://litentry.com/"
2008 },
2009 {
2010 "prefix": 32,
2011 "network": "robonomics",
2012 "displayName": "Robonomics",
2013 "symbols": [
2014 "XRT"
2015 ],
2016 "decimals": [
2017 9
2018 ],
2019 "standardAccount": "*25519",
2020 "website": "https://robonomics.network"
2021 },
2022 {
2023 "prefix": 33,
2024 "network": "datahighway",
2025 "displayName": "DataHighway",
2026 "symbols": [],
2027 "decimals": [],
2028 "standardAccount": "*25519",
2029 "website": null
2030 },
2031 {
2032 "prefix": 34,
2033 "network": "ares",
2034 "displayName": "Ares Protocol",
2035 "symbols": [
2036 "ARES"
2037 ],
2038 "decimals": [
2039 12
2040 ],
2041 "standardAccount": "*25519",
2042 "website": "https://www.aresprotocol.com/"
2043 },
2044 {
2045 "prefix": 35,
2046 "network": "vln",
2047 "displayName": "Valiu Liquidity Network",
2048 "symbols": [
2049 "USDv"
2050 ],
2051 "decimals": [
2052 15
2053 ],
2054 "standardAccount": "*25519",
2055 "website": "https://valiu.com/"
2056 },
2057 {
2058 "prefix": 36,
2059 "network": "centrifuge",
2060 "displayName": "Centrifuge Chain",
2061 "symbols": [
2062 "CFG"
2063 ],
2064 "decimals": [
2065 18
2066 ],
2067 "standardAccount": "*25519",
2068 "website": "https://centrifuge.io/"
2069 },
2070 {
2071 "prefix": 37,
2072 "network": "nodle",
2073 "displayName": "Nodle Chain",
2074 "symbols": [
2075 "NODL"
2076 ],
2077 "decimals": [
2078 11
2079 ],
2080 "standardAccount": "*25519",
2081 "website": "https://nodle.io/"
2082 },
2083 {
2084 "prefix": 38,
2085 "network": "kilt",
2086 "displayName": "KILT Spiritnet",
2087 "symbols": [
2088 "KILT"
2089 ],
2090 "decimals": [
2091 15
2092 ],
2093 "standardAccount": "*25519",
2094 "website": "https://kilt.io/"
2095 },
2096 {
2097 "prefix": 39,
2098 "network": "mathchain",
2099 "displayName": "MathChain mainnet",
2100 "symbols": [
2101 "MATH"
2102 ],
2103 "decimals": [
2104 18
2105 ],
2106 "standardAccount": "*25519",
2107 "website": "https://mathwallet.org"
2108 },
2109 {
2110 "prefix": 40,
2111 "network": "mathchain-testnet",
2112 "displayName": "MathChain testnet",
2113 "symbols": [
2114 "MATH"
2115 ],
2116 "decimals": [
2117 18
2118 ],
2119 "standardAccount": "*25519",
2120 "website": "https://mathwallet.org"
2121 },
2122 {
2123 "prefix": 41,
2124 "network": "polimec",
2125 "displayName": "Polimec Protocol",
2126 "symbols": [
2127 "PLMC"
2128 ],
2129 "decimals": [
2130 10
2131 ],
2132 "standardAccount": "*25519",
2133 "website": "https://www.polimec.org/"
2134 },
2135 {
2136 "prefix": 42,
2137 "network": "substrate",
2138 "displayName": "Substrate",
2139 "symbols": [],
2140 "decimals": [],
2141 "standardAccount": "*25519",
2142 "website": "https://substrate.io/"
2143 },
2144 {
2145 "prefix": 43,
2146 "network": "BareSecp256k1",
2147 "displayName": "Bare 32-bit ECDSA SECP-256k1 public key.",
2148 "symbols": [],
2149 "decimals": [],
2150 "standardAccount": "secp256k1",
2151 "website": null
2152 },
2153 {
2154 "prefix": 44,
2155 "network": "chainx",
2156 "displayName": "ChainX",
2157 "symbols": [
2158 "PCX"
2159 ],
2160 "decimals": [
2161 8
2162 ],
2163 "standardAccount": "*25519",
2164 "website": "https://chainx.org/"
2165 },
2166 {
2167 "prefix": 45,
2168 "network": "uniarts",
2169 "displayName": "UniArts Network",
2170 "symbols": [
2171 "UART",
2172 "UINK"
2173 ],
2174 "decimals": [
2175 12,
2176 12
2177 ],
2178 "standardAccount": "*25519",
2179 "website": "https://uniarts.me"
2180 },
2181 {
2182 "prefix": 46,
2183 "network": "reserved46",
2184 "displayName": "This prefix is reserved.",
2185 "symbols": [],
2186 "decimals": [],
2187 "standardAccount": null,
2188 "website": null
2189 },
2190 {
2191 "prefix": 47,
2192 "network": "reserved47",
2193 "displayName": "This prefix is reserved.",
2194 "symbols": [],
2195 "decimals": [],
2196 "standardAccount": null,
2197 "website": null
2198 },
2199 {
2200 "prefix": 48,
2201 "network": "neatcoin",
2202 "displayName": "Neatcoin Mainnet",
2203 "symbols": [
2204 "NEAT"
2205 ],
2206 "decimals": [
2207 12
2208 ],
2209 "standardAccount": "*25519",
2210 "website": "https://neatcoin.org"
2211 },
2212 {
2213 "prefix": 49,
2214 "network": "picasso",
2215 "displayName": "Picasso",
2216 "symbols": [
2217 "PICA"
2218 ],
2219 "decimals": [
2220 12
2221 ],
2222 "standardAccount": "*25519",
2223 "website": "https://picasso.composable.finance"
2224 },
2225 {
2226 "prefix": 50,
2227 "network": "composable",
2228 "displayName": "Composable Finance",
2229 "symbols": [
2230 "LAYR"
2231 ],
2232 "decimals": [
2233 12
2234 ],
2235 "standardAccount": "*25519",
2236 "website": "https://composable.finance"
2237 },
2238 {
2239 "prefix": 51,
2240 "network": "oak",
2241 "displayName": "OAK Network",
2242 "symbols": [
2243 "OAK",
2244 "TUR"
2245 ],
2246 "decimals": [
2247 10,
2248 10
2249 ],
2250 "standardAccount": "*25519",
2251 "website": "https://oak.tech"
2252 },
2253 {
2254 "prefix": 52,
2255 "network": "KICO",
2256 "displayName": "KICO",
2257 "symbols": [
2258 "KICO"
2259 ],
2260 "decimals": [
2261 14
2262 ],
2263 "standardAccount": "*25519",
2264 "website": "https://dico.io"
2265 },
2266 {
2267 "prefix": 53,
2268 "network": "DICO",
2269 "displayName": "DICO",
2270 "symbols": [
2271 "DICO"
2272 ],
2273 "decimals": [
2274 14
2275 ],
2276 "standardAccount": "*25519",
2277 "website": "https://dico.io"
2278 },
2279 {
2280 "prefix": 54,
2281 "network": "cere",
2282 "displayName": "Cere Network",
2283 "symbols": [
2284 "CERE"
2285 ],
2286 "decimals": [
2287 10
2288 ],
2289 "standardAccount": "*25519",
2290 "website": "https://cere.network"
2291 },
2292 {
2293 "prefix": 55,
2294 "network": "xxnetwork",
2295 "displayName": "xx network",
2296 "symbols": [
2297 "XX"
2298 ],
2299 "decimals": [
2300 9
2301 ],
2302 "standardAccount": "*25519",
2303 "website": "https://xx.network"
2304 },
2305 {
2306 "prefix": 56,
2307 "network": "pendulum",
2308 "displayName": "Pendulum chain",
2309 "symbols": [
2310 "PEN"
2311 ],
2312 "decimals": [
2313 12
2314 ],
2315 "standardAccount": "*25519",
2316 "website": "https://pendulumchain.org/"
2317 },
2318 {
2319 "prefix": 57,
2320 "network": "amplitude",
2321 "displayName": "Amplitude chain",
2322 "symbols": [
2323 "AMPE"
2324 ],
2325 "decimals": [
2326 12
2327 ],
2328 "standardAccount": "*25519",
2329 "website": "https://pendulumchain.org/"
2330 },
2331 {
2332 "prefix": 63,
2333 "network": "hydradx",
2334 "displayName": "HydraDX",
2335 "symbols": [
2336 "HDX"
2337 ],
2338 "decimals": [
2339 12
2340 ],
2341 "standardAccount": "*25519",
2342 "website": "https://hydradx.io"
2343 },
2344 {
2345 "prefix": 64,
2346 "network": "ewx",
2347 "displayName": "Energy Web X",
2348 "symbols": [
2349 "EWT"
2350 ],
2351 "decimals": [
2352 18
2353 ],
2354 "standardAccount": "*25519",
2355 "website": "https://www.energyweb.org"
2356 },
2357 {
2358 "prefix": 65,
2359 "network": "aventus",
2360 "displayName": "Aventus Mainnet",
2361 "symbols": [
2362 "AVT"
2363 ],
2364 "decimals": [
2365 18
2366 ],
2367 "standardAccount": "*25519",
2368 "website": "https://aventus.io"
2369 },
2370 {
2371 "prefix": 66,
2372 "network": "crust",
2373 "displayName": "Crust Network",
2374 "symbols": [
2375 "CRU"
2376 ],
2377 "decimals": [
2378 12
2379 ],
2380 "standardAccount": "*25519",
2381 "website": "https://crust.network"
2382 },
2383 {
2384 "prefix": 67,
2385 "network": "genshiro",
2386 "displayName": "Genshiro Network",
2387 "symbols": [
2388 "GENS",
2389 "EQD",
2390 "LPT0"
2391 ],
2392 "decimals": [
2393 9,
2394 9,
2395 9
2396 ],
2397 "standardAccount": "*25519",
2398 "website": "https://genshiro.equilibrium.io"
2399 },
2400 {
2401 "prefix": 68,
2402 "network": "equilibrium",
2403 "displayName": "Equilibrium Network",
2404 "symbols": [
2405 "EQ"
2406 ],
2407 "decimals": [
2408 9
2409 ],
2410 "standardAccount": "*25519",
2411 "website": "https://equilibrium.io"
2412 },
2413 {
2414 "prefix": 69,
2415 "network": "sora",
2416 "displayName": "SORA Network",
2417 "symbols": [
2418 "XOR"
2419 ],
2420 "decimals": [
2421 18
2422 ],
2423 "standardAccount": "*25519",
2424 "website": "https://sora.org"
2425 },
2426 {
2427 "prefix": 71,
2428 "network": "p3d",
2429 "displayName": "3DP network",
2430 "symbols": [
2431 "P3D"
2432 ],
2433 "decimals": [
2434 12
2435 ],
2436 "standardAccount": "*25519",
2437 "website": "https://3dpass.org"
2438 },
2439 {
2440 "prefix": 72,
2441 "network": "p3dt",
2442 "displayName": "3DP test network",
2443 "symbols": [
2444 "P3Dt"
2445 ],
2446 "decimals": [
2447 12
2448 ],
2449 "standardAccount": "*25519",
2450 "website": "https://3dpass.org"
2451 },
2452 {
2453 "prefix": 73,
2454 "network": "zeitgeist",
2455 "displayName": "Zeitgeist",
2456 "symbols": [
2457 "ZTG"
2458 ],
2459 "decimals": [
2460 10
2461 ],
2462 "standardAccount": "*25519",
2463 "website": "https://zeitgeist.pm"
2464 },
2465 {
2466 "prefix": 77,
2467 "network": "manta",
2468 "displayName": "Manta network",
2469 "symbols": [
2470 "MANTA"
2471 ],
2472 "decimals": [
2473 18
2474 ],
2475 "standardAccount": "*25519",
2476 "website": "https://manta.network"
2477 },
2478 {
2479 "prefix": 78,
2480 "network": "calamari",
2481 "displayName": "Calamari: Manta Canary Network",
2482 "symbols": [
2483 "KMA"
2484 ],
2485 "decimals": [
2486 12
2487 ],
2488 "standardAccount": "*25519",
2489 "website": "https://manta.network"
2490 },
2491 {
2492 "prefix": 81,
2493 "network": "sora_dot_para",
2494 "displayName": "SORA Polkadot Parachain",
2495 "symbols": [
2496 "XOR"
2497 ],
2498 "decimals": [
2499 18
2500 ],
2501 "standardAccount": "*25519",
2502 "website": "https://sora.org"
2503 },
2504 {
2505 "prefix": 88,
2506 "network": "polkadex",
2507 "displayName": "Polkadex Mainnet",
2508 "symbols": [
2509 "PDEX"
2510 ],
2511 "decimals": [
2512 12
2513 ],
2514 "standardAccount": "*25519",
2515 "website": "https://polkadex.trade"
2516 },
2517 {
2518 "prefix": 89,
2519 "network": "polkadexparachain",
2520 "displayName": "Polkadex Parachain",
2521 "symbols": [
2522 "PDEX"
2523 ],
2524 "decimals": [
2525 12
2526 ],
2527 "standardAccount": "*25519",
2528 "website": "https://polkadex.trade"
2529 },
2530 {
2531 "prefix": 90,
2532 "network": "frequency",
2533 "displayName": "Frequency",
2534 "symbols": [
2535 "FRQCY"
2536 ],
2537 "decimals": [
2538 8
2539 ],
2540 "standardAccount": "*25519",
2541 "website": "https://www.frequency.xyz"
2542 },
2543 {
2544 "prefix": 92,
2545 "network": "anmol",
2546 "displayName": "Anmol Network",
2547 "symbols": [
2548 "ANML"
2549 ],
2550 "decimals": [
2551 18
2552 ],
2553 "standardAccount": "*25519",
2554 "website": "https://anmol.network/"
2555 },
2556 {
2557 "prefix": 93,
2558 "network": "fragnova",
2559 "displayName": "Fragnova Network",
2560 "symbols": [
2561 "NOVA"
2562 ],
2563 "decimals": [
2564 12
2565 ],
2566 "standardAccount": "*25519",
2567 "website": "https://fragnova.com"
2568 },
2569 {
2570 "prefix": 98,
2571 "network": "polkasmith",
2572 "displayName": "PolkaSmith Canary Network",
2573 "symbols": [
2574 "PKS"
2575 ],
2576 "decimals": [
2577 18
2578 ],
2579 "standardAccount": "*25519",
2580 "website": "https://polkafoundry.com"
2581 },
2582 {
2583 "prefix": 99,
2584 "network": "polkafoundry",
2585 "displayName": "PolkaFoundry Network",
2586 "symbols": [
2587 "PKF"
2588 ],
2589 "decimals": [
2590 18
2591 ],
2592 "standardAccount": "*25519",
2593 "website": "https://polkafoundry.com"
2594 },
2595 {
2596 "prefix": 100,
2597 "network": "ibtida",
2598 "displayName": "Anmol Network Ibtida Canary network",
2599 "symbols": [
2600 "IANML"
2601 ],
2602 "decimals": [
2603 18
2604 ],
2605 "standardAccount": "*25519",
2606 "website": "https://anmol.network/"
2607 },
2608 {
2609 "prefix": 101,
2610 "network": "origintrail-parachain",
2611 "displayName": "OriginTrail Parachain",
2612 "symbols": [
2613 "OTP"
2614 ],
2615 "decimals": [
2616 12
2617 ],
2618 "standardAccount": "*25519",
2619 "website": "https://parachain.origintrail.io/"
2620 },
2621 {
2622 "prefix": 105,
2623 "network": "pontem-network",
2624 "displayName": "Pontem Network",
2625 "symbols": [
2626 "PONT"
2627 ],
2628 "decimals": [
2629 10
2630 ],
2631 "standardAccount": "*25519",
2632 "website": "https://pontem.network"
2633 },
2634 {
2635 "prefix": 110,
2636 "network": "heiko",
2637 "displayName": "Heiko",
2638 "symbols": [
2639 "HKO"
2640 ],
2641 "decimals": [
2642 12
2643 ],
2644 "standardAccount": "*25519",
2645 "website": "https://parallel.fi/"
2646 },
2647 {
2648 "prefix": 113,
2649 "network": "integritee-incognito",
2650 "displayName": "Integritee Incognito",
2651 "symbols": [],
2652 "decimals": [],
2653 "standardAccount": "*25519",
2654 "website": "https://integritee.network"
2655 },
2656 {
2657 "prefix": 117,
2658 "network": "tinker",
2659 "displayName": "Tinker",
2660 "symbols": [
2661 "TNKR"
2662 ],
2663 "decimals": [
2664 12
2665 ],
2666 "standardAccount": "*25519",
2667 "website": "https://invarch.network"
2668 },
2669 {
2670 "prefix": 126,
2671 "network": "joystream",
2672 "displayName": "Joystream",
2673 "symbols": [
2674 "JOY"
2675 ],
2676 "decimals": [
2677 10
2678 ],
2679 "standardAccount": "*25519",
2680 "website": "https://www.joystream.org"
2681 },
2682 {
2683 "prefix": 128,
2684 "network": "clover",
2685 "displayName": "Clover Finance",
2686 "symbols": [
2687 "CLV"
2688 ],
2689 "decimals": [
2690 18
2691 ],
2692 "standardAccount": "*25519",
2693 "website": "https://clover.finance"
2694 },
2695 {
2696 "prefix": 129,
2697 "network": "dorafactory-polkadot",
2698 "displayName": "Dorafactory Polkadot Network",
2699 "symbols": [
2700 "DORA"
2701 ],
2702 "decimals": [
2703 12
2704 ],
2705 "standardAccount": "*25519",
2706 "website": "https://dorafactory.org"
2707 },
2708 {
2709 "prefix": 131,
2710 "network": "litmus",
2711 "displayName": "Litmus Network",
2712 "symbols": [
2713 "LIT"
2714 ],
2715 "decimals": [
2716 12
2717 ],
2718 "standardAccount": "*25519",
2719 "website": "https://litentry.com/"
2720 },
2721 {
2722 "prefix": 136,
2723 "network": "altair",
2724 "displayName": "Altair",
2725 "symbols": [
2726 "AIR"
2727 ],
2728 "decimals": [
2729 18
2730 ],
2731 "standardAccount": "*25519",
2732 "website": "https://centrifuge.io/"
2733 },
2734 {
2735 "prefix": 137,
2736 "network": "vara",
2737 "displayName": "Vara Network",
2738 "symbols": [
2739 "VARA"
2740 ],
2741 "decimals": [
2742 12
2743 ],
2744 "standardAccount": "*25519",
2745 "website": "https://vara-network.io/"
2746 },
2747 {
2748 "prefix": 172,
2749 "network": "parallel",
2750 "displayName": "Parallel",
2751 "symbols": [
2752 "PARA"
2753 ],
2754 "decimals": [
2755 12
2756 ],
2757 "standardAccount": "*25519",
2758 "website": "https://parallel.fi/"
2759 },
2760 {
2761 "prefix": 252,
2762 "network": "social-network",
2763 "displayName": "Social Network",
2764 "symbols": [
2765 "NET"
2766 ],
2767 "decimals": [
2768 18
2769 ],
2770 "standardAccount": "*25519",
2771 "website": "https://social.network"
2772 },
2773 {
2774 "prefix": 255,
2775 "network": "quartz_mainnet",
2776 "displayName": "QUARTZ by UNIQUE",
2777 "symbols": [
2778 "QTZ"
2779 ],
2780 "decimals": [
2781 18
2782 ],
2783 "standardAccount": "*25519",
2784 "website": "https://unique.network"
2785 },
2786 {
2787 "prefix": 268,
2788 "network": "pioneer_network",
2789 "displayName": "Pioneer Network by Bit.Country",
2790 "symbols": [
2791 "NEER"
2792 ],
2793 "decimals": [
2794 18
2795 ],
2796 "standardAccount": "*25519",
2797 "website": "https://bit.country"
2798 },
2799 {
2800 "prefix": 420,
2801 "network": "sora_kusama_para",
2802 "displayName": "SORA Kusama Parachain",
2803 "symbols": [
2804 "XOR"
2805 ],
2806 "decimals": [
2807 18
2808 ],
2809 "standardAccount": "*25519",
2810 "website": "https://sora.org"
2811 },
2812 {
2813 "prefix": 440,
2814 "network": "allfeat_network",
2815 "displayName": "Allfeat Network",
2816 "symbols": [
2817 "AFT"
2818 ],
2819 "decimals": [
2820 12
2821 ],
2822 "standardAccount": "*25519",
2823 "website": "https://allfeat.network"
2824 },
2825 {
2826 "prefix": 666,
2827 "network": "metaquity_network",
2828 "displayName": "Metaquity Network",
2829 "symbols": [
2830 "MQTY"
2831 ],
2832 "decimals": [
2833 18
2834 ],
2835 "standardAccount": "*25519",
2836 "website": "https://metaquity.xyz/"
2837 },
2838 {
2839 "prefix": 789,
2840 "network": "geek",
2841 "displayName": "GEEK Network",
2842 "symbols": [
2843 "GEEK"
2844 ],
2845 "decimals": [
2846 18
2847 ],
2848 "standardAccount": "*25519",
2849 "website": "https://geek.gl"
2850 },
2851 {
2852 "prefix": 995,
2853 "network": "ternoa",
2854 "displayName": "Ternoa",
2855 "symbols": [
2856 "CAPS"
2857 ],
2858 "decimals": [
2859 18
2860 ],
2861 "standardAccount": "*25519",
2862 "website": "https://www.ternoa.network"
2863 },
2864 {
2865 "prefix": 1110,
2866 "network": "efinity",
2867 "displayName": "Efinity",
2868 "symbols": [
2869 "EFI"
2870 ],
2871 "decimals": [
2872 18
2873 ],
2874 "standardAccount": "*25519",
2875 "website": "https://efinity.io/"
2876 },
2877 {
2878 "prefix": 1221,
2879 "network": "peaq",
2880 "displayName": "Peaq Network",
2881 "symbols": [
2882 "PEAQ"
2883 ],
2884 "decimals": [
2885 18
2886 ],
2887 "standardAccount": "Sr25519",
2888 "website": "https://www.peaq.network/"
2889 },
2890 {
2891 "prefix": 1222,
2892 "network": "krest",
2893 "displayName": "Krest Network",
2894 "symbols": [
2895 "KREST"
2896 ],
2897 "decimals": [
2898 18
2899 ],
2900 "standardAccount": "Sr25519",
2901 "website": "https://www.peaq.network/"
2902 },
2903 {
2904 "prefix": 1284,
2905 "network": "moonbeam",
2906 "displayName": "Moonbeam",
2907 "symbols": [
2908 "GLMR"
2909 ],
2910 "decimals": [
2911 18
2912 ],
2913 "standardAccount": "secp256k1",
2914 "website": "https://moonbeam.network"
2915 },
2916 {
2917 "prefix": 1285,
2918 "network": "moonriver",
2919 "displayName": "Moonriver",
2920 "symbols": [
2921 "MOVR"
2922 ],
2923 "decimals": [
2924 18
2925 ],
2926 "standardAccount": "secp256k1",
2927 "website": "https://moonbeam.network"
2928 },
2929 {
2930 "prefix": 1328,
2931 "network": "ajuna",
2932 "displayName": "Ajuna Network",
2933 "symbols": [
2934 "AJUN"
2935 ],
2936 "decimals": [
2937 12
2938 ],
2939 "standardAccount": "*25519",
2940 "website": "https://ajuna.io"
2941 },
2942 {
2943 "prefix": 1337,
2944 "network": "bajun",
2945 "displayName": "Bajun Network",
2946 "symbols": [
2947 "BAJU"
2948 ],
2949 "decimals": [
2950 12
2951 ],
2952 "standardAccount": "*25519",
2953 "website": "https://ajuna.io"
2954 },
2955 {
2956 "prefix": 1516,
2957 "network": "societal",
2958 "displayName": "Societal",
2959 "symbols": [
2960 "SCTL"
2961 ],
2962 "decimals": [
2963 12
2964 ],
2965 "standardAccount": "*25519",
2966 "website": "https://www.sctl.xyz"
2967 },
2968 {
2969 "prefix": 1985,
2970 "network": "seals",
2971 "displayName": "Seals Network",
2972 "symbols": [
2973 "SEAL"
2974 ],
2975 "decimals": [
2976 9
2977 ],
2978 "standardAccount": "*25519",
2979 "website": "https://seals.app"
2980 },
2981 {
2982 "prefix": 2007,
2983 "network": "kapex",
2984 "displayName": "Kapex",
2985 "symbols": [
2986 "KAPEX"
2987 ],
2988 "decimals": [
2989 12
2990 ],
2991 "standardAccount": "*25519",
2992 "website": "https://totemaccounting.com"
2993 },
2994 {
2995 "prefix": 2009,
2996 "network": "cloudwalk_mainnet",
2997 "displayName": "CloudWalk Network Mainnet",
2998 "symbols": [
2999 "CWN"
3000 ],
3001 "decimals": [
3002 18
3003 ],
3004 "standardAccount": "*25519",
3005 "website": "https://explorer.mainnet.cloudwalk.io"
3006 },
3007 {
3008 "prefix": 2021,
3009 "network": "logion",
3010 "displayName": "logion network",
3011 "symbols": [
3012 "LGNT"
3013 ],
3014 "decimals": [
3015 18
3016 ],
3017 "standardAccount": "*25519",
3018 "website": "https://logion.network"
3019 },
3020 {
3021 "prefix": 2032,
3022 "network": "interlay",
3023 "displayName": "Interlay",
3024 "symbols": [
3025 "INTR"
3026 ],
3027 "decimals": [
3028 10
3029 ],
3030 "standardAccount": "*25519",
3031 "website": "https://interlay.io/"
3032 },
3033 {
3034 "prefix": 2092,
3035 "network": "kintsugi",
3036 "displayName": "Kintsugi",
3037 "symbols": [
3038 "KINT"
3039 ],
3040 "decimals": [
3041 12
3042 ],
3043 "standardAccount": "*25519",
3044 "website": "https://interlay.io/"
3045 },
3046 {
3047 "prefix": 2106,
3048 "network": "bitgreen",
3049 "displayName": "Bitgreen",
3050 "symbols": [
3051 "BBB"
3052 ],
3053 "decimals": [
3054 18
3055 ],
3056 "standardAccount": "*25519",
3057 "website": "https://bitgreen.org/"
3058 },
3059 {
3060 "prefix": 2112,
3061 "network": "chainflip",
3062 "displayName": "Chainflip",
3063 "symbols": [
3064 "FLIP"
3065 ],
3066 "decimals": [
3067 18
3068 ],
3069 "standardAccount": "*25519",
3070 "website": "https://chainflip.io/"
3071 },
3072 {
3073 "prefix": 2199,
3074 "network": "moonsama",
3075 "displayName": "Moonsama",
3076 "symbols": [
3077 "SAMA"
3078 ],
3079 "decimals": [
3080 18
3081 ],
3082 "standardAccount": "secp256k1",
3083 "website": "https://moonsama.com"
3084 },
3085 {
3086 "prefix": 2206,
3087 "network": "ICE",
3088 "displayName": "ICE Network",
3089 "symbols": [
3090 "ICY"
3091 ],
3092 "decimals": [
3093 18
3094 ],
3095 "standardAccount": "*25519",
3096 "website": "https://icenetwork.io"
3097 },
3098 {
3099 "prefix": 2207,
3100 "network": "SNOW",
3101 "displayName": "SNOW: ICE Canary Network",
3102 "symbols": [
3103 "ICZ"
3104 ],
3105 "decimals": [
3106 18
3107 ],
3108 "standardAccount": "*25519",
3109 "website": "https://icenetwork.io"
3110 },
3111 {
3112 "prefix": 2254,
3113 "network": "subspace_testnet",
3114 "displayName": "Subspace testnet",
3115 "symbols": [
3116 "tSSC"
3117 ],
3118 "decimals": [
3119 18
3120 ],
3121 "standardAccount": "*25519",
3122 "website": "https://subspace.network"
3123 },
3124 {
3125 "prefix": 3333,
3126 "network": "peerplays",
3127 "displayName": "Peerplays",
3128 "symbols": [
3129 "PPY"
3130 ],
3131 "decimals": [
3132 18
3133 ],
3134 "standardAccount": "secp256k1",
3135 "website": "https://www.peerplays.com/"
3136 },
3137 {
3138 "prefix": 4006,
3139 "network": "tangle",
3140 "displayName": "Tangle Network",
3141 "symbols": [
3142 "TNT"
3143 ],
3144 "decimals": [
3145 18
3146 ],
3147 "standardAccount": "*25519",
3148 "website": "https://www.webb.tools/"
3149 },
3150 {
3151 "prefix": 4450,
3152 "network": "g1",
3153 "displayName": "Ğ1",
3154 "symbols": [
3155 "G1"
3156 ],
3157 "decimals": [
3158 2
3159 ],
3160 "standardAccount": "*25519",
3161 "website": "https://duniter.org"
3162 },
3163 {
3164 "prefix": 5234,
3165 "network": "humanode",
3166 "displayName": "Humanode Network",
3167 "symbols": [
3168 "HMND"
3169 ],
3170 "decimals": [
3171 18
3172 ],
3173 "standardAccount": "*25519",
3174 "website": "https://humanode.io"
3175 },
3176 {
3177 "prefix": 6094,
3178 "network": "subspace",
3179 "displayName": "Subspace",
3180 "symbols": [
3181 "SSC"
3182 ],
3183 "decimals": [
3184 18
3185 ],
3186 "standardAccount": "*25519",
3187 "website": "https://subspace.network"
3188 },
3189 {
3190 "prefix": 7007,
3191 "network": "tidefi",
3192 "displayName": "Tidefi",
3193 "symbols": [
3194 "TDFY"
3195 ],
3196 "decimals": [
3197 12
3198 ],
3199 "standardAccount": "*25519",
3200 "website": "https://tidefi.com"
3201 },
3202 {
3203 "prefix": 7013,
3204 "network": "gm",
3205 "displayName": "GM",
3206 "symbols": [
3207 "FREN",
3208 "GM",
3209 "GN"
3210 ],
3211 "decimals": [
3212 12,
3213 0,
3214 0
3215 ],
3216 "standardAccount": "*25519",
3217 "website": "https://gmordie.com"
3218 },
3219 {
3220 "prefix": 7306,
3221 "network": "krigan",
3222 "displayName": "Krigan Network",
3223 "symbols": [
3224 "KRGN"
3225 ],
3226 "decimals": [
3227 9
3228 ],
3229 "standardAccount": "*25519",
3230 "website": "https://krigan.network"
3231 },
3232 {
3233 "prefix": 7391,
3234 "network": "unique_mainnet",
3235 "displayName": "Unique Network",
3236 "symbols": [
3237 "UNQ"
3238 ],
3239 "decimals": [
3240 18
3241 ],
3242 "standardAccount": "*25519",
3243 "website": "https://unique.network"
3244 },
3245 {
3246 "prefix": 8866,
3247 "network": "golden_gate",
3248 "displayName": "Golden Gate",
3249 "symbols": [
3250 "GGX"
3251 ],
3252 "decimals": [
3253 18
3254 ],
3255 "standardAccount": "*25519",
3256 "website": "https://ggxchain.io/"
3257 },
3258 {
3259 "prefix": 8883,
3260 "network": "sapphire_mainnet",
3261 "displayName": "Sapphire by Unique",
3262 "symbols": [
3263 "QTZ"
3264 ],
3265 "decimals": [
3266 18
3267 ],
3268 "standardAccount": "*25519",
3269 "website": "https://unique.network"
3270 },
3271 {
3272 "prefix": 8886,
3273 "network": "golden_gate_sydney",
3274 "displayName": "Golden Gate Sydney",
3275 "symbols": [
3276 "GGXT"
3277 ],
3278 "decimals": [
3279 18
3280 ],
3281 "standardAccount": "*25519",
3282 "website": "https://ggxchain.io/"
3283 },
3284 {
3285 "prefix": 9072,
3286 "network": "hashed",
3287 "displayName": "Hashed Network",
3288 "symbols": [
3289 "HASH"
3290 ],
3291 "decimals": [
3292 18
3293 ],
3294 "standardAccount": "*25519",
3295 "website": "https://hashed.network"
3296 },
3297 {
3298 "prefix": 9807,
3299 "network": "dentnet",
3300 "displayName": "DENTNet",
3301 "symbols": [
3302 "DENTX"
3303 ],
3304 "decimals": [
3305 18
3306 ],
3307 "standardAccount": "*25519",
3308 "website": "https://www.dentnet.io"
3309 },
3310 {
3311 "prefix": 9935,
3312 "network": "t3rn",
3313 "displayName": "t3rn",
3314 "symbols": [
3315 "TRN"
3316 ],
3317 "decimals": [
3318 12
3319 ],
3320 "standardAccount": "*25519",
3321 "website": "https://t3rn.io/"
3322 },
3323 {
3324 "prefix": 10041,
3325 "network": "basilisk",
3326 "displayName": "Basilisk",
3327 "symbols": [
3328 "BSX"
3329 ],
3330 "decimals": [
3331 12
3332 ],
3333 "standardAccount": "*25519",
3334 "website": "https://bsx.fi"
3335 },
3336 {
3337 "prefix": 11330,
3338 "network": "cess-testnet",
3339 "displayName": "CESS Testnet",
3340 "symbols": [
3341 "TCESS"
3342 ],
3343 "decimals": [
3344 12
3345 ],
3346 "standardAccount": "*25519",
3347 "website": "https://cess.cloud"
3348 },
3349 {
3350 "prefix": 11331,
3351 "network": "cess",
3352 "displayName": "CESS",
3353 "symbols": [
3354 "CESS"
3355 ],
3356 "decimals": [
3357 12
3358 ],
3359 "standardAccount": "*25519",
3360 "website": "https://cess.cloud"
3361 },
3362 {
3363 "prefix": 11486,
3364 "network": "luhn",
3365 "displayName": "Luhn Network",
3366 "symbols": [
3367 "LUHN"
3368 ],
3369 "decimals": [
3370 18
3371 ],
3372 "standardAccount": "*25519",
3373 "website": "https://luhn.network"
3374 },
3375 {
3376 "prefix": 11820,
3377 "network": "contextfree",
3378 "displayName": "Automata ContextFree",
3379 "symbols": [
3380 "CTX"
3381 ],
3382 "decimals": [
3383 18
3384 ],
3385 "standardAccount": "*25519",
3386 "website": "https://ata.network"
3387 },
3388 {
3389 "prefix": 12155,
3390 "network": "impact",
3391 "displayName": "Impact Protocol Network",
3392 "symbols": [
3393 "BSTY"
3394 ],
3395 "decimals": [
3396 18
3397 ],
3398 "standardAccount": "*25519",
3399 "website": "https://impactprotocol.network/"
3400 },
3401 {
3402 "prefix": 12191,
3403 "network": "nftmart",
3404 "displayName": "NFTMart",
3405 "symbols": [
3406 "NMT"
3407 ],
3408 "decimals": [
3409 12
3410 ],
3411 "standardAccount": "*25519",
3412 "website": "https://nftmart.io"
3413 },
3414 {
3415 "prefix": 13116,
3416 "network": "bittensor",
3417 "displayName": "Bittensor",
3418 "symbols": [
3419 "TAO"
3420 ],
3421 "decimals": [
3422 9
3423 ],
3424 "standardAccount": "*25519",
3425 "website": "https://bittensor.com"
3426 },
3427 {
3428 "prefix": 14697,
3429 "network": "goro",
3430 "displayName": "GORO Network",
3431 "symbols": [
3432 "GORO"
3433 ],
3434 "decimals": [
3435 9
3436 ],
3437 "standardAccount": "*25519",
3438 "website": "https://goro.network"
3439 }
3440 ];
3441
3442 const knownGenesis = {
3443 acala: [
3444 '0xfc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c'
3445 ],
3446 ajuna: [
3447 '0xe358eb1d11b31255a286c12e44fe6780b7edb171d657905a97e39f71d9c6c3ee'
3448 ],
3449 'aleph-node': [
3450 '0x70255b4d28de0fc4e1a193d7e175ad1ccef431598211c55538f1018651a0344e'
3451 ],
3452 astar: [
3453 '0x9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6'
3454 ],
3455 basilisk: [
3456 '0xa85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755'
3457 ],
3458 bifrost: [
3459 '0x262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b'
3460 ],
3461 'bifrost-kusama': [
3462 '0x9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed'
3463 ],
3464 bittensor: [
3465 '0x2f0555cc76fc2840a25a6ea3b9637146806f1f44b090c175ffde2a7e5ab36c03'
3466 ],
3467 centrifuge: [
3468 '0xb3db41421702df9a7fcac62b53ffeac85f7853cc4e689e0b93aeb3db18c09d82',
3469 '0x67dddf2673b69e5f875f6f25277495834398eafd67f492e09f3f3345e003d1b5'
3470 ],
3471 cere: [
3472 '0x81443836a9a24caaa23f1241897d1235717535711d1d3fe24eae4fdc942c092c'
3473 ],
3474 composable: [
3475 '0xdaab8df776eb52ec604a5df5d388bb62a050a0aaec4556a64265b9d42755552d'
3476 ],
3477 darwinia: [
3478 '0xe71578b37a7c799b0ab4ee87ffa6f059a6b98f71f06fb8c84a8d88013a548ad6'
3479 ],
3480 'dock-mainnet': [
3481 '0x6bfe24dca2a3be10f22212678ac13a6446ec764103c0f3471c71609eac384aae',
3482 '0xf73467c6544aa68df2ee546b135f955c46b90fa627e9b5d7935f41061bb8a5a9'
3483 ],
3484 edgeware: [
3485 '0x742a2ca70c2fda6cee4f8df98d64c4c670a052d9568058982dad9d5a7a135c5b'
3486 ],
3487 enjin: [
3488 '0xd8761d3c88f26dc12875c00d3165f7d67243d56fc85b4cf19937601a7916e5a9'
3489 ],
3490 equilibrium: [
3491 '0x6f1a800de3daff7f5e037ddf66ab22ce03ab91874debeddb1086f5f7dbd48925'
3492 ],
3493 genshiro: [
3494 '0x9b8cefc0eb5c568b527998bdd76c184e2b76ae561be76e4667072230217ea243'
3495 ],
3496 hydradx: [
3497 '0xafdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d',
3498 '0xd2a620c27ec5cbc5621ff9a522689895074f7cca0d08e7134a7804e1a3ba86fc',
3499 '0x10af6e84234477d84dc572bac0789813b254aa490767ed06fb9591191d1073f9',
3500 '0x3d75507dd46301767e601265791da1d9cb47b6ebc94e87347b635e5bf58bd047',
3501 '0x0ed32bfcab4a83517fac88f2aa7cbc2f88d3ab93be9a12b6188a036bf8a943c2'
3502 ],
3503 'interlay-parachain': [
3504 '0xbf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72'
3505 ],
3506 karura: [
3507 '0xbaf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b'
3508 ],
3509 khala: [
3510 '0xd43540ba6d3eb4897c28a77d48cb5b729fea37603cbbfc7a86a73b72adb3be8d'
3511 ],
3512 kulupu: [
3513 '0xf7a99d3cb92853d00d5275c971c132c074636256583fee53b3bbe60d7b8769ba'
3514 ],
3515 kusama: [
3516 '0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe',
3517 '0xe3777fa922cafbff200cadeaea1a76bd7898ad5b89f7848999058b50e715f636',
3518 '0x3fd7b9eb6a00376e5be61f01abb429ffb0b104be05eaff4d458da48fcd425baf'
3519 ],
3520 matrixchain: [
3521 '0x3af4ff48ec76d2efc8476730f423ac07e25ad48f5f4c9dc39c778b164d808615'
3522 ],
3523 nodle: [
3524 '0x97da7ede98d7bad4e36b4d734b6055425a3be036da2a332ea5a7037656427a21'
3525 ],
3526 origintrail: [
3527 '0xe7e0962324a3b86c83404dbea483f25fb5dab4c224791c81b756cfc948006174'
3528 ],
3529 p3d: [
3530 '0x6c5894837ad89b6d92b114a2fb3eafa8fe3d26a54848e3447015442cd6ef4e66'
3531 ],
3532 parallel: [
3533 '0xe61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97'
3534 ],
3535 pendulum: [
3536 '0x5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86'
3537 ],
3538 phala: [
3539 '0x1bb969d85965e4bb5a651abbedf21a54b6b31a21f66b5401cc3f1e286268d736'
3540 ],
3541 picasso: [
3542 '0x6811a339673c9daa897944dcdac99c6e2939cc88245ed21951a0a3c9a2be75bc',
3543 '0xe8e7f0f4c4f5a00720b4821dbfddefea7490bcf0b19009961cc46957984e2c1c'
3544 ],
3545 polkadex: [
3546 '0x3920bcb4960a1eef5580cd5367ff3f430eef052774f78468852f7b9cb39f8a3c'
3547 ],
3548 polkadot: [
3549 '0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3'
3550 ],
3551 polymesh: [
3552 '0x6fbd74e5e1d0a61d52ccfe9d4adaed16dd3a7caa37c6bc4d0c2fa12e8b2f4063'
3553 ],
3554 quartz: [
3555 '0xcd4d732201ebe5d6b014edda071c4203e16867305332301dc8d092044b28e554'
3556 ],
3557 rococo: [
3558 '0x6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e',
3559 '0xaaf2cd1b74b5f726895921259421b534124726263982522174147046b8827897',
3560 '0x037f5f3c8e67b314062025fc886fcd6238ea25a4a9b45dce8d246815c9ebe770',
3561 '0xc196f81260cf1686172b47a79cf002120735d7cb0eb1474e8adce56618456fff',
3562 '0xf6e9983c37baf68846fedafe21e56718790e39fb1c582abc408b81bc7b208f9a',
3563 '0x5fce687da39305dfe682b117f0820b319348e8bb37eb16cf34acbf6a202de9d9',
3564 '0xe7c3d5edde7db964317cd9b51a3a059d7cd99f81bdbce14990047354334c9779',
3565 '0x1611e1dbf0405379b861e2e27daa90f480b2e6d3682414a80835a52e8cb8a215',
3566 '0x343442f12fa715489a8714e79a7b264ea88c0d5b8c66b684a7788a516032f6b9',
3567 '0x78bcd530c6b3a068bc17473cf5d2aff9c287102bed9af3ae3c41c33b9d6c6147',
3568 '0x47381ee0697153d64404fc578392c8fd5cba9073391908f46c888498415647bd',
3569 '0x19c0e4fa8ab75f5ac7865e0b8f74ff91eb9a100d336f423cd013a8befba40299'
3570 ],
3571 sora: [
3572 '0x7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5'
3573 ],
3574 stafi: [
3575 '0x290a4149f09ea0e402c74c1c7e96ae4239588577fe78932f94f5404c68243d80'
3576 ],
3577 statemine: [
3578 '0x48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a'
3579 ],
3580 statemint: [
3581 '0x68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f'
3582 ],
3583 subsocial: [
3584 '0x0bd72c1c305172e1275278aaeb3f161e02eccb7a819e63f62d47bd53a28189f8'
3585 ],
3586 ternoa: [
3587 '0x6859c81ca95ef624c9dfe4dc6e3381c33e5d6509e35e147092bfbc780f777c4e'
3588 ],
3589 unique: [
3590 '0x84322d9cddbf35088f1e54e9a85c967a41a56a4f43445768125e61af166c7d31'
3591 ],
3592 vtb: [
3593 '0x286bc8414c7000ce1d6ee6a834e29a54c1784814b76243eb77ed0b2c5573c60f',
3594 '0x7483b89572fb2bd687c7b9a93b242d0b237f9aba463aba07ec24503931038aaa'
3595 ],
3596 westend: [
3597 '0xe143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e'
3598 ],
3599 xxnetwork: [
3600 '0x50dd5d206917bf10502c68fb4d18a59fc8aa31586f4e8856b493e43544aa82aa'
3601 ],
3602 zeitgeist: [
3603 '0x1bf2a2ecb4a868de66ea8610f2ce7c8c43706561b6476031315f6640fe38e060'
3604 ]
3605 };
3606
3607 const knownIcon = {
3608 centrifuge: 'polkadot',
3609 kusama: 'polkadot',
3610 polkadot: 'polkadot',
3611 sora: 'polkadot',
3612 statemine: 'polkadot',
3613 statemint: 'polkadot',
3614 westmint: 'polkadot'
3615 };
3616
3617 const knownLedger = {
3618 acala: 0x00000313,
3619 ajuna: 0x00000162,
3620 'aleph-node': 0x00000283,
3621 astar: 0x0000032a,
3622 bifrost: 0x00000314,
3623 'bifrost-kusama': 0x00000314,
3624 centrifuge: 0x000002eb,
3625 composable: 0x00000162,
3626 darwinia: 0x00000162,
3627 'dock-mainnet': 0x00000252,
3628 edgeware: 0x0000020b,
3629 enjin: 0x00000483,
3630 equilibrium: 0x05f5e0fd,
3631 genshiro: 0x05f5e0fc,
3632 hydradx: 0x00000162,
3633 'interlay-parachain': 0x00000162,
3634 karura: 0x000002ae,
3635 khala: 0x000001b2,
3636 kusama: 0x000001b2,
3637 matrixchain: 0x00000483,
3638 nodle: 0x000003eb,
3639 origintrail: 0x00000162,
3640 parallel: 0x00000162,
3641 pendulum: 0x00000162,
3642 phala: 0x00000162,
3643 picasso: 0x000001b2,
3644 polkadex: 0x0000031f,
3645 polkadot: 0x00000162,
3646 polymesh: 0x00000253,
3647 quartz: 0x00000277,
3648 sora: 0x00000269,
3649 stafi: 0x0000038b,
3650 statemine: 0x000001b2,
3651 statemint: 0x00000162,
3652 ternoa: 0x00003e3,
3653 unique: 0x00000295,
3654 vtb: 0x000002b6,
3655 xxnetwork: 0x000007a3,
3656 zeitgeist: 0x00000162
3657 };
3658
3659 const knownTestnet = {
3660 '': true,
3661 'cess-testnet': true,
3662 'dock-testnet': true,
3663 jupiter: true,
3664 'mathchain-testnet': true,
3665 p3dt: true,
3666 subspace_testnet: true,
3667 'zero-alphaville': true
3668 };
3669
3670 const UNSORTED = [0, 2, 42];
3671 const TESTNETS = ['testnet'];
3672 function toExpanded(o) {
3673 const network = o.network || '';
3674 const nameParts = network.replace(/_/g, '-').split('-');
3675 const n = o;
3676 n.slip44 = knownLedger[network];
3677 n.hasLedgerSupport = !!n.slip44;
3678 n.genesisHash = knownGenesis[network] || [];
3679 n.icon = knownIcon[network] || 'substrate';
3680 n.isTestnet = !!knownTestnet[network] || TESTNETS.includes(nameParts[nameParts.length - 1]);
3681 n.isIgnored = n.isTestnet || (!(o.standardAccount &&
3682 o.decimals?.length &&
3683 o.symbols?.length) &&
3684 o.prefix !== 42);
3685 return n;
3686 }
3687 function filterSelectable({ genesisHash, prefix }) {
3688 return !!genesisHash.length || prefix === 42;
3689 }
3690 function filterAvailable(n) {
3691 return !n.isIgnored && !!n.network;
3692 }
3693 function sortNetworks(a, b) {
3694 const isUnSortedA = UNSORTED.includes(a.prefix);
3695 const isUnSortedB = UNSORTED.includes(b.prefix);
3696 return isUnSortedA === isUnSortedB
3697 ? isUnSortedA
3698 ? 0
3699 : a.displayName.localeCompare(b.displayName)
3700 : isUnSortedA
3701 ? -1
3702 : 1;
3703 }
3704 const allNetworks = knownSubstrate.map(toExpanded);
3705 const availableNetworks = allNetworks.filter(filterAvailable).sort(sortNetworks);
3706 const selectableNetworks = availableNetworks.filter(filterSelectable);
3707
3708 const defaults = {
3709 allowedDecodedLengths: [1, 2, 4, 8, 32, 33],
3710 allowedEncodedLengths: [3, 4, 6, 10, 35, 36, 37, 38],
3711 allowedPrefix: availableNetworks.map(({ prefix }) => prefix),
3712 prefix: 42
3713 };
3714
3715 function decodeAddress(encoded, ignoreChecksum, ss58Format = -1) {
3716 if (!encoded) {
3717 throw new Error('Invalid empty address passed');
3718 }
3719 if (util.isU8a(encoded) || util.isHex(encoded)) {
3720 return util.u8aToU8a(encoded);
3721 }
3722 try {
3723 const decoded = base58Decode(encoded);
3724 if (!defaults.allowedEncodedLengths.includes(decoded.length)) {
3725 throw new Error('Invalid decoded address length');
3726 }
3727 const [isValid, endPos, ss58Length, ss58Decoded] = checkAddressChecksum(decoded);
3728 if (!isValid && !ignoreChecksum) {
3729 throw new Error('Invalid decoded address checksum');
3730 }
3731 else if (ss58Format !== -1 && ss58Format !== ss58Decoded) {
3732 throw new Error(`Expected ss58Format ${ss58Format}, received ${ss58Decoded}`);
3733 }
3734 return decoded.slice(ss58Length, endPos);
3735 }
3736 catch (error) {
3737 throw new Error(`Decoding ${encoded}: ${error.message}`);
3738 }
3739 }
3740
3741 function addressToEvm(address, ignoreChecksum) {
3742 return decodeAddress(address, ignoreChecksum).subarray(0, 20);
3743 }
3744
3745 function checkAddress(address, prefix) {
3746 let decoded;
3747 try {
3748 decoded = base58Decode(address);
3749 }
3750 catch (error) {
3751 return [false, error.message];
3752 }
3753 const [isValid, , , ss58Decoded] = checkAddressChecksum(decoded);
3754 if (ss58Decoded !== prefix) {
3755 return [false, `Prefix mismatch, expected ${prefix}, found ${ss58Decoded}`];
3756 }
3757 else if (!defaults.allowedEncodedLengths.includes(decoded.length)) {
3758 return [false, 'Invalid decoded address length'];
3759 }
3760 return [isValid, isValid ? null : 'Invalid decoded address checksum'];
3761 }
3762
3763 const BN_BE_OPTS = { isLe: false };
3764 const BN_LE_OPTS = { isLe: true };
3765 const BN_LE_16_OPTS = { bitLength: 16, isLe: true };
3766 const BN_BE_32_OPTS = { bitLength: 32, isLe: false };
3767 const BN_LE_32_OPTS = { bitLength: 32, isLe: true };
3768 const BN_BE_256_OPTS = { bitLength: 256, isLe: false };
3769 const BN_LE_256_OPTS = { bitLength: 256, isLe: true };
3770 const BN_LE_512_OPTS = { bitLength: 512, isLe: true };
3771
3772 const RE_NUMBER = /^\d+$/;
3773 const JUNCTION_ID_LEN = 32;
3774 class DeriveJunction {
3775 __internal__chainCode = new Uint8Array(32);
3776 __internal__isHard = false;
3777 static from(value) {
3778 const result = new DeriveJunction();
3779 const [code, isHard] = value.startsWith('/')
3780 ? [value.substring(1), true]
3781 : [value, false];
3782 result.soft(RE_NUMBER.test(code)
3783 ? new util.BN(code, 10)
3784 : code);
3785 return isHard
3786 ? result.harden()
3787 : result;
3788 }
3789 get chainCode() {
3790 return this.__internal__chainCode;
3791 }
3792 get isHard() {
3793 return this.__internal__isHard;
3794 }
3795 get isSoft() {
3796 return !this.__internal__isHard;
3797 }
3798 hard(value) {
3799 return this.soft(value).harden();
3800 }
3801 harden() {
3802 this.__internal__isHard = true;
3803 return this;
3804 }
3805 soft(value) {
3806 if (util.isNumber(value) || util.isBn(value) || util.isBigInt(value)) {
3807 return this.soft(util.bnToU8a(value, BN_LE_256_OPTS));
3808 }
3809 else if (util.isHex(value)) {
3810 return this.soft(util.hexToU8a(value));
3811 }
3812 else if (util.isString(value)) {
3813 return this.soft(util.compactAddLength(util.stringToU8a(value)));
3814 }
3815 else if (value.length > JUNCTION_ID_LEN) {
3816 return this.soft(blake2AsU8a(value));
3817 }
3818 this.__internal__chainCode.fill(0);
3819 this.__internal__chainCode.set(value, 0);
3820 return this;
3821 }
3822 soften() {
3823 this.__internal__isHard = false;
3824 return this;
3825 }
3826 }
3827
3828 const RE_JUNCTION = /\/(\/?)([^/]+)/g;
3829 function keyExtractPath(derivePath) {
3830 const parts = derivePath.match(RE_JUNCTION);
3831 const path = [];
3832 let constructed = '';
3833 if (parts) {
3834 constructed = parts.join('');
3835 for (const p of parts) {
3836 path.push(DeriveJunction.from(p.substring(1)));
3837 }
3838 }
3839 if (constructed !== derivePath) {
3840 throw new Error(`Re-constructed path "${constructed}" does not match input`);
3841 }
3842 return {
3843 parts,
3844 path
3845 };
3846 }
3847
3848 const RE_CAPTURE = /^(\w+( \w+)*)((\/\/?[^/]+)*)(\/\/\/(.*))?$/;
3849 function keyExtractSuri(suri) {
3850 const matches = suri.match(RE_CAPTURE);
3851 if (matches === null) {
3852 throw new Error('Unable to match provided value to a secret URI');
3853 }
3854 const [, phrase, , derivePath, , , password] = matches;
3855 const { path } = keyExtractPath(derivePath);
3856 return {
3857 derivePath,
3858 password,
3859 path,
3860 phrase
3861 };
3862 }
3863
3864 const HDKD$1 = util.compactAddLength(util.stringToU8a('Secp256k1HDKD'));
3865 function secp256k1DeriveHard(seed, chainCode) {
3866 if (!util.isU8a(chainCode) || chainCode.length !== 32) {
3867 throw new Error('Invalid chainCode passed to derive');
3868 }
3869 return blake2AsU8a(util.u8aConcat(HDKD$1, seed, chainCode), 256);
3870 }
3871
3872 function setBigUint64(view, byteOffset, value, isLE) {
3873 if (typeof view.setBigUint64 === 'function')
3874 return view.setBigUint64(byteOffset, value, isLE);
3875 const _32n = BigInt(32);
3876 const _u32_max = BigInt(0xffffffff);
3877 const wh = Number((value >> _32n) & _u32_max);
3878 const wl = Number(value & _u32_max);
3879 const h = isLE ? 4 : 0;
3880 const l = isLE ? 0 : 4;
3881 view.setUint32(byteOffset + h, wh, isLE);
3882 view.setUint32(byteOffset + l, wl, isLE);
3883 }
3884 class SHA2 extends Hash {
3885 constructor(blockLen, outputLen, padOffset, isLE) {
3886 super();
3887 this.blockLen = blockLen;
3888 this.outputLen = outputLen;
3889 this.padOffset = padOffset;
3890 this.isLE = isLE;
3891 this.finished = false;
3892 this.length = 0;
3893 this.pos = 0;
3894 this.destroyed = false;
3895 this.buffer = new Uint8Array(blockLen);
3896 this.view = createView(this.buffer);
3897 }
3898 update(data) {
3899 exists(this);
3900 const { view, buffer, blockLen } = this;
3901 data = toBytes(data);
3902 const len = data.length;
3903 for (let pos = 0; pos < len;) {
3904 const take = Math.min(blockLen - this.pos, len - pos);
3905 if (take === blockLen) {
3906 const dataView = createView(data);
3907 for (; blockLen <= len - pos; pos += blockLen)
3908 this.process(dataView, pos);
3909 continue;
3910 }
3911 buffer.set(data.subarray(pos, pos + take), this.pos);
3912 this.pos += take;
3913 pos += take;
3914 if (this.pos === blockLen) {
3915 this.process(view, 0);
3916 this.pos = 0;
3917 }
3918 }
3919 this.length += data.length;
3920 this.roundClean();
3921 return this;
3922 }
3923 digestInto(out) {
3924 exists(this);
3925 output(out, this);
3926 this.finished = true;
3927 const { buffer, view, blockLen, isLE } = this;
3928 let { pos } = this;
3929 buffer[pos++] = 0b10000000;
3930 this.buffer.subarray(pos).fill(0);
3931 if (this.padOffset > blockLen - pos) {
3932 this.process(view, 0);
3933 pos = 0;
3934 }
3935 for (let i = pos; i < blockLen; i++)
3936 buffer[i] = 0;
3937 setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);
3938 this.process(view, 0);
3939 const oview = createView(out);
3940 const len = this.outputLen;
3941 if (len % 4)
3942 throw new Error('_sha2: outputLen should be aligned to 32bit');
3943 const outLen = len / 4;
3944 const state = this.get();
3945 if (outLen > state.length)
3946 throw new Error('_sha2: outputLen bigger than state');
3947 for (let i = 0; i < outLen; i++)
3948 oview.setUint32(4 * i, state[i], isLE);
3949 }
3950 digest() {
3951 const { buffer, outputLen } = this;
3952 this.digestInto(buffer);
3953 const res = buffer.slice(0, outputLen);
3954 this.destroy();
3955 return res;
3956 }
3957 _cloneInto(to) {
3958 to || (to = new this.constructor());
3959 to.set(...this.get());
3960 const { blockLen, buffer, length, finished, destroyed, pos } = this;
3961 to.length = length;
3962 to.pos = pos;
3963 to.finished = finished;
3964 to.destroyed = destroyed;
3965 if (length % blockLen)
3966 to.buffer.set(buffer);
3967 return to;
3968 }
3969 }
3970
3971 const Chi = (a, b, c) => (a & b) ^ (~a & c);
3972 const Maj = (a, b, c) => (a & b) ^ (a & c) ^ (b & c);
3973 const SHA256_K = new Uint32Array([
3974 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
3975 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
3976 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
3977 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
3978 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
3979 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
3980 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
3981 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
3982 ]);
3983 const IV = new Uint32Array([
3984 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
3985 ]);
3986 const SHA256_W = new Uint32Array(64);
3987 class SHA256 extends SHA2 {
3988 constructor() {
3989 super(64, 32, 8, false);
3990 this.A = IV[0] | 0;
3991 this.B = IV[1] | 0;
3992 this.C = IV[2] | 0;
3993 this.D = IV[3] | 0;
3994 this.E = IV[4] | 0;
3995 this.F = IV[5] | 0;
3996 this.G = IV[6] | 0;
3997 this.H = IV[7] | 0;
3998 }
3999 get() {
4000 const { A, B, C, D, E, F, G, H } = this;
4001 return [A, B, C, D, E, F, G, H];
4002 }
4003 set(A, B, C, D, E, F, G, H) {
4004 this.A = A | 0;
4005 this.B = B | 0;
4006 this.C = C | 0;
4007 this.D = D | 0;
4008 this.E = E | 0;
4009 this.F = F | 0;
4010 this.G = G | 0;
4011 this.H = H | 0;
4012 }
4013 process(view, offset) {
4014 for (let i = 0; i < 16; i++, offset += 4)
4015 SHA256_W[i] = view.getUint32(offset, false);
4016 for (let i = 16; i < 64; i++) {
4017 const W15 = SHA256_W[i - 15];
4018 const W2 = SHA256_W[i - 2];
4019 const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);
4020 const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);
4021 SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;
4022 }
4023 let { A, B, C, D, E, F, G, H } = this;
4024 for (let i = 0; i < 64; i++) {
4025 const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);
4026 const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;
4027 const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);
4028 const T2 = (sigma0 + Maj(A, B, C)) | 0;
4029 H = G;
4030 G = F;
4031 F = E;
4032 E = (D + T1) | 0;
4033 D = C;
4034 C = B;
4035 B = A;
4036 A = (T1 + T2) | 0;
4037 }
4038 A = (A + this.A) | 0;
4039 B = (B + this.B) | 0;
4040 C = (C + this.C) | 0;
4041 D = (D + this.D) | 0;
4042 E = (E + this.E) | 0;
4043 F = (F + this.F) | 0;
4044 G = (G + this.G) | 0;
4045 H = (H + this.H) | 0;
4046 this.set(A, B, C, D, E, F, G, H);
4047 }
4048 roundClean() {
4049 SHA256_W.fill(0);
4050 }
4051 destroy() {
4052 this.set(0, 0, 0, 0, 0, 0, 0, 0);
4053 this.buffer.fill(0);
4054 }
4055 }
4056 class SHA224 extends SHA256 {
4057 constructor() {
4058 super();
4059 this.A = 0xc1059ed8 | 0;
4060 this.B = 0x367cd507 | 0;
4061 this.C = 0x3070dd17 | 0;
4062 this.D = 0xf70e5939 | 0;
4063 this.E = 0xffc00b31 | 0;
4064 this.F = 0x68581511 | 0;
4065 this.G = 0x64f98fa7 | 0;
4066 this.H = 0xbefa4fa4 | 0;
4067 this.outputLen = 28;
4068 }
4069 }
4070 const sha256 = wrapConstructor(() => new SHA256());
4071 wrapConstructor(() => new SHA224());
4072
4073 /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
4074 const _0n$8 = BigInt(0);
4075 const _1n$8 = BigInt(1);
4076 const _2n$6 = BigInt(2);
4077 function isBytes(a) {
4078 return (a instanceof Uint8Array ||
4079 (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array'));
4080 }
4081 const hexes = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));
4082 function bytesToHex(bytes) {
4083 if (!isBytes(bytes))
4084 throw new Error('Uint8Array expected');
4085 let hex = '';
4086 for (let i = 0; i < bytes.length; i++) {
4087 hex += hexes[bytes[i]];
4088 }
4089 return hex;
4090 }
4091 function numberToHexUnpadded(num) {
4092 const hex = num.toString(16);
4093 return hex.length & 1 ? `0${hex}` : hex;
4094 }
4095 function hexToNumber(hex) {
4096 if (typeof hex !== 'string')
4097 throw new Error('hex string expected, got ' + typeof hex);
4098 return BigInt(hex === '' ? '0' : `0x${hex}`);
4099 }
4100 const asciis = { _0: 48, _9: 57, _A: 65, _F: 70, _a: 97, _f: 102 };
4101 function asciiToBase16(char) {
4102 if (char >= asciis._0 && char <= asciis._9)
4103 return char - asciis._0;
4104 if (char >= asciis._A && char <= asciis._F)
4105 return char - (asciis._A - 10);
4106 if (char >= asciis._a && char <= asciis._f)
4107 return char - (asciis._a - 10);
4108 return;
4109 }
4110 function hexToBytes(hex) {
4111 if (typeof hex !== 'string')
4112 throw new Error('hex string expected, got ' + typeof hex);
4113 const hl = hex.length;
4114 const al = hl / 2;
4115 if (hl % 2)
4116 throw new Error('padded hex string expected, got unpadded hex of length ' + hl);
4117 const array = new Uint8Array(al);
4118 for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {
4119 const n1 = asciiToBase16(hex.charCodeAt(hi));
4120 const n2 = asciiToBase16(hex.charCodeAt(hi + 1));
4121 if (n1 === undefined || n2 === undefined) {
4122 const char = hex[hi] + hex[hi + 1];
4123 throw new Error('hex string expected, got non-hex character "' + char + '" at index ' + hi);
4124 }
4125 array[ai] = n1 * 16 + n2;
4126 }
4127 return array;
4128 }
4129 function bytesToNumberBE(bytes) {
4130 return hexToNumber(bytesToHex(bytes));
4131 }
4132 function bytesToNumberLE(bytes) {
4133 if (!isBytes(bytes))
4134 throw new Error('Uint8Array expected');
4135 return hexToNumber(bytesToHex(Uint8Array.from(bytes).reverse()));
4136 }
4137 function numberToBytesBE(n, len) {
4138 return hexToBytes(n.toString(16).padStart(len * 2, '0'));
4139 }
4140 function numberToBytesLE(n, len) {
4141 return numberToBytesBE(n, len).reverse();
4142 }
4143 function numberToVarBytesBE(n) {
4144 return hexToBytes(numberToHexUnpadded(n));
4145 }
4146 function ensureBytes(title, hex, expectedLength) {
4147 let res;
4148 if (typeof hex === 'string') {
4149 try {
4150 res = hexToBytes(hex);
4151 }
4152 catch (e) {
4153 throw new Error(`${title} must be valid hex string, got "${hex}". Cause: ${e}`);
4154 }
4155 }
4156 else if (isBytes(hex)) {
4157 res = Uint8Array.from(hex);
4158 }
4159 else {
4160 throw new Error(`${title} must be hex string or Uint8Array`);
4161 }
4162 const len = res.length;
4163 if (typeof expectedLength === 'number' && len !== expectedLength)
4164 throw new Error(`${title} expected ${expectedLength} bytes, got ${len}`);
4165 return res;
4166 }
4167 function concatBytes(...arrays) {
4168 let sum = 0;
4169 for (let i = 0; i < arrays.length; i++) {
4170 const a = arrays[i];
4171 if (!isBytes(a))
4172 throw new Error('Uint8Array expected');
4173 sum += a.length;
4174 }
4175 let res = new Uint8Array(sum);
4176 let pad = 0;
4177 for (let i = 0; i < arrays.length; i++) {
4178 const a = arrays[i];
4179 res.set(a, pad);
4180 pad += a.length;
4181 }
4182 return res;
4183 }
4184 function equalBytes(a, b) {
4185 if (a.length !== b.length)
4186 return false;
4187 let diff = 0;
4188 for (let i = 0; i < a.length; i++)
4189 diff |= a[i] ^ b[i];
4190 return diff === 0;
4191 }
4192 function utf8ToBytes(str) {
4193 if (typeof str !== 'string')
4194 throw new Error(`utf8ToBytes expected string, got ${typeof str}`);
4195 return new Uint8Array(new TextEncoder().encode(str));
4196 }
4197 function bitLen(n) {
4198 let len;
4199 for (len = 0; n > _0n$8; n >>= _1n$8, len += 1)
4200 ;
4201 return len;
4202 }
4203 function bitGet(n, pos) {
4204 return (n >> BigInt(pos)) & _1n$8;
4205 }
4206 const bitSet = (n, pos, value) => {
4207 return n | ((value ? _1n$8 : _0n$8) << BigInt(pos));
4208 };
4209 const bitMask = (n) => (_2n$6 << BigInt(n - 1)) - _1n$8;
4210 const u8n = (data) => new Uint8Array(data);
4211 const u8fr = (arr) => Uint8Array.from(arr);
4212 function createHmacDrbg(hashLen, qByteLen, hmacFn) {
4213 if (typeof hashLen !== 'number' || hashLen < 2)
4214 throw new Error('hashLen must be a number');
4215 if (typeof qByteLen !== 'number' || qByteLen < 2)
4216 throw new Error('qByteLen must be a number');
4217 if (typeof hmacFn !== 'function')
4218 throw new Error('hmacFn must be a function');
4219 let v = u8n(hashLen);
4220 let k = u8n(hashLen);
4221 let i = 0;
4222 const reset = () => {
4223 v.fill(1);
4224 k.fill(0);
4225 i = 0;
4226 };
4227 const h = (...b) => hmacFn(k, v, ...b);
4228 const reseed = (seed = u8n()) => {
4229 k = h(u8fr([0x00]), seed);
4230 v = h();
4231 if (seed.length === 0)
4232 return;
4233 k = h(u8fr([0x01]), seed);
4234 v = h();
4235 };
4236 const gen = () => {
4237 if (i++ >= 1000)
4238 throw new Error('drbg: tried 1000 values');
4239 let len = 0;
4240 const out = [];
4241 while (len < qByteLen) {
4242 v = h();
4243 const sl = v.slice();
4244 out.push(sl);
4245 len += v.length;
4246 }
4247 return concatBytes(...out);
4248 };
4249 const genUntil = (seed, pred) => {
4250 reset();
4251 reseed(seed);
4252 let res = undefined;
4253 while (!(res = pred(gen())))
4254 reseed();
4255 reset();
4256 return res;
4257 };
4258 return genUntil;
4259 }
4260 const validatorFns = {
4261 bigint: (val) => typeof val === 'bigint',
4262 function: (val) => typeof val === 'function',
4263 boolean: (val) => typeof val === 'boolean',
4264 string: (val) => typeof val === 'string',
4265 stringOrUint8Array: (val) => typeof val === 'string' || isBytes(val),
4266 isSafeInteger: (val) => Number.isSafeInteger(val),
4267 array: (val) => Array.isArray(val),
4268 field: (val, object) => object.Fp.isValid(val),
4269 hash: (val) => typeof val === 'function' && Number.isSafeInteger(val.outputLen),
4270 };
4271 function validateObject(object, validators, optValidators = {}) {
4272 const checkField = (fieldName, type, isOptional) => {
4273 const checkVal = validatorFns[type];
4274 if (typeof checkVal !== 'function')
4275 throw new Error(`Invalid validator "${type}", expected function`);
4276 const val = object[fieldName];
4277 if (isOptional && val === undefined)
4278 return;
4279 if (!checkVal(val, object)) {
4280 throw new Error(`Invalid param ${String(fieldName)}=${val} (${typeof val}), expected ${type}`);
4281 }
4282 };
4283 for (const [fieldName, type] of Object.entries(validators))
4284 checkField(fieldName, type, false);
4285 for (const [fieldName, type] of Object.entries(optValidators))
4286 checkField(fieldName, type, true);
4287 return object;
4288 }
4289
4290 const ut = /*#__PURE__*/Object.freeze({
4291 __proto__: null,
4292 bitGet: bitGet,
4293 bitLen: bitLen,
4294 bitMask: bitMask,
4295 bitSet: bitSet,
4296 bytesToHex: bytesToHex,
4297 bytesToNumberBE: bytesToNumberBE,
4298 bytesToNumberLE: bytesToNumberLE,
4299 concatBytes: concatBytes,
4300 createHmacDrbg: createHmacDrbg,
4301 ensureBytes: ensureBytes,
4302 equalBytes: equalBytes,
4303 hexToBytes: hexToBytes,
4304 hexToNumber: hexToNumber,
4305 isBytes: isBytes,
4306 numberToBytesBE: numberToBytesBE,
4307 numberToBytesLE: numberToBytesLE,
4308 numberToHexUnpadded: numberToHexUnpadded,
4309 numberToVarBytesBE: numberToVarBytesBE,
4310 utf8ToBytes: utf8ToBytes,
4311 validateObject: validateObject
4312 });
4313
4314 /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
4315 const _0n$7 = BigInt(0), _1n$7 = BigInt(1), _2n$5 = BigInt(2), _3n$1 = BigInt(3);
4316 const _4n$1 = BigInt(4), _5n$1 = BigInt(5), _8n$1 = BigInt(8);
4317 BigInt(9); BigInt(16);
4318 function mod(a, b) {
4319 const result = a % b;
4320 return result >= _0n$7 ? result : b + result;
4321 }
4322 function pow(num, power, modulo) {
4323 if (modulo <= _0n$7 || power < _0n$7)
4324 throw new Error('Expected power/modulo > 0');
4325 if (modulo === _1n$7)
4326 return _0n$7;
4327 let res = _1n$7;
4328 while (power > _0n$7) {
4329 if (power & _1n$7)
4330 res = (res * num) % modulo;
4331 num = (num * num) % modulo;
4332 power >>= _1n$7;
4333 }
4334 return res;
4335 }
4336 function pow2(x, power, modulo) {
4337 let res = x;
4338 while (power-- > _0n$7) {
4339 res *= res;
4340 res %= modulo;
4341 }
4342 return res;
4343 }
4344 function invert(number, modulo) {
4345 if (number === _0n$7 || modulo <= _0n$7) {
4346 throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);
4347 }
4348 let a = mod(number, modulo);
4349 let b = modulo;
4350 let x = _0n$7, u = _1n$7;
4351 while (a !== _0n$7) {
4352 const q = b / a;
4353 const r = b % a;
4354 const m = x - u * q;
4355 b = a, a = r, x = u, u = m;
4356 }
4357 const gcd = b;
4358 if (gcd !== _1n$7)
4359 throw new Error('invert: does not exist');
4360 return mod(x, modulo);
4361 }
4362 function tonelliShanks(P) {
4363 const legendreC = (P - _1n$7) / _2n$5;
4364 let Q, S, Z;
4365 for (Q = P - _1n$7, S = 0; Q % _2n$5 === _0n$7; Q /= _2n$5, S++)
4366 ;
4367 for (Z = _2n$5; Z < P && pow(Z, legendreC, P) !== P - _1n$7; Z++)
4368 ;
4369 if (S === 1) {
4370 const p1div4 = (P + _1n$7) / _4n$1;
4371 return function tonelliFast(Fp, n) {
4372 const root = Fp.pow(n, p1div4);
4373 if (!Fp.eql(Fp.sqr(root), n))
4374 throw new Error('Cannot find square root');
4375 return root;
4376 };
4377 }
4378 const Q1div2 = (Q + _1n$7) / _2n$5;
4379 return function tonelliSlow(Fp, n) {
4380 if (Fp.pow(n, legendreC) === Fp.neg(Fp.ONE))
4381 throw new Error('Cannot find square root');
4382 let r = S;
4383 let g = Fp.pow(Fp.mul(Fp.ONE, Z), Q);
4384 let x = Fp.pow(n, Q1div2);
4385 let b = Fp.pow(n, Q);
4386 while (!Fp.eql(b, Fp.ONE)) {
4387 if (Fp.eql(b, Fp.ZERO))
4388 return Fp.ZERO;
4389 let m = 1;
4390 for (let t2 = Fp.sqr(b); m < r; m++) {
4391 if (Fp.eql(t2, Fp.ONE))
4392 break;
4393 t2 = Fp.sqr(t2);
4394 }
4395 const ge = Fp.pow(g, _1n$7 << BigInt(r - m - 1));
4396 g = Fp.sqr(ge);
4397 x = Fp.mul(x, ge);
4398 b = Fp.mul(b, g);
4399 r = m;
4400 }
4401 return x;
4402 };
4403 }
4404 function FpSqrt(P) {
4405 if (P % _4n$1 === _3n$1) {
4406 const p1div4 = (P + _1n$7) / _4n$1;
4407 return function sqrt3mod4(Fp, n) {
4408 const root = Fp.pow(n, p1div4);
4409 if (!Fp.eql(Fp.sqr(root), n))
4410 throw new Error('Cannot find square root');
4411 return root;
4412 };
4413 }
4414 if (P % _8n$1 === _5n$1) {
4415 const c1 = (P - _5n$1) / _8n$1;
4416 return function sqrt5mod8(Fp, n) {
4417 const n2 = Fp.mul(n, _2n$5);
4418 const v = Fp.pow(n2, c1);
4419 const nv = Fp.mul(n, v);
4420 const i = Fp.mul(Fp.mul(nv, _2n$5), v);
4421 const root = Fp.mul(nv, Fp.sub(i, Fp.ONE));
4422 if (!Fp.eql(Fp.sqr(root), n))
4423 throw new Error('Cannot find square root');
4424 return root;
4425 };
4426 }
4427 return tonelliShanks(P);
4428 }
4429 const isNegativeLE = (num, modulo) => (mod(num, modulo) & _1n$7) === _1n$7;
4430 const FIELD_FIELDS = [
4431 'create', 'isValid', 'is0', 'neg', 'inv', 'sqrt', 'sqr',
4432 'eql', 'add', 'sub', 'mul', 'pow', 'div',
4433 'addN', 'subN', 'mulN', 'sqrN'
4434 ];
4435 function validateField(field) {
4436 const initial = {
4437 ORDER: 'bigint',
4438 MASK: 'bigint',
4439 BYTES: 'isSafeInteger',
4440 BITS: 'isSafeInteger',
4441 };
4442 const opts = FIELD_FIELDS.reduce((map, val) => {
4443 map[val] = 'function';
4444 return map;
4445 }, initial);
4446 return validateObject(field, opts);
4447 }
4448 function FpPow(f, num, power) {
4449 if (power < _0n$7)
4450 throw new Error('Expected power > 0');
4451 if (power === _0n$7)
4452 return f.ONE;
4453 if (power === _1n$7)
4454 return num;
4455 let p = f.ONE;
4456 let d = num;
4457 while (power > _0n$7) {
4458 if (power & _1n$7)
4459 p = f.mul(p, d);
4460 d = f.sqr(d);
4461 power >>= _1n$7;
4462 }
4463 return p;
4464 }
4465 function FpInvertBatch(f, nums) {
4466 const tmp = new Array(nums.length);
4467 const lastMultiplied = nums.reduce((acc, num, i) => {
4468 if (f.is0(num))
4469 return acc;
4470 tmp[i] = acc;
4471 return f.mul(acc, num);
4472 }, f.ONE);
4473 const inverted = f.inv(lastMultiplied);
4474 nums.reduceRight((acc, num, i) => {
4475 if (f.is0(num))
4476 return acc;
4477 tmp[i] = f.mul(acc, tmp[i]);
4478 return f.mul(acc, num);
4479 }, inverted);
4480 return tmp;
4481 }
4482 function nLength(n, nBitLength) {
4483 const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length;
4484 const nByteLength = Math.ceil(_nBitLength / 8);
4485 return { nBitLength: _nBitLength, nByteLength };
4486 }
4487 function Field(ORDER, bitLen, isLE = false, redef = {}) {
4488 if (ORDER <= _0n$7)
4489 throw new Error(`Expected Field ORDER > 0, got ${ORDER}`);
4490 const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, bitLen);
4491 if (BYTES > 2048)
4492 throw new Error('Field lengths over 2048 bytes are not supported');
4493 const sqrtP = FpSqrt(ORDER);
4494 const f = Object.freeze({
4495 ORDER,
4496 BITS,
4497 BYTES,
4498 MASK: bitMask(BITS),
4499 ZERO: _0n$7,
4500 ONE: _1n$7,
4501 create: (num) => mod(num, ORDER),
4502 isValid: (num) => {
4503 if (typeof num !== 'bigint')
4504 throw new Error(`Invalid field element: expected bigint, got ${typeof num}`);
4505 return _0n$7 <= num && num < ORDER;
4506 },
4507 is0: (num) => num === _0n$7,
4508 isOdd: (num) => (num & _1n$7) === _1n$7,
4509 neg: (num) => mod(-num, ORDER),
4510 eql: (lhs, rhs) => lhs === rhs,
4511 sqr: (num) => mod(num * num, ORDER),
4512 add: (lhs, rhs) => mod(lhs + rhs, ORDER),
4513 sub: (lhs, rhs) => mod(lhs - rhs, ORDER),
4514 mul: (lhs, rhs) => mod(lhs * rhs, ORDER),
4515 pow: (num, power) => FpPow(f, num, power),
4516 div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER),
4517 sqrN: (num) => num * num,
4518 addN: (lhs, rhs) => lhs + rhs,
4519 subN: (lhs, rhs) => lhs - rhs,
4520 mulN: (lhs, rhs) => lhs * rhs,
4521 inv: (num) => invert(num, ORDER),
4522 sqrt: redef.sqrt || ((n) => sqrtP(f, n)),
4523 invertBatch: (lst) => FpInvertBatch(f, lst),
4524 cmov: (a, b, c) => (c ? b : a),
4525 toBytes: (num) => (isLE ? numberToBytesLE(num, BYTES) : numberToBytesBE(num, BYTES)),
4526 fromBytes: (bytes) => {
4527 if (bytes.length !== BYTES)
4528 throw new Error(`Fp.fromBytes: expected ${BYTES}, got ${bytes.length}`);
4529 return isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);
4530 },
4531 });
4532 return Object.freeze(f);
4533 }
4534 function FpSqrtEven(Fp, elm) {
4535 if (!Fp.isOdd)
4536 throw new Error(`Field doesn't have isOdd`);
4537 const root = Fp.sqrt(elm);
4538 return Fp.isOdd(root) ? Fp.neg(root) : root;
4539 }
4540 function getFieldBytesLength(fieldOrder) {
4541 if (typeof fieldOrder !== 'bigint')
4542 throw new Error('field order must be bigint');
4543 const bitLength = fieldOrder.toString(2).length;
4544 return Math.ceil(bitLength / 8);
4545 }
4546 function getMinHashLength(fieldOrder) {
4547 const length = getFieldBytesLength(fieldOrder);
4548 return length + Math.ceil(length / 2);
4549 }
4550 function mapHashToField(key, fieldOrder, isLE = false) {
4551 const len = key.length;
4552 const fieldLen = getFieldBytesLength(fieldOrder);
4553 const minLen = getMinHashLength(fieldOrder);
4554 if (len < 16 || len < minLen || len > 1024)
4555 throw new Error(`expected ${minLen}-1024 bytes of input, got ${len}`);
4556 const num = isLE ? bytesToNumberBE(key) : bytesToNumberLE(key);
4557 const reduced = mod(num, fieldOrder - _1n$7) + _1n$7;
4558 return isLE ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE(reduced, fieldLen);
4559 }
4560
4561 /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
4562 const _0n$6 = BigInt(0);
4563 const _1n$6 = BigInt(1);
4564 function wNAF(c, bits) {
4565 const constTimeNegate = (condition, item) => {
4566 const neg = item.negate();
4567 return condition ? neg : item;
4568 };
4569 const opts = (W) => {
4570 const windows = Math.ceil(bits / W) + 1;
4571 const windowSize = 2 ** (W - 1);
4572 return { windows, windowSize };
4573 };
4574 return {
4575 constTimeNegate,
4576 unsafeLadder(elm, n) {
4577 let p = c.ZERO;
4578 let d = elm;
4579 while (n > _0n$6) {
4580 if (n & _1n$6)
4581 p = p.add(d);
4582 d = d.double();
4583 n >>= _1n$6;
4584 }
4585 return p;
4586 },
4587 precomputeWindow(elm, W) {
4588 const { windows, windowSize } = opts(W);
4589 const points = [];
4590 let p = elm;
4591 let base = p;
4592 for (let window = 0; window < windows; window++) {
4593 base = p;
4594 points.push(base);
4595 for (let i = 1; i < windowSize; i++) {
4596 base = base.add(p);
4597 points.push(base);
4598 }
4599 p = base.double();
4600 }
4601 return points;
4602 },
4603 wNAF(W, precomputes, n) {
4604 const { windows, windowSize } = opts(W);
4605 let p = c.ZERO;
4606 let f = c.BASE;
4607 const mask = BigInt(2 ** W - 1);
4608 const maxNumber = 2 ** W;
4609 const shiftBy = BigInt(W);
4610 for (let window = 0; window < windows; window++) {
4611 const offset = window * windowSize;
4612 let wbits = Number(n & mask);
4613 n >>= shiftBy;
4614 if (wbits > windowSize) {
4615 wbits -= maxNumber;
4616 n += _1n$6;
4617 }
4618 const offset1 = offset;
4619 const offset2 = offset + Math.abs(wbits) - 1;
4620 const cond1 = window % 2 !== 0;
4621 const cond2 = wbits < 0;
4622 if (wbits === 0) {
4623 f = f.add(constTimeNegate(cond1, precomputes[offset1]));
4624 }
4625 else {
4626 p = p.add(constTimeNegate(cond2, precomputes[offset2]));
4627 }
4628 }
4629 return { p, f };
4630 },
4631 wNAFCached(P, precomputesMap, n, transform) {
4632 const W = P._WINDOW_SIZE || 1;
4633 let comp = precomputesMap.get(P);
4634 if (!comp) {
4635 comp = this.precomputeWindow(P, W);
4636 if (W !== 1) {
4637 precomputesMap.set(P, transform(comp));
4638 }
4639 }
4640 return this.wNAF(W, comp, n);
4641 },
4642 };
4643 }
4644 function validateBasic(curve) {
4645 validateField(curve.Fp);
4646 validateObject(curve, {
4647 n: 'bigint',
4648 h: 'bigint',
4649 Gx: 'field',
4650 Gy: 'field',
4651 }, {
4652 nBitLength: 'isSafeInteger',
4653 nByteLength: 'isSafeInteger',
4654 });
4655 return Object.freeze({
4656 ...nLength(curve.n, curve.nBitLength),
4657 ...curve,
4658 ...{ p: curve.Fp.ORDER },
4659 });
4660 }
4661
4662 /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
4663 function validatePointOpts(curve) {
4664 const opts = validateBasic(curve);
4665 validateObject(opts, {
4666 a: 'field',
4667 b: 'field',
4668 }, {
4669 allowedPrivateKeyLengths: 'array',
4670 wrapPrivateKey: 'boolean',
4671 isTorsionFree: 'function',
4672 clearCofactor: 'function',
4673 allowInfinityPoint: 'boolean',
4674 fromBytes: 'function',
4675 toBytes: 'function',
4676 });
4677 const { endo, Fp, a } = opts;
4678 if (endo) {
4679 if (!Fp.eql(a, Fp.ZERO)) {
4680 throw new Error('Endomorphism can only be defined for Koblitz curves that have a=0');
4681 }
4682 if (typeof endo !== 'object' ||
4683 typeof endo.beta !== 'bigint' ||
4684 typeof endo.splitScalar !== 'function') {
4685 throw new Error('Expected endomorphism with beta: bigint and splitScalar: function');
4686 }
4687 }
4688 return Object.freeze({ ...opts });
4689 }
4690 const { bytesToNumberBE: b2n, hexToBytes: h2b } = ut;
4691 const DER = {
4692 Err: class DERErr extends Error {
4693 constructor(m = '') {
4694 super(m);
4695 }
4696 },
4697 _parseInt(data) {
4698 const { Err: E } = DER;
4699 if (data.length < 2 || data[0] !== 0x02)
4700 throw new E('Invalid signature integer tag');
4701 const len = data[1];
4702 const res = data.subarray(2, len + 2);
4703 if (!len || res.length !== len)
4704 throw new E('Invalid signature integer: wrong length');
4705 if (res[0] & 0b10000000)
4706 throw new E('Invalid signature integer: negative');
4707 if (res[0] === 0x00 && !(res[1] & 0b10000000))
4708 throw new E('Invalid signature integer: unnecessary leading zero');
4709 return { d: b2n(res), l: data.subarray(len + 2) };
4710 },
4711 toSig(hex) {
4712 const { Err: E } = DER;
4713 const data = typeof hex === 'string' ? h2b(hex) : hex;
4714 if (!isBytes(data))
4715 throw new Error('ui8a expected');
4716 let l = data.length;
4717 if (l < 2 || data[0] != 0x30)
4718 throw new E('Invalid signature tag');
4719 if (data[1] !== l - 2)
4720 throw new E('Invalid signature: incorrect length');
4721 const { d: r, l: sBytes } = DER._parseInt(data.subarray(2));
4722 const { d: s, l: rBytesLeft } = DER._parseInt(sBytes);
4723 if (rBytesLeft.length)
4724 throw new E('Invalid signature: left bytes after parsing');
4725 return { r, s };
4726 },
4727 hexFromSig(sig) {
4728 const slice = (s) => (Number.parseInt(s[0], 16) & 0b1000 ? '00' + s : s);
4729 const h = (num) => {
4730 const hex = num.toString(16);
4731 return hex.length & 1 ? `0${hex}` : hex;
4732 };
4733 const s = slice(h(sig.s));
4734 const r = slice(h(sig.r));
4735 const shl = s.length / 2;
4736 const rhl = r.length / 2;
4737 const sl = h(shl);
4738 const rl = h(rhl);
4739 return `30${h(rhl + shl + 4)}02${rl}${r}02${sl}${s}`;
4740 },
4741 };
4742 const _0n$5 = BigInt(0), _1n$5 = BigInt(1), _2n$4 = BigInt(2), _3n = BigInt(3), _4n = BigInt(4);
4743 function weierstrassPoints(opts) {
4744 const CURVE = validatePointOpts(opts);
4745 const { Fp } = CURVE;
4746 const toBytes = CURVE.toBytes ||
4747 ((_c, point, _isCompressed) => {
4748 const a = point.toAffine();
4749 return concatBytes(Uint8Array.from([0x04]), Fp.toBytes(a.x), Fp.toBytes(a.y));
4750 });
4751 const fromBytes = CURVE.fromBytes ||
4752 ((bytes) => {
4753 const tail = bytes.subarray(1);
4754 const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));
4755 const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));
4756 return { x, y };
4757 });
4758 function weierstrassEquation(x) {
4759 const { a, b } = CURVE;
4760 const x2 = Fp.sqr(x);
4761 const x3 = Fp.mul(x2, x);
4762 return Fp.add(Fp.add(x3, Fp.mul(x, a)), b);
4763 }
4764 if (!Fp.eql(Fp.sqr(CURVE.Gy), weierstrassEquation(CURVE.Gx)))
4765 throw new Error('bad generator point: equation left != right');
4766 function isWithinCurveOrder(num) {
4767 return typeof num === 'bigint' && _0n$5 < num && num < CURVE.n;
4768 }
4769 function assertGE(num) {
4770 if (!isWithinCurveOrder(num))
4771 throw new Error('Expected valid bigint: 0 < bigint < curve.n');
4772 }
4773 function normPrivateKeyToScalar(key) {
4774 const { allowedPrivateKeyLengths: lengths, nByteLength, wrapPrivateKey, n } = CURVE;
4775 if (lengths && typeof key !== 'bigint') {
4776 if (isBytes(key))
4777 key = bytesToHex(key);
4778 if (typeof key !== 'string' || !lengths.includes(key.length))
4779 throw new Error('Invalid key');
4780 key = key.padStart(nByteLength * 2, '0');
4781 }
4782 let num;
4783 try {
4784 num =
4785 typeof key === 'bigint'
4786 ? key
4787 : bytesToNumberBE(ensureBytes('private key', key, nByteLength));
4788 }
4789 catch (error) {
4790 throw new Error(`private key must be ${nByteLength} bytes, hex or bigint, not ${typeof key}`);
4791 }
4792 if (wrapPrivateKey)
4793 num = mod(num, n);
4794 assertGE(num);
4795 return num;
4796 }
4797 const pointPrecomputes = new Map();
4798 function assertPrjPoint(other) {
4799 if (!(other instanceof Point))
4800 throw new Error('ProjectivePoint expected');
4801 }
4802 class Point {
4803 constructor(px, py, pz) {
4804 this.px = px;
4805 this.py = py;
4806 this.pz = pz;
4807 if (px == null || !Fp.isValid(px))
4808 throw new Error('x required');
4809 if (py == null || !Fp.isValid(py))
4810 throw new Error('y required');
4811 if (pz == null || !Fp.isValid(pz))
4812 throw new Error('z required');
4813 }
4814 static fromAffine(p) {
4815 const { x, y } = p || {};
4816 if (!p || !Fp.isValid(x) || !Fp.isValid(y))
4817 throw new Error('invalid affine point');
4818 if (p instanceof Point)
4819 throw new Error('projective point not allowed');
4820 const is0 = (i) => Fp.eql(i, Fp.ZERO);
4821 if (is0(x) && is0(y))
4822 return Point.ZERO;
4823 return new Point(x, y, Fp.ONE);
4824 }
4825 get x() {
4826 return this.toAffine().x;
4827 }
4828 get y() {
4829 return this.toAffine().y;
4830 }
4831 static normalizeZ(points) {
4832 const toInv = Fp.invertBatch(points.map((p) => p.pz));
4833 return points.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);
4834 }
4835 static fromHex(hex) {
4836 const P = Point.fromAffine(fromBytes(ensureBytes('pointHex', hex)));
4837 P.assertValidity();
4838 return P;
4839 }
4840 static fromPrivateKey(privateKey) {
4841 return Point.BASE.multiply(normPrivateKeyToScalar(privateKey));
4842 }
4843 _setWindowSize(windowSize) {
4844 this._WINDOW_SIZE = windowSize;
4845 pointPrecomputes.delete(this);
4846 }
4847 assertValidity() {
4848 if (this.is0()) {
4849 if (CURVE.allowInfinityPoint && !Fp.is0(this.py))
4850 return;
4851 throw new Error('bad point: ZERO');
4852 }
4853 const { x, y } = this.toAffine();
4854 if (!Fp.isValid(x) || !Fp.isValid(y))
4855 throw new Error('bad point: x or y not FE');
4856 const left = Fp.sqr(y);
4857 const right = weierstrassEquation(x);
4858 if (!Fp.eql(left, right))
4859 throw new Error('bad point: equation left != right');
4860 if (!this.isTorsionFree())
4861 throw new Error('bad point: not in prime-order subgroup');
4862 }
4863 hasEvenY() {
4864 const { y } = this.toAffine();
4865 if (Fp.isOdd)
4866 return !Fp.isOdd(y);
4867 throw new Error("Field doesn't support isOdd");
4868 }
4869 equals(other) {
4870 assertPrjPoint(other);
4871 const { px: X1, py: Y1, pz: Z1 } = this;
4872 const { px: X2, py: Y2, pz: Z2 } = other;
4873 const U1 = Fp.eql(Fp.mul(X1, Z2), Fp.mul(X2, Z1));
4874 const U2 = Fp.eql(Fp.mul(Y1, Z2), Fp.mul(Y2, Z1));
4875 return U1 && U2;
4876 }
4877 negate() {
4878 return new Point(this.px, Fp.neg(this.py), this.pz);
4879 }
4880 double() {
4881 const { a, b } = CURVE;
4882 const b3 = Fp.mul(b, _3n);
4883 const { px: X1, py: Y1, pz: Z1 } = this;
4884 let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO;
4885 let t0 = Fp.mul(X1, X1);
4886 let t1 = Fp.mul(Y1, Y1);
4887 let t2 = Fp.mul(Z1, Z1);
4888 let t3 = Fp.mul(X1, Y1);
4889 t3 = Fp.add(t3, t3);
4890 Z3 = Fp.mul(X1, Z1);
4891 Z3 = Fp.add(Z3, Z3);
4892 X3 = Fp.mul(a, Z3);
4893 Y3 = Fp.mul(b3, t2);
4894 Y3 = Fp.add(X3, Y3);
4895 X3 = Fp.sub(t1, Y3);
4896 Y3 = Fp.add(t1, Y3);
4897 Y3 = Fp.mul(X3, Y3);
4898 X3 = Fp.mul(t3, X3);
4899 Z3 = Fp.mul(b3, Z3);
4900 t2 = Fp.mul(a, t2);
4901 t3 = Fp.sub(t0, t2);
4902 t3 = Fp.mul(a, t3);
4903 t3 = Fp.add(t3, Z3);
4904 Z3 = Fp.add(t0, t0);
4905 t0 = Fp.add(Z3, t0);
4906 t0 = Fp.add(t0, t2);
4907 t0 = Fp.mul(t0, t3);
4908 Y3 = Fp.add(Y3, t0);
4909 t2 = Fp.mul(Y1, Z1);
4910 t2 = Fp.add(t2, t2);
4911 t0 = Fp.mul(t2, t3);
4912 X3 = Fp.sub(X3, t0);
4913 Z3 = Fp.mul(t2, t1);
4914 Z3 = Fp.add(Z3, Z3);
4915 Z3 = Fp.add(Z3, Z3);
4916 return new Point(X3, Y3, Z3);
4917 }
4918 add(other) {
4919 assertPrjPoint(other);
4920 const { px: X1, py: Y1, pz: Z1 } = this;
4921 const { px: X2, py: Y2, pz: Z2 } = other;
4922 let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO;
4923 const a = CURVE.a;
4924 const b3 = Fp.mul(CURVE.b, _3n);
4925 let t0 = Fp.mul(X1, X2);
4926 let t1 = Fp.mul(Y1, Y2);
4927 let t2 = Fp.mul(Z1, Z2);
4928 let t3 = Fp.add(X1, Y1);
4929 let t4 = Fp.add(X2, Y2);
4930 t3 = Fp.mul(t3, t4);
4931 t4 = Fp.add(t0, t1);
4932 t3 = Fp.sub(t3, t4);
4933 t4 = Fp.add(X1, Z1);
4934 let t5 = Fp.add(X2, Z2);
4935 t4 = Fp.mul(t4, t5);
4936 t5 = Fp.add(t0, t2);
4937 t4 = Fp.sub(t4, t5);
4938 t5 = Fp.add(Y1, Z1);
4939 X3 = Fp.add(Y2, Z2);
4940 t5 = Fp.mul(t5, X3);
4941 X3 = Fp.add(t1, t2);
4942 t5 = Fp.sub(t5, X3);
4943 Z3 = Fp.mul(a, t4);
4944 X3 = Fp.mul(b3, t2);
4945 Z3 = Fp.add(X3, Z3);
4946 X3 = Fp.sub(t1, Z3);
4947 Z3 = Fp.add(t1, Z3);
4948 Y3 = Fp.mul(X3, Z3);
4949 t1 = Fp.add(t0, t0);
4950 t1 = Fp.add(t1, t0);
4951 t2 = Fp.mul(a, t2);
4952 t4 = Fp.mul(b3, t4);
4953 t1 = Fp.add(t1, t2);
4954 t2 = Fp.sub(t0, t2);
4955 t2 = Fp.mul(a, t2);
4956 t4 = Fp.add(t4, t2);
4957 t0 = Fp.mul(t1, t4);
4958 Y3 = Fp.add(Y3, t0);
4959 t0 = Fp.mul(t5, t4);
4960 X3 = Fp.mul(t3, X3);
4961 X3 = Fp.sub(X3, t0);
4962 t0 = Fp.mul(t3, t1);
4963 Z3 = Fp.mul(t5, Z3);
4964 Z3 = Fp.add(Z3, t0);
4965 return new Point(X3, Y3, Z3);
4966 }
4967 subtract(other) {
4968 return this.add(other.negate());
4969 }
4970 is0() {
4971 return this.equals(Point.ZERO);
4972 }
4973 wNAF(n) {
4974 return wnaf.wNAFCached(this, pointPrecomputes, n, (comp) => {
4975 const toInv = Fp.invertBatch(comp.map((p) => p.pz));
4976 return comp.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);
4977 });
4978 }
4979 multiplyUnsafe(n) {
4980 const I = Point.ZERO;
4981 if (n === _0n$5)
4982 return I;
4983 assertGE(n);
4984 if (n === _1n$5)
4985 return this;
4986 const { endo } = CURVE;
4987 if (!endo)
4988 return wnaf.unsafeLadder(this, n);
4989 let { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);
4990 let k1p = I;
4991 let k2p = I;
4992 let d = this;
4993 while (k1 > _0n$5 || k2 > _0n$5) {
4994 if (k1 & _1n$5)
4995 k1p = k1p.add(d);
4996 if (k2 & _1n$5)
4997 k2p = k2p.add(d);
4998 d = d.double();
4999 k1 >>= _1n$5;
5000 k2 >>= _1n$5;
5001 }
5002 if (k1neg)
5003 k1p = k1p.negate();
5004 if (k2neg)
5005 k2p = k2p.negate();
5006 k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);
5007 return k1p.add(k2p);
5008 }
5009 multiply(scalar) {
5010 assertGE(scalar);
5011 let n = scalar;
5012 let point, fake;
5013 const { endo } = CURVE;
5014 if (endo) {
5015 const { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);
5016 let { p: k1p, f: f1p } = this.wNAF(k1);
5017 let { p: k2p, f: f2p } = this.wNAF(k2);
5018 k1p = wnaf.constTimeNegate(k1neg, k1p);
5019 k2p = wnaf.constTimeNegate(k2neg, k2p);
5020 k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);
5021 point = k1p.add(k2p);
5022 fake = f1p.add(f2p);
5023 }
5024 else {
5025 const { p, f } = this.wNAF(n);
5026 point = p;
5027 fake = f;
5028 }
5029 return Point.normalizeZ([point, fake])[0];
5030 }
5031 multiplyAndAddUnsafe(Q, a, b) {
5032 const G = Point.BASE;
5033 const mul = (P, a
5034 ) => (a === _0n$5 || a === _1n$5 || !P.equals(G) ? P.multiplyUnsafe(a) : P.multiply(a));
5035 const sum = mul(this, a).add(mul(Q, b));
5036 return sum.is0() ? undefined : sum;
5037 }
5038 toAffine(iz) {
5039 const { px: x, py: y, pz: z } = this;
5040 const is0 = this.is0();
5041 if (iz == null)
5042 iz = is0 ? Fp.ONE : Fp.inv(z);
5043 const ax = Fp.mul(x, iz);
5044 const ay = Fp.mul(y, iz);
5045 const zz = Fp.mul(z, iz);
5046 if (is0)
5047 return { x: Fp.ZERO, y: Fp.ZERO };
5048 if (!Fp.eql(zz, Fp.ONE))
5049 throw new Error('invZ was invalid');
5050 return { x: ax, y: ay };
5051 }
5052 isTorsionFree() {
5053 const { h: cofactor, isTorsionFree } = CURVE;
5054 if (cofactor === _1n$5)
5055 return true;
5056 if (isTorsionFree)
5057 return isTorsionFree(Point, this);
5058 throw new Error('isTorsionFree() has not been declared for the elliptic curve');
5059 }
5060 clearCofactor() {
5061 const { h: cofactor, clearCofactor } = CURVE;
5062 if (cofactor === _1n$5)
5063 return this;
5064 if (clearCofactor)
5065 return clearCofactor(Point, this);
5066 return this.multiplyUnsafe(CURVE.h);
5067 }
5068 toRawBytes(isCompressed = true) {
5069 this.assertValidity();
5070 return toBytes(Point, this, isCompressed);
5071 }
5072 toHex(isCompressed = true) {
5073 return bytesToHex(this.toRawBytes(isCompressed));
5074 }
5075 }
5076 Point.BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);
5077 Point.ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO);
5078 const _bits = CURVE.nBitLength;
5079 const wnaf = wNAF(Point, CURVE.endo ? Math.ceil(_bits / 2) : _bits);
5080 return {
5081 CURVE,
5082 ProjectivePoint: Point,
5083 normPrivateKeyToScalar,
5084 weierstrassEquation,
5085 isWithinCurveOrder,
5086 };
5087 }
5088 function validateOpts$2(curve) {
5089 const opts = validateBasic(curve);
5090 validateObject(opts, {
5091 hash: 'hash',
5092 hmac: 'function',
5093 randomBytes: 'function',
5094 }, {
5095 bits2int: 'function',
5096 bits2int_modN: 'function',
5097 lowS: 'boolean',
5098 });
5099 return Object.freeze({ lowS: true, ...opts });
5100 }
5101 function weierstrass(curveDef) {
5102 const CURVE = validateOpts$2(curveDef);
5103 const { Fp, n: CURVE_ORDER } = CURVE;
5104 const compressedLen = Fp.BYTES + 1;
5105 const uncompressedLen = 2 * Fp.BYTES + 1;
5106 function isValidFieldElement(num) {
5107 return _0n$5 < num && num < Fp.ORDER;
5108 }
5109 function modN(a) {
5110 return mod(a, CURVE_ORDER);
5111 }
5112 function invN(a) {
5113 return invert(a, CURVE_ORDER);
5114 }
5115 const { ProjectivePoint: Point, normPrivateKeyToScalar, weierstrassEquation, isWithinCurveOrder, } = weierstrassPoints({
5116 ...CURVE,
5117 toBytes(_c, point, isCompressed) {
5118 const a = point.toAffine();
5119 const x = Fp.toBytes(a.x);
5120 const cat = concatBytes;
5121 if (isCompressed) {
5122 return cat(Uint8Array.from([point.hasEvenY() ? 0x02 : 0x03]), x);
5123 }
5124 else {
5125 return cat(Uint8Array.from([0x04]), x, Fp.toBytes(a.y));
5126 }
5127 },
5128 fromBytes(bytes) {
5129 const len = bytes.length;
5130 const head = bytes[0];
5131 const tail = bytes.subarray(1);
5132 if (len === compressedLen && (head === 0x02 || head === 0x03)) {
5133 const x = bytesToNumberBE(tail);
5134 if (!isValidFieldElement(x))
5135 throw new Error('Point is not on curve');
5136 const y2 = weierstrassEquation(x);
5137 let y = Fp.sqrt(y2);
5138 const isYOdd = (y & _1n$5) === _1n$5;
5139 const isHeadOdd = (head & 1) === 1;
5140 if (isHeadOdd !== isYOdd)
5141 y = Fp.neg(y);
5142 return { x, y };
5143 }
5144 else if (len === uncompressedLen && head === 0x04) {
5145 const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));
5146 const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));
5147 return { x, y };
5148 }
5149 else {
5150 throw new Error(`Point of length ${len} was invalid. Expected ${compressedLen} compressed bytes or ${uncompressedLen} uncompressed bytes`);
5151 }
5152 },
5153 });
5154 const numToNByteStr = (num) => bytesToHex(numberToBytesBE(num, CURVE.nByteLength));
5155 function isBiggerThanHalfOrder(number) {
5156 const HALF = CURVE_ORDER >> _1n$5;
5157 return number > HALF;
5158 }
5159 function normalizeS(s) {
5160 return isBiggerThanHalfOrder(s) ? modN(-s) : s;
5161 }
5162 const slcNum = (b, from, to) => bytesToNumberBE(b.slice(from, to));
5163 class Signature {
5164 constructor(r, s, recovery) {
5165 this.r = r;
5166 this.s = s;
5167 this.recovery = recovery;
5168 this.assertValidity();
5169 }
5170 static fromCompact(hex) {
5171 const l = CURVE.nByteLength;
5172 hex = ensureBytes('compactSignature', hex, l * 2);
5173 return new Signature(slcNum(hex, 0, l), slcNum(hex, l, 2 * l));
5174 }
5175 static fromDER(hex) {
5176 const { r, s } = DER.toSig(ensureBytes('DER', hex));
5177 return new Signature(r, s);
5178 }
5179 assertValidity() {
5180 if (!isWithinCurveOrder(this.r))
5181 throw new Error('r must be 0 < r < CURVE.n');
5182 if (!isWithinCurveOrder(this.s))
5183 throw new Error('s must be 0 < s < CURVE.n');
5184 }
5185 addRecoveryBit(recovery) {
5186 return new Signature(this.r, this.s, recovery);
5187 }
5188 recoverPublicKey(msgHash) {
5189 const { r, s, recovery: rec } = this;
5190 const h = bits2int_modN(ensureBytes('msgHash', msgHash));
5191 if (rec == null || ![0, 1, 2, 3].includes(rec))
5192 throw new Error('recovery id invalid');
5193 const radj = rec === 2 || rec === 3 ? r + CURVE.n : r;
5194 if (radj >= Fp.ORDER)
5195 throw new Error('recovery id 2 or 3 invalid');
5196 const prefix = (rec & 1) === 0 ? '02' : '03';
5197 const R = Point.fromHex(prefix + numToNByteStr(radj));
5198 const ir = invN(radj);
5199 const u1 = modN(-h * ir);
5200 const u2 = modN(s * ir);
5201 const Q = Point.BASE.multiplyAndAddUnsafe(R, u1, u2);
5202 if (!Q)
5203 throw new Error('point at infinify');
5204 Q.assertValidity();
5205 return Q;
5206 }
5207 hasHighS() {
5208 return isBiggerThanHalfOrder(this.s);
5209 }
5210 normalizeS() {
5211 return this.hasHighS() ? new Signature(this.r, modN(-this.s), this.recovery) : this;
5212 }
5213 toDERRawBytes() {
5214 return hexToBytes(this.toDERHex());
5215 }
5216 toDERHex() {
5217 return DER.hexFromSig({ r: this.r, s: this.s });
5218 }
5219 toCompactRawBytes() {
5220 return hexToBytes(this.toCompactHex());
5221 }
5222 toCompactHex() {
5223 return numToNByteStr(this.r) + numToNByteStr(this.s);
5224 }
5225 }
5226 const utils = {
5227 isValidPrivateKey(privateKey) {
5228 try {
5229 normPrivateKeyToScalar(privateKey);
5230 return true;
5231 }
5232 catch (error) {
5233 return false;
5234 }
5235 },
5236 normPrivateKeyToScalar: normPrivateKeyToScalar,
5237 randomPrivateKey: () => {
5238 const length = getMinHashLength(CURVE.n);
5239 return mapHashToField(CURVE.randomBytes(length), CURVE.n);
5240 },
5241 precompute(windowSize = 8, point = Point.BASE) {
5242 point._setWindowSize(windowSize);
5243 point.multiply(BigInt(3));
5244 return point;
5245 },
5246 };
5247 function getPublicKey(privateKey, isCompressed = true) {
5248 return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);
5249 }
5250 function isProbPub(item) {
5251 const arr = isBytes(item);
5252 const str = typeof item === 'string';
5253 const len = (arr || str) && item.length;
5254 if (arr)
5255 return len === compressedLen || len === uncompressedLen;
5256 if (str)
5257 return len === 2 * compressedLen || len === 2 * uncompressedLen;
5258 if (item instanceof Point)
5259 return true;
5260 return false;
5261 }
5262 function getSharedSecret(privateA, publicB, isCompressed = true) {
5263 if (isProbPub(privateA))
5264 throw new Error('first arg must be private key');
5265 if (!isProbPub(publicB))
5266 throw new Error('second arg must be public key');
5267 const b = Point.fromHex(publicB);
5268 return b.multiply(normPrivateKeyToScalar(privateA)).toRawBytes(isCompressed);
5269 }
5270 const bits2int = CURVE.bits2int ||
5271 function (bytes) {
5272 const num = bytesToNumberBE(bytes);
5273 const delta = bytes.length * 8 - CURVE.nBitLength;
5274 return delta > 0 ? num >> BigInt(delta) : num;
5275 };
5276 const bits2int_modN = CURVE.bits2int_modN ||
5277 function (bytes) {
5278 return modN(bits2int(bytes));
5279 };
5280 const ORDER_MASK = bitMask(CURVE.nBitLength);
5281 function int2octets(num) {
5282 if (typeof num !== 'bigint')
5283 throw new Error('bigint expected');
5284 if (!(_0n$5 <= num && num < ORDER_MASK))
5285 throw new Error(`bigint expected < 2^${CURVE.nBitLength}`);
5286 return numberToBytesBE(num, CURVE.nByteLength);
5287 }
5288 function prepSig(msgHash, privateKey, opts = defaultSigOpts) {
5289 if (['recovered', 'canonical'].some((k) => k in opts))
5290 throw new Error('sign() legacy options not supported');
5291 const { hash, randomBytes } = CURVE;
5292 let { lowS, prehash, extraEntropy: ent } = opts;
5293 if (lowS == null)
5294 lowS = true;
5295 msgHash = ensureBytes('msgHash', msgHash);
5296 if (prehash)
5297 msgHash = ensureBytes('prehashed msgHash', hash(msgHash));
5298 const h1int = bits2int_modN(msgHash);
5299 const d = normPrivateKeyToScalar(privateKey);
5300 const seedArgs = [int2octets(d), int2octets(h1int)];
5301 if (ent != null) {
5302 const e = ent === true ? randomBytes(Fp.BYTES) : ent;
5303 seedArgs.push(ensureBytes('extraEntropy', e));
5304 }
5305 const seed = concatBytes(...seedArgs);
5306 const m = h1int;
5307 function k2sig(kBytes) {
5308 const k = bits2int(kBytes);
5309 if (!isWithinCurveOrder(k))
5310 return;
5311 const ik = invN(k);
5312 const q = Point.BASE.multiply(k).toAffine();
5313 const r = modN(q.x);
5314 if (r === _0n$5)
5315 return;
5316 const s = modN(ik * modN(m + r * d));
5317 if (s === _0n$5)
5318 return;
5319 let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n$5);
5320 let normS = s;
5321 if (lowS && isBiggerThanHalfOrder(s)) {
5322 normS = normalizeS(s);
5323 recovery ^= 1;
5324 }
5325 return new Signature(r, normS, recovery);
5326 }
5327 return { seed, k2sig };
5328 }
5329 const defaultSigOpts = { lowS: CURVE.lowS, prehash: false };
5330 const defaultVerOpts = { lowS: CURVE.lowS, prehash: false };
5331 function sign(msgHash, privKey, opts = defaultSigOpts) {
5332 const { seed, k2sig } = prepSig(msgHash, privKey, opts);
5333 const C = CURVE;
5334 const drbg = createHmacDrbg(C.hash.outputLen, C.nByteLength, C.hmac);
5335 return drbg(seed, k2sig);
5336 }
5337 Point.BASE._setWindowSize(8);
5338 function verify(signature, msgHash, publicKey, opts = defaultVerOpts) {
5339 const sg = signature;
5340 msgHash = ensureBytes('msgHash', msgHash);
5341 publicKey = ensureBytes('publicKey', publicKey);
5342 if ('strict' in opts)
5343 throw new Error('options.strict was renamed to lowS');
5344 const { lowS, prehash } = opts;
5345 let _sig = undefined;
5346 let P;
5347 try {
5348 if (typeof sg === 'string' || isBytes(sg)) {
5349 try {
5350 _sig = Signature.fromDER(sg);
5351 }
5352 catch (derError) {
5353 if (!(derError instanceof DER.Err))
5354 throw derError;
5355 _sig = Signature.fromCompact(sg);
5356 }
5357 }
5358 else if (typeof sg === 'object' && typeof sg.r === 'bigint' && typeof sg.s === 'bigint') {
5359 const { r, s } = sg;
5360 _sig = new Signature(r, s);
5361 }
5362 else {
5363 throw new Error('PARSE');
5364 }
5365 P = Point.fromHex(publicKey);
5366 }
5367 catch (error) {
5368 if (error.message === 'PARSE')
5369 throw new Error(`signature must be Signature instance, Uint8Array or hex string`);
5370 return false;
5371 }
5372 if (lowS && _sig.hasHighS())
5373 return false;
5374 if (prehash)
5375 msgHash = CURVE.hash(msgHash);
5376 const { r, s } = _sig;
5377 const h = bits2int_modN(msgHash);
5378 const is = invN(s);
5379 const u1 = modN(h * is);
5380 const u2 = modN(r * is);
5381 const R = Point.BASE.multiplyAndAddUnsafe(P, u1, u2)?.toAffine();
5382 if (!R)
5383 return false;
5384 const v = modN(R.x);
5385 return v === r;
5386 }
5387 return {
5388 CURVE,
5389 getPublicKey,
5390 getSharedSecret,
5391 sign,
5392 verify,
5393 ProjectivePoint: Point,
5394 Signature,
5395 utils,
5396 };
5397 }
5398 function SWUFpSqrtRatio(Fp, Z) {
5399 const q = Fp.ORDER;
5400 let l = _0n$5;
5401 for (let o = q - _1n$5; o % _2n$4 === _0n$5; o /= _2n$4)
5402 l += _1n$5;
5403 const c1 = l;
5404 const _2n_pow_c1_1 = _2n$4 << (c1 - _1n$5 - _1n$5);
5405 const _2n_pow_c1 = _2n_pow_c1_1 * _2n$4;
5406 const c2 = (q - _1n$5) / _2n_pow_c1;
5407 const c3 = (c2 - _1n$5) / _2n$4;
5408 const c4 = _2n_pow_c1 - _1n$5;
5409 const c5 = _2n_pow_c1_1;
5410 const c6 = Fp.pow(Z, c2);
5411 const c7 = Fp.pow(Z, (c2 + _1n$5) / _2n$4);
5412 let sqrtRatio = (u, v) => {
5413 let tv1 = c6;
5414 let tv2 = Fp.pow(v, c4);
5415 let tv3 = Fp.sqr(tv2);
5416 tv3 = Fp.mul(tv3, v);
5417 let tv5 = Fp.mul(u, tv3);
5418 tv5 = Fp.pow(tv5, c3);
5419 tv5 = Fp.mul(tv5, tv2);
5420 tv2 = Fp.mul(tv5, v);
5421 tv3 = Fp.mul(tv5, u);
5422 let tv4 = Fp.mul(tv3, tv2);
5423 tv5 = Fp.pow(tv4, c5);
5424 let isQR = Fp.eql(tv5, Fp.ONE);
5425 tv2 = Fp.mul(tv3, c7);
5426 tv5 = Fp.mul(tv4, tv1);
5427 tv3 = Fp.cmov(tv2, tv3, isQR);
5428 tv4 = Fp.cmov(tv5, tv4, isQR);
5429 for (let i = c1; i > _1n$5; i--) {
5430 let tv5 = i - _2n$4;
5431 tv5 = _2n$4 << (tv5 - _1n$5);
5432 let tvv5 = Fp.pow(tv4, tv5);
5433 const e1 = Fp.eql(tvv5, Fp.ONE);
5434 tv2 = Fp.mul(tv3, tv1);
5435 tv1 = Fp.mul(tv1, tv1);
5436 tvv5 = Fp.mul(tv4, tv1);
5437 tv3 = Fp.cmov(tv2, tv3, e1);
5438 tv4 = Fp.cmov(tvv5, tv4, e1);
5439 }
5440 return { isValid: isQR, value: tv3 };
5441 };
5442 if (Fp.ORDER % _4n === _3n) {
5443 const c1 = (Fp.ORDER - _3n) / _4n;
5444 const c2 = Fp.sqrt(Fp.neg(Z));
5445 sqrtRatio = (u, v) => {
5446 let tv1 = Fp.sqr(v);
5447 const tv2 = Fp.mul(u, v);
5448 tv1 = Fp.mul(tv1, tv2);
5449 let y1 = Fp.pow(tv1, c1);
5450 y1 = Fp.mul(y1, tv2);
5451 const y2 = Fp.mul(y1, c2);
5452 const tv3 = Fp.mul(Fp.sqr(y1), v);
5453 const isQR = Fp.eql(tv3, u);
5454 let y = Fp.cmov(y2, y1, isQR);
5455 return { isValid: isQR, value: y };
5456 };
5457 }
5458 return sqrtRatio;
5459 }
5460 function mapToCurveSimpleSWU(Fp, opts) {
5461 validateField(Fp);
5462 if (!Fp.isValid(opts.A) || !Fp.isValid(opts.B) || !Fp.isValid(opts.Z))
5463 throw new Error('mapToCurveSimpleSWU: invalid opts');
5464 const sqrtRatio = SWUFpSqrtRatio(Fp, opts.Z);
5465 if (!Fp.isOdd)
5466 throw new Error('Fp.isOdd is not implemented!');
5467 return (u) => {
5468 let tv1, tv2, tv3, tv4, tv5, tv6, x, y;
5469 tv1 = Fp.sqr(u);
5470 tv1 = Fp.mul(tv1, opts.Z);
5471 tv2 = Fp.sqr(tv1);
5472 tv2 = Fp.add(tv2, tv1);
5473 tv3 = Fp.add(tv2, Fp.ONE);
5474 tv3 = Fp.mul(tv3, opts.B);
5475 tv4 = Fp.cmov(opts.Z, Fp.neg(tv2), !Fp.eql(tv2, Fp.ZERO));
5476 tv4 = Fp.mul(tv4, opts.A);
5477 tv2 = Fp.sqr(tv3);
5478 tv6 = Fp.sqr(tv4);
5479 tv5 = Fp.mul(tv6, opts.A);
5480 tv2 = Fp.add(tv2, tv5);
5481 tv2 = Fp.mul(tv2, tv3);
5482 tv6 = Fp.mul(tv6, tv4);
5483 tv5 = Fp.mul(tv6, opts.B);
5484 tv2 = Fp.add(tv2, tv5);
5485 x = Fp.mul(tv1, tv3);
5486 const { isValid, value } = sqrtRatio(tv2, tv6);
5487 y = Fp.mul(tv1, u);
5488 y = Fp.mul(y, value);
5489 x = Fp.cmov(x, tv3, isValid);
5490 y = Fp.cmov(y, value, isValid);
5491 const e1 = Fp.isOdd(u) === Fp.isOdd(y);
5492 y = Fp.cmov(Fp.neg(y), y, e1);
5493 x = Fp.div(x, tv4);
5494 return { x, y };
5495 };
5496 }
5497
5498 function validateDST(dst) {
5499 if (isBytes(dst))
5500 return dst;
5501 if (typeof dst === 'string')
5502 return utf8ToBytes(dst);
5503 throw new Error('DST must be Uint8Array or string');
5504 }
5505 const os2ip = bytesToNumberBE;
5506 function i2osp(value, length) {
5507 if (value < 0 || value >= 1 << (8 * length)) {
5508 throw new Error(`bad I2OSP call: value=${value} length=${length}`);
5509 }
5510 const res = Array.from({ length }).fill(0);
5511 for (let i = length - 1; i >= 0; i--) {
5512 res[i] = value & 0xff;
5513 value >>>= 8;
5514 }
5515 return new Uint8Array(res);
5516 }
5517 function strxor(a, b) {
5518 const arr = new Uint8Array(a.length);
5519 for (let i = 0; i < a.length; i++) {
5520 arr[i] = a[i] ^ b[i];
5521 }
5522 return arr;
5523 }
5524 function abytes(item) {
5525 if (!isBytes(item))
5526 throw new Error('Uint8Array expected');
5527 }
5528 function isNum(item) {
5529 if (!Number.isSafeInteger(item))
5530 throw new Error('number expected');
5531 }
5532 function expand_message_xmd(msg, DST, lenInBytes, H) {
5533 abytes(msg);
5534 abytes(DST);
5535 isNum(lenInBytes);
5536 if (DST.length > 255)
5537 DST = H(concatBytes(utf8ToBytes('H2C-OVERSIZE-DST-'), DST));
5538 const { outputLen: b_in_bytes, blockLen: r_in_bytes } = H;
5539 const ell = Math.ceil(lenInBytes / b_in_bytes);
5540 if (ell > 255)
5541 throw new Error('Invalid xmd length');
5542 const DST_prime = concatBytes(DST, i2osp(DST.length, 1));
5543 const Z_pad = i2osp(0, r_in_bytes);
5544 const l_i_b_str = i2osp(lenInBytes, 2);
5545 const b = new Array(ell);
5546 const b_0 = H(concatBytes(Z_pad, msg, l_i_b_str, i2osp(0, 1), DST_prime));
5547 b[0] = H(concatBytes(b_0, i2osp(1, 1), DST_prime));
5548 for (let i = 1; i <= ell; i++) {
5549 const args = [strxor(b_0, b[i - 1]), i2osp(i + 1, 1), DST_prime];
5550 b[i] = H(concatBytes(...args));
5551 }
5552 const pseudo_random_bytes = concatBytes(...b);
5553 return pseudo_random_bytes.slice(0, lenInBytes);
5554 }
5555 function expand_message_xof(msg, DST, lenInBytes, k, H) {
5556 abytes(msg);
5557 abytes(DST);
5558 isNum(lenInBytes);
5559 if (DST.length > 255) {
5560 const dkLen = Math.ceil((2 * k) / 8);
5561 DST = H.create({ dkLen }).update(utf8ToBytes('H2C-OVERSIZE-DST-')).update(DST).digest();
5562 }
5563 if (lenInBytes > 65535 || DST.length > 255)
5564 throw new Error('expand_message_xof: invalid lenInBytes');
5565 return (H.create({ dkLen: lenInBytes })
5566 .update(msg)
5567 .update(i2osp(lenInBytes, 2))
5568 .update(DST)
5569 .update(i2osp(DST.length, 1))
5570 .digest());
5571 }
5572 function hash_to_field(msg, count, options) {
5573 validateObject(options, {
5574 DST: 'stringOrUint8Array',
5575 p: 'bigint',
5576 m: 'isSafeInteger',
5577 k: 'isSafeInteger',
5578 hash: 'hash',
5579 });
5580 const { p, k, m, hash, expand, DST: _DST } = options;
5581 abytes(msg);
5582 isNum(count);
5583 const DST = validateDST(_DST);
5584 const log2p = p.toString(2).length;
5585 const L = Math.ceil((log2p + k) / 8);
5586 const len_in_bytes = count * m * L;
5587 let prb;
5588 if (expand === 'xmd') {
5589 prb = expand_message_xmd(msg, DST, len_in_bytes, hash);
5590 }
5591 else if (expand === 'xof') {
5592 prb = expand_message_xof(msg, DST, len_in_bytes, k, hash);
5593 }
5594 else if (expand === '_internal_pass') {
5595 prb = msg;
5596 }
5597 else {
5598 throw new Error('expand must be "xmd" or "xof"');
5599 }
5600 const u = new Array(count);
5601 for (let i = 0; i < count; i++) {
5602 const e = new Array(m);
5603 for (let j = 0; j < m; j++) {
5604 const elm_offset = L * (j + i * m);
5605 const tv = prb.subarray(elm_offset, elm_offset + L);
5606 e[j] = mod(os2ip(tv), p);
5607 }
5608 u[i] = e;
5609 }
5610 return u;
5611 }
5612 function isogenyMap(field, map) {
5613 const COEFF = map.map((i) => Array.from(i).reverse());
5614 return (x, y) => {
5615 const [xNum, xDen, yNum, yDen] = COEFF.map((val) => val.reduce((acc, i) => field.add(field.mul(acc, x), i)));
5616 x = field.div(xNum, xDen);
5617 y = field.mul(y, field.div(yNum, yDen));
5618 return { x, y };
5619 };
5620 }
5621 function createHasher(Point, mapToCurve, def) {
5622 if (typeof mapToCurve !== 'function')
5623 throw new Error('mapToCurve() must be defined');
5624 return {
5625 hashToCurve(msg, options) {
5626 const u = hash_to_field(msg, 2, { ...def, DST: def.DST, ...options });
5627 const u0 = Point.fromAffine(mapToCurve(u[0]));
5628 const u1 = Point.fromAffine(mapToCurve(u[1]));
5629 const P = u0.add(u1).clearCofactor();
5630 P.assertValidity();
5631 return P;
5632 },
5633 encodeToCurve(msg, options) {
5634 const u = hash_to_field(msg, 1, { ...def, DST: def.encodeDST, ...options });
5635 const P = Point.fromAffine(mapToCurve(u[0])).clearCofactor();
5636 P.assertValidity();
5637 return P;
5638 },
5639 };
5640 }
5641
5642 class HMAC extends Hash {
5643 constructor(hash$1, _key) {
5644 super();
5645 this.finished = false;
5646 this.destroyed = false;
5647 hash(hash$1);
5648 const key = toBytes(_key);
5649 this.iHash = hash$1.create();
5650 if (typeof this.iHash.update !== 'function')
5651 throw new Error('Expected instance of class which extends utils.Hash');
5652 this.blockLen = this.iHash.blockLen;
5653 this.outputLen = this.iHash.outputLen;
5654 const blockLen = this.blockLen;
5655 const pad = new Uint8Array(blockLen);
5656 pad.set(key.length > blockLen ? hash$1.create().update(key).digest() : key);
5657 for (let i = 0; i < pad.length; i++)
5658 pad[i] ^= 0x36;
5659 this.iHash.update(pad);
5660 this.oHash = hash$1.create();
5661 for (let i = 0; i < pad.length; i++)
5662 pad[i] ^= 0x36 ^ 0x5c;
5663 this.oHash.update(pad);
5664 pad.fill(0);
5665 }
5666 update(buf) {
5667 exists(this);
5668 this.iHash.update(buf);
5669 return this;
5670 }
5671 digestInto(out) {
5672 exists(this);
5673 bytes(out, this.outputLen);
5674 this.finished = true;
5675 this.iHash.digestInto(out);
5676 this.oHash.update(out);
5677 this.oHash.digestInto(out);
5678 this.destroy();
5679 }
5680 digest() {
5681 const out = new Uint8Array(this.oHash.outputLen);
5682 this.digestInto(out);
5683 return out;
5684 }
5685 _cloneInto(to) {
5686 to || (to = Object.create(Object.getPrototypeOf(this), {}));
5687 const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;
5688 to = to;
5689 to.finished = finished;
5690 to.destroyed = destroyed;
5691 to.blockLen = blockLen;
5692 to.outputLen = outputLen;
5693 to.oHash = oHash._cloneInto(to.oHash);
5694 to.iHash = iHash._cloneInto(to.iHash);
5695 return to;
5696 }
5697 destroy() {
5698 this.destroyed = true;
5699 this.oHash.destroy();
5700 this.iHash.destroy();
5701 }
5702 }
5703 const hmac = (hash, key, message) => new HMAC(hash, key).update(message).digest();
5704 hmac.create = (hash, key) => new HMAC(hash, key);
5705
5706 /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
5707 function getHash(hash) {
5708 return {
5709 hash,
5710 hmac: (key, ...msgs) => hmac(hash, key, concatBytes$1(...msgs)),
5711 randomBytes,
5712 };
5713 }
5714 function createCurve(curveDef, defHash) {
5715 const create = (hash) => weierstrass({ ...curveDef, ...getHash(hash) });
5716 return Object.freeze({ ...create(defHash), create });
5717 }
5718
5719 /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
5720 const secp256k1P = BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f');
5721 const secp256k1N = BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141');
5722 const _1n$4 = BigInt(1);
5723 const _2n$3 = BigInt(2);
5724 const divNearest = (a, b) => (a + b / _2n$3) / b;
5725 function sqrtMod(y) {
5726 const P = secp256k1P;
5727 const _3n = BigInt(3), _6n = BigInt(6), _11n = BigInt(11), _22n = BigInt(22);
5728 const _23n = BigInt(23), _44n = BigInt(44), _88n = BigInt(88);
5729 const b2 = (y * y * y) % P;
5730 const b3 = (b2 * b2 * y) % P;
5731 const b6 = (pow2(b3, _3n, P) * b3) % P;
5732 const b9 = (pow2(b6, _3n, P) * b3) % P;
5733 const b11 = (pow2(b9, _2n$3, P) * b2) % P;
5734 const b22 = (pow2(b11, _11n, P) * b11) % P;
5735 const b44 = (pow2(b22, _22n, P) * b22) % P;
5736 const b88 = (pow2(b44, _44n, P) * b44) % P;
5737 const b176 = (pow2(b88, _88n, P) * b88) % P;
5738 const b220 = (pow2(b176, _44n, P) * b44) % P;
5739 const b223 = (pow2(b220, _3n, P) * b3) % P;
5740 const t1 = (pow2(b223, _23n, P) * b22) % P;
5741 const t2 = (pow2(t1, _6n, P) * b2) % P;
5742 const root = pow2(t2, _2n$3, P);
5743 if (!Fp$1.eql(Fp$1.sqr(root), y))
5744 throw new Error('Cannot find square root');
5745 return root;
5746 }
5747 const Fp$1 = Field(secp256k1P, undefined, undefined, { sqrt: sqrtMod });
5748 const secp256k1 = createCurve({
5749 a: BigInt(0),
5750 b: BigInt(7),
5751 Fp: Fp$1,
5752 n: secp256k1N,
5753 Gx: BigInt('55066263022277343669578718895168534326250603453777594175500187360389116729240'),
5754 Gy: BigInt('32670510020758816978083085130507043184471273380659243275938904335757337482424'),
5755 h: BigInt(1),
5756 lowS: true,
5757 endo: {
5758 beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),
5759 splitScalar: (k) => {
5760 const n = secp256k1N;
5761 const a1 = BigInt('0x3086d221a7d46bcde86c90e49284eb15');
5762 const b1 = -_1n$4 * BigInt('0xe4437ed6010e88286f547fa90abfe4c3');
5763 const a2 = BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8');
5764 const b2 = a1;
5765 const POW_2_128 = BigInt('0x100000000000000000000000000000000');
5766 const c1 = divNearest(b2 * k, n);
5767 const c2 = divNearest(-b1 * k, n);
5768 let k1 = mod(k - c1 * a1 - c2 * a2, n);
5769 let k2 = mod(-c1 * b1 - c2 * b2, n);
5770 const k1neg = k1 > POW_2_128;
5771 const k2neg = k2 > POW_2_128;
5772 if (k1neg)
5773 k1 = n - k1;
5774 if (k2neg)
5775 k2 = n - k2;
5776 if (k1 > POW_2_128 || k2 > POW_2_128) {
5777 throw new Error('splitScalar: Endomorphism failed, k=' + k);
5778 }
5779 return { k1neg, k1, k2neg, k2 };
5780 },
5781 },
5782 }, sha256);
5783 const _0n$4 = BigInt(0);
5784 const fe = (x) => typeof x === 'bigint' && _0n$4 < x && x < secp256k1P;
5785 const ge = (x) => typeof x === 'bigint' && _0n$4 < x && x < secp256k1N;
5786 const TAGGED_HASH_PREFIXES = {};
5787 function taggedHash(tag, ...messages) {
5788 let tagP = TAGGED_HASH_PREFIXES[tag];
5789 if (tagP === undefined) {
5790 const tagH = sha256(Uint8Array.from(tag, (c) => c.charCodeAt(0)));
5791 tagP = concatBytes(tagH, tagH);
5792 TAGGED_HASH_PREFIXES[tag] = tagP;
5793 }
5794 return sha256(concatBytes(tagP, ...messages));
5795 }
5796 const pointToBytes = (point) => point.toRawBytes(true).slice(1);
5797 const numTo32b = (n) => numberToBytesBE(n, 32);
5798 const modP = (x) => mod(x, secp256k1P);
5799 const modN = (x) => mod(x, secp256k1N);
5800 const Point = secp256k1.ProjectivePoint;
5801 const GmulAdd = (Q, a, b) => Point.BASE.multiplyAndAddUnsafe(Q, a, b);
5802 function schnorrGetExtPubKey(priv) {
5803 let d_ = secp256k1.utils.normPrivateKeyToScalar(priv);
5804 let p = Point.fromPrivateKey(d_);
5805 const scalar = p.hasEvenY() ? d_ : modN(-d_);
5806 return { scalar: scalar, bytes: pointToBytes(p) };
5807 }
5808 function lift_x(x) {
5809 if (!fe(x))
5810 throw new Error('bad x: need 0 < x < p');
5811 const xx = modP(x * x);
5812 const c = modP(xx * x + BigInt(7));
5813 let y = sqrtMod(c);
5814 if (y % _2n$3 !== _0n$4)
5815 y = modP(-y);
5816 const p = new Point(x, y, _1n$4);
5817 p.assertValidity();
5818 return p;
5819 }
5820 function challenge(...args) {
5821 return modN(bytesToNumberBE(taggedHash('BIP0340/challenge', ...args)));
5822 }
5823 function schnorrGetPublicKey(privateKey) {
5824 return schnorrGetExtPubKey(privateKey).bytes;
5825 }
5826 function schnorrSign(message, privateKey, auxRand = randomBytes(32)) {
5827 const m = ensureBytes('message', message);
5828 const { bytes: px, scalar: d } = schnorrGetExtPubKey(privateKey);
5829 const a = ensureBytes('auxRand', auxRand, 32);
5830 const t = numTo32b(d ^ bytesToNumberBE(taggedHash('BIP0340/aux', a)));
5831 const rand = taggedHash('BIP0340/nonce', t, px, m);
5832 const k_ = modN(bytesToNumberBE(rand));
5833 if (k_ === _0n$4)
5834 throw new Error('sign failed: k is zero');
5835 const { bytes: rx, scalar: k } = schnorrGetExtPubKey(k_);
5836 const e = challenge(rx, px, m);
5837 const sig = new Uint8Array(64);
5838 sig.set(rx, 0);
5839 sig.set(numTo32b(modN(k + e * d)), 32);
5840 if (!schnorrVerify(sig, m, px))
5841 throw new Error('sign: Invalid signature produced');
5842 return sig;
5843 }
5844 function schnorrVerify(signature, message, publicKey) {
5845 const sig = ensureBytes('signature', signature, 64);
5846 const m = ensureBytes('message', message);
5847 const pub = ensureBytes('publicKey', publicKey, 32);
5848 try {
5849 const P = lift_x(bytesToNumberBE(pub));
5850 const r = bytesToNumberBE(sig.subarray(0, 32));
5851 if (!fe(r))
5852 return false;
5853 const s = bytesToNumberBE(sig.subarray(32, 64));
5854 if (!ge(s))
5855 return false;
5856 const e = challenge(numTo32b(r), pointToBytes(P), m);
5857 const R = GmulAdd(P, s, modN(-e));
5858 if (!R || !R.hasEvenY() || R.toAffine().x !== r)
5859 return false;
5860 return true;
5861 }
5862 catch (error) {
5863 return false;
5864 }
5865 }
5866 (() => ({
5867 getPublicKey: schnorrGetPublicKey,
5868 sign: schnorrSign,
5869 verify: schnorrVerify,
5870 utils: {
5871 randomPrivateKey: secp256k1.utils.randomPrivateKey,
5872 lift_x,
5873 pointToBytes,
5874 numberToBytesBE,
5875 bytesToNumberBE,
5876 taggedHash,
5877 mod,
5878 },
5879 }))();
5880 const isoMap = (() => isogenyMap(Fp$1, [
5881 [
5882 '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa8c7',
5883 '0x7d3d4c80bc321d5b9f315cea7fd44c5d595d2fc0bf63b92dfff1044f17c6581',
5884 '0x534c328d23f234e6e2a413deca25caece4506144037c40314ecbd0b53d9dd262',
5885 '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa88c',
5886 ],
5887 [
5888 '0xd35771193d94918a9ca34ccbb7b640dd86cd409542f8487d9fe6b745781eb49b',
5889 '0xedadc6f64383dc1df7c4b2d51b54225406d36b641f5e41bbc52a56612a8c6d14',
5890 '0x0000000000000000000000000000000000000000000000000000000000000001',
5891 ],
5892 [
5893 '0x4bda12f684bda12f684bda12f684bda12f684bda12f684bda12f684b8e38e23c',
5894 '0xc75e0c32d5cb7c0fa9d0a54b12a0a6d5647ab046d686da6fdffc90fc201d71a3',
5895 '0x29a6194691f91a73715209ef6512e576722830a201be2018a765e85a9ecee931',
5896 '0x2f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12f38e38d84',
5897 ],
5898 [
5899 '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffff93b',
5900 '0x7a06534bb8bdb49fd5e9e6632722c2989467c1bfc8e8d978dfb425d2685c2573',
5901 '0x6484aa716545ca2cf3a70c3fa8fe337e0a3d21162f0d6299a7bf8192bfd2a76f',
5902 '0x0000000000000000000000000000000000000000000000000000000000000001',
5903 ],
5904 ].map((i) => i.map((j) => BigInt(j)))))();
5905 const mapSWU = (() => mapToCurveSimpleSWU(Fp$1, {
5906 A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'),
5907 B: BigInt('1771'),
5908 Z: Fp$1.create(BigInt('-11')),
5909 }))();
5910 (() => createHasher(secp256k1.ProjectivePoint, (scalars) => {
5911 const { x, y } = mapSWU(Fp$1.create(scalars[0]));
5912 return isoMap(x, y);
5913 }, {
5914 DST: 'secp256k1_XMD:SHA-256_SSWU_RO_',
5915 encodeDST: 'secp256k1_XMD:SHA-256_SSWU_NU_',
5916 p: Fp$1.ORDER,
5917 m: 1,
5918 k: 128,
5919 expand: 'xmd',
5920 hash: sha256,
5921 }))();
5922
5923 function secp256k1PairFromSeed(seed, onlyJs) {
5924 if (seed.length !== 32) {
5925 throw new Error('Expected valid 32-byte private key as a seed');
5926 }
5927 if (!util.hasBigInt || (!onlyJs && isReady())) {
5928 const full = secp256k1FromSeed(seed);
5929 const publicKey = full.slice(32);
5930 if (util.u8aEmpty(publicKey)) {
5931 throw new Error('Invalid publicKey generated from WASM interface');
5932 }
5933 return {
5934 publicKey,
5935 secretKey: full.slice(0, 32)
5936 };
5937 }
5938 return {
5939 publicKey: secp256k1.getPublicKey(seed, true),
5940 secretKey: seed
5941 };
5942 }
5943
5944 function createSeedDeriveFn(fromSeed, derive) {
5945 return (keypair, { chainCode, isHard }) => {
5946 if (!isHard) {
5947 throw new Error('A soft key was found in the path and is not supported');
5948 }
5949 return fromSeed(derive(keypair.secretKey.subarray(0, 32), chainCode));
5950 };
5951 }
5952
5953 const keyHdkdEcdsa = createSeedDeriveFn(secp256k1PairFromSeed, secp256k1DeriveHard);
5954
5955 const HDKD = util.compactAddLength(util.stringToU8a('Ed25519HDKD'));
5956 function ed25519DeriveHard(seed, chainCode) {
5957 if (!util.isU8a(chainCode) || chainCode.length !== 32) {
5958 throw new Error('Invalid chainCode passed to derive');
5959 }
5960 return blake2AsU8a(util.u8aConcat(HDKD, seed, chainCode));
5961 }
5962
5963 function randomAsU8a(length = 32) {
5964 return browser.getRandomValues(new Uint8Array(length));
5965 }
5966 const randomAsHex = createAsHex(randomAsU8a);
5967
5968 const BN_53 = new util.BN(0b11111111111111111111111111111111111111111111111111111);
5969 function randomAsNumber() {
5970 return util.hexToBn(randomAsHex(8)).and(BN_53).toNumber();
5971 }
5972
5973 const [SHA512_Kh, SHA512_Kl] = (() => u64$1.split([
5974 '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',
5975 '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',
5976 '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',
5977 '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',
5978 '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',
5979 '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',
5980 '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',
5981 '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',
5982 '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',
5983 '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',
5984 '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',
5985 '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',
5986 '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',
5987 '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',
5988 '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',
5989 '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',
5990 '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',
5991 '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',
5992 '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',
5993 '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'
5994 ].map(n => BigInt(n))))();
5995 const SHA512_W_H = new Uint32Array(80);
5996 const SHA512_W_L = new Uint32Array(80);
5997 class SHA512 extends SHA2 {
5998 constructor() {
5999 super(128, 64, 16, false);
6000 this.Ah = 0x6a09e667 | 0;
6001 this.Al = 0xf3bcc908 | 0;
6002 this.Bh = 0xbb67ae85 | 0;
6003 this.Bl = 0x84caa73b | 0;
6004 this.Ch = 0x3c6ef372 | 0;
6005 this.Cl = 0xfe94f82b | 0;
6006 this.Dh = 0xa54ff53a | 0;
6007 this.Dl = 0x5f1d36f1 | 0;
6008 this.Eh = 0x510e527f | 0;
6009 this.El = 0xade682d1 | 0;
6010 this.Fh = 0x9b05688c | 0;
6011 this.Fl = 0x2b3e6c1f | 0;
6012 this.Gh = 0x1f83d9ab | 0;
6013 this.Gl = 0xfb41bd6b | 0;
6014 this.Hh = 0x5be0cd19 | 0;
6015 this.Hl = 0x137e2179 | 0;
6016 }
6017 get() {
6018 const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;
6019 return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];
6020 }
6021 set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) {
6022 this.Ah = Ah | 0;
6023 this.Al = Al | 0;
6024 this.Bh = Bh | 0;
6025 this.Bl = Bl | 0;
6026 this.Ch = Ch | 0;
6027 this.Cl = Cl | 0;
6028 this.Dh = Dh | 0;
6029 this.Dl = Dl | 0;
6030 this.Eh = Eh | 0;
6031 this.El = El | 0;
6032 this.Fh = Fh | 0;
6033 this.Fl = Fl | 0;
6034 this.Gh = Gh | 0;
6035 this.Gl = Gl | 0;
6036 this.Hh = Hh | 0;
6037 this.Hl = Hl | 0;
6038 }
6039 process(view, offset) {
6040 for (let i = 0; i < 16; i++, offset += 4) {
6041 SHA512_W_H[i] = view.getUint32(offset);
6042 SHA512_W_L[i] = view.getUint32((offset += 4));
6043 }
6044 for (let i = 16; i < 80; i++) {
6045 const W15h = SHA512_W_H[i - 15] | 0;
6046 const W15l = SHA512_W_L[i - 15] | 0;
6047 const s0h = u64$1.rotrSH(W15h, W15l, 1) ^ u64$1.rotrSH(W15h, W15l, 8) ^ u64$1.shrSH(W15h, W15l, 7);
6048 const s0l = u64$1.rotrSL(W15h, W15l, 1) ^ u64$1.rotrSL(W15h, W15l, 8) ^ u64$1.shrSL(W15h, W15l, 7);
6049 const W2h = SHA512_W_H[i - 2] | 0;
6050 const W2l = SHA512_W_L[i - 2] | 0;
6051 const s1h = u64$1.rotrSH(W2h, W2l, 19) ^ u64$1.rotrBH(W2h, W2l, 61) ^ u64$1.shrSH(W2h, W2l, 6);
6052 const s1l = u64$1.rotrSL(W2h, W2l, 19) ^ u64$1.rotrBL(W2h, W2l, 61) ^ u64$1.shrSL(W2h, W2l, 6);
6053 const SUMl = u64$1.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);
6054 const SUMh = u64$1.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);
6055 SHA512_W_H[i] = SUMh | 0;
6056 SHA512_W_L[i] = SUMl | 0;
6057 }
6058 let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;
6059 for (let i = 0; i < 80; i++) {
6060 const sigma1h = u64$1.rotrSH(Eh, El, 14) ^ u64$1.rotrSH(Eh, El, 18) ^ u64$1.rotrBH(Eh, El, 41);
6061 const sigma1l = u64$1.rotrSL(Eh, El, 14) ^ u64$1.rotrSL(Eh, El, 18) ^ u64$1.rotrBL(Eh, El, 41);
6062 const CHIh = (Eh & Fh) ^ (~Eh & Gh);
6063 const CHIl = (El & Fl) ^ (~El & Gl);
6064 const T1ll = u64$1.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);
6065 const T1h = u64$1.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);
6066 const T1l = T1ll | 0;
6067 const sigma0h = u64$1.rotrSH(Ah, Al, 28) ^ u64$1.rotrBH(Ah, Al, 34) ^ u64$1.rotrBH(Ah, Al, 39);
6068 const sigma0l = u64$1.rotrSL(Ah, Al, 28) ^ u64$1.rotrBL(Ah, Al, 34) ^ u64$1.rotrBL(Ah, Al, 39);
6069 const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);
6070 const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);
6071 Hh = Gh | 0;
6072 Hl = Gl | 0;
6073 Gh = Fh | 0;
6074 Gl = Fl | 0;
6075 Fh = Eh | 0;
6076 Fl = El | 0;
6077 ({ h: Eh, l: El } = u64$1.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));
6078 Dh = Ch | 0;
6079 Dl = Cl | 0;
6080 Ch = Bh | 0;
6081 Cl = Bl | 0;
6082 Bh = Ah | 0;
6083 Bl = Al | 0;
6084 const All = u64$1.add3L(T1l, sigma0l, MAJl);
6085 Ah = u64$1.add3H(All, T1h, sigma0h, MAJh);
6086 Al = All | 0;
6087 }
6088 ({ h: Ah, l: Al } = u64$1.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));
6089 ({ h: Bh, l: Bl } = u64$1.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));
6090 ({ h: Ch, l: Cl } = u64$1.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));
6091 ({ h: Dh, l: Dl } = u64$1.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));
6092 ({ h: Eh, l: El } = u64$1.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));
6093 ({ h: Fh, l: Fl } = u64$1.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));
6094 ({ h: Gh, l: Gl } = u64$1.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));
6095 ({ h: Hh, l: Hl } = u64$1.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));
6096 this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);
6097 }
6098 roundClean() {
6099 SHA512_W_H.fill(0);
6100 SHA512_W_L.fill(0);
6101 }
6102 destroy() {
6103 this.buffer.fill(0);
6104 this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
6105 }
6106 }
6107 class SHA512_224 extends SHA512 {
6108 constructor() {
6109 super();
6110 this.Ah = 0x8c3d37c8 | 0;
6111 this.Al = 0x19544da2 | 0;
6112 this.Bh = 0x73e19966 | 0;
6113 this.Bl = 0x89dcd4d6 | 0;
6114 this.Ch = 0x1dfab7ae | 0;
6115 this.Cl = 0x32ff9c82 | 0;
6116 this.Dh = 0x679dd514 | 0;
6117 this.Dl = 0x582f9fcf | 0;
6118 this.Eh = 0x0f6d2b69 | 0;
6119 this.El = 0x7bd44da8 | 0;
6120 this.Fh = 0x77e36f73 | 0;
6121 this.Fl = 0x04c48942 | 0;
6122 this.Gh = 0x3f9d85a8 | 0;
6123 this.Gl = 0x6a1d36c8 | 0;
6124 this.Hh = 0x1112e6ad | 0;
6125 this.Hl = 0x91d692a1 | 0;
6126 this.outputLen = 28;
6127 }
6128 }
6129 class SHA512_256 extends SHA512 {
6130 constructor() {
6131 super();
6132 this.Ah = 0x22312194 | 0;
6133 this.Al = 0xfc2bf72c | 0;
6134 this.Bh = 0x9f555fa3 | 0;
6135 this.Bl = 0xc84c64c2 | 0;
6136 this.Ch = 0x2393b86b | 0;
6137 this.Cl = 0x6f53b151 | 0;
6138 this.Dh = 0x96387719 | 0;
6139 this.Dl = 0x5940eabd | 0;
6140 this.Eh = 0x96283ee2 | 0;
6141 this.El = 0xa88effe3 | 0;
6142 this.Fh = 0xbe5e1e25 | 0;
6143 this.Fl = 0x53863992 | 0;
6144 this.Gh = 0x2b0199fc | 0;
6145 this.Gl = 0x2c85b8aa | 0;
6146 this.Hh = 0x0eb72ddc | 0;
6147 this.Hl = 0x81c52ca2 | 0;
6148 this.outputLen = 32;
6149 }
6150 }
6151 class SHA384 extends SHA512 {
6152 constructor() {
6153 super();
6154 this.Ah = 0xcbbb9d5d | 0;
6155 this.Al = 0xc1059ed8 | 0;
6156 this.Bh = 0x629a292a | 0;
6157 this.Bl = 0x367cd507 | 0;
6158 this.Ch = 0x9159015a | 0;
6159 this.Cl = 0x3070dd17 | 0;
6160 this.Dh = 0x152fecd8 | 0;
6161 this.Dl = 0xf70e5939 | 0;
6162 this.Eh = 0x67332667 | 0;
6163 this.El = 0xffc00b31 | 0;
6164 this.Fh = 0x8eb44a87 | 0;
6165 this.Fl = 0x68581511 | 0;
6166 this.Gh = 0xdb0c2e0d | 0;
6167 this.Gl = 0x64f98fa7 | 0;
6168 this.Hh = 0x47b5481d | 0;
6169 this.Hl = 0xbefa4fa4 | 0;
6170 this.outputLen = 48;
6171 }
6172 }
6173 const sha512 = wrapConstructor(() => new SHA512());
6174 wrapConstructor(() => new SHA512_224());
6175 wrapConstructor(() => new SHA512_256());
6176 wrapConstructor(() => new SHA384());
6177
6178 /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
6179 const _0n$3 = BigInt(0), _1n$3 = BigInt(1), _2n$2 = BigInt(2), _8n = BigInt(8);
6180 const VERIFY_DEFAULT = { zip215: true };
6181 function validateOpts$1(curve) {
6182 const opts = validateBasic(curve);
6183 validateObject(curve, {
6184 hash: 'function',
6185 a: 'bigint',
6186 d: 'bigint',
6187 randomBytes: 'function',
6188 }, {
6189 adjustScalarBytes: 'function',
6190 domain: 'function',
6191 uvRatio: 'function',
6192 mapToCurve: 'function',
6193 });
6194 return Object.freeze({ ...opts });
6195 }
6196 function twistedEdwards(curveDef) {
6197 const CURVE = validateOpts$1(curveDef);
6198 const { Fp, n: CURVE_ORDER, prehash: prehash, hash: cHash, randomBytes, nByteLength, h: cofactor, } = CURVE;
6199 const MASK = _2n$2 << (BigInt(nByteLength * 8) - _1n$3);
6200 const modP = Fp.create;
6201 const uvRatio = CURVE.uvRatio ||
6202 ((u, v) => {
6203 try {
6204 return { isValid: true, value: Fp.sqrt(u * Fp.inv(v)) };
6205 }
6206 catch (e) {
6207 return { isValid: false, value: _0n$3 };
6208 }
6209 });
6210 const adjustScalarBytes = CURVE.adjustScalarBytes || ((bytes) => bytes);
6211 const domain = CURVE.domain ||
6212 ((data, ctx, phflag) => {
6213 if (ctx.length || phflag)
6214 throw new Error('Contexts/pre-hash are not supported');
6215 return data;
6216 });
6217 const inBig = (n) => typeof n === 'bigint' && _0n$3 < n;
6218 const inRange = (n, max) => inBig(n) && inBig(max) && n < max;
6219 const in0MaskRange = (n) => n === _0n$3 || inRange(n, MASK);
6220 function assertInRange(n, max) {
6221 if (inRange(n, max))
6222 return n;
6223 throw new Error(`Expected valid scalar < ${max}, got ${typeof n} ${n}`);
6224 }
6225 function assertGE0(n) {
6226 return n === _0n$3 ? n : assertInRange(n, CURVE_ORDER);
6227 }
6228 const pointPrecomputes = new Map();
6229 function isPoint(other) {
6230 if (!(other instanceof Point))
6231 throw new Error('ExtendedPoint expected');
6232 }
6233 class Point {
6234 constructor(ex, ey, ez, et) {
6235 this.ex = ex;
6236 this.ey = ey;
6237 this.ez = ez;
6238 this.et = et;
6239 if (!in0MaskRange(ex))
6240 throw new Error('x required');
6241 if (!in0MaskRange(ey))
6242 throw new Error('y required');
6243 if (!in0MaskRange(ez))
6244 throw new Error('z required');
6245 if (!in0MaskRange(et))
6246 throw new Error('t required');
6247 }
6248 get x() {
6249 return this.toAffine().x;
6250 }
6251 get y() {
6252 return this.toAffine().y;
6253 }
6254 static fromAffine(p) {
6255 if (p instanceof Point)
6256 throw new Error('extended point not allowed');
6257 const { x, y } = p || {};
6258 if (!in0MaskRange(x) || !in0MaskRange(y))
6259 throw new Error('invalid affine point');
6260 return new Point(x, y, _1n$3, modP(x * y));
6261 }
6262 static normalizeZ(points) {
6263 const toInv = Fp.invertBatch(points.map((p) => p.ez));
6264 return points.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);
6265 }
6266 _setWindowSize(windowSize) {
6267 this._WINDOW_SIZE = windowSize;
6268 pointPrecomputes.delete(this);
6269 }
6270 assertValidity() {
6271 const { a, d } = CURVE;
6272 if (this.is0())
6273 throw new Error('bad point: ZERO');
6274 const { ex: X, ey: Y, ez: Z, et: T } = this;
6275 const X2 = modP(X * X);
6276 const Y2 = modP(Y * Y);
6277 const Z2 = modP(Z * Z);
6278 const Z4 = modP(Z2 * Z2);
6279 const aX2 = modP(X2 * a);
6280 const left = modP(Z2 * modP(aX2 + Y2));
6281 const right = modP(Z4 + modP(d * modP(X2 * Y2)));
6282 if (left !== right)
6283 throw new Error('bad point: equation left != right (1)');
6284 const XY = modP(X * Y);
6285 const ZT = modP(Z * T);
6286 if (XY !== ZT)
6287 throw new Error('bad point: equation left != right (2)');
6288 }
6289 equals(other) {
6290 isPoint(other);
6291 const { ex: X1, ey: Y1, ez: Z1 } = this;
6292 const { ex: X2, ey: Y2, ez: Z2 } = other;
6293 const X1Z2 = modP(X1 * Z2);
6294 const X2Z1 = modP(X2 * Z1);
6295 const Y1Z2 = modP(Y1 * Z2);
6296 const Y2Z1 = modP(Y2 * Z1);
6297 return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;
6298 }
6299 is0() {
6300 return this.equals(Point.ZERO);
6301 }
6302 negate() {
6303 return new Point(modP(-this.ex), this.ey, this.ez, modP(-this.et));
6304 }
6305 double() {
6306 const { a } = CURVE;
6307 const { ex: X1, ey: Y1, ez: Z1 } = this;
6308 const A = modP(X1 * X1);
6309 const B = modP(Y1 * Y1);
6310 const C = modP(_2n$2 * modP(Z1 * Z1));
6311 const D = modP(a * A);
6312 const x1y1 = X1 + Y1;
6313 const E = modP(modP(x1y1 * x1y1) - A - B);
6314 const G = D + B;
6315 const F = G - C;
6316 const H = D - B;
6317 const X3 = modP(E * F);
6318 const Y3 = modP(G * H);
6319 const T3 = modP(E * H);
6320 const Z3 = modP(F * G);
6321 return new Point(X3, Y3, Z3, T3);
6322 }
6323 add(other) {
6324 isPoint(other);
6325 const { a, d } = CURVE;
6326 const { ex: X1, ey: Y1, ez: Z1, et: T1 } = this;
6327 const { ex: X2, ey: Y2, ez: Z2, et: T2 } = other;
6328 if (a === BigInt(-1)) {
6329 const A = modP((Y1 - X1) * (Y2 + X2));
6330 const B = modP((Y1 + X1) * (Y2 - X2));
6331 const F = modP(B - A);
6332 if (F === _0n$3)
6333 return this.double();
6334 const C = modP(Z1 * _2n$2 * T2);
6335 const D = modP(T1 * _2n$2 * Z2);
6336 const E = D + C;
6337 const G = B + A;
6338 const H = D - C;
6339 const X3 = modP(E * F);
6340 const Y3 = modP(G * H);
6341 const T3 = modP(E * H);
6342 const Z3 = modP(F * G);
6343 return new Point(X3, Y3, Z3, T3);
6344 }
6345 const A = modP(X1 * X2);
6346 const B = modP(Y1 * Y2);
6347 const C = modP(T1 * d * T2);
6348 const D = modP(Z1 * Z2);
6349 const E = modP((X1 + Y1) * (X2 + Y2) - A - B);
6350 const F = D - C;
6351 const G = D + C;
6352 const H = modP(B - a * A);
6353 const X3 = modP(E * F);
6354 const Y3 = modP(G * H);
6355 const T3 = modP(E * H);
6356 const Z3 = modP(F * G);
6357 return new Point(X3, Y3, Z3, T3);
6358 }
6359 subtract(other) {
6360 return this.add(other.negate());
6361 }
6362 wNAF(n) {
6363 return wnaf.wNAFCached(this, pointPrecomputes, n, Point.normalizeZ);
6364 }
6365 multiply(scalar) {
6366 const { p, f } = this.wNAF(assertInRange(scalar, CURVE_ORDER));
6367 return Point.normalizeZ([p, f])[0];
6368 }
6369 multiplyUnsafe(scalar) {
6370 let n = assertGE0(scalar);
6371 if (n === _0n$3)
6372 return I;
6373 if (this.equals(I) || n === _1n$3)
6374 return this;
6375 if (this.equals(G))
6376 return this.wNAF(n).p;
6377 return wnaf.unsafeLadder(this, n);
6378 }
6379 isSmallOrder() {
6380 return this.multiplyUnsafe(cofactor).is0();
6381 }
6382 isTorsionFree() {
6383 return wnaf.unsafeLadder(this, CURVE_ORDER).is0();
6384 }
6385 toAffine(iz) {
6386 const { ex: x, ey: y, ez: z } = this;
6387 const is0 = this.is0();
6388 if (iz == null)
6389 iz = is0 ? _8n : Fp.inv(z);
6390 const ax = modP(x * iz);
6391 const ay = modP(y * iz);
6392 const zz = modP(z * iz);
6393 if (is0)
6394 return { x: _0n$3, y: _1n$3 };
6395 if (zz !== _1n$3)
6396 throw new Error('invZ was invalid');
6397 return { x: ax, y: ay };
6398 }
6399 clearCofactor() {
6400 const { h: cofactor } = CURVE;
6401 if (cofactor === _1n$3)
6402 return this;
6403 return this.multiplyUnsafe(cofactor);
6404 }
6405 static fromHex(hex, zip215 = false) {
6406 const { d, a } = CURVE;
6407 const len = Fp.BYTES;
6408 hex = ensureBytes('pointHex', hex, len);
6409 const normed = hex.slice();
6410 const lastByte = hex[len - 1];
6411 normed[len - 1] = lastByte & ~0x80;
6412 const y = bytesToNumberLE(normed);
6413 if (y === _0n$3) ;
6414 else {
6415 if (zip215)
6416 assertInRange(y, MASK);
6417 else
6418 assertInRange(y, Fp.ORDER);
6419 }
6420 const y2 = modP(y * y);
6421 const u = modP(y2 - _1n$3);
6422 const v = modP(d * y2 - a);
6423 let { isValid, value: x } = uvRatio(u, v);
6424 if (!isValid)
6425 throw new Error('Point.fromHex: invalid y coordinate');
6426 const isXOdd = (x & _1n$3) === _1n$3;
6427 const isLastByteOdd = (lastByte & 0x80) !== 0;
6428 if (!zip215 && x === _0n$3 && isLastByteOdd)
6429 throw new Error('Point.fromHex: x=0 and x_0=1');
6430 if (isLastByteOdd !== isXOdd)
6431 x = modP(-x);
6432 return Point.fromAffine({ x, y });
6433 }
6434 static fromPrivateKey(privKey) {
6435 return getExtendedPublicKey(privKey).point;
6436 }
6437 toRawBytes() {
6438 const { x, y } = this.toAffine();
6439 const bytes = numberToBytesLE(y, Fp.BYTES);
6440 bytes[bytes.length - 1] |= x & _1n$3 ? 0x80 : 0;
6441 return bytes;
6442 }
6443 toHex() {
6444 return bytesToHex(this.toRawBytes());
6445 }
6446 }
6447 Point.BASE = new Point(CURVE.Gx, CURVE.Gy, _1n$3, modP(CURVE.Gx * CURVE.Gy));
6448 Point.ZERO = new Point(_0n$3, _1n$3, _1n$3, _0n$3);
6449 const { BASE: G, ZERO: I } = Point;
6450 const wnaf = wNAF(Point, nByteLength * 8);
6451 function modN(a) {
6452 return mod(a, CURVE_ORDER);
6453 }
6454 function modN_LE(hash) {
6455 return modN(bytesToNumberLE(hash));
6456 }
6457 function getExtendedPublicKey(key) {
6458 const len = nByteLength;
6459 key = ensureBytes('private key', key, len);
6460 const hashed = ensureBytes('hashed private key', cHash(key), 2 * len);
6461 const head = adjustScalarBytes(hashed.slice(0, len));
6462 const prefix = hashed.slice(len, 2 * len);
6463 const scalar = modN_LE(head);
6464 const point = G.multiply(scalar);
6465 const pointBytes = point.toRawBytes();
6466 return { head, prefix, scalar, point, pointBytes };
6467 }
6468 function getPublicKey(privKey) {
6469 return getExtendedPublicKey(privKey).pointBytes;
6470 }
6471 function hashDomainToScalar(context = new Uint8Array(), ...msgs) {
6472 const msg = concatBytes(...msgs);
6473 return modN_LE(cHash(domain(msg, ensureBytes('context', context), !!prehash)));
6474 }
6475 function sign(msg, privKey, options = {}) {
6476 msg = ensureBytes('message', msg);
6477 if (prehash)
6478 msg = prehash(msg);
6479 const { prefix, scalar, pointBytes } = getExtendedPublicKey(privKey);
6480 const r = hashDomainToScalar(options.context, prefix, msg);
6481 const R = G.multiply(r).toRawBytes();
6482 const k = hashDomainToScalar(options.context, R, pointBytes, msg);
6483 const s = modN(r + k * scalar);
6484 assertGE0(s);
6485 const res = concatBytes(R, numberToBytesLE(s, Fp.BYTES));
6486 return ensureBytes('result', res, nByteLength * 2);
6487 }
6488 const verifyOpts = VERIFY_DEFAULT;
6489 function verify(sig, msg, publicKey, options = verifyOpts) {
6490 const { context, zip215 } = options;
6491 const len = Fp.BYTES;
6492 sig = ensureBytes('signature', sig, 2 * len);
6493 msg = ensureBytes('message', msg);
6494 if (prehash)
6495 msg = prehash(msg);
6496 const s = bytesToNumberLE(sig.slice(len, 2 * len));
6497 let A, R, SB;
6498 try {
6499 A = Point.fromHex(publicKey, zip215);
6500 R = Point.fromHex(sig.slice(0, len), zip215);
6501 SB = G.multiplyUnsafe(s);
6502 }
6503 catch (error) {
6504 return false;
6505 }
6506 if (!zip215 && A.isSmallOrder())
6507 return false;
6508 const k = hashDomainToScalar(context, R.toRawBytes(), A.toRawBytes(), msg);
6509 const RkA = R.add(A.multiplyUnsafe(k));
6510 return RkA.subtract(SB).clearCofactor().equals(Point.ZERO);
6511 }
6512 G._setWindowSize(8);
6513 const utils = {
6514 getExtendedPublicKey,
6515 randomPrivateKey: () => randomBytes(Fp.BYTES),
6516 precompute(windowSize = 8, point = Point.BASE) {
6517 point._setWindowSize(windowSize);
6518 point.multiply(BigInt(3));
6519 return point;
6520 },
6521 };
6522 return {
6523 CURVE,
6524 getPublicKey,
6525 sign,
6526 verify,
6527 ExtendedPoint: Point,
6528 utils,
6529 };
6530 }
6531
6532 /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
6533 const _0n$2 = BigInt(0);
6534 const _1n$2 = BigInt(1);
6535 function validateOpts(curve) {
6536 validateObject(curve, {
6537 a: 'bigint',
6538 }, {
6539 montgomeryBits: 'isSafeInteger',
6540 nByteLength: 'isSafeInteger',
6541 adjustScalarBytes: 'function',
6542 domain: 'function',
6543 powPminus2: 'function',
6544 Gu: 'bigint',
6545 });
6546 return Object.freeze({ ...curve });
6547 }
6548 function montgomery(curveDef) {
6549 const CURVE = validateOpts(curveDef);
6550 const { P } = CURVE;
6551 const modP = (n) => mod(n, P);
6552 const montgomeryBits = CURVE.montgomeryBits;
6553 const montgomeryBytes = Math.ceil(montgomeryBits / 8);
6554 const fieldLen = CURVE.nByteLength;
6555 const adjustScalarBytes = CURVE.adjustScalarBytes || ((bytes) => bytes);
6556 const powPminus2 = CURVE.powPminus2 || ((x) => pow(x, P - BigInt(2), P));
6557 function cswap(swap, x_2, x_3) {
6558 const dummy = modP(swap * (x_2 - x_3));
6559 x_2 = modP(x_2 - dummy);
6560 x_3 = modP(x_3 + dummy);
6561 return [x_2, x_3];
6562 }
6563 function assertFieldElement(n) {
6564 if (typeof n === 'bigint' && _0n$2 <= n && n < P)
6565 return n;
6566 throw new Error('Expected valid scalar 0 < scalar < CURVE.P');
6567 }
6568 const a24 = (CURVE.a - BigInt(2)) / BigInt(4);
6569 function montgomeryLadder(pointU, scalar) {
6570 const u = assertFieldElement(pointU);
6571 const k = assertFieldElement(scalar);
6572 const x_1 = u;
6573 let x_2 = _1n$2;
6574 let z_2 = _0n$2;
6575 let x_3 = u;
6576 let z_3 = _1n$2;
6577 let swap = _0n$2;
6578 let sw;
6579 for (let t = BigInt(montgomeryBits - 1); t >= _0n$2; t--) {
6580 const k_t = (k >> t) & _1n$2;
6581 swap ^= k_t;
6582 sw = cswap(swap, x_2, x_3);
6583 x_2 = sw[0];
6584 x_3 = sw[1];
6585 sw = cswap(swap, z_2, z_3);
6586 z_2 = sw[0];
6587 z_3 = sw[1];
6588 swap = k_t;
6589 const A = x_2 + z_2;
6590 const AA = modP(A * A);
6591 const B = x_2 - z_2;
6592 const BB = modP(B * B);
6593 const E = AA - BB;
6594 const C = x_3 + z_3;
6595 const D = x_3 - z_3;
6596 const DA = modP(D * A);
6597 const CB = modP(C * B);
6598 const dacb = DA + CB;
6599 const da_cb = DA - CB;
6600 x_3 = modP(dacb * dacb);
6601 z_3 = modP(x_1 * modP(da_cb * da_cb));
6602 x_2 = modP(AA * BB);
6603 z_2 = modP(E * (AA + modP(a24 * E)));
6604 }
6605 sw = cswap(swap, x_2, x_3);
6606 x_2 = sw[0];
6607 x_3 = sw[1];
6608 sw = cswap(swap, z_2, z_3);
6609 z_2 = sw[0];
6610 z_3 = sw[1];
6611 const z2 = powPminus2(z_2);
6612 return modP(x_2 * z2);
6613 }
6614 function encodeUCoordinate(u) {
6615 return numberToBytesLE(modP(u), montgomeryBytes);
6616 }
6617 function decodeUCoordinate(uEnc) {
6618 const u = ensureBytes('u coordinate', uEnc, montgomeryBytes);
6619 if (fieldLen === 32)
6620 u[31] &= 127;
6621 return bytesToNumberLE(u);
6622 }
6623 function decodeScalar(n) {
6624 const bytes = ensureBytes('scalar', n);
6625 const len = bytes.length;
6626 if (len !== montgomeryBytes && len !== fieldLen)
6627 throw new Error(`Expected ${montgomeryBytes} or ${fieldLen} bytes, got ${len}`);
6628 return bytesToNumberLE(adjustScalarBytes(bytes));
6629 }
6630 function scalarMult(scalar, u) {
6631 const pointU = decodeUCoordinate(u);
6632 const _scalar = decodeScalar(scalar);
6633 const pu = montgomeryLadder(pointU, _scalar);
6634 if (pu === _0n$2)
6635 throw new Error('Invalid private or public key received');
6636 return encodeUCoordinate(pu);
6637 }
6638 const GuBytes = encodeUCoordinate(CURVE.Gu);
6639 function scalarMultBase(scalar) {
6640 return scalarMult(scalar, GuBytes);
6641 }
6642 return {
6643 scalarMult,
6644 scalarMultBase,
6645 getSharedSecret: (privateKey, publicKey) => scalarMult(privateKey, publicKey),
6646 getPublicKey: (privateKey) => scalarMultBase(privateKey),
6647 utils: { randomPrivateKey: () => CURVE.randomBytes(CURVE.nByteLength) },
6648 GuBytes: GuBytes,
6649 };
6650 }
6651
6652 /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
6653 const ED25519_P = BigInt('57896044618658097711785492504343953926634992332820282019728792003956564819949');
6654 const ED25519_SQRT_M1 = BigInt('19681161376707505956807079304988542015446066515923890162744021073123829784752');
6655 const _0n$1 = BigInt(0), _1n$1 = BigInt(1), _2n$1 = BigInt(2), _5n = BigInt(5);
6656 const _10n = BigInt(10), _20n = BigInt(20), _40n = BigInt(40), _80n = BigInt(80);
6657 function ed25519_pow_2_252_3(x) {
6658 const P = ED25519_P;
6659 const x2 = (x * x) % P;
6660 const b2 = (x2 * x) % P;
6661 const b4 = (pow2(b2, _2n$1, P) * b2) % P;
6662 const b5 = (pow2(b4, _1n$1, P) * x) % P;
6663 const b10 = (pow2(b5, _5n, P) * b5) % P;
6664 const b20 = (pow2(b10, _10n, P) * b10) % P;
6665 const b40 = (pow2(b20, _20n, P) * b20) % P;
6666 const b80 = (pow2(b40, _40n, P) * b40) % P;
6667 const b160 = (pow2(b80, _80n, P) * b80) % P;
6668 const b240 = (pow2(b160, _80n, P) * b80) % P;
6669 const b250 = (pow2(b240, _10n, P) * b10) % P;
6670 const pow_p_5_8 = (pow2(b250, _2n$1, P) * x) % P;
6671 return { pow_p_5_8, b2 };
6672 }
6673 function adjustScalarBytes(bytes) {
6674 bytes[0] &= 248;
6675 bytes[31] &= 127;
6676 bytes[31] |= 64;
6677 return bytes;
6678 }
6679 function uvRatio(u, v) {
6680 const P = ED25519_P;
6681 const v3 = mod(v * v * v, P);
6682 const v7 = mod(v3 * v3 * v, P);
6683 const pow = ed25519_pow_2_252_3(u * v7).pow_p_5_8;
6684 let x = mod(u * v3 * pow, P);
6685 const vx2 = mod(v * x * x, P);
6686 const root1 = x;
6687 const root2 = mod(x * ED25519_SQRT_M1, P);
6688 const useRoot1 = vx2 === u;
6689 const useRoot2 = vx2 === mod(-u, P);
6690 const noRoot = vx2 === mod(-u * ED25519_SQRT_M1, P);
6691 if (useRoot1)
6692 x = root1;
6693 if (useRoot2 || noRoot)
6694 x = root2;
6695 if (isNegativeLE(x, P))
6696 x = mod(-x, P);
6697 return { isValid: useRoot1 || useRoot2, value: x };
6698 }
6699 const Fp = Field(ED25519_P, undefined, true);
6700 const ed25519Defaults = {
6701 a: BigInt(-1),
6702 d: BigInt('37095705934669439343138083508754565189542113879843219016388785533085940283555'),
6703 Fp,
6704 n: BigInt('7237005577332262213973186563042994240857116359379907606001950938285454250989'),
6705 h: BigInt(8),
6706 Gx: BigInt('15112221349535400772501151409588531511454012693041857206046113283949847762202'),
6707 Gy: BigInt('46316835694926478169428394003475163141307993866256225615783033603165251855960'),
6708 hash: sha512,
6709 randomBytes,
6710 adjustScalarBytes,
6711 uvRatio,
6712 };
6713 const ed25519 = twistedEdwards(ed25519Defaults);
6714 function ed25519_domain(data, ctx, phflag) {
6715 if (ctx.length > 255)
6716 throw new Error('Context is too big');
6717 return concatBytes$1(utf8ToBytes$1('SigEd25519 no Ed25519 collisions'), new Uint8Array([phflag ? 1 : 0, ctx.length]), ctx, data);
6718 }
6719 twistedEdwards({
6720 ...ed25519Defaults,
6721 domain: ed25519_domain,
6722 });
6723 twistedEdwards({
6724 ...ed25519Defaults,
6725 domain: ed25519_domain,
6726 prehash: sha512,
6727 });
6728 (() => montgomery({
6729 P: ED25519_P,
6730 a: BigInt(486662),
6731 montgomeryBits: 255,
6732 nByteLength: 32,
6733 Gu: BigInt(9),
6734 powPminus2: (x) => {
6735 const P = ED25519_P;
6736 const { pow_p_5_8, b2 } = ed25519_pow_2_252_3(x);
6737 return mod(pow2(pow_p_5_8, BigInt(3), P) * b2, P);
6738 },
6739 adjustScalarBytes,
6740 randomBytes,
6741 }))();
6742 const ELL2_C1 = (Fp.ORDER + BigInt(3)) / BigInt(8);
6743 const ELL2_C2 = Fp.pow(_2n$1, ELL2_C1);
6744 const ELL2_C3 = Fp.sqrt(Fp.neg(Fp.ONE));
6745 const ELL2_C4 = (Fp.ORDER - BigInt(5)) / BigInt(8);
6746 const ELL2_J = BigInt(486662);
6747 function map_to_curve_elligator2_curve25519(u) {
6748 let tv1 = Fp.sqr(u);
6749 tv1 = Fp.mul(tv1, _2n$1);
6750 let xd = Fp.add(tv1, Fp.ONE);
6751 let x1n = Fp.neg(ELL2_J);
6752 let tv2 = Fp.sqr(xd);
6753 let gxd = Fp.mul(tv2, xd);
6754 let gx1 = Fp.mul(tv1, ELL2_J);
6755 gx1 = Fp.mul(gx1, x1n);
6756 gx1 = Fp.add(gx1, tv2);
6757 gx1 = Fp.mul(gx1, x1n);
6758 let tv3 = Fp.sqr(gxd);
6759 tv2 = Fp.sqr(tv3);
6760 tv3 = Fp.mul(tv3, gxd);
6761 tv3 = Fp.mul(tv3, gx1);
6762 tv2 = Fp.mul(tv2, tv3);
6763 let y11 = Fp.pow(tv2, ELL2_C4);
6764 y11 = Fp.mul(y11, tv3);
6765 let y12 = Fp.mul(y11, ELL2_C3);
6766 tv2 = Fp.sqr(y11);
6767 tv2 = Fp.mul(tv2, gxd);
6768 let e1 = Fp.eql(tv2, gx1);
6769 let y1 = Fp.cmov(y12, y11, e1);
6770 let x2n = Fp.mul(x1n, tv1);
6771 let y21 = Fp.mul(y11, u);
6772 y21 = Fp.mul(y21, ELL2_C2);
6773 let y22 = Fp.mul(y21, ELL2_C3);
6774 let gx2 = Fp.mul(gx1, tv1);
6775 tv2 = Fp.sqr(y21);
6776 tv2 = Fp.mul(tv2, gxd);
6777 let e2 = Fp.eql(tv2, gx2);
6778 let y2 = Fp.cmov(y22, y21, e2);
6779 tv2 = Fp.sqr(y1);
6780 tv2 = Fp.mul(tv2, gxd);
6781 let e3 = Fp.eql(tv2, gx1);
6782 let xn = Fp.cmov(x2n, x1n, e3);
6783 let y = Fp.cmov(y2, y1, e3);
6784 let e4 = Fp.isOdd(y);
6785 y = Fp.cmov(y, Fp.neg(y), e3 !== e4);
6786 return { xMn: xn, xMd: xd, yMn: y, yMd: _1n$1 };
6787 }
6788 const ELL2_C1_EDWARDS = FpSqrtEven(Fp, Fp.neg(BigInt(486664)));
6789 function map_to_curve_elligator2_edwards25519(u) {
6790 const { xMn, xMd, yMn, yMd } = map_to_curve_elligator2_curve25519(u);
6791 let xn = Fp.mul(xMn, yMd);
6792 xn = Fp.mul(xn, ELL2_C1_EDWARDS);
6793 let xd = Fp.mul(xMd, yMn);
6794 let yn = Fp.sub(xMn, xMd);
6795 let yd = Fp.add(xMn, xMd);
6796 let tv1 = Fp.mul(xd, yd);
6797 let e = Fp.eql(tv1, Fp.ZERO);
6798 xn = Fp.cmov(xn, Fp.ZERO, e);
6799 xd = Fp.cmov(xd, Fp.ONE, e);
6800 yn = Fp.cmov(yn, Fp.ONE, e);
6801 yd = Fp.cmov(yd, Fp.ONE, e);
6802 const inv = Fp.invertBatch([xd, yd]);
6803 return { x: Fp.mul(xn, inv[0]), y: Fp.mul(yn, inv[1]) };
6804 }
6805 (() => createHasher(ed25519.ExtendedPoint, (scalars) => map_to_curve_elligator2_edwards25519(scalars[0]), {
6806 DST: 'edwards25519_XMD:SHA-512_ELL2_RO_',
6807 encodeDST: 'edwards25519_XMD:SHA-512_ELL2_NU_',
6808 p: Fp.ORDER,
6809 m: 1,
6810 k: 128,
6811 expand: 'xmd',
6812 hash: sha512,
6813 }))();
6814 function assertRstPoint(other) {
6815 if (!(other instanceof RistPoint))
6816 throw new Error('RistrettoPoint expected');
6817 }
6818 const SQRT_M1 = ED25519_SQRT_M1;
6819 const SQRT_AD_MINUS_ONE = BigInt('25063068953384623474111414158702152701244531502492656460079210482610430750235');
6820 const INVSQRT_A_MINUS_D = BigInt('54469307008909316920995813868745141605393597292927456921205312896311721017578');
6821 const ONE_MINUS_D_SQ = BigInt('1159843021668779879193775521855586647937357759715417654439879720876111806838');
6822 const D_MINUS_ONE_SQ = BigInt('40440834346308536858101042469323190826248399146238708352240133220865137265952');
6823 const invertSqrt = (number) => uvRatio(_1n$1, number);
6824 const MAX_255B = BigInt('0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff');
6825 const bytes255ToNumberLE = (bytes) => ed25519.CURVE.Fp.create(bytesToNumberLE(bytes) & MAX_255B);
6826 function calcElligatorRistrettoMap(r0) {
6827 const { d } = ed25519.CURVE;
6828 const P = ed25519.CURVE.Fp.ORDER;
6829 const mod = ed25519.CURVE.Fp.create;
6830 const r = mod(SQRT_M1 * r0 * r0);
6831 const Ns = mod((r + _1n$1) * ONE_MINUS_D_SQ);
6832 let c = BigInt(-1);
6833 const D = mod((c - d * r) * mod(r + d));
6834 let { isValid: Ns_D_is_sq, value: s } = uvRatio(Ns, D);
6835 let s_ = mod(s * r0);
6836 if (!isNegativeLE(s_, P))
6837 s_ = mod(-s_);
6838 if (!Ns_D_is_sq)
6839 s = s_;
6840 if (!Ns_D_is_sq)
6841 c = r;
6842 const Nt = mod(c * (r - _1n$1) * D_MINUS_ONE_SQ - D);
6843 const s2 = s * s;
6844 const W0 = mod((s + s) * D);
6845 const W1 = mod(Nt * SQRT_AD_MINUS_ONE);
6846 const W2 = mod(_1n$1 - s2);
6847 const W3 = mod(_1n$1 + s2);
6848 return new ed25519.ExtendedPoint(mod(W0 * W3), mod(W2 * W1), mod(W1 * W3), mod(W0 * W2));
6849 }
6850 class RistPoint {
6851 constructor(ep) {
6852 this.ep = ep;
6853 }
6854 static fromAffine(ap) {
6855 return new RistPoint(ed25519.ExtendedPoint.fromAffine(ap));
6856 }
6857 static hashToCurve(hex) {
6858 hex = ensureBytes('ristrettoHash', hex, 64);
6859 const r1 = bytes255ToNumberLE(hex.slice(0, 32));
6860 const R1 = calcElligatorRistrettoMap(r1);
6861 const r2 = bytes255ToNumberLE(hex.slice(32, 64));
6862 const R2 = calcElligatorRistrettoMap(r2);
6863 return new RistPoint(R1.add(R2));
6864 }
6865 static fromHex(hex) {
6866 hex = ensureBytes('ristrettoHex', hex, 32);
6867 const { a, d } = ed25519.CURVE;
6868 const P = ed25519.CURVE.Fp.ORDER;
6869 const mod = ed25519.CURVE.Fp.create;
6870 const emsg = 'RistrettoPoint.fromHex: the hex is not valid encoding of RistrettoPoint';
6871 const s = bytes255ToNumberLE(hex);
6872 if (!equalBytes(numberToBytesLE(s, 32), hex) || isNegativeLE(s, P))
6873 throw new Error(emsg);
6874 const s2 = mod(s * s);
6875 const u1 = mod(_1n$1 + a * s2);
6876 const u2 = mod(_1n$1 - a * s2);
6877 const u1_2 = mod(u1 * u1);
6878 const u2_2 = mod(u2 * u2);
6879 const v = mod(a * d * u1_2 - u2_2);
6880 const { isValid, value: I } = invertSqrt(mod(v * u2_2));
6881 const Dx = mod(I * u2);
6882 const Dy = mod(I * Dx * v);
6883 let x = mod((s + s) * Dx);
6884 if (isNegativeLE(x, P))
6885 x = mod(-x);
6886 const y = mod(u1 * Dy);
6887 const t = mod(x * y);
6888 if (!isValid || isNegativeLE(t, P) || y === _0n$1)
6889 throw new Error(emsg);
6890 return new RistPoint(new ed25519.ExtendedPoint(x, y, _1n$1, t));
6891 }
6892 toRawBytes() {
6893 let { ex: x, ey: y, ez: z, et: t } = this.ep;
6894 const P = ed25519.CURVE.Fp.ORDER;
6895 const mod = ed25519.CURVE.Fp.create;
6896 const u1 = mod(mod(z + y) * mod(z - y));
6897 const u2 = mod(x * y);
6898 const u2sq = mod(u2 * u2);
6899 const { value: invsqrt } = invertSqrt(mod(u1 * u2sq));
6900 const D1 = mod(invsqrt * u1);
6901 const D2 = mod(invsqrt * u2);
6902 const zInv = mod(D1 * D2 * t);
6903 let D;
6904 if (isNegativeLE(t * zInv, P)) {
6905 let _x = mod(y * SQRT_M1);
6906 let _y = mod(x * SQRT_M1);
6907 x = _x;
6908 y = _y;
6909 D = mod(D1 * INVSQRT_A_MINUS_D);
6910 }
6911 else {
6912 D = D2;
6913 }
6914 if (isNegativeLE(x * zInv, P))
6915 y = mod(-y);
6916 let s = mod((z - y) * D);
6917 if (isNegativeLE(s, P))
6918 s = mod(-s);
6919 return numberToBytesLE(s, 32);
6920 }
6921 toHex() {
6922 return bytesToHex(this.toRawBytes());
6923 }
6924 toString() {
6925 return this.toHex();
6926 }
6927 equals(other) {
6928 assertRstPoint(other);
6929 const { ex: X1, ey: Y1 } = this.ep;
6930 const { ex: X2, ey: Y2 } = other.ep;
6931 const mod = ed25519.CURVE.Fp.create;
6932 const one = mod(X1 * Y2) === mod(Y1 * X2);
6933 const two = mod(Y1 * Y2) === mod(X1 * X2);
6934 return one || two;
6935 }
6936 add(other) {
6937 assertRstPoint(other);
6938 return new RistPoint(this.ep.add(other.ep));
6939 }
6940 subtract(other) {
6941 assertRstPoint(other);
6942 return new RistPoint(this.ep.subtract(other.ep));
6943 }
6944 multiply(scalar) {
6945 return new RistPoint(this.ep.multiply(scalar));
6946 }
6947 multiplyUnsafe(scalar) {
6948 return new RistPoint(this.ep.multiplyUnsafe(scalar));
6949 }
6950 double() {
6951 return new RistPoint(this.ep.double());
6952 }
6953 negate() {
6954 return new RistPoint(this.ep.negate());
6955 }
6956 }
6957 (() => {
6958 if (!RistPoint.BASE)
6959 RistPoint.BASE = new RistPoint(ed25519.ExtendedPoint.BASE);
6960 if (!RistPoint.ZERO)
6961 RistPoint.ZERO = new RistPoint(ed25519.ExtendedPoint.ZERO);
6962 return RistPoint;
6963 })();
6964
6965 function ed25519PairFromSeed(seed, onlyJs) {
6966 if (!util.hasBigInt || (!onlyJs && isReady())) {
6967 const full = ed25519KeypairFromSeed(seed);
6968 return {
6969 publicKey: full.slice(32),
6970 secretKey: full.slice(0, 64)
6971 };
6972 }
6973 const publicKey = ed25519.getPublicKey(seed);
6974 return {
6975 publicKey,
6976 secretKey: util.u8aConcatStrict([seed, publicKey])
6977 };
6978 }
6979
6980 function ed25519PairFromRandom() {
6981 return ed25519PairFromSeed(randomAsU8a());
6982 }
6983
6984 function ed25519PairFromSecret(secretKey) {
6985 if (secretKey.length !== 64) {
6986 throw new Error('Invalid secretKey provided');
6987 }
6988 return {
6989 publicKey: secretKey.slice(32),
6990 secretKey
6991 };
6992 }
6993
6994 function ed25519PairFromString(value) {
6995 return ed25519PairFromSeed(blake2AsU8a(util.stringToU8a(value)));
6996 }
6997
6998 function ed25519Sign(message, { publicKey, secretKey }, onlyJs) {
6999 if (!secretKey) {
7000 throw new Error('Expected a valid secretKey');
7001 }
7002 else if (!publicKey) {
7003 throw new Error('Expected a valid publicKey');
7004 }
7005 const messageU8a = util.u8aToU8a(message);
7006 const privateU8a = secretKey.subarray(0, 32);
7007 return !util.hasBigInt || (!onlyJs && isReady())
7008 ? ed25519Sign$1(publicKey, privateU8a, messageU8a)
7009 : ed25519.sign(messageU8a, privateU8a);
7010 }
7011
7012 function ed25519Verify(message, signature, publicKey, onlyJs) {
7013 const messageU8a = util.u8aToU8a(message);
7014 const publicKeyU8a = util.u8aToU8a(publicKey);
7015 const signatureU8a = util.u8aToU8a(signature);
7016 if (publicKeyU8a.length !== 32) {
7017 throw new Error(`Invalid publicKey, received ${publicKeyU8a.length}, expected 32`);
7018 }
7019 else if (signatureU8a.length !== 64) {
7020 throw new Error(`Invalid signature, received ${signatureU8a.length} bytes, expected 64`);
7021 }
7022 try {
7023 return !util.hasBigInt || (!onlyJs && isReady())
7024 ? ed25519Verify$1(signatureU8a, messageU8a, publicKeyU8a)
7025 : ed25519.verify(signatureU8a, messageU8a, publicKeyU8a);
7026 }
7027 catch {
7028 return false;
7029 }
7030 }
7031
7032 const keyHdkdEd25519 = createSeedDeriveFn(ed25519PairFromSeed, ed25519DeriveHard);
7033
7034 const SEC_LEN = 64;
7035 const PUB_LEN = 32;
7036 const TOT_LEN = SEC_LEN + PUB_LEN;
7037 function sr25519PairFromU8a(full) {
7038 const fullU8a = util.u8aToU8a(full);
7039 if (fullU8a.length !== TOT_LEN) {
7040 throw new Error(`Expected keypair with ${TOT_LEN} bytes, found ${fullU8a.length}`);
7041 }
7042 return {
7043 publicKey: fullU8a.slice(SEC_LEN, TOT_LEN),
7044 secretKey: fullU8a.slice(0, SEC_LEN)
7045 };
7046 }
7047
7048 function sr25519KeypairToU8a({ publicKey, secretKey }) {
7049 return util.u8aConcat(secretKey, publicKey).slice();
7050 }
7051
7052 function createDeriveFn(derive) {
7053 return (keypair, chainCode) => {
7054 if (!util.isU8a(chainCode) || chainCode.length !== 32) {
7055 throw new Error('Invalid chainCode passed to derive');
7056 }
7057 return sr25519PairFromU8a(derive(sr25519KeypairToU8a(keypair), chainCode));
7058 };
7059 }
7060
7061 const sr25519DeriveHard = createDeriveFn(sr25519DeriveKeypairHard);
7062
7063 const sr25519DeriveSoft = createDeriveFn(sr25519DeriveKeypairSoft);
7064
7065 function keyHdkdSr25519(keypair, { chainCode, isSoft }) {
7066 return isSoft
7067 ? sr25519DeriveSoft(keypair, chainCode)
7068 : sr25519DeriveHard(keypair, chainCode);
7069 }
7070
7071 const generators = {
7072 ecdsa: keyHdkdEcdsa,
7073 ed25519: keyHdkdEd25519,
7074 ethereum: keyHdkdEcdsa,
7075 sr25519: keyHdkdSr25519
7076 };
7077 function keyFromPath(pair, path, type) {
7078 const keyHdkd = generators[type];
7079 let result = pair;
7080 for (const junction of path) {
7081 result = keyHdkd(result, junction);
7082 }
7083 return result;
7084 }
7085
7086 function sr25519Agreement(secretKey, publicKey) {
7087 const secretKeyU8a = util.u8aToU8a(secretKey);
7088 const publicKeyU8a = util.u8aToU8a(publicKey);
7089 if (publicKeyU8a.length !== 32) {
7090 throw new Error(`Invalid publicKey, received ${publicKeyU8a.length} bytes, expected 32`);
7091 }
7092 else if (secretKeyU8a.length !== 64) {
7093 throw new Error(`Invalid secretKey, received ${secretKeyU8a.length} bytes, expected 64`);
7094 }
7095 return sr25519Agree(publicKeyU8a, secretKeyU8a);
7096 }
7097
7098 function sr25519DerivePublic(publicKey, chainCode) {
7099 const publicKeyU8a = util.u8aToU8a(publicKey);
7100 if (!util.isU8a(chainCode) || chainCode.length !== 32) {
7101 throw new Error('Invalid chainCode passed to derive');
7102 }
7103 else if (publicKeyU8a.length !== 32) {
7104 throw new Error(`Invalid publicKey, received ${publicKeyU8a.length} bytes, expected 32`);
7105 }
7106 return sr25519DerivePublicSoft(publicKeyU8a, chainCode);
7107 }
7108
7109 function sr25519PairFromSeed(seed) {
7110 const seedU8a = util.u8aToU8a(seed);
7111 if (seedU8a.length !== 32) {
7112 throw new Error(`Expected a seed matching 32 bytes, found ${seedU8a.length}`);
7113 }
7114 return sr25519PairFromU8a(sr25519KeypairFromSeed(seedU8a));
7115 }
7116
7117 function sr25519Sign(message, { publicKey, secretKey }) {
7118 if (publicKey?.length !== 32) {
7119 throw new Error('Expected a valid publicKey, 32-bytes');
7120 }
7121 else if (secretKey?.length !== 64) {
7122 throw new Error('Expected a valid secretKey, 64-bytes');
7123 }
7124 return sr25519Sign$1(publicKey, secretKey, util.u8aToU8a(message));
7125 }
7126
7127 function sr25519Verify(message, signature, publicKey) {
7128 const publicKeyU8a = util.u8aToU8a(publicKey);
7129 const signatureU8a = util.u8aToU8a(signature);
7130 if (publicKeyU8a.length !== 32) {
7131 throw new Error(`Invalid publicKey, received ${publicKeyU8a.length} bytes, expected 32`);
7132 }
7133 else if (signatureU8a.length !== 64) {
7134 throw new Error(`Invalid signature, received ${signatureU8a.length} bytes, expected 64`);
7135 }
7136 return sr25519Verify$1(signatureU8a, util.u8aToU8a(message), publicKeyU8a);
7137 }
7138
7139 const EMPTY_U8A$1 = new Uint8Array();
7140 function sr25519VrfSign(message, { secretKey }, context = EMPTY_U8A$1, extra = EMPTY_U8A$1) {
7141 if (secretKey?.length !== 64) {
7142 throw new Error('Invalid secretKey, expected 64-bytes');
7143 }
7144 return vrfSign(secretKey, util.u8aToU8a(context), util.u8aToU8a(message), util.u8aToU8a(extra));
7145 }
7146
7147 const EMPTY_U8A = new Uint8Array();
7148 function sr25519VrfVerify(message, signOutput, publicKey, context = EMPTY_U8A, extra = EMPTY_U8A) {
7149 const publicKeyU8a = util.u8aToU8a(publicKey);
7150 const proofU8a = util.u8aToU8a(signOutput);
7151 if (publicKeyU8a.length !== 32) {
7152 throw new Error('Invalid publicKey, expected 32-bytes');
7153 }
7154 else if (proofU8a.length !== 96) {
7155 throw new Error('Invalid vrfSign output, expected 96 bytes');
7156 }
7157 return vrfVerify(publicKeyU8a, util.u8aToU8a(context), util.u8aToU8a(message), util.u8aToU8a(extra), proofU8a);
7158 }
7159
7160 function encodeAddress(key, ss58Format = defaults.prefix) {
7161 const u8a = decodeAddress(key);
7162 if ((ss58Format < 0) || (ss58Format > 16383) || [46, 47].includes(ss58Format)) {
7163 throw new Error('Out of range ss58Format specified');
7164 }
7165 else if (!defaults.allowedDecodedLengths.includes(u8a.length)) {
7166 throw new Error(`Expected a valid key to convert, with length ${defaults.allowedDecodedLengths.join(', ')}`);
7167 }
7168 const input = util.u8aConcat(ss58Format < 64
7169 ? [ss58Format]
7170 : [
7171 ((ss58Format & 252) >> 2) | 64,
7172 (ss58Format >> 8) | ((ss58Format & 3) << 6)
7173 ], u8a);
7174 return base58Encode(util.u8aConcat(input, sshash(input).subarray(0, [32, 33].includes(u8a.length) ? 2 : 1)));
7175 }
7176
7177 function filterHard({ isHard }) {
7178 return isHard;
7179 }
7180 function deriveAddress(who, suri, ss58Format) {
7181 const { path } = keyExtractPath(suri);
7182 if (!path.length || path.every(filterHard)) {
7183 throw new Error('Expected suri to contain a combination of non-hard paths');
7184 }
7185 let publicKey = decodeAddress(who);
7186 for (const { chainCode } of path) {
7187 publicKey = sr25519DerivePublic(publicKey, chainCode);
7188 }
7189 return encodeAddress(publicKey, ss58Format);
7190 }
7191
7192 const PREFIX$1 = util.stringToU8a('modlpy/utilisuba');
7193 function createKeyDerived(who, index) {
7194 return blake2AsU8a(util.u8aConcat(PREFIX$1, decodeAddress(who), util.bnToU8a(index, BN_LE_16_OPTS)));
7195 }
7196
7197 function encodeDerivedAddress(who, index, ss58Format) {
7198 return encodeAddress(createKeyDerived(decodeAddress(who), index), ss58Format);
7199 }
7200
7201 function addressToU8a(who) {
7202 return decodeAddress(who);
7203 }
7204
7205 const PREFIX = util.stringToU8a('modlpy/utilisuba');
7206 function createKeyMulti(who, threshold) {
7207 return blake2AsU8a(util.u8aConcat(PREFIX, util.compactToU8a(who.length), ...util.u8aSorted(who.map(addressToU8a)), util.bnToU8a(threshold, BN_LE_16_OPTS)));
7208 }
7209
7210 function encodeMultiAddress(who, threshold, ss58Format) {
7211 return encodeAddress(createKeyMulti(who, threshold), ss58Format);
7212 }
7213
7214 function addressEq(a, b) {
7215 return util.u8aEq(decodeAddress(a), decodeAddress(b));
7216 }
7217
7218 const [SHA3_PI, SHA3_ROTL, _SHA3_IOTA] = [[], [], []];
7219 const _0n = BigInt(0);
7220 const _1n = BigInt(1);
7221 const _2n = BigInt(2);
7222 const _7n$1 = BigInt(7);
7223 const _256n$1 = BigInt(256);
7224 const _0x71n = BigInt(0x71);
7225 for (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {
7226 [x, y] = [y, (2 * x + 3 * y) % 5];
7227 SHA3_PI.push(2 * (5 * y + x));
7228 SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);
7229 let t = _0n;
7230 for (let j = 0; j < 7; j++) {
7231 R = ((R << _1n) ^ ((R >> _7n$1) * _0x71n)) % _256n$1;
7232 if (R & _2n)
7233 t ^= _1n << ((_1n << BigInt(j)) - _1n);
7234 }
7235 _SHA3_IOTA.push(t);
7236 }
7237 const [SHA3_IOTA_H, SHA3_IOTA_L] = split(_SHA3_IOTA, true);
7238 const rotlH = (h, l, s) => (s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s));
7239 const rotlL = (h, l, s) => (s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s));
7240 function keccakP(s, rounds = 24) {
7241 const B = new Uint32Array(5 * 2);
7242 for (let round = 24 - rounds; round < 24; round++) {
7243 for (let x = 0; x < 10; x++)
7244 B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];
7245 for (let x = 0; x < 10; x += 2) {
7246 const idx1 = (x + 8) % 10;
7247 const idx0 = (x + 2) % 10;
7248 const B0 = B[idx0];
7249 const B1 = B[idx0 + 1];
7250 const Th = rotlH(B0, B1, 1) ^ B[idx1];
7251 const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];
7252 for (let y = 0; y < 50; y += 10) {
7253 s[x + y] ^= Th;
7254 s[x + y + 1] ^= Tl;
7255 }
7256 }
7257 let curH = s[2];
7258 let curL = s[3];
7259 for (let t = 0; t < 24; t++) {
7260 const shift = SHA3_ROTL[t];
7261 const Th = rotlH(curH, curL, shift);
7262 const Tl = rotlL(curH, curL, shift);
7263 const PI = SHA3_PI[t];
7264 curH = s[PI];
7265 curL = s[PI + 1];
7266 s[PI] = Th;
7267 s[PI + 1] = Tl;
7268 }
7269 for (let y = 0; y < 50; y += 10) {
7270 for (let x = 0; x < 10; x++)
7271 B[x] = s[y + x];
7272 for (let x = 0; x < 10; x++)
7273 s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];
7274 }
7275 s[0] ^= SHA3_IOTA_H[round];
7276 s[1] ^= SHA3_IOTA_L[round];
7277 }
7278 B.fill(0);
7279 }
7280 class Keccak extends Hash {
7281 constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) {
7282 super();
7283 this.blockLen = blockLen;
7284 this.suffix = suffix;
7285 this.outputLen = outputLen;
7286 this.enableXOF = enableXOF;
7287 this.rounds = rounds;
7288 this.pos = 0;
7289 this.posOut = 0;
7290 this.finished = false;
7291 this.destroyed = false;
7292 number(outputLen);
7293 if (0 >= this.blockLen || this.blockLen >= 200)
7294 throw new Error('Sha3 supports only keccak-f1600 function');
7295 this.state = new Uint8Array(200);
7296 this.state32 = u32(this.state);
7297 }
7298 keccak() {
7299 keccakP(this.state32, this.rounds);
7300 this.posOut = 0;
7301 this.pos = 0;
7302 }
7303 update(data) {
7304 exists(this);
7305 const { blockLen, state } = this;
7306 data = toBytes(data);
7307 const len = data.length;
7308 for (let pos = 0; pos < len;) {
7309 const take = Math.min(blockLen - this.pos, len - pos);
7310 for (let i = 0; i < take; i++)
7311 state[this.pos++] ^= data[pos++];
7312 if (this.pos === blockLen)
7313 this.keccak();
7314 }
7315 return this;
7316 }
7317 finish() {
7318 if (this.finished)
7319 return;
7320 this.finished = true;
7321 const { state, suffix, pos, blockLen } = this;
7322 state[pos] ^= suffix;
7323 if ((suffix & 0x80) !== 0 && pos === blockLen - 1)
7324 this.keccak();
7325 state[blockLen - 1] ^= 0x80;
7326 this.keccak();
7327 }
7328 writeInto(out) {
7329 exists(this, false);
7330 bytes(out);
7331 this.finish();
7332 const bufferOut = this.state;
7333 const { blockLen } = this;
7334 for (let pos = 0, len = out.length; pos < len;) {
7335 if (this.posOut >= blockLen)
7336 this.keccak();
7337 const take = Math.min(blockLen - this.posOut, len - pos);
7338 out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);
7339 this.posOut += take;
7340 pos += take;
7341 }
7342 return out;
7343 }
7344 xofInto(out) {
7345 if (!this.enableXOF)
7346 throw new Error('XOF is not possible for this instance');
7347 return this.writeInto(out);
7348 }
7349 xof(bytes) {
7350 number(bytes);
7351 return this.xofInto(new Uint8Array(bytes));
7352 }
7353 digestInto(out) {
7354 output(out, this);
7355 if (this.finished)
7356 throw new Error('digest() was already called');
7357 this.writeInto(out);
7358 this.destroy();
7359 return out;
7360 }
7361 digest() {
7362 return this.digestInto(new Uint8Array(this.outputLen));
7363 }
7364 destroy() {
7365 this.destroyed = true;
7366 this.state.fill(0);
7367 }
7368 _cloneInto(to) {
7369 const { blockLen, suffix, outputLen, rounds, enableXOF } = this;
7370 to || (to = new Keccak(blockLen, suffix, outputLen, enableXOF, rounds));
7371 to.state32.set(this.state32);
7372 to.pos = this.pos;
7373 to.posOut = this.posOut;
7374 to.finished = this.finished;
7375 to.rounds = rounds;
7376 to.suffix = suffix;
7377 to.outputLen = outputLen;
7378 to.enableXOF = enableXOF;
7379 to.destroyed = this.destroyed;
7380 return to;
7381 }
7382 }
7383 const gen = (suffix, blockLen, outputLen) => wrapConstructor(() => new Keccak(blockLen, suffix, outputLen));
7384 gen(0x06, 144, 224 / 8);
7385 gen(0x06, 136, 256 / 8);
7386 gen(0x06, 104, 384 / 8);
7387 gen(0x06, 72, 512 / 8);
7388 gen(0x01, 144, 224 / 8);
7389 const keccak_256 = gen(0x01, 136, 256 / 8);
7390 gen(0x01, 104, 384 / 8);
7391 const keccak_512 = gen(0x01, 72, 512 / 8);
7392 const genShake = (suffix, blockLen, outputLen) => wrapXOFConstructorWithOpts((opts = {}) => new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true));
7393 genShake(0x1f, 168, 128 / 8);
7394 genShake(0x1f, 136, 256 / 8);
7395
7396 const keccakAsU8a = createDualHasher({ 256: keccak256, 512: keccak512 }, { 256: keccak_256, 512: keccak_512 });
7397 const keccak256AsU8a = createBitHasher(256, keccakAsU8a);
7398 const keccak512AsU8a = createBitHasher(512, keccakAsU8a);
7399 const keccakAsHex = createAsHex(keccakAsU8a);
7400
7401 function hasher(hashType, data, onlyJs) {
7402 return hashType === 'keccak'
7403 ? keccakAsU8a(data, undefined, onlyJs)
7404 : blake2AsU8a(data, undefined, undefined, onlyJs);
7405 }
7406
7407 function evmToAddress(evmAddress, ss58Format, hashType = 'blake2') {
7408 const message = util.u8aConcat('evm:', evmAddress);
7409 if (message.length !== 24) {
7410 throw new Error(`Converting ${evmAddress}: Invalid evm address length`);
7411 }
7412 return encodeAddress(hasher(hashType, message), ss58Format);
7413 }
7414
7415 function validateAddress(encoded, ignoreChecksum, ss58Format) {
7416 return !!decodeAddress(encoded, ignoreChecksum, ss58Format);
7417 }
7418
7419 function isAddress(address, ignoreChecksum, ss58Format) {
7420 try {
7421 return validateAddress(address, ignoreChecksum, ss58Format);
7422 }
7423 catch {
7424 return false;
7425 }
7426 }
7427
7428 function sortAddresses(addresses, ss58Format) {
7429 const u8aToAddress = (u8a) => encodeAddress(u8a, ss58Format);
7430 return util.u8aSorted(addresses.map(addressToU8a)).map(u8aToAddress);
7431 }
7432
7433 const l = util.logger('setSS58Format');
7434 function setSS58Format(prefix) {
7435 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');
7436 defaults.prefix = prefix;
7437 }
7438
7439 const chars = 'abcdefghijklmnopqrstuvwxyz234567';
7440 const config$1 = {
7441 chars,
7442 coder: utils.chain(
7443 utils.radix2(5), utils.alphabet(chars), {
7444 decode: (input) => input.split(''),
7445 encode: (input) => input.join('')
7446 }),
7447 ipfs: 'b',
7448 type: 'base32'
7449 };
7450 const base32Validate = createValidate(config$1);
7451 const isBase32 = createIs(base32Validate);
7452 const base32Decode = createDecode(config$1, base32Validate);
7453 const base32Encode = createEncode(config$1);
7454
7455 const config = {
7456 chars: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
7457 coder: base64,
7458 type: 'base64',
7459 withPadding: true
7460 };
7461 const base64Validate = createValidate(config);
7462 const isBase64 = createIs(base64Validate);
7463 const base64Decode = createDecode(config, base64Validate);
7464 const base64Encode = createEncode(config);
7465
7466 function base64Pad(value) {
7467 return value.padEnd(value.length + (value.length % 4), '=');
7468 }
7469
7470 function base64Trim(value) {
7471 while (value.length && value.endsWith('=')) {
7472 value = value.slice(0, -1);
7473 }
7474 return value;
7475 }
7476
7477 function secp256k1Compress(publicKey, onlyJs) {
7478 if (![33, 65].includes(publicKey.length)) {
7479 throw new Error(`Invalid publicKey provided, received ${publicKey.length} bytes input`);
7480 }
7481 if (publicKey.length === 33) {
7482 return publicKey;
7483 }
7484 return !util.hasBigInt || (!onlyJs && isReady())
7485 ? secp256k1Compress$1(publicKey)
7486 : secp256k1.ProjectivePoint.fromHex(publicKey).toRawBytes(true);
7487 }
7488
7489 function secp256k1Expand(publicKey, onlyJs) {
7490 if (![33, 65].includes(publicKey.length)) {
7491 throw new Error(`Invalid publicKey provided, received ${publicKey.length} bytes input`);
7492 }
7493 if (publicKey.length === 65) {
7494 return publicKey.subarray(1);
7495 }
7496 if (!util.hasBigInt || (!onlyJs && isReady())) {
7497 return secp256k1Expand$1(publicKey).subarray(1);
7498 }
7499 const { px, py } = secp256k1.ProjectivePoint.fromHex(publicKey);
7500 return util.u8aConcat(util.bnToU8a(px, BN_BE_256_OPTS), util.bnToU8a(py, BN_BE_256_OPTS));
7501 }
7502
7503 function secp256k1Recover(msgHash, signature, recovery, hashType = 'blake2', onlyJs) {
7504 const sig = util.u8aToU8a(signature).subarray(0, 64);
7505 const msg = util.u8aToU8a(msgHash);
7506 const publicKey = !util.hasBigInt || (!onlyJs && isReady())
7507 ? secp256k1Recover$1(msg, sig, recovery)
7508 : secp256k1.Signature
7509 .fromCompact(sig)
7510 .addRecoveryBit(recovery)
7511 .recoverPublicKey(msg)
7512 .toRawBytes();
7513 if (!publicKey) {
7514 throw new Error('Unable to recover publicKey from signature');
7515 }
7516 return hashType === 'keccak'
7517 ? secp256k1Expand(publicKey, onlyJs)
7518 : secp256k1Compress(publicKey, onlyJs);
7519 }
7520
7521 function secp256k1Sign(message, { secretKey }, hashType = 'blake2', onlyJs) {
7522 if (secretKey?.length !== 32) {
7523 throw new Error('Expected valid secp256k1 secretKey, 32-bytes');
7524 }
7525 const data = hasher(hashType, message, onlyJs);
7526 if (!util.hasBigInt || (!onlyJs && isReady())) {
7527 return secp256k1Sign$1(data, secretKey);
7528 }
7529 const signature = secp256k1.sign(data, secretKey, { lowS: true });
7530 return util.u8aConcat(util.bnToU8a(signature.r, BN_BE_256_OPTS), util.bnToU8a(signature.s, BN_BE_256_OPTS), new Uint8Array([signature.recovery || 0]));
7531 }
7532
7533 const N = 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141'.replace(/ /g, '');
7534 const N_BI = BigInt$1(`0x${N}`);
7535 const N_BN = new util.BN(N, 'hex');
7536 function addBi(seckey, tweak) {
7537 let res = util.u8aToBigInt(tweak, BN_BE_OPTS);
7538 if (res >= N_BI) {
7539 throw new Error('Tweak parameter is out of range');
7540 }
7541 res += util.u8aToBigInt(seckey, BN_BE_OPTS);
7542 if (res >= N_BI) {
7543 res -= N_BI;
7544 }
7545 if (res === util._0n) {
7546 throw new Error('Invalid resulting private key');
7547 }
7548 return util.nToU8a(res, BN_BE_256_OPTS);
7549 }
7550 function addBn(seckey, tweak) {
7551 const res = new util.BN(tweak);
7552 if (res.cmp(N_BN) >= 0) {
7553 throw new Error('Tweak parameter is out of range');
7554 }
7555 res.iadd(new util.BN(seckey));
7556 if (res.cmp(N_BN) >= 0) {
7557 res.isub(N_BN);
7558 }
7559 if (res.isZero()) {
7560 throw new Error('Invalid resulting private key');
7561 }
7562 return util.bnToU8a(res, BN_BE_256_OPTS);
7563 }
7564 function secp256k1PrivateKeyTweakAdd(seckey, tweak, onlyBn) {
7565 if (!util.isU8a(seckey) || seckey.length !== 32) {
7566 throw new Error('Expected seckey to be an Uint8Array with length 32');
7567 }
7568 else if (!util.isU8a(tweak) || tweak.length !== 32) {
7569 throw new Error('Expected tweak to be an Uint8Array with length 32');
7570 }
7571 return !util.hasBigInt || onlyBn
7572 ? addBn(seckey, tweak)
7573 : addBi(seckey, tweak);
7574 }
7575
7576 function secp256k1Verify(msgHash, signature, address, hashType = 'blake2', onlyJs) {
7577 const sig = util.u8aToU8a(signature);
7578 if (sig.length !== 65) {
7579 throw new Error(`Expected signature with 65 bytes, ${sig.length} found instead`);
7580 }
7581 const publicKey = secp256k1Recover(hasher(hashType, msgHash), sig, sig[64], hashType, onlyJs);
7582 const signerAddr = hasher(hashType, publicKey, onlyJs);
7583 const inputAddr = util.u8aToU8a(address);
7584 return util.u8aEq(publicKey, inputAddr) || (hashType === 'keccak'
7585 ? util.u8aEq(signerAddr.slice(-20), inputAddr.slice(-20))
7586 : util.u8aEq(signerAddr, inputAddr));
7587 }
7588
7589 function getH160(u8a) {
7590 if ([33, 65].includes(u8a.length)) {
7591 u8a = keccakAsU8a(secp256k1Expand(u8a));
7592 }
7593 return u8a.slice(-20);
7594 }
7595 function ethereumEncode(addressOrPublic) {
7596 if (!addressOrPublic) {
7597 return '0x';
7598 }
7599 const u8aAddress = util.u8aToU8a(addressOrPublic);
7600 if (![20, 32, 33, 65].includes(u8aAddress.length)) {
7601 throw new Error(`Invalid address or publicKey provided, received ${u8aAddress.length} bytes input`);
7602 }
7603 const address = util.u8aToHex(getH160(u8aAddress), -1, false);
7604 const hash = util.u8aToHex(keccakAsU8a(address), -1, false);
7605 let result = '';
7606 for (let i = 0; i < 40; i++) {
7607 result = `${result}${parseInt(hash[i], 16) > 7 ? address[i].toUpperCase() : address[i]}`;
7608 }
7609 return `0x${result}`;
7610 }
7611
7612 function isInvalidChar(char, byte) {
7613 return char !== (byte > 7
7614 ? char.toUpperCase()
7615 : char.toLowerCase());
7616 }
7617 function isEthereumChecksum(_address) {
7618 const address = _address.replace('0x', '');
7619 const hash = util.u8aToHex(keccakAsU8a(address.toLowerCase()), -1, false);
7620 for (let i = 0; i < 40; i++) {
7621 if (isInvalidChar(address[i], parseInt(hash[i], 16))) {
7622 return false;
7623 }
7624 }
7625 return true;
7626 }
7627
7628 function isEthereumAddress(address) {
7629 if (!address || address.length !== 42 || !util.isHex(address)) {
7630 return false;
7631 }
7632 else if (/^(0x)?[0-9a-f]{40}$/.test(address) || /^(0x)?[0-9A-F]{40}$/.test(address)) {
7633 return true;
7634 }
7635 return isEthereumChecksum(address);
7636 }
7637
7638 const JS_HASH = {
7639 256: sha256,
7640 512: sha512
7641 };
7642 const WA_MHAC = {
7643 256: hmacSha256,
7644 512: hmacSha512
7645 };
7646 function createSha(bitLength) {
7647 return (key, data, onlyJs) => hmacShaAsU8a(key, data, bitLength, onlyJs);
7648 }
7649 function hmacShaAsU8a(key, data, bitLength = 256, onlyJs) {
7650 const u8aKey = util.u8aToU8a(key);
7651 return !util.hasBigInt || (!onlyJs && isReady())
7652 ? WA_MHAC[bitLength](u8aKey, data)
7653 : hmac(JS_HASH[bitLength], u8aKey, data);
7654 }
7655 const hmacSha256AsU8a = createSha(256);
7656 const hmacSha512AsU8a = createSha(512);
7657
7658 const HARDENED = 0x80000000;
7659 function hdValidatePath(path) {
7660 if (!path.startsWith('m/')) {
7661 return false;
7662 }
7663 const parts = path.split('/').slice(1);
7664 for (const p of parts) {
7665 const n = /^\d+'?$/.test(p)
7666 ? parseInt(p.replace(/'$/, ''), 10)
7667 : Number.NaN;
7668 if (isNaN(n) || (n >= HARDENED) || (n < 0)) {
7669 return false;
7670 }
7671 }
7672 return true;
7673 }
7674
7675 const MASTER_SECRET = util.stringToU8a('Bitcoin seed');
7676 function createCoded(secretKey, chainCode) {
7677 return {
7678 chainCode,
7679 publicKey: secp256k1PairFromSeed(secretKey).publicKey,
7680 secretKey
7681 };
7682 }
7683 function deriveChild(hd, index) {
7684 const indexBuffer = util.bnToU8a(index, BN_BE_32_OPTS);
7685 const data = index >= HARDENED
7686 ? util.u8aConcat(new Uint8Array(1), hd.secretKey, indexBuffer)
7687 : util.u8aConcat(hd.publicKey, indexBuffer);
7688 try {
7689 const I = hmacShaAsU8a(hd.chainCode, data, 512);
7690 return createCoded(secp256k1PrivateKeyTweakAdd(hd.secretKey, I.slice(0, 32)), I.slice(32));
7691 }
7692 catch {
7693 return deriveChild(hd, index + 1);
7694 }
7695 }
7696 function hdEthereum(seed, path = '') {
7697 const I = hmacShaAsU8a(MASTER_SECRET, seed, 512);
7698 let hd = createCoded(I.slice(0, 32), I.slice(32));
7699 if (!path || path === 'm' || path === 'M' || path === "m'" || path === "M'") {
7700 return hd;
7701 }
7702 if (!hdValidatePath(path)) {
7703 throw new Error('Invalid derivation path');
7704 }
7705 const parts = path.split('/').slice(1);
7706 for (const p of parts) {
7707 hd = deriveChild(hd, parseInt(p, 10) + ((p.length > 1) && p.endsWith("'")
7708 ? HARDENED
7709 : 0));
7710 }
7711 return hd;
7712 }
7713
7714 function pbkdf2Init(hash$1, _password, _salt, _opts) {
7715 hash(hash$1);
7716 const opts = checkOpts({ dkLen: 32, asyncTick: 10 }, _opts);
7717 const { c, dkLen, asyncTick } = opts;
7718 number(c);
7719 number(dkLen);
7720 number(asyncTick);
7721 if (c < 1)
7722 throw new Error('PBKDF2: iterations (c) should be >= 1');
7723 const password = toBytes(_password);
7724 const salt = toBytes(_salt);
7725 const DK = new Uint8Array(dkLen);
7726 const PRF = hmac.create(hash$1, password);
7727 const PRFSalt = PRF._cloneInto().update(salt);
7728 return { c, dkLen, asyncTick, DK, PRF, PRFSalt };
7729 }
7730 function pbkdf2Output(PRF, PRFSalt, DK, prfW, u) {
7731 PRF.destroy();
7732 PRFSalt.destroy();
7733 if (prfW)
7734 prfW.destroy();
7735 u.fill(0);
7736 return DK;
7737 }
7738 function pbkdf2(hash, password, salt, opts) {
7739 const { c, dkLen, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);
7740 let prfW;
7741 const arr = new Uint8Array(4);
7742 const view = createView(arr);
7743 const u = new Uint8Array(PRF.outputLen);
7744 for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {
7745 const Ti = DK.subarray(pos, pos + PRF.outputLen);
7746 view.setInt32(0, ti, false);
7747 (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);
7748 Ti.set(u.subarray(0, Ti.length));
7749 for (let ui = 1; ui < c; ui++) {
7750 PRF._cloneInto(prfW).update(u).digestInto(u);
7751 for (let i = 0; i < Ti.length; i++)
7752 Ti[i] ^= u[i];
7753 }
7754 }
7755 return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);
7756 }
7757
7758 function pbkdf2Encode(passphrase, salt = randomAsU8a(), rounds = 2048, onlyJs) {
7759 const u8aPass = util.u8aToU8a(passphrase);
7760 const u8aSalt = util.u8aToU8a(salt);
7761 return {
7762 password: !util.hasBigInt || (!onlyJs && isReady())
7763 ? pbkdf2$1(u8aPass, u8aSalt, rounds)
7764 : pbkdf2(sha512, u8aPass, u8aSalt, { c: rounds, dkLen: 64 }),
7765 rounds,
7766 salt
7767 };
7768 }
7769
7770 const shaAsU8a = createDualHasher({ 256: sha256$1, 512: sha512$1 }, { 256: sha256, 512: sha512 });
7771 const sha256AsU8a = createBitHasher(256, shaAsU8a);
7772 const sha512AsU8a = createBitHasher(512, shaAsU8a);
7773
7774 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('|');
7775
7776 const INVALID_MNEMONIC = 'Invalid mnemonic';
7777 const INVALID_ENTROPY = 'Invalid entropy';
7778 const INVALID_CHECKSUM = 'Invalid mnemonic checksum';
7779 function normalize(str) {
7780 return (str || '').normalize('NFKD');
7781 }
7782 function binaryToByte(bin) {
7783 return parseInt(bin, 2);
7784 }
7785 function bytesToBinary(bytes) {
7786 return bytes.map((x) => x.toString(2).padStart(8, '0')).join('');
7787 }
7788 function deriveChecksumBits(entropyBuffer) {
7789 return bytesToBinary(Array.from(sha256AsU8a(entropyBuffer))).slice(0, (entropyBuffer.length * 8) / 32);
7790 }
7791 function mnemonicToSeedSync(mnemonic, password) {
7792 return pbkdf2Encode(util.stringToU8a(normalize(mnemonic)), util.stringToU8a(`mnemonic${normalize(password)}`)).password;
7793 }
7794 function mnemonicToEntropy$1(mnemonic, wordlist = DEFAULT_WORDLIST) {
7795 const words = normalize(mnemonic).split(' ');
7796 if (words.length % 3 !== 0) {
7797 throw new Error(INVALID_MNEMONIC);
7798 }
7799 const bits = words
7800 .map((word) => {
7801 const index = wordlist.indexOf(word);
7802 if (index === -1) {
7803 throw new Error(INVALID_MNEMONIC);
7804 }
7805 return index.toString(2).padStart(11, '0');
7806 })
7807 .join('');
7808 const dividerIndex = Math.floor(bits.length / 33) * 32;
7809 const entropyBits = bits.slice(0, dividerIndex);
7810 const checksumBits = bits.slice(dividerIndex);
7811 const matched = entropyBits.match(/(.{1,8})/g);
7812 const entropyBytes = matched?.map(binaryToByte);
7813 if (!entropyBytes || (entropyBytes.length % 4 !== 0) || (entropyBytes.length < 16) || (entropyBytes.length > 32)) {
7814 throw new Error(INVALID_ENTROPY);
7815 }
7816 const entropy = util.u8aToU8a(entropyBytes);
7817 if (deriveChecksumBits(entropy) !== checksumBits) {
7818 throw new Error(INVALID_CHECKSUM);
7819 }
7820 return entropy;
7821 }
7822 function entropyToMnemonic(entropy, wordlist = DEFAULT_WORDLIST) {
7823 if ((entropy.length % 4 !== 0) || (entropy.length < 16) || (entropy.length > 32)) {
7824 throw new Error(INVALID_ENTROPY);
7825 }
7826 const matched = `${bytesToBinary(Array.from(entropy))}${deriveChecksumBits(entropy)}`.match(/(.{1,11})/g);
7827 const mapped = matched?.map((b) => wordlist[binaryToByte(b)]);
7828 if (!mapped || (mapped.length < 12)) {
7829 throw new Error('Unable to map entropy to mnemonic');
7830 }
7831 return mapped.join(' ');
7832 }
7833 function generateMnemonic(numWords, wordlist) {
7834 return entropyToMnemonic(randomAsU8a((numWords / 3) * 4), wordlist);
7835 }
7836 function validateMnemonic(mnemonic, wordlist) {
7837 try {
7838 mnemonicToEntropy$1(mnemonic, wordlist);
7839 }
7840 catch {
7841 return false;
7842 }
7843 return true;
7844 }
7845
7846 function mnemonicGenerate(numWords = 12, wordlist, onlyJs) {
7847 return !util.hasBigInt || (!wordlist && !onlyJs && isReady())
7848 ? bip39Generate(numWords)
7849 : generateMnemonic(numWords, wordlist);
7850 }
7851
7852 function mnemonicToEntropy(mnemonic, wordlist, onlyJs) {
7853 return !util.hasBigInt || (!wordlist && !onlyJs && isReady())
7854 ? bip39ToEntropy(mnemonic)
7855 : mnemonicToEntropy$1(mnemonic, wordlist);
7856 }
7857
7858 function mnemonicValidate(mnemonic, wordlist, onlyJs) {
7859 return !util.hasBigInt || (!wordlist && !onlyJs && isReady())
7860 ? bip39Validate(mnemonic)
7861 : validateMnemonic(mnemonic, wordlist);
7862 }
7863
7864 function mnemonicToLegacySeed(mnemonic, password = '', onlyJs, byteLength = 32) {
7865 if (!mnemonicValidate(mnemonic)) {
7866 throw new Error('Invalid bip39 mnemonic specified');
7867 }
7868 else if (![32, 64].includes(byteLength)) {
7869 throw new Error(`Invalid seed length ${byteLength}, expected 32 or 64`);
7870 }
7871 return byteLength === 32
7872 ? !util.hasBigInt || (!onlyJs && isReady())
7873 ? bip39ToSeed(mnemonic, password)
7874 : mnemonicToSeedSync(mnemonic, password).subarray(0, 32)
7875 : mnemonicToSeedSync(mnemonic, password);
7876 }
7877
7878 function mnemonicToMiniSecret(mnemonic, password = '', wordlist, onlyJs) {
7879 if (!mnemonicValidate(mnemonic, wordlist, onlyJs)) {
7880 throw new Error('Invalid bip39 mnemonic specified');
7881 }
7882 else if (!wordlist && !onlyJs && isReady()) {
7883 return bip39ToMiniSecret(mnemonic, password);
7884 }
7885 const entropy = mnemonicToEntropy(mnemonic, wordlist);
7886 const salt = util.stringToU8a(`mnemonic${password}`);
7887 return pbkdf2Encode(entropy, salt).password.slice(0, 32);
7888 }
7889
7890 function ledgerDerivePrivate(xprv, index) {
7891 const kl = xprv.subarray(0, 32);
7892 const kr = xprv.subarray(32, 64);
7893 const cc = xprv.subarray(64, 96);
7894 const data = util.u8aConcat([0], kl, kr, util.bnToU8a(index, BN_LE_32_OPTS));
7895 const z = hmacShaAsU8a(cc, data, 512);
7896 data[0] = 0x01;
7897 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));
7898 }
7899
7900 const ED25519_CRYPTO = 'ed25519 seed';
7901 function ledgerMaster(mnemonic, password) {
7902 const seed = mnemonicToSeedSync(mnemonic, password);
7903 const chainCode = hmacShaAsU8a(ED25519_CRYPTO, new Uint8Array([1, ...seed]), 256);
7904 let priv;
7905 while (!priv || (priv[31] & 32)) {
7906 priv = hmacShaAsU8a(ED25519_CRYPTO, priv || seed, 512);
7907 }
7908 priv[0] &= 248;
7909 priv[31] &= 127;
7910 priv[31] |= 64;
7911 return util.u8aConcat(priv, chainCode);
7912 }
7913
7914 function hdLedger(_mnemonic, path) {
7915 const words = _mnemonic
7916 .split(' ')
7917 .map((s) => s.trim())
7918 .filter((s) => s);
7919 if (![12, 24, 25].includes(words.length)) {
7920 throw new Error('Expected a mnemonic with 24 words (or 25 including a password)');
7921 }
7922 const [mnemonic, password] = words.length === 25
7923 ? [words.slice(0, 24).join(' '), words[24]]
7924 : [words.join(' '), ''];
7925 if (!mnemonicValidate(mnemonic)) {
7926 throw new Error('Invalid mnemonic passed to ledger derivation');
7927 }
7928 else if (!hdValidatePath(path)) {
7929 throw new Error('Invalid derivation path');
7930 }
7931 const parts = path.split('/').slice(1);
7932 let seed = ledgerMaster(mnemonic, password);
7933 for (const p of parts) {
7934 const n = parseInt(p.replace(/'$/, ''), 10);
7935 seed = ledgerDerivePrivate(seed, (n < HARDENED) ? (n + HARDENED) : n);
7936 }
7937 return ed25519PairFromSeed(seed.slice(0, 32));
7938 }
7939
7940 function L32(x, c) { return (x << c) | (x >>> (32 - c)); }
7941 function ld32(x, i) {
7942 let u = x[i + 3] & 0xff;
7943 u = (u << 8) | (x[i + 2] & 0xff);
7944 u = (u << 8) | (x[i + 1] & 0xff);
7945 return (u << 8) | (x[i + 0] & 0xff);
7946 }
7947 function st32(x, j, u) {
7948 for (let i = 0; i < 4; i++) {
7949 x[j + i] = u & 255;
7950 u >>>= 8;
7951 }
7952 }
7953 function vn(x, xi, y, yi, n) {
7954 let d = 0;
7955 for (let i = 0; i < n; i++)
7956 d |= x[xi + i] ^ y[yi + i];
7957 return (1 & ((d - 1) >>> 8)) - 1;
7958 }
7959 function core(out, inp, k, c, h) {
7960 const w = new Uint32Array(16), x = new Uint32Array(16), y = new Uint32Array(16), t = new Uint32Array(4);
7961 let i, j, m;
7962 for (i = 0; i < 4; i++) {
7963 x[5 * i] = ld32(c, 4 * i);
7964 x[1 + i] = ld32(k, 4 * i);
7965 x[6 + i] = ld32(inp, 4 * i);
7966 x[11 + i] = ld32(k, 16 + 4 * i);
7967 }
7968 for (i = 0; i < 16; i++)
7969 y[i] = x[i];
7970 for (i = 0; i < 20; i++) {
7971 for (j = 0; j < 4; j++) {
7972 for (m = 0; m < 4; m++)
7973 t[m] = x[(5 * j + 4 * m) % 16];
7974 t[1] ^= L32((t[0] + t[3]) | 0, 7);
7975 t[2] ^= L32((t[1] + t[0]) | 0, 9);
7976 t[3] ^= L32((t[2] + t[1]) | 0, 13);
7977 t[0] ^= L32((t[3] + t[2]) | 0, 18);
7978 for (m = 0; m < 4; m++)
7979 w[4 * j + (j + m) % 4] = t[m];
7980 }
7981 for (m = 0; m < 16; m++)
7982 x[m] = w[m];
7983 }
7984 if (h) {
7985 for (i = 0; i < 16; i++)
7986 x[i] = (x[i] + y[i]) | 0;
7987 for (i = 0; i < 4; i++) {
7988 x[5 * i] = (x[5 * i] - ld32(c, 4 * i)) | 0;
7989 x[6 + i] = (x[6 + i] - ld32(inp, 4 * i)) | 0;
7990 }
7991 for (i = 0; i < 4; i++) {
7992 st32(out, 4 * i, x[5 * i]);
7993 st32(out, 16 + 4 * i, x[6 + i]);
7994 }
7995 }
7996 else {
7997 for (i = 0; i < 16; i++)
7998 st32(out, 4 * i, (x[i] + y[i]) | 0);
7999 }
8000 }
8001 const sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);
8002 function crypto_stream_salsa20_xor(c, cpos, m, mpos, b, n, k) {
8003 const z = new Uint8Array(16), x = new Uint8Array(64);
8004 let u, i;
8005 if (!b)
8006 return 0;
8007 for (i = 0; i < 16; i++)
8008 z[i] = 0;
8009 for (i = 0; i < 8; i++)
8010 z[i] = n[i];
8011 while (b >= 64) {
8012 core(x, z, k, sigma, false);
8013 for (i = 0; i < 64; i++)
8014 c[cpos + i] = (m ? m[mpos + i] : 0) ^ x[i];
8015 u = 1;
8016 for (i = 8; i < 16; i++) {
8017 u = u + (z[i] & 0xff) | 0;
8018 z[i] = u & 0xff;
8019 u >>>= 8;
8020 }
8021 b -= 64;
8022 cpos += 64;
8023 if (m)
8024 mpos += 64;
8025 }
8026 if (b > 0) {
8027 core(x, z, k, sigma, false);
8028 for (i = 0; i < b; i++)
8029 c[cpos + i] = (m ? m[mpos + i] : 0) ^ x[i];
8030 }
8031 return 0;
8032 }
8033 function crypto_stream_xor(c, cpos, m, mpos, d, n, k) {
8034 const s = new Uint8Array(32);
8035 core(s, n, k, sigma, true);
8036 return crypto_stream_salsa20_xor(c, cpos, m, mpos, d, n.subarray(16), s);
8037 }
8038 function add1305(h, c) {
8039 let u = 0;
8040 for (let j = 0; j < 17; j++) {
8041 u = (u + ((h[j] + c[j]) | 0)) | 0;
8042 h[j] = u & 255;
8043 u >>>= 8;
8044 }
8045 }
8046 const minusp = new Uint32Array([5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252]);
8047 function crypto_onetimeauth(out, outpos, m, mpos, n, k) {
8048 let i, j, u;
8049 const x = new Uint32Array(17), r = new Uint32Array(17), h = new Uint32Array(17), c = new Uint32Array(17), g = new Uint32Array(17);
8050 for (j = 0; j < 17; j++)
8051 r[j] = h[j] = 0;
8052 for (j = 0; j < 16; j++)
8053 r[j] = k[j];
8054 r[3] &= 15;
8055 r[4] &= 252;
8056 r[7] &= 15;
8057 r[8] &= 252;
8058 r[11] &= 15;
8059 r[12] &= 252;
8060 r[15] &= 15;
8061 while (n > 0) {
8062 for (j = 0; j < 17; j++)
8063 c[j] = 0;
8064 for (j = 0; (j < 16) && (j < n); ++j)
8065 c[j] = m[mpos + j];
8066 c[j] = 1;
8067 mpos += j;
8068 n -= j;
8069 add1305(h, c);
8070 for (i = 0; i < 17; i++) {
8071 x[i] = 0;
8072 for (j = 0; j < 17; j++)
8073 x[i] = (x[i] + (h[j] * ((j <= i) ? r[i - j] : ((320 * r[i + 17 - j]) | 0))) | 0) | 0;
8074 }
8075 for (i = 0; i < 17; i++)
8076 h[i] = x[i];
8077 u = 0;
8078 for (j = 0; j < 16; j++) {
8079 u = (u + h[j]) | 0;
8080 h[j] = u & 255;
8081 u >>>= 8;
8082 }
8083 u = (u + h[16]) | 0;
8084 h[16] = u & 3;
8085 u = (5 * (u >>> 2)) | 0;
8086 for (j = 0; j < 16; j++) {
8087 u = (u + h[j]) | 0;
8088 h[j] = u & 255;
8089 u >>>= 8;
8090 }
8091 u = (u + h[16]) | 0;
8092 h[16] = u;
8093 }
8094 for (j = 0; j < 17; j++)
8095 g[j] = h[j];
8096 add1305(h, minusp);
8097 const s = (-(h[16] >>> 7) | 0);
8098 for (j = 0; j < 17; j++)
8099 h[j] ^= s & (g[j] ^ h[j]);
8100 for (j = 0; j < 16; j++)
8101 c[j] = k[j + 16];
8102 c[16] = 0;
8103 add1305(h, c);
8104 for (j = 0; j < 16; j++)
8105 out[outpos + j] = h[j];
8106 return 0;
8107 }
8108 function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {
8109 const x = new Uint8Array(16);
8110 crypto_onetimeauth(x, 0, m, mpos, n, k);
8111 return vn(h, hpos, x, 0, 16);
8112 }
8113 function crypto_secretbox(c, m, d, n, k) {
8114 if (d < 32)
8115 return -1;
8116 crypto_stream_xor(c, 0, m, 0, d, n, k);
8117 crypto_onetimeauth(c, 16, c, 32, d - 32, c);
8118 for (let i = 0; i < 16; i++)
8119 c[i] = 0;
8120 return 0;
8121 }
8122 function crypto_secretbox_open(m, c, d, n, k) {
8123 const x = new Uint8Array(32);
8124 if (d < 32)
8125 return -1;
8126 crypto_stream_xor(x, 0, null, 0, 32, n, k);
8127 if (crypto_onetimeauth_verify(c, 16, c, 32, d - 32, x) !== 0)
8128 return -1;
8129 crypto_stream_xor(m, 0, c, 0, d, n, k);
8130 for (let i = 0; i < 32; i++)
8131 m[i] = 0;
8132 return 0;
8133 }
8134 const crypto_secretbox_KEYBYTES = 32;
8135 const crypto_secretbox_NONCEBYTES = 24;
8136 const crypto_secretbox_ZEROBYTES = 32;
8137 const crypto_secretbox_BOXZEROBYTES = 16;
8138 function checkLengths(k, n) {
8139 if (k.length !== crypto_secretbox_KEYBYTES)
8140 throw new Error('bad key size');
8141 if (n.length !== crypto_secretbox_NONCEBYTES)
8142 throw new Error('bad nonce size');
8143 }
8144 function checkArrayTypes(...args) {
8145 for (let i = 0, count = args.length; i < count; i++) {
8146 if (!(args[i] instanceof Uint8Array))
8147 throw new TypeError('unexpected type, use Uint8Array');
8148 }
8149 }
8150 function naclSecretbox(msg, nonce, key) {
8151 checkArrayTypes(msg, nonce, key);
8152 checkLengths(key, nonce);
8153 const m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);
8154 const c = new Uint8Array(m.length);
8155 for (let i = 0; i < msg.length; i++)
8156 m[i + crypto_secretbox_ZEROBYTES] = msg[i];
8157 crypto_secretbox(c, m, m.length, nonce, key);
8158 return c.subarray(crypto_secretbox_BOXZEROBYTES);
8159 }
8160 function naclSecretboxOpen(box, nonce, key) {
8161 checkArrayTypes(box, nonce, key);
8162 checkLengths(key, nonce);
8163 const c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);
8164 const m = new Uint8Array(c.length);
8165 for (let i = 0; i < box.length; i++)
8166 c[i + crypto_secretbox_BOXZEROBYTES] = box[i];
8167 if (c.length < 32)
8168 return null;
8169 if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0)
8170 return null;
8171 return m.subarray(crypto_secretbox_ZEROBYTES);
8172 }
8173
8174 function naclDecrypt(encrypted, nonce, secret) {
8175 return naclSecretboxOpen(encrypted, nonce, secret);
8176 }
8177
8178 function naclEncrypt(message, secret, nonce = randomAsU8a(24)) {
8179 return {
8180 encrypted: naclSecretbox(message, nonce, secret),
8181 nonce
8182 };
8183 }
8184
8185 const rotl$1 = (a, b) => (a << b) | (a >>> (32 - b));
8186 function XorAndSalsa(prev, pi, input, ii, out, oi) {
8187 let y00 = prev[pi++] ^ input[ii++], y01 = prev[pi++] ^ input[ii++];
8188 let y02 = prev[pi++] ^ input[ii++], y03 = prev[pi++] ^ input[ii++];
8189 let y04 = prev[pi++] ^ input[ii++], y05 = prev[pi++] ^ input[ii++];
8190 let y06 = prev[pi++] ^ input[ii++], y07 = prev[pi++] ^ input[ii++];
8191 let y08 = prev[pi++] ^ input[ii++], y09 = prev[pi++] ^ input[ii++];
8192 let y10 = prev[pi++] ^ input[ii++], y11 = prev[pi++] ^ input[ii++];
8193 let y12 = prev[pi++] ^ input[ii++], y13 = prev[pi++] ^ input[ii++];
8194 let y14 = prev[pi++] ^ input[ii++], y15 = prev[pi++] ^ input[ii++];
8195 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;
8196 for (let i = 0; i < 8; i += 2) {
8197 x04 ^= rotl$1(x00 + x12 | 0, 7);
8198 x08 ^= rotl$1(x04 + x00 | 0, 9);
8199 x12 ^= rotl$1(x08 + x04 | 0, 13);
8200 x00 ^= rotl$1(x12 + x08 | 0, 18);
8201 x09 ^= rotl$1(x05 + x01 | 0, 7);
8202 x13 ^= rotl$1(x09 + x05 | 0, 9);
8203 x01 ^= rotl$1(x13 + x09 | 0, 13);
8204 x05 ^= rotl$1(x01 + x13 | 0, 18);
8205 x14 ^= rotl$1(x10 + x06 | 0, 7);
8206 x02 ^= rotl$1(x14 + x10 | 0, 9);
8207 x06 ^= rotl$1(x02 + x14 | 0, 13);
8208 x10 ^= rotl$1(x06 + x02 | 0, 18);
8209 x03 ^= rotl$1(x15 + x11 | 0, 7);
8210 x07 ^= rotl$1(x03 + x15 | 0, 9);
8211 x11 ^= rotl$1(x07 + x03 | 0, 13);
8212 x15 ^= rotl$1(x11 + x07 | 0, 18);
8213 x01 ^= rotl$1(x00 + x03 | 0, 7);
8214 x02 ^= rotl$1(x01 + x00 | 0, 9);
8215 x03 ^= rotl$1(x02 + x01 | 0, 13);
8216 x00 ^= rotl$1(x03 + x02 | 0, 18);
8217 x06 ^= rotl$1(x05 + x04 | 0, 7);
8218 x07 ^= rotl$1(x06 + x05 | 0, 9);
8219 x04 ^= rotl$1(x07 + x06 | 0, 13);
8220 x05 ^= rotl$1(x04 + x07 | 0, 18);
8221 x11 ^= rotl$1(x10 + x09 | 0, 7);
8222 x08 ^= rotl$1(x11 + x10 | 0, 9);
8223 x09 ^= rotl$1(x08 + x11 | 0, 13);
8224 x10 ^= rotl$1(x09 + x08 | 0, 18);
8225 x12 ^= rotl$1(x15 + x14 | 0, 7);
8226 x13 ^= rotl$1(x12 + x15 | 0, 9);
8227 x14 ^= rotl$1(x13 + x12 | 0, 13);
8228 x15 ^= rotl$1(x14 + x13 | 0, 18);
8229 }
8230 out[oi++] = (y00 + x00) | 0;
8231 out[oi++] = (y01 + x01) | 0;
8232 out[oi++] = (y02 + x02) | 0;
8233 out[oi++] = (y03 + x03) | 0;
8234 out[oi++] = (y04 + x04) | 0;
8235 out[oi++] = (y05 + x05) | 0;
8236 out[oi++] = (y06 + x06) | 0;
8237 out[oi++] = (y07 + x07) | 0;
8238 out[oi++] = (y08 + x08) | 0;
8239 out[oi++] = (y09 + x09) | 0;
8240 out[oi++] = (y10 + x10) | 0;
8241 out[oi++] = (y11 + x11) | 0;
8242 out[oi++] = (y12 + x12) | 0;
8243 out[oi++] = (y13 + x13) | 0;
8244 out[oi++] = (y14 + x14) | 0;
8245 out[oi++] = (y15 + x15) | 0;
8246 }
8247 function BlockMix(input, ii, out, oi, r) {
8248 let head = oi + 0;
8249 let tail = oi + 16 * r;
8250 for (let i = 0; i < 16; i++)
8251 out[tail + i] = input[ii + (2 * r - 1) * 16 + i];
8252 for (let i = 0; i < r; i++, head += 16, ii += 16) {
8253 XorAndSalsa(out, tail, input, ii, out, head);
8254 if (i > 0)
8255 tail += 16;
8256 XorAndSalsa(out, head, input, (ii += 16), out, tail);
8257 }
8258 }
8259 function scryptInit(password, salt, _opts) {
8260 const opts = checkOpts({
8261 dkLen: 32,
8262 asyncTick: 10,
8263 maxmem: 1024 ** 3 + 1024,
8264 }, _opts);
8265 const { N, r, p, dkLen, asyncTick, maxmem, onProgress } = opts;
8266 number(N);
8267 number(r);
8268 number(p);
8269 number(dkLen);
8270 number(asyncTick);
8271 number(maxmem);
8272 if (onProgress !== undefined && typeof onProgress !== 'function')
8273 throw new Error('progressCb should be function');
8274 const blockSize = 128 * r;
8275 const blockSize32 = blockSize / 4;
8276 if (N <= 1 || (N & (N - 1)) !== 0 || N >= 2 ** (blockSize / 8) || N > 2 ** 32) {
8277 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');
8278 }
8279 if (p < 0 || p > ((2 ** 32 - 1) * 32) / blockSize) {
8280 throw new Error('Scrypt: p must be a positive integer less than or equal to ((2^32 - 1) * 32) / (128 * r)');
8281 }
8282 if (dkLen < 0 || dkLen > (2 ** 32 - 1) * 32) {
8283 throw new Error('Scrypt: dkLen should be positive integer less than or equal to (2^32 - 1) * 32');
8284 }
8285 const memUsed = blockSize * (N + p);
8286 if (memUsed > maxmem) {
8287 throw new Error(`Scrypt: parameters too large, ${memUsed} (128 * r * (N + p)) > ${maxmem} (maxmem)`);
8288 }
8289 const B = pbkdf2(sha256, password, salt, { c: 1, dkLen: blockSize * p });
8290 const B32 = u32(B);
8291 const V = u32(new Uint8Array(blockSize * N));
8292 const tmp = u32(new Uint8Array(blockSize));
8293 let blockMixCb = () => { };
8294 if (onProgress) {
8295 const totalBlockMix = 2 * N * p;
8296 const callbackPer = Math.max(Math.floor(totalBlockMix / 10000), 1);
8297 let blockMixCnt = 0;
8298 blockMixCb = () => {
8299 blockMixCnt++;
8300 if (onProgress && (!(blockMixCnt % callbackPer) || blockMixCnt === totalBlockMix))
8301 onProgress(blockMixCnt / totalBlockMix);
8302 };
8303 }
8304 return { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb, asyncTick };
8305 }
8306 function scryptOutput(password, dkLen, B, V, tmp) {
8307 const res = pbkdf2(sha256, password, B, { c: 1, dkLen });
8308 B.fill(0);
8309 V.fill(0);
8310 tmp.fill(0);
8311 return res;
8312 }
8313 function scrypt(password, salt, opts) {
8314 const { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb } = scryptInit(password, salt, opts);
8315 for (let pi = 0; pi < p; pi++) {
8316 const Pi = blockSize32 * pi;
8317 for (let i = 0; i < blockSize32; i++)
8318 V[i] = B32[Pi + i];
8319 for (let i = 0, pos = 0; i < N - 1; i++) {
8320 BlockMix(V, pos, V, (pos += blockSize32), r);
8321 blockMixCb();
8322 }
8323 BlockMix(V, (N - 1) * blockSize32, B32, Pi, r);
8324 blockMixCb();
8325 for (let i = 0; i < N; i++) {
8326 const j = B32[Pi + blockSize32 - 16] % N;
8327 for (let k = 0; k < blockSize32; k++)
8328 tmp[k] = B32[Pi + k] ^ V[j * blockSize32 + k];
8329 BlockMix(tmp, 0, B32, Pi, r);
8330 blockMixCb();
8331 }
8332 }
8333 return scryptOutput(password, dkLen, B, V, tmp);
8334 }
8335
8336 const DEFAULT_PARAMS = {
8337 N: 1 << 15,
8338 p: 1,
8339 r: 8
8340 };
8341
8342 function scryptEncode(passphrase, salt = randomAsU8a(), params = DEFAULT_PARAMS, onlyJs) {
8343 const u8a = util.u8aToU8a(passphrase);
8344 return {
8345 params,
8346 password: !util.hasBigInt || (!onlyJs && isReady())
8347 ? scrypt$1(u8a, salt, Math.log2(params.N), params.r, params.p)
8348 : scrypt(u8a, salt, util.objectSpread({ dkLen: 64 }, params)),
8349 salt
8350 };
8351 }
8352
8353 function scryptFromU8a(data) {
8354 const salt = data.subarray(0, 32);
8355 const N = util.u8aToBn(data.subarray(32 + 0, 32 + 4), BN_LE_OPTS).toNumber();
8356 const p = util.u8aToBn(data.subarray(32 + 4, 32 + 8), BN_LE_OPTS).toNumber();
8357 const r = util.u8aToBn(data.subarray(32 + 8, 32 + 12), BN_LE_OPTS).toNumber();
8358 if (N !== DEFAULT_PARAMS.N || p !== DEFAULT_PARAMS.p || r !== DEFAULT_PARAMS.r) {
8359 throw new Error('Invalid injected scrypt params found');
8360 }
8361 return { params: { N, p, r }, salt };
8362 }
8363
8364 function scryptToU8a(salt, { N, p, r }) {
8365 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));
8366 }
8367
8368 const ENCODING = ['scrypt', 'xsalsa20-poly1305'];
8369 const ENCODING_NONE = ['none'];
8370 const ENCODING_VERSION = '3';
8371 const NONCE_LENGTH = 24;
8372 const SCRYPT_LENGTH = 32 + (3 * 4);
8373
8374 function jsonDecryptData(encrypted, passphrase, encType = ENCODING) {
8375 if (!encrypted) {
8376 throw new Error('No encrypted data available to decode');
8377 }
8378 else if (encType.includes('xsalsa20-poly1305') && !passphrase) {
8379 throw new Error('Password required to decode encrypted data');
8380 }
8381 let encoded = encrypted;
8382 if (passphrase) {
8383 let password;
8384 if (encType.includes('scrypt')) {
8385 const { params, salt } = scryptFromU8a(encrypted);
8386 password = scryptEncode(passphrase, salt, params).password;
8387 encrypted = encrypted.subarray(SCRYPT_LENGTH);
8388 }
8389 else {
8390 password = util.stringToU8a(passphrase);
8391 }
8392 encoded = naclDecrypt(encrypted.subarray(NONCE_LENGTH), encrypted.subarray(0, NONCE_LENGTH), util.u8aFixLength(password, 256, true));
8393 }
8394 if (!encoded) {
8395 throw new Error('Unable to decode using the supplied passphrase');
8396 }
8397 return encoded;
8398 }
8399
8400 function jsonDecrypt({ encoded, encoding }, passphrase) {
8401 if (!encoded) {
8402 throw new Error('No encrypted data available to decode');
8403 }
8404 return jsonDecryptData(util.isHex(encoded)
8405 ? util.hexToU8a(encoded)
8406 : base64Decode(encoded), passphrase, Array.isArray(encoding.type)
8407 ? encoding.type
8408 : [encoding.type]);
8409 }
8410
8411 function jsonEncryptFormat(encoded, contentType, isEncrypted) {
8412 return {
8413 encoded: base64Encode(encoded),
8414 encoding: {
8415 content: contentType,
8416 type: isEncrypted
8417 ? ENCODING
8418 : ENCODING_NONE,
8419 version: ENCODING_VERSION
8420 }
8421 };
8422 }
8423
8424 function jsonEncrypt(data, contentType, passphrase) {
8425 let isEncrypted = false;
8426 let encoded = data;
8427 if (passphrase) {
8428 const { params, password, salt } = scryptEncode(passphrase);
8429 const { encrypted, nonce } = naclEncrypt(encoded, password.subarray(0, 32));
8430 isEncrypted = true;
8431 encoded = util.u8aConcat(scryptToU8a(salt, params), nonce, encrypted);
8432 }
8433 return jsonEncryptFormat(encoded, contentType, isEncrypted);
8434 }
8435
8436 const secp256k1VerifyHasher = (hashType) => (message, signature, publicKey) => secp256k1Verify(message, signature, publicKey, hashType);
8437 const VERIFIERS_ECDSA = [
8438 ['ecdsa', secp256k1VerifyHasher('blake2')],
8439 ['ethereum', secp256k1VerifyHasher('keccak')]
8440 ];
8441 const VERIFIERS = [
8442 ['ed25519', ed25519Verify],
8443 ['sr25519', sr25519Verify],
8444 ...VERIFIERS_ECDSA
8445 ];
8446 const CRYPTO_TYPES = ['ed25519', 'sr25519', 'ecdsa'];
8447 function verifyDetect(result, { message, publicKey, signature }, verifiers = VERIFIERS) {
8448 result.isValid = verifiers.some(([crypto, verify]) => {
8449 try {
8450 if (verify(message, signature, publicKey)) {
8451 result.crypto = crypto;
8452 return true;
8453 }
8454 }
8455 catch {
8456 }
8457 return false;
8458 });
8459 return result;
8460 }
8461 function verifyMultisig(result, { message, publicKey, signature }) {
8462 if (![0, 1, 2].includes(signature[0])) {
8463 throw new Error(`Unknown crypto type, expected signature prefix [0..2], found ${signature[0]}`);
8464 }
8465 const type = CRYPTO_TYPES[signature[0]] || 'none';
8466 result.crypto = type;
8467 try {
8468 result.isValid = {
8469 ecdsa: () => verifyDetect(result, { message, publicKey, signature: signature.subarray(1) }, VERIFIERS_ECDSA).isValid,
8470 ed25519: () => ed25519Verify(message, signature.subarray(1), publicKey),
8471 none: () => {
8472 throw Error('no verify for `none` crypto type');
8473 },
8474 sr25519: () => sr25519Verify(message, signature.subarray(1), publicKey)
8475 }[type]();
8476 }
8477 catch {
8478 }
8479 return result;
8480 }
8481 function getVerifyFn(signature) {
8482 return [0, 1, 2].includes(signature[0]) && [65, 66].includes(signature.length)
8483 ? verifyMultisig
8484 : verifyDetect;
8485 }
8486 function signatureVerify(message, signature, addressOrPublicKey) {
8487 const signatureU8a = util.u8aToU8a(signature);
8488 if (![64, 65, 66].includes(signatureU8a.length)) {
8489 throw new Error(`Invalid signature length, expected [64..66] bytes, found ${signatureU8a.length}`);
8490 }
8491 const publicKey = decodeAddress(addressOrPublicKey);
8492 const input = { message: util.u8aToU8a(message), publicKey, signature: signatureU8a };
8493 const result = { crypto: 'none', isValid: false, isWrapped: util.u8aIsWrapped(input.message, true), publicKey };
8494 const isWrappedBytes = util.u8aIsWrapped(input.message, false);
8495 const verifyFn = getVerifyFn(signatureU8a);
8496 verifyFn(result, input);
8497 if (result.crypto !== 'none' || (result.isWrapped && !isWrappedBytes)) {
8498 return result;
8499 }
8500 input.message = isWrappedBytes
8501 ? util.u8aUnwrapBytes(input.message)
8502 : util.u8aWrapBytes(input.message);
8503 return verifyFn(result, input);
8504 }
8505
8506 const P64_1 = BigInt$1('11400714785074694791');
8507 const P64_2 = BigInt$1('14029467366897019727');
8508 const P64_3 = BigInt$1('1609587929392839161');
8509 const P64_4 = BigInt$1('9650029242287828579');
8510 const P64_5 = BigInt$1('2870177450012600261');
8511 const U64 = BigInt$1('0xffffffffffffffff');
8512 const _7n = BigInt$1(7);
8513 const _11n = BigInt$1(11);
8514 const _12n = BigInt$1(12);
8515 const _16n = BigInt$1(16);
8516 const _18n = BigInt$1(18);
8517 const _23n = BigInt$1(23);
8518 const _27n = BigInt$1(27);
8519 const _29n = BigInt$1(29);
8520 const _31n = BigInt$1(31);
8521 const _32n = BigInt$1(32);
8522 const _33n = BigInt$1(33);
8523 const _64n = BigInt$1(64);
8524 const _256n = BigInt$1(256);
8525 function rotl(a, b) {
8526 const c = a & U64;
8527 return ((c << b) | (c >> (_64n - b))) & U64;
8528 }
8529 function fromU8a(u8a, p, count) {
8530 const bigints = new Array(count);
8531 let offset = 0;
8532 for (let i = 0; i < count; i++, offset += 2) {
8533 bigints[i] = BigInt$1(u8a[p + offset] | (u8a[p + 1 + offset] << 8));
8534 }
8535 let result = util._0n;
8536 for (let i = count - 1; i >= 0; i--) {
8537 result = (result << _16n) + bigints[i];
8538 }
8539 return result;
8540 }
8541 function init(seed, input) {
8542 const state = {
8543 seed,
8544 u8a: new Uint8Array(32),
8545 u8asize: 0,
8546 v1: seed + P64_1 + P64_2,
8547 v2: seed + P64_2,
8548 v3: seed,
8549 v4: seed - P64_1
8550 };
8551 if (input.length < 32) {
8552 state.u8a.set(input);
8553 state.u8asize = input.length;
8554 return state;
8555 }
8556 const limit = input.length - 32;
8557 let p = 0;
8558 if (limit >= 0) {
8559 const adjustV = (v) => P64_1 * rotl(v + P64_2 * fromU8a(input, p, 4), _31n);
8560 do {
8561 state.v1 = adjustV(state.v1);
8562 p += 8;
8563 state.v2 = adjustV(state.v2);
8564 p += 8;
8565 state.v3 = adjustV(state.v3);
8566 p += 8;
8567 state.v4 = adjustV(state.v4);
8568 p += 8;
8569 } while (p <= limit);
8570 }
8571 if (p < input.length) {
8572 state.u8a.set(input.subarray(p, input.length));
8573 state.u8asize = input.length - p;
8574 }
8575 return state;
8576 }
8577 function xxhash64(input, initSeed) {
8578 const { seed, u8a, u8asize, v1, v2, v3, v4 } = init(BigInt$1(initSeed), input);
8579 let p = 0;
8580 let h64 = U64 & (BigInt$1(input.length) + (input.length >= 32
8581 ? (((((((((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)
8582 : (seed + P64_5)));
8583 while (p <= (u8asize - 8)) {
8584 h64 = U64 & (P64_4 + P64_1 * rotl(h64 ^ (P64_1 * rotl(P64_2 * fromU8a(u8a, p, 4), _31n)), _27n));
8585 p += 8;
8586 }
8587 if ((p + 4) <= u8asize) {
8588 h64 = U64 & (P64_3 + P64_2 * rotl(h64 ^ (P64_1 * fromU8a(u8a, p, 2)), _23n));
8589 p += 4;
8590 }
8591 while (p < u8asize) {
8592 h64 = U64 & (P64_1 * rotl(h64 ^ (P64_5 * BigInt$1(u8a[p++])), _11n));
8593 }
8594 h64 = U64 & (P64_2 * (h64 ^ (h64 >> _33n)));
8595 h64 = U64 & (P64_3 * (h64 ^ (h64 >> _29n)));
8596 h64 = U64 & (h64 ^ (h64 >> _32n));
8597 const result = new Uint8Array(8);
8598 for (let i = 7; i >= 0; i--) {
8599 result[i] = Number(h64 % _256n);
8600 h64 = h64 / _256n;
8601 }
8602 return result;
8603 }
8604
8605 function xxhashAsU8a(data, bitLength = 64, onlyJs) {
8606 const rounds = Math.ceil(bitLength / 64);
8607 const u8a = util.u8aToU8a(data);
8608 if (!util.hasBigInt || (!onlyJs && isReady())) {
8609 return twox(u8a, rounds);
8610 }
8611 const result = new Uint8Array(rounds * 8);
8612 for (let seed = 0; seed < rounds; seed++) {
8613 result.set(xxhash64(u8a, seed).reverse(), seed * 8);
8614 }
8615 return result;
8616 }
8617 const xxhashAsHex = createAsHex(xxhashAsU8a);
8618
8619 exports.addressEq = addressEq;
8620 exports.addressToEvm = addressToEvm;
8621 exports.allNetworks = allNetworks;
8622 exports.availableNetworks = availableNetworks;
8623 exports.base32Decode = base32Decode;
8624 exports.base32Encode = base32Encode;
8625 exports.base32Validate = base32Validate;
8626 exports.base58Decode = base58Decode;
8627 exports.base58Encode = base58Encode;
8628 exports.base58Validate = base58Validate;
8629 exports.base64Decode = base64Decode;
8630 exports.base64Encode = base64Encode;
8631 exports.base64Pad = base64Pad;
8632 exports.base64Trim = base64Trim;
8633 exports.base64Validate = base64Validate;
8634 exports.blake2AsHex = blake2AsHex;
8635 exports.blake2AsU8a = blake2AsU8a;
8636 exports.checkAddress = checkAddress;
8637 exports.checkAddressChecksum = checkAddressChecksum;
8638 exports.createKeyDerived = createKeyDerived;
8639 exports.createKeyMulti = createKeyMulti;
8640 exports.cryptoIsReady = cryptoIsReady;
8641 exports.cryptoWaitReady = cryptoWaitReady;
8642 exports.decodeAddress = decodeAddress;
8643 exports.deriveAddress = deriveAddress;
8644 exports.ed25519DeriveHard = ed25519DeriveHard;
8645 exports.ed25519PairFromRandom = ed25519PairFromRandom;
8646 exports.ed25519PairFromSecret = ed25519PairFromSecret;
8647 exports.ed25519PairFromSeed = ed25519PairFromSeed;
8648 exports.ed25519PairFromString = ed25519PairFromString;
8649 exports.ed25519Sign = ed25519Sign;
8650 exports.ed25519Verify = ed25519Verify;
8651 exports.encodeAddress = encodeAddress;
8652 exports.encodeDerivedAddress = encodeDerivedAddress;
8653 exports.encodeMultiAddress = encodeMultiAddress;
8654 exports.ethereumEncode = ethereumEncode;
8655 exports.evmToAddress = evmToAddress;
8656 exports.hdEthereum = hdEthereum;
8657 exports.hdLedger = hdLedger;
8658 exports.hdValidatePath = hdValidatePath;
8659 exports.hmacSha256AsU8a = hmacSha256AsU8a;
8660 exports.hmacSha512AsU8a = hmacSha512AsU8a;
8661 exports.hmacShaAsU8a = hmacShaAsU8a;
8662 exports.isAddress = isAddress;
8663 exports.isBase32 = isBase32;
8664 exports.isBase58 = isBase58;
8665 exports.isBase64 = isBase64;
8666 exports.isEthereumAddress = isEthereumAddress;
8667 exports.isEthereumChecksum = isEthereumChecksum;
8668 exports.jsonDecrypt = jsonDecrypt;
8669 exports.jsonDecryptData = jsonDecryptData;
8670 exports.jsonEncrypt = jsonEncrypt;
8671 exports.jsonEncryptFormat = jsonEncryptFormat;
8672 exports.keccak256AsU8a = keccak256AsU8a;
8673 exports.keccak512AsU8a = keccak512AsU8a;
8674 exports.keccakAsHex = keccakAsHex;
8675 exports.keccakAsU8a = keccakAsU8a;
8676 exports.keyExtractPath = keyExtractPath;
8677 exports.keyExtractSuri = keyExtractSuri;
8678 exports.keyFromPath = keyFromPath;
8679 exports.keyHdkdEcdsa = keyHdkdEcdsa;
8680 exports.keyHdkdEd25519 = keyHdkdEd25519;
8681 exports.keyHdkdSr25519 = keyHdkdSr25519;
8682 exports.mnemonicGenerate = mnemonicGenerate;
8683 exports.mnemonicToEntropy = mnemonicToEntropy;
8684 exports.mnemonicToLegacySeed = mnemonicToLegacySeed;
8685 exports.mnemonicToMiniSecret = mnemonicToMiniSecret;
8686 exports.mnemonicValidate = mnemonicValidate;
8687 exports.naclDecrypt = naclDecrypt;
8688 exports.naclEncrypt = naclEncrypt;
8689 exports.packageInfo = packageInfo;
8690 exports.pbkdf2Encode = pbkdf2Encode;
8691 exports.randomAsHex = randomAsHex;
8692 exports.randomAsNumber = randomAsNumber;
8693 exports.randomAsU8a = randomAsU8a;
8694 exports.scryptEncode = scryptEncode;
8695 exports.scryptFromU8a = scryptFromU8a;
8696 exports.scryptToU8a = scryptToU8a;
8697 exports.secp256k1Compress = secp256k1Compress;
8698 exports.secp256k1Expand = secp256k1Expand;
8699 exports.secp256k1PairFromSeed = secp256k1PairFromSeed;
8700 exports.secp256k1PrivateKeyTweakAdd = secp256k1PrivateKeyTweakAdd;
8701 exports.secp256k1Recover = secp256k1Recover;
8702 exports.secp256k1Sign = secp256k1Sign;
8703 exports.secp256k1Verify = secp256k1Verify;
8704 exports.selectableNetworks = selectableNetworks;
8705 exports.setSS58Format = setSS58Format;
8706 exports.sha256AsU8a = sha256AsU8a;
8707 exports.sha512AsU8a = sha512AsU8a;
8708 exports.shaAsU8a = shaAsU8a;
8709 exports.signatureVerify = signatureVerify;
8710 exports.sortAddresses = sortAddresses;
8711 exports.sr25519Agreement = sr25519Agreement;
8712 exports.sr25519DeriveHard = sr25519DeriveHard;
8713 exports.sr25519DerivePublic = sr25519DerivePublic;
8714 exports.sr25519DeriveSoft = sr25519DeriveSoft;
8715 exports.sr25519PairFromSeed = sr25519PairFromSeed;
8716 exports.sr25519Sign = sr25519Sign;
8717 exports.sr25519Verify = sr25519Verify;
8718 exports.sr25519VrfSign = sr25519VrfSign;
8719 exports.sr25519VrfVerify = sr25519VrfVerify;
8720 exports.validateAddress = validateAddress;
8721 exports.xxhashAsHex = xxhashAsHex;
8722 exports.xxhashAsU8a = xxhashAsU8a;
8723
8724}));
8725
\No newline at end of file