UNPKG

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