UNPKG

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