{
  "version": 3,
  "sources": ["../../node_modules/@noble/hashes/src/cryptoNode.ts", "../../node_modules/@noble/hashes/src/_assert.ts", "../../node_modules/@noble/hashes/src/utils.ts", "../../node_modules/@noble/curves/src/abstract/utils.ts", "../../node_modules/@noble/curves/src/abstract/modular.ts", "../../node_modules/@noble/curves/src/abstract/hash-to-curve.ts", "../../node_modules/@noble/curves/src/abstract/curve.ts", "../../node_modules/@noble/curves/src/abstract/weierstrass.ts", "../../node_modules/@noble/curves/src/abstract/bls.ts", "../../node_modules/@noble/curves/src/abstract/tower.ts", "../../node_modules/@noble/hashes/src/_u64.ts", "../../node_modules/@noble/hashes/src/sha3.ts", "../../node_modules/@kevincharm/noble-bn254-drand/dist/src/bn254.js", "../../node_modules/@kevincharm/noble-bn254-drand/dist/src/index.js", "../../src/index.ts", "../../node_modules/@noble/hashes/src/cryptoNode.ts", "../../node_modules/@noble/hashes/src/utils.ts"],
  "sourcesContent": ["// We prefer WebCrypto aka globalThis.crypto, which exists in node.js 16+.\n// Falls back to Node.js built-in crypto for Node.js <=v14\n// See utils.ts for details.\n// @ts-ignore\nimport * as nc from 'node:crypto';\nexport const crypto =\n  nc && typeof nc === 'object' && 'webcrypto' in nc\n    ? (nc.webcrypto as any)\n    : nc && typeof nc === 'object' && 'randomBytes' in nc\n      ? nc\n      : undefined;\n", "function number(n: number) {\n  if (!Number.isSafeInteger(n) || n < 0) throw new Error(`positive integer expected, not ${n}`);\n}\n\nfunction bool(b: boolean) {\n  if (typeof b !== 'boolean') throw new Error(`boolean expected, not ${b}`);\n}\n\n// copied from utils\nexport function isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\nfunction bytes(b: Uint8Array | undefined, ...lengths: number[]) {\n  if (!isBytes(b)) throw new Error('Uint8Array expected');\n  if (lengths.length > 0 && !lengths.includes(b.length))\n    throw new Error(`Uint8Array expected of length ${lengths}, not of length=${b.length}`);\n}\n\ntype Hash = {\n  (data: Uint8Array): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create: any;\n};\nfunction hash(h: Hash) {\n  if (typeof h !== 'function' || typeof h.create !== 'function')\n    throw new Error('Hash should be wrapped by utils.wrapConstructor');\n  number(h.outputLen);\n  number(h.blockLen);\n}\n\nfunction exists(instance: any, checkFinished = true) {\n  if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n  if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\nfunction output(out: any, instance: any) {\n  bytes(out);\n  const min = instance.outputLen;\n  if (out.length < min) {\n    throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n  }\n}\n\nexport { number, bool, bytes, hash, exists, output };\n\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\n", "/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\nimport { bytes as abytes } from './_assert.js';\n// export { isBytes } from './_assert.js';\n// We can't reuse isBytes from _assert, because somehow this causes huge perf issues\nexport function isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n// Cast array to different type\nexport const u8 = (arr: TypedArray) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr: TypedArray) =>\n  new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n\n// Cast array to view\nexport const createView = (arr: TypedArray) =>\n  new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word: number, shift: number) => (word << (32 - shift)) | (word >>> shift);\n// The rotate left (circular left shift) operation for uint32\nexport const rotl = (word: number, shift: number) =>\n  (word << shift) | ((word >>> (32 - shift)) >>> 0);\n\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\n// The byte swap operation for uint32\nexport const byteSwap = (word: number) =>\n  ((word << 24) & 0xff000000) |\n  ((word << 8) & 0xff0000) |\n  ((word >>> 8) & 0xff00) |\n  ((word >>> 24) & 0xff);\n// Conditionally byte swap if on a big-endian platform\nexport const byteSwapIfBE = isLE ? (n: number) => n : (n: number) => byteSwap(n);\n\n// In place byte swap for Uint32Array\nexport function byteSwap32(arr: Uint32Array) {\n  for (let i = 0; i < arr.length; i++) {\n    arr[i] = byteSwap(arr[i]);\n  }\n}\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  abytes(bytes);\n  // pre-caching improves the speed 6x\n  let hex = '';\n  for (let i = 0; i < bytes.length; i++) {\n    hex += hexes[bytes[i]];\n  }\n  return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, _A: 65, _F: 70, _a: 97, _f: 102 } as const;\nfunction asciiToBase16(char: number): number | undefined {\n  if (char >= asciis._0 && char <= asciis._9) return char - asciis._0;\n  if (char >= asciis._A && char <= asciis._F) return char - (asciis._A - 10);\n  if (char >= asciis._a && char <= asciis._f) return char - (asciis._a - 10);\n  return;\n}\n\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const hl = hex.length;\n  const al = hl / 2;\n  if (hl % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + hl);\n  const array = new Uint8Array(al);\n  for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n    const n1 = asciiToBase16(hex.charCodeAt(hi));\n    const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n    if (n1 === undefined || n2 === undefined) {\n      const char = hex[hi] + hex[hi + 1];\n      throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n    }\n    array[ai] = n1 * 16 + n2;\n  }\n  return array;\n}\n\n// There is no setImmediate in browser and setTimeout is slow.\n// call of async fn will return Promise, which will be fullfiled only on\n// next scheduler queue processing step and this is exactly what we need.\nexport const nextTick = async () => {};\n\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters: number, tick: number, cb: (i: number) => void) {\n  let ts = Date.now();\n  for (let i = 0; i < iters; i++) {\n    cb(i);\n    // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n    const diff = Date.now() - ts;\n    if (diff >= 0 && diff < tick) continue;\n    await nextTick();\n    ts += diff;\n  }\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\nexport type Input = Uint8Array | string;\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data: Input): Uint8Array {\n  if (typeof data === 'string') data = utf8ToBytes(data);\n  abytes(data);\n  return data;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  let sum = 0;\n  for (let i = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    abytes(a);\n    sum += a.length;\n  }\n  const res = new Uint8Array(sum);\n  for (let i = 0, pad = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    res.set(a, pad);\n    pad += a.length;\n  }\n  return res;\n}\n\n// For runtime check if class implements interface\nexport abstract class Hash<T extends Hash<T>> {\n  abstract blockLen: number; // Bytes per block\n  abstract outputLen: number; // Bytes in output\n  abstract update(buf: Input): this;\n  // Writes digest into buf\n  abstract digestInto(buf: Uint8Array): void;\n  abstract digest(): Uint8Array;\n  /**\n   * Resets internal state. Makes Hash instance unusable.\n   * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n   * by user, they will need to manually call `destroy()` when zeroing is necessary.\n   */\n  abstract destroy(): void;\n  /**\n   * Clones hash instance. Unsafe: doesn't check whether `to` is valid. Can be used as `clone()`\n   * when no options are passed.\n   * Reasons to use `_cloneInto` instead of clone: 1) performance 2) reuse instance => all internal\n   * buffers are overwritten => causes buffer overwrite which is used for digest in some cases.\n   * There are no guarantees for clean-up because it's impossible in JS.\n   */\n  abstract _cloneInto(to?: T): T;\n  // Safe version that clones internal state\n  clone(): T {\n    return this._cloneInto();\n  }\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n  xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n  xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\nconst toStr = {}.toString;\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && toStr.call(opts) !== '[object Object]')\n    throw new Error('Options should be object or undefined');\n  const merged = Object.assign(defaults, opts);\n  return merged as T1 & T2;\n}\n\nexport type CHash = ReturnType<typeof wrapConstructor>;\n\nexport function wrapConstructor<T extends Hash<T>>(hashCons: () => Hash<T>) {\n  const hashC = (msg: Input): Uint8Array => hashCons().update(toBytes(msg)).digest();\n  const tmp = hashCons();\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = () => hashCons();\n  return hashC;\n}\n\nexport function wrapConstructorWithOpts<H extends Hash<H>, T extends Object>(\n  hashCons: (opts?: T) => Hash<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\nexport function wrapXOFConstructorWithOpts<H extends HashXOF<H>, T extends Object>(\n  hashCons: (opts?: T) => HashXOF<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n  if (crypto && typeof crypto.getRandomValues === 'function') {\n    return crypto.getRandomValues(new Uint8Array(bytesLength));\n  }\n  // Legacy Node.js compatibility\n  if (crypto && typeof crypto.randomBytes === 'function') {\n    return crypto.randomBytes(bytesLength);\n  }\n  throw new Error('crypto.getRandomValues must be defined');\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// 100 lines of code in the file are duplicated from noble-hashes (utils).\n// This is OK: `abstract` directory does not use noble-hashes.\n// User may opt-in into using different hashing library. This way, noble-hashes\n// won't be included into their bundle.\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nconst _2n = /* @__PURE__ */ BigInt(2);\nexport type Hex = Uint8Array | string; // hex strings are accepted for simplicity\nexport type PrivKey = Hex | bigint; // bigints are accepted to ease learning curve\nexport type CHash = {\n  (message: Uint8Array | string): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create(opts?: { dkLen?: number }): any; // For shake\n};\nexport type FHash = (message: Uint8Array | string) => Uint8Array;\n\nexport function isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\nexport function abytes(item: unknown): void {\n  if (!isBytes(item)) throw new Error('Uint8Array expected');\n}\n\nexport function abool(title: string, value: boolean): void {\n  if (typeof value !== 'boolean')\n    throw new Error(`${title} must be valid boolean, got \"${value}\".`);\n}\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  abytes(bytes);\n  // pre-caching improves the speed 6x\n  let hex = '';\n  for (let i = 0; i < bytes.length; i++) {\n    hex += hexes[bytes[i]];\n  }\n  return hex;\n}\n\nexport function numberToHexUnpadded(num: number | bigint): string {\n  const hex = num.toString(16);\n  return hex.length & 1 ? `0${hex}` : hex;\n}\n\nexport function hexToNumber(hex: string): bigint {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  // Big Endian\n  return BigInt(hex === '' ? '0' : `0x${hex}`);\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, _A: 65, _F: 70, _a: 97, _f: 102 } as const;\nfunction asciiToBase16(char: number): number | undefined {\n  if (char >= asciis._0 && char <= asciis._9) return char - asciis._0;\n  if (char >= asciis._A && char <= asciis._F) return char - (asciis._A - 10);\n  if (char >= asciis._a && char <= asciis._f) return char - (asciis._a - 10);\n  return;\n}\n\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const hl = hex.length;\n  const al = hl / 2;\n  if (hl % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + hl);\n  const array = new Uint8Array(al);\n  for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n    const n1 = asciiToBase16(hex.charCodeAt(hi));\n    const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n    if (n1 === undefined || n2 === undefined) {\n      const char = hex[hi] + hex[hi + 1];\n      throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n    }\n    array[ai] = n1 * 16 + n2;\n  }\n  return array;\n}\n\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes: Uint8Array): bigint {\n  return hexToNumber(bytesToHex(bytes));\n}\nexport function bytesToNumberLE(bytes: Uint8Array): bigint {\n  abytes(bytes);\n  return hexToNumber(bytesToHex(Uint8Array.from(bytes).reverse()));\n}\n\nexport function numberToBytesBE(n: number | bigint, len: number): Uint8Array {\n  return hexToBytes(n.toString(16).padStart(len * 2, '0'));\n}\nexport function numberToBytesLE(n: number | bigint, len: number): Uint8Array {\n  return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nexport function numberToVarBytesBE(n: number | bigint): Uint8Array {\n  return hexToBytes(numberToHexUnpadded(n));\n}\n\n/**\n * Takes hex string or Uint8Array, converts to Uint8Array.\n * Validates output length.\n * Will throw error for other types.\n * @param title descriptive title for an error e.g. 'private key'\n * @param hex hex string or Uint8Array\n * @param expectedLength optional, will compare to result array's length\n * @returns\n */\nexport function ensureBytes(title: string, hex: Hex, expectedLength?: number): Uint8Array {\n  let res: Uint8Array;\n  if (typeof hex === 'string') {\n    try {\n      res = hexToBytes(hex);\n    } catch (e) {\n      throw new Error(`${title} must be valid hex string, got \"${hex}\". Cause: ${e}`);\n    }\n  } else if (isBytes(hex)) {\n    // Uint8Array.from() instead of hash.slice() because node.js Buffer\n    // is instance of Uint8Array, and its slice() creates **mutable** copy\n    res = Uint8Array.from(hex);\n  } else {\n    throw new Error(`${title} must be hex string or Uint8Array`);\n  }\n  const len = res.length;\n  if (typeof expectedLength === 'number' && len !== expectedLength)\n    throw new Error(`${title} expected ${expectedLength} bytes, got ${len}`);\n  return res;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  let sum = 0;\n  for (let i = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    abytes(a);\n    sum += a.length;\n  }\n  const res = new Uint8Array(sum);\n  for (let i = 0, pad = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    res.set(a, pad);\n    pad += a.length;\n  }\n  return res;\n}\n\n// Compares 2 u8a-s in kinda constant time\nexport function equalBytes(a: Uint8Array, b: Uint8Array) {\n  if (a.length !== b.length) return false;\n  let diff = 0;\n  for (let i = 0; i < a.length; i++) diff |= a[i] ^ b[i];\n  return diff === 0;\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n// Is positive bigint\nconst isPosBig = (n: bigint) => typeof n === 'bigint' && _0n <= n;\n\nexport function inRange(n: bigint, min: bigint, max: bigint) {\n  return isPosBig(n) && isPosBig(min) && isPosBig(max) && min <= n && n < max;\n}\n\n/**\n * Asserts min <= n < max. NOTE: It's < max and not <= max.\n * @example\n * aInRange('x', x, 1n, 256n); // would assume x is in (1n..255n)\n */\nexport function aInRange(title: string, n: bigint, min: bigint, max: bigint) {\n  // Why min <= n < max and not a (min < n < max) OR b (min <= n <= max)?\n  // consider P=256n, min=0n, max=P\n  // - a for min=0 would require -1:          `inRange('x', x, -1n, P)`\n  // - b would commonly require subtraction:  `inRange('x', x, 0n, P - 1n)`\n  // - our way is the cleanest:               `inRange('x', x, 0n, P)\n  if (!inRange(n, min, max))\n    throw new Error(`expected valid ${title}: ${min} <= n < ${max}, got ${typeof n} ${n}`);\n}\n\n// Bit operations\n\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n */\nexport function bitLen(n: bigint) {\n  let len;\n  for (len = 0; n > _0n; n >>= _1n, len += 1);\n  return len;\n}\n\n/**\n * Gets single bit at position.\n * NOTE: first bit position is 0 (same as arrays)\n * Same as `!!+Array.from(n.toString(2)).reverse()[pos]`\n */\nexport function bitGet(n: bigint, pos: number) {\n  return (n >> BigInt(pos)) & _1n;\n}\n\n/**\n * Sets single bit at position.\n */\nexport function bitSet(n: bigint, pos: number, value: boolean) {\n  return n | ((value ? _1n : _0n) << BigInt(pos));\n}\n\n/**\n * Calculate mask for N bits. Not using ** operator with bigints because of old engines.\n * Same as BigInt(`0b${Array(i).fill('1').join('')}`)\n */\nexport const bitMask = (n: number) => (_2n << BigInt(n - 1)) - _1n;\n\n// DRBG\n\nconst u8n = (data?: any) => new Uint8Array(data); // creates Uint8Array\nconst u8fr = (arr: any) => Uint8Array.from(arr); // another shortcut\ntype Pred<T> = (v: Uint8Array) => T | undefined;\n/**\n * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n * @returns function that will call DRBG until 2nd arg returns something meaningful\n * @example\n *   const drbg = createHmacDRBG<Key>(32, 32, hmac);\n *   drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nexport function createHmacDrbg<T>(\n  hashLen: number,\n  qByteLen: number,\n  hmacFn: (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array\n): (seed: Uint8Array, predicate: Pred<T>) => T {\n  if (typeof hashLen !== 'number' || hashLen < 2) throw new Error('hashLen must be a number');\n  if (typeof qByteLen !== 'number' || qByteLen < 2) throw new Error('qByteLen must be a number');\n  if (typeof hmacFn !== 'function') throw new Error('hmacFn must be a function');\n  // Step B, Step C: set hashLen to 8*ceil(hlen/8)\n  let v = u8n(hashLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n  let k = u8n(hashLen); // Steps B and C of RFC6979 3.2: set hashLen, in our case always same\n  let i = 0; // Iterations counter, will throw when over 1000\n  const reset = () => {\n    v.fill(1);\n    k.fill(0);\n    i = 0;\n  };\n  const h = (...b: Uint8Array[]) => hmacFn(k, v, ...b); // hmac(k)(v, ...values)\n  const reseed = (seed = u8n()) => {\n    // HMAC-DRBG reseed() function. Steps D-G\n    k = h(u8fr([0x00]), seed); // k = hmac(k || v || 0x00 || seed)\n    v = h(); // v = hmac(k || v)\n    if (seed.length === 0) return;\n    k = h(u8fr([0x01]), seed); // k = hmac(k || v || 0x01 || seed)\n    v = h(); // v = hmac(k || v)\n  };\n  const gen = () => {\n    // HMAC-DRBG generate() function\n    if (i++ >= 1000) throw new Error('drbg: tried 1000 values');\n    let len = 0;\n    const out: Uint8Array[] = [];\n    while (len < qByteLen) {\n      v = h();\n      const sl = v.slice();\n      out.push(sl);\n      len += v.length;\n    }\n    return concatBytes(...out);\n  };\n  const genUntil = (seed: Uint8Array, pred: Pred<T>): T => {\n    reset();\n    reseed(seed); // Steps D-G\n    let res: T | undefined = undefined; // Step H: grind until k is in [1..n-1]\n    while (!(res = pred(gen()))) reseed();\n    reset();\n    return res;\n  };\n  return genUntil;\n}\n\n// Validating curves and fields\n\nconst validatorFns = {\n  bigint: (val: any) => typeof val === 'bigint',\n  function: (val: any) => typeof val === 'function',\n  boolean: (val: any) => typeof val === 'boolean',\n  string: (val: any) => typeof val === 'string',\n  stringOrUint8Array: (val: any) => typeof val === 'string' || isBytes(val),\n  isSafeInteger: (val: any) => Number.isSafeInteger(val),\n  array: (val: any) => Array.isArray(val),\n  field: (val: any, object: any) => (object as any).Fp.isValid(val),\n  hash: (val: any) => typeof val === 'function' && Number.isSafeInteger(val.outputLen),\n} as const;\ntype Validator = keyof typeof validatorFns;\ntype ValMap<T extends Record<string, any>> = { [K in keyof T]?: Validator };\n// type Record<K extends string | number | symbol, T> = { [P in K]: T; }\n\nexport function validateObject<T extends Record<string, any>>(\n  object: T,\n  validators: ValMap<T>,\n  optValidators: ValMap<T> = {}\n) {\n  const checkField = (fieldName: keyof T, type: Validator, isOptional: boolean) => {\n    const checkVal = validatorFns[type];\n    if (typeof checkVal !== 'function')\n      throw new Error(`Invalid validator \"${type}\", expected function`);\n\n    const val = object[fieldName as keyof typeof object];\n    if (isOptional && val === undefined) return;\n    if (!checkVal(val, object)) {\n      throw new Error(\n        `Invalid param ${String(fieldName)}=${val} (${typeof val}), expected ${type}`\n      );\n    }\n  };\n  for (const [fieldName, type] of Object.entries(validators)) checkField(fieldName, type!, false);\n  for (const [fieldName, type] of Object.entries(optValidators)) checkField(fieldName, type!, true);\n  return object;\n}\n// validate type tests\n// const o: { a: number; b: number; c: number } = { a: 1, b: 5, c: 6 };\n// const z0 = validateObject(o, { a: 'isSafeInteger' }, { c: 'bigint' }); // Ok!\n// // Should fail type-check\n// const z1 = validateObject(o, { a: 'tmp' }, { c: 'zz' });\n// const z2 = validateObject(o, { a: 'isSafeInteger' }, { c: 'zz' });\n// const z3 = validateObject(o, { test: 'boolean', z: 'bug' });\n// const z4 = validateObject(o, { a: 'boolean', z: 'bug' });\n\n/**\n * throws not implemented error\n */\nexport const notImplemented = () => {\n  throw new Error('not implemented');\n};\n\n/**\n * Memoizes (caches) computation result.\n * Uses WeakMap: the value is going auto-cleaned by GC after last reference is removed.\n */\nexport function memoized<T extends object, R, O extends any[]>(fn: (arg: T, ...args: O) => R) {\n  const map = new WeakMap<T, R>();\n  return (arg: T, ...args: O): R => {\n    const val = map.get(arg);\n    if (val !== undefined) return val;\n    const computed = fn(arg, ...args);\n    map.set(arg, computed);\n    return computed;\n  };\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Utilities for modular arithmetics and finite fields\nimport {\n  bitMask,\n  bytesToNumberBE,\n  bytesToNumberLE,\n  ensureBytes,\n  numberToBytesBE,\n  numberToBytesLE,\n  validateObject,\n} from './utils.js';\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);\n// prettier-ignore\nconst _4n = BigInt(4), _5n = BigInt(5), _8n = BigInt(8);\n// prettier-ignore\nconst _9n = BigInt(9), _16n = BigInt(16);\n\n// Calculates a modulo b\nexport function mod(a: bigint, b: bigint): bigint {\n  const result = a % b;\n  return result >= _0n ? result : b + result;\n}\n/**\n * Efficiently raise num to power and do modular division.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n * @example\n * pow(2n, 6n, 11n) // 64n % 11n == 9n\n */\n// TODO: use field version && remove\nexport function pow(num: bigint, power: bigint, modulo: bigint): bigint {\n  if (modulo <= _0n || power < _0n) throw new Error('Expected power/modulo > 0');\n  if (modulo === _1n) return _0n;\n  let res = _1n;\n  while (power > _0n) {\n    if (power & _1n) res = (res * num) % modulo;\n    num = (num * num) % modulo;\n    power >>= _1n;\n  }\n  return res;\n}\n\n// Does x ^ (2 ^ power) mod p. pow2(30, 4) == 30 ^ (2 ^ 4)\nexport function pow2(x: bigint, power: bigint, modulo: bigint): bigint {\n  let res = x;\n  while (power-- > _0n) {\n    res *= res;\n    res %= modulo;\n  }\n  return res;\n}\n\n// Inverses number over modulo\nexport function invert(number: bigint, modulo: bigint): bigint {\n  if (number === _0n || modulo <= _0n) {\n    throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);\n  }\n  // Euclidean GCD https://brilliant.org/wiki/extended-euclidean-algorithm/\n  // Fermat's little theorem \"CT-like\" version inv(n) = n^(m-2) mod m is 30x slower.\n  let a = mod(number, modulo);\n  let b = modulo;\n  // prettier-ignore\n  let x = _0n, y = _1n, u = _1n, v = _0n;\n  while (a !== _0n) {\n    // JIT applies optimization if those two lines follow each other\n    const q = b / a;\n    const r = b % a;\n    const m = x - u * q;\n    const n = y - v * q;\n    // prettier-ignore\n    b = a, a = r, x = u, y = v, u = m, v = n;\n  }\n  const gcd = b;\n  if (gcd !== _1n) throw new Error('invert: does not exist');\n  return mod(x, modulo);\n}\n\n/**\n * Tonelli-Shanks square root search algorithm.\n * 1. https://eprint.iacr.org/2012/685.pdf (page 12)\n * 2. Square Roots from 1; 24, 51, 10 to Dan Shanks\n * Will start an infinite loop if field order P is not prime.\n * @param P field order\n * @returns function that takes field Fp (created from P) and number n\n */\nexport function tonelliShanks(P: bigint) {\n  // Legendre constant: used to calculate Legendre symbol (a | p),\n  // which denotes the value of a^((p-1)/2) (mod p).\n  // (a | p) \u2261 1    if a is a square (mod p)\n  // (a | p) \u2261 -1   if a is not a square (mod p)\n  // (a | p) \u2261 0    if a \u2261 0 (mod p)\n  const legendreC = (P - _1n) / _2n;\n\n  let Q: bigint, S: number, Z: bigint;\n  // Step 1: By factoring out powers of 2 from p - 1,\n  // find q and s such that p - 1 = q*(2^s) with q odd\n  for (Q = P - _1n, S = 0; Q % _2n === _0n; Q /= _2n, S++);\n\n  // Step 2: Select a non-square z such that (z | p) \u2261 -1 and set c \u2261 zq\n  for (Z = _2n; Z < P && pow(Z, legendreC, P) !== P - _1n; Z++);\n\n  // Fast-path\n  if (S === 1) {\n    const p1div4 = (P + _1n) / _4n;\n    return function tonelliFast<T>(Fp: IField<T>, n: T) {\n      const root = Fp.pow(n, p1div4);\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // Slow-path\n  const Q1div2 = (Q + _1n) / _2n;\n  return function tonelliSlow<T>(Fp: IField<T>, n: T): T {\n    // Step 0: Check that n is indeed a square: (n | p) should not be \u2261 -1\n    if (Fp.pow(n, legendreC) === Fp.neg(Fp.ONE)) throw new Error('Cannot find square root');\n    let r = S;\n    // TODO: will fail at Fp2/etc\n    let g = Fp.pow(Fp.mul(Fp.ONE, Z), Q); // will update both x and b\n    let x = Fp.pow(n, Q1div2); // first guess at the square root\n    let b = Fp.pow(n, Q); // first guess at the fudge factor\n\n    while (!Fp.eql(b, Fp.ONE)) {\n      if (Fp.eql(b, Fp.ZERO)) return Fp.ZERO; // https://en.wikipedia.org/wiki/Tonelli%E2%80%93Shanks_algorithm (4. If t = 0, return r = 0)\n      // Find m such b^(2^m)==1\n      let m = 1;\n      for (let t2 = Fp.sqr(b); m < r; m++) {\n        if (Fp.eql(t2, Fp.ONE)) break;\n        t2 = Fp.sqr(t2); // t2 *= t2\n      }\n      // NOTE: r-m-1 can be bigger than 32, need to convert to bigint before shift, otherwise there will be overflow\n      const ge = Fp.pow(g, _1n << BigInt(r - m - 1)); // ge = 2^(r-m-1)\n      g = Fp.sqr(ge); // g = ge * ge\n      x = Fp.mul(x, ge); // x *= ge\n      b = Fp.mul(b, g); // b *= g\n      r = m;\n    }\n    return x;\n  };\n}\n\nexport function FpSqrt(P: bigint) {\n  // NOTE: different algorithms can give different roots, it is up to user to decide which one they want.\n  // For example there is FpSqrtOdd/FpSqrtEven to choice root based on oddness (used for hash-to-curve).\n\n  // P \u2261 3 (mod 4)\n  // \u221An = n^((P+1)/4)\n  if (P % _4n === _3n) {\n    // Not all roots possible!\n    // const ORDER =\n    //   0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaabn;\n    // const NUM = 72057594037927816n;\n    const p1div4 = (P + _1n) / _4n;\n    return function sqrt3mod4<T>(Fp: IField<T>, n: T) {\n      const root = Fp.pow(n, p1div4);\n      // Throw if root**2 != n\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // Atkin algorithm for q \u2261 5 (mod 8), https://eprint.iacr.org/2012/685.pdf (page 10)\n  if (P % _8n === _5n) {\n    const c1 = (P - _5n) / _8n;\n    return function sqrt5mod8<T>(Fp: IField<T>, n: T) {\n      const n2 = Fp.mul(n, _2n);\n      const v = Fp.pow(n2, c1);\n      const nv = Fp.mul(n, v);\n      const i = Fp.mul(Fp.mul(nv, _2n), v);\n      const root = Fp.mul(nv, Fp.sub(i, Fp.ONE));\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // P \u2261 9 (mod 16)\n  if (P % _16n === _9n) {\n    // NOTE: tonelli is too slow for bls-Fp2 calculations even on start\n    // Means we cannot use sqrt for constants at all!\n    //\n    // const c1 = Fp.sqrt(Fp.negate(Fp.ONE)); //  1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F\n    // const c2 = Fp.sqrt(c1);                //  2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F\n    // const c3 = Fp.sqrt(Fp.negate(c1));     //  3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F\n    // const c4 = (P + _7n) / _16n;           //  4. c4 = (q + 7) / 16        # Integer arithmetic\n    // sqrt = (x) => {\n    //   let tv1 = Fp.pow(x, c4);             //  1. tv1 = x^c4\n    //   let tv2 = Fp.mul(c1, tv1);           //  2. tv2 = c1 * tv1\n    //   const tv3 = Fp.mul(c2, tv1);         //  3. tv3 = c2 * tv1\n    //   let tv4 = Fp.mul(c3, tv1);           //  4. tv4 = c3 * tv1\n    //   const e1 = Fp.equals(Fp.square(tv2), x); //  5.  e1 = (tv2^2) == x\n    //   const e2 = Fp.equals(Fp.square(tv3), x); //  6.  e2 = (tv3^2) == x\n    //   tv1 = Fp.cmov(tv1, tv2, e1); //  7. tv1 = CMOV(tv1, tv2, e1)  # Select tv2 if (tv2^2) == x\n    //   tv2 = Fp.cmov(tv4, tv3, e2); //  8. tv2 = CMOV(tv4, tv3, e2)  # Select tv3 if (tv3^2) == x\n    //   const e3 = Fp.equals(Fp.square(tv2), x); //  9.  e3 = (tv2^2) == x\n    //   return Fp.cmov(tv1, tv2, e3); //  10.  z = CMOV(tv1, tv2, e3)  # Select the sqrt from tv1 and tv2\n    // }\n  }\n  // Other cases: Tonelli-Shanks algorithm\n  return tonelliShanks(P);\n}\n\n// Little-endian check for first LE bit (last BE bit);\nexport const isNegativeLE = (num: bigint, modulo: bigint) => (mod(num, modulo) & _1n) === _1n;\n\n// Field is not always over prime: for example, Fp2 has ORDER(q)=p^m\nexport interface IField<T> {\n  ORDER: bigint;\n  BYTES: number;\n  BITS: number;\n  MASK: bigint;\n  ZERO: T;\n  ONE: T;\n  // 1-arg\n  create: (num: T) => T;\n  isValid: (num: T) => boolean;\n  is0: (num: T) => boolean;\n  neg(num: T): T;\n  inv(num: T): T;\n  sqrt(num: T): T;\n  sqr(num: T): T;\n  // 2-args\n  eql(lhs: T, rhs: T): boolean;\n  add(lhs: T, rhs: T): T;\n  sub(lhs: T, rhs: T): T;\n  mul(lhs: T, rhs: T | bigint): T;\n  pow(lhs: T, power: bigint): T;\n  div(lhs: T, rhs: T | bigint): T;\n  // N for NonNormalized (for now)\n  addN(lhs: T, rhs: T): T;\n  subN(lhs: T, rhs: T): T;\n  mulN(lhs: T, rhs: T | bigint): T;\n  sqrN(num: T): T;\n\n  // Optional\n  // Should be same as sgn0 function in\n  // [RFC9380](https://www.rfc-editor.org/rfc/rfc9380#section-4.1).\n  // NOTE: sgn0 is 'negative in LE', which is same as odd. And negative in LE is kinda strange definition anyway.\n  isOdd?(num: T): boolean; // Odd instead of even since we have it for Fp2\n  // legendre?(num: T): T;\n  pow(lhs: T, power: bigint): T;\n  invertBatch: (lst: T[]) => T[];\n  toBytes(num: T): Uint8Array;\n  fromBytes(bytes: Uint8Array): T;\n  // If c is False, CMOV returns a, otherwise it returns b.\n  cmov(a: T, b: T, c: boolean): T;\n}\n// prettier-ignore\nconst FIELD_FIELDS = [\n  'create', 'isValid', 'is0', 'neg', 'inv', 'sqrt', 'sqr',\n  'eql', 'add', 'sub', 'mul', 'pow', 'div',\n  'addN', 'subN', 'mulN', 'sqrN'\n] as const;\nexport function validateField<T>(field: IField<T>) {\n  const initial = {\n    ORDER: 'bigint',\n    MASK: 'bigint',\n    BYTES: 'isSafeInteger',\n    BITS: 'isSafeInteger',\n  } as Record<string, string>;\n  const opts = FIELD_FIELDS.reduce((map, val: string) => {\n    map[val] = 'function';\n    return map;\n  }, initial);\n  return validateObject(field, opts);\n}\n\n// Generic field functions\n\n/**\n * Same as `pow` but for Fp: non-constant-time.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n */\nexport function FpPow<T>(f: IField<T>, num: T, power: bigint): T {\n  // Should have same speed as pow for bigints\n  // TODO: benchmark!\n  if (power < _0n) throw new Error('Expected power > 0');\n  if (power === _0n) return f.ONE;\n  if (power === _1n) return num;\n  let p = f.ONE;\n  let d = num;\n  while (power > _0n) {\n    if (power & _1n) p = f.mul(p, d);\n    d = f.sqr(d);\n    power >>= _1n;\n  }\n  return p;\n}\n\n/**\n * Efficiently invert an array of Field elements.\n * `inv(0)` will return `undefined` here: make sure to throw an error.\n */\nexport function FpInvertBatch<T>(f: IField<T>, nums: T[]): T[] {\n  const tmp = new Array(nums.length);\n  // Walk from first to last, multiply them by each other MOD p\n  const lastMultiplied = nums.reduce((acc, num, i) => {\n    if (f.is0(num)) return acc;\n    tmp[i] = acc;\n    return f.mul(acc, num);\n  }, f.ONE);\n  // Invert last element\n  const inverted = f.inv(lastMultiplied);\n  // Walk from last to first, multiply them by inverted each other MOD p\n  nums.reduceRight((acc, num, i) => {\n    if (f.is0(num)) return acc;\n    tmp[i] = f.mul(acc, tmp[i]);\n    return f.mul(acc, num);\n  }, inverted);\n  return tmp;\n}\n\nexport function FpDiv<T>(f: IField<T>, lhs: T, rhs: T | bigint): T {\n  return f.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, f.ORDER) : f.inv(rhs));\n}\n\nexport function FpLegendre(order: bigint) {\n  // (a | p) \u2261 1    if a is a square (mod p), quadratic residue\n  // (a | p) \u2261 -1   if a is not a square (mod p), quadratic non residue\n  // (a | p) \u2261 0    if a \u2261 0 (mod p)\n  const legendreConst = (order - _1n) / _2n; // Integer arithmetic\n  return <T>(f: IField<T>, x: T): T => f.pow(x, legendreConst);\n}\n\n// This function returns True whenever the value x is a square in the field F.\nexport function FpIsSquare<T>(f: IField<T>) {\n  const legendre = FpLegendre(f.ORDER);\n  return (x: T): boolean => {\n    const p = legendre(f, x);\n    return f.eql(p, f.ZERO) || f.eql(p, f.ONE);\n  };\n}\n\n// CURVE.n lengths\nexport function nLength(n: bigint, nBitLength?: number) {\n  // Bit size, byte size of CURVE.n\n  const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length;\n  const nByteLength = Math.ceil(_nBitLength / 8);\n  return { nBitLength: _nBitLength, nByteLength };\n}\n\ntype FpField = IField<bigint> & Required<Pick<IField<bigint>, 'isOdd'>>;\n/**\n * Initializes a finite field over prime. **Non-primes are not supported.**\n * Do not init in loop: slow. Very fragile: always run a benchmark on a change.\n * Major performance optimizations:\n * * a) denormalized operations like mulN instead of mul\n * * b) same object shape: never add or remove keys\n * * c) Object.freeze\n * NOTE: operations don't check 'isValid' for all elements for performance reasons,\n * it is caller responsibility to check this.\n * This is low-level code, please make sure you know what you doing.\n * @param ORDER prime positive bigint\n * @param bitLen how many bits the field consumes\n * @param isLE (def: false) if encoding / decoding should be in little-endian\n * @param redef optional faster redefinitions of sqrt and other methods\n */\nexport function Field(\n  ORDER: bigint,\n  bitLen?: number,\n  isLE = false,\n  redef: Partial<IField<bigint>> = {}\n): Readonly<FpField> {\n  if (ORDER <= _0n) throw new Error(`Expected Field ORDER > 0, got ${ORDER}`);\n  const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, bitLen);\n  if (BYTES > 2048) throw new Error('Field lengths over 2048 bytes are not supported');\n  const sqrtP = FpSqrt(ORDER);\n  const f: Readonly<FpField> = Object.freeze({\n    ORDER,\n    BITS,\n    BYTES,\n    MASK: bitMask(BITS),\n    ZERO: _0n,\n    ONE: _1n,\n    create: (num) => mod(num, ORDER),\n    isValid: (num) => {\n      if (typeof num !== 'bigint')\n        throw new Error(`Invalid field element: expected bigint, got ${typeof num}`);\n      return _0n <= num && num < ORDER; // 0 is valid element, but it's not invertible\n    },\n    is0: (num) => num === _0n,\n    isOdd: (num) => (num & _1n) === _1n,\n    neg: (num) => mod(-num, ORDER),\n    eql: (lhs, rhs) => lhs === rhs,\n\n    sqr: (num) => mod(num * num, ORDER),\n    add: (lhs, rhs) => mod(lhs + rhs, ORDER),\n    sub: (lhs, rhs) => mod(lhs - rhs, ORDER),\n    mul: (lhs, rhs) => mod(lhs * rhs, ORDER),\n    pow: (num, power) => FpPow(f, num, power),\n    div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER),\n\n    // Same as above, but doesn't normalize\n    sqrN: (num) => num * num,\n    addN: (lhs, rhs) => lhs + rhs,\n    subN: (lhs, rhs) => lhs - rhs,\n    mulN: (lhs, rhs) => lhs * rhs,\n\n    inv: (num) => invert(num, ORDER),\n    sqrt: redef.sqrt || ((n) => sqrtP(f, n)),\n    invertBatch: (lst) => FpInvertBatch(f, lst),\n    // TODO: do we really need constant cmov?\n    // We don't have const-time bigints anyway, so probably will be not very useful\n    cmov: (a, b, c) => (c ? b : a),\n    toBytes: (num) => (isLE ? numberToBytesLE(num, BYTES) : numberToBytesBE(num, BYTES)),\n    fromBytes: (bytes) => {\n      if (bytes.length !== BYTES)\n        throw new Error(`Fp.fromBytes: expected ${BYTES}, got ${bytes.length}`);\n      return isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n    },\n  } as FpField);\n  return Object.freeze(f);\n}\n\nexport function FpSqrtOdd<T>(Fp: IField<T>, elm: T) {\n  if (!Fp.isOdd) throw new Error(`Field doesn't have isOdd`);\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? root : Fp.neg(root);\n}\n\nexport function FpSqrtEven<T>(Fp: IField<T>, elm: T) {\n  if (!Fp.isOdd) throw new Error(`Field doesn't have isOdd`);\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? Fp.neg(root) : root;\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Same as mapKeyToField, but accepts less bytes (40 instead of 48 for 32-byte field).\n * Which makes it slightly more biased, less secure.\n * @deprecated use mapKeyToField instead\n */\nexport function hashToPrivateScalar(\n  hash: string | Uint8Array,\n  groupOrder: bigint,\n  isLE = false\n): bigint {\n  hash = ensureBytes('privateHash', hash);\n  const hashLen = hash.length;\n  const minLen = nLength(groupOrder).nByteLength + 8;\n  if (minLen < 24 || hashLen < minLen || hashLen > 1024)\n    throw new Error(`hashToPrivateScalar: expected ${minLen}-1024 bytes of input, got ${hashLen}`);\n  const num = isLE ? bytesToNumberLE(hash) : bytesToNumberBE(hash);\n  return mod(num, groupOrder - _1n) + _1n;\n}\n\n/**\n * Returns total number of bytes consumed by the field element.\n * For example, 32 bytes for usual 256-bit weierstrass curve.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of field\n */\nexport function getFieldBytesLength(fieldOrder: bigint): number {\n  if (typeof fieldOrder !== 'bigint') throw new Error('field order must be bigint');\n  const bitLength = fieldOrder.toString(2).length;\n  return Math.ceil(bitLength / 8);\n}\n\n/**\n * Returns minimal amount of bytes that can be safely reduced\n * by field order.\n * Should be 2^-128 for 128-bit curve such as P256.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of target hash\n */\nexport function getMinHashLength(fieldOrder: bigint): number {\n  const length = getFieldBytesLength(fieldOrder);\n  return length + Math.ceil(length / 2);\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Can take (n + n/2) or more bytes of uniform input e.g. from CSPRNG or KDF\n * and convert them into private scalar, with the modulo bias being negligible.\n * Needs at least 48 bytes of input for 32-byte private key.\n * https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/\n * FIPS 186-5, A.2 https://csrc.nist.gov/publications/detail/fips/186/5/final\n * RFC 9380, https://www.rfc-editor.org/rfc/rfc9380#section-5\n * @param hash hash output from SHA3 or a similar function\n * @param groupOrder size of subgroup - (e.g. secp256k1.CURVE.n)\n * @param isLE interpret hash bytes as LE num\n * @returns valid private scalar\n */\nexport function mapHashToField(key: Uint8Array, fieldOrder: bigint, isLE = false): Uint8Array {\n  const len = key.length;\n  const fieldLen = getFieldBytesLength(fieldOrder);\n  const minLen = getMinHashLength(fieldOrder);\n  // No small numbers: need to understand bias story. No huge numbers: easier to detect JS timings.\n  if (len < 16 || len < minLen || len > 1024)\n    throw new Error(`expected ${minLen}-1024 bytes of input, got ${len}`);\n  const num = isLE ? bytesToNumberBE(key) : bytesToNumberLE(key);\n  // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n  const reduced = mod(num, fieldOrder - _1n) + _1n;\n  return isLE ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE(reduced, fieldLen);\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport type { AffinePoint, Group, GroupConstructor } from './curve.js';\nimport { IField, mod } from './modular.js';\nimport type { CHash } from './utils.js';\nimport { abytes, bytesToNumberBE, concatBytes, utf8ToBytes, validateObject } from './utils.js';\n\n/**\n * * `DST` is a domain separation tag, defined in section 2.2.5\n * * `p` characteristic of F, where F is a finite field of characteristic p and order q = p^m\n * * `m` is extension degree (1 for prime fields)\n * * `k` is the target security target in bits (e.g. 128), from section 5.1\n * * `expand` is `xmd` (SHA2, SHA3, BLAKE) or `xof` (SHAKE, BLAKE-XOF)\n * * `hash` conforming to `utils.CHash` interface, with `outputLen` / `blockLen` props\n */\ntype UnicodeOrBytes = string | Uint8Array;\nexport type Opts = {\n  DST: UnicodeOrBytes;\n  p: bigint;\n  m: number;\n  k: number;\n  expand: 'xmd' | 'xof';\n  hash: CHash;\n};\n\n// Octet Stream to Integer. \"spec\" implementation of os2ip is 2.5x slower vs bytesToNumberBE.\nconst os2ip = bytesToNumberBE;\n\n// Integer to Octet Stream (numberToBytesBE)\nfunction i2osp(value: number, length: number): Uint8Array {\n  anum(value);\n  anum(length);\n  if (value < 0 || value >= 1 << (8 * length)) {\n    throw new Error(`bad I2OSP call: value=${value} length=${length}`);\n  }\n  const res = Array.from({ length }).fill(0) as number[];\n  for (let i = length - 1; i >= 0; i--) {\n    res[i] = value & 0xff;\n    value >>>= 8;\n  }\n  return new Uint8Array(res);\n}\n\nfunction strxor(a: Uint8Array, b: Uint8Array): Uint8Array {\n  const arr = new Uint8Array(a.length);\n  for (let i = 0; i < a.length; i++) {\n    arr[i] = a[i] ^ b[i];\n  }\n  return arr;\n}\n\nfunction anum(item: unknown): void {\n  if (!Number.isSafeInteger(item)) throw new Error('number expected');\n}\n\n// Produces a uniformly random byte string using a cryptographic hash function H that outputs b bits\n// https://www.rfc-editor.org/rfc/rfc9380#section-5.3.1\nexport function expand_message_xmd(\n  msg: Uint8Array,\n  DST: Uint8Array,\n  lenInBytes: number,\n  H: CHash\n): Uint8Array {\n  abytes(msg);\n  abytes(DST);\n  anum(lenInBytes);\n  // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3\n  if (DST.length > 255) DST = H(concatBytes(utf8ToBytes('H2C-OVERSIZE-DST-'), DST));\n  const { outputLen: b_in_bytes, blockLen: r_in_bytes } = H;\n  const ell = Math.ceil(lenInBytes / b_in_bytes);\n  if (lenInBytes > 65535 || ell > 255) throw new Error('expand_message_xmd: invalid lenInBytes');\n  const DST_prime = concatBytes(DST, i2osp(DST.length, 1));\n  const Z_pad = i2osp(0, r_in_bytes);\n  const l_i_b_str = i2osp(lenInBytes, 2); // len_in_bytes_str\n  const b = new Array<Uint8Array>(ell);\n  const b_0 = H(concatBytes(Z_pad, msg, l_i_b_str, i2osp(0, 1), DST_prime));\n  b[0] = H(concatBytes(b_0, i2osp(1, 1), DST_prime));\n  for (let i = 1; i <= ell; i++) {\n    const args = [strxor(b_0, b[i - 1]), i2osp(i + 1, 1), DST_prime];\n    b[i] = H(concatBytes(...args));\n  }\n  const pseudo_random_bytes = concatBytes(...b);\n  return pseudo_random_bytes.slice(0, lenInBytes);\n}\n\n// Produces a uniformly random byte string using an extendable-output function (XOF) H.\n// 1. The collision resistance of H MUST be at least k bits.\n// 2. H MUST be an XOF that has been proved indifferentiable from\n//    a random oracle under a reasonable cryptographic assumption.\n// https://www.rfc-editor.org/rfc/rfc9380#section-5.3.2\nexport function expand_message_xof(\n  msg: Uint8Array,\n  DST: Uint8Array,\n  lenInBytes: number,\n  k: number,\n  H: CHash\n): Uint8Array {\n  abytes(msg);\n  abytes(DST);\n  anum(lenInBytes);\n  // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3\n  // DST = H('H2C-OVERSIZE-DST-' || a_very_long_DST, Math.ceil((lenInBytes * k) / 8));\n  if (DST.length > 255) {\n    const dkLen = Math.ceil((2 * k) / 8);\n    DST = H.create({ dkLen }).update(utf8ToBytes('H2C-OVERSIZE-DST-')).update(DST).digest();\n  }\n  if (lenInBytes > 65535 || DST.length > 255)\n    throw new Error('expand_message_xof: invalid lenInBytes');\n  return (\n    H.create({ dkLen: lenInBytes })\n      .update(msg)\n      .update(i2osp(lenInBytes, 2))\n      // 2. DST_prime = DST || I2OSP(len(DST), 1)\n      .update(DST)\n      .update(i2osp(DST.length, 1))\n      .digest()\n  );\n}\n\n/**\n * Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F\n * https://www.rfc-editor.org/rfc/rfc9380#section-5.2\n * @param msg a byte string containing the message to hash\n * @param count the number of elements of F to output\n * @param options `{DST: string, p: bigint, m: number, k: number, expand: 'xmd' | 'xof', hash: H}`, see above\n * @returns [u_0, ..., u_(count - 1)], a list of field elements.\n */\nexport function hash_to_field(msg: Uint8Array, count: number, options: Opts): bigint[][] {\n  validateObject(options, {\n    DST: 'stringOrUint8Array',\n    p: 'bigint',\n    m: 'isSafeInteger',\n    k: 'isSafeInteger',\n    hash: 'hash',\n  });\n  const { p, k, m, hash, expand, DST: _DST } = options;\n  abytes(msg);\n  anum(count);\n  const DST = typeof _DST === 'string' ? utf8ToBytes(_DST) : _DST;\n  const log2p = p.toString(2).length;\n  const L = Math.ceil((log2p + k) / 8); // section 5.1 of ietf draft link above\n  const len_in_bytes = count * m * L;\n  let prb; // pseudo_random_bytes\n  if (expand === 'xmd') {\n    prb = expand_message_xmd(msg, DST, len_in_bytes, hash);\n  } else if (expand === 'xof') {\n    prb = expand_message_xof(msg, DST, len_in_bytes, k, hash);\n  } else if (expand === '_internal_pass') {\n    // for internal tests only\n    prb = msg;\n  } else {\n    throw new Error('expand must be \"xmd\" or \"xof\"');\n  }\n  const u = new Array(count);\n  for (let i = 0; i < count; i++) {\n    const e = new Array(m);\n    for (let j = 0; j < m; j++) {\n      const elm_offset = L * (j + i * m);\n      const tv = prb.subarray(elm_offset, elm_offset + L);\n      e[j] = mod(os2ip(tv), p);\n    }\n    u[i] = e;\n  }\n  return u;\n}\n\nexport function isogenyMap<T, F extends IField<T>>(field: F, map: [T[], T[], T[], T[]]) {\n  // Make same order as in spec\n  const COEFF = map.map((i) => Array.from(i).reverse());\n  return (x: T, y: T) => {\n    const [xNum, xDen, yNum, yDen] = COEFF.map((val) =>\n      val.reduce((acc, i) => field.add(field.mul(acc, x), i))\n    );\n    x = field.div(xNum, xDen); // xNum / xDen\n    y = field.mul(y, field.div(yNum, yDen)); // y * (yNum / yDev)\n    return { x, y };\n  };\n}\n\nexport interface H2CPoint<T> extends Group<H2CPoint<T>> {\n  add(rhs: H2CPoint<T>): H2CPoint<T>;\n  toAffine(iz?: bigint): AffinePoint<T>;\n  clearCofactor(): H2CPoint<T>;\n  assertValidity(): void;\n}\n\nexport interface H2CPointConstructor<T> extends GroupConstructor<H2CPoint<T>> {\n  fromAffine(ap: AffinePoint<T>): H2CPoint<T>;\n}\n\nexport type MapToCurve<T> = (scalar: bigint[]) => AffinePoint<T>;\n\n// Separated from initialization opts, so users won't accidentally change per-curve parameters\n// (changing DST is ok!)\nexport type htfBasicOpts = { DST: UnicodeOrBytes };\n\nexport function createHasher<T>(\n  Point: H2CPointConstructor<T>,\n  mapToCurve: MapToCurve<T>,\n  def: Opts & { encodeDST?: UnicodeOrBytes }\n) {\n  if (typeof mapToCurve !== 'function') throw new Error('mapToCurve() must be defined');\n  return {\n    // Encodes byte string to elliptic curve.\n    // hash_to_curve from https://www.rfc-editor.org/rfc/rfc9380#section-3\n    hashToCurve(msg: Uint8Array, options?: htfBasicOpts) {\n      const u = hash_to_field(msg, 2, { ...def, DST: def.DST, ...options } as Opts);\n      const u0 = Point.fromAffine(mapToCurve(u[0]));\n      const u1 = Point.fromAffine(mapToCurve(u[1]));\n      const P = u0.add(u1).clearCofactor();\n      P.assertValidity();\n      return P;\n    },\n\n    // Encodes byte string to elliptic curve.\n    // encode_to_curve from https://www.rfc-editor.org/rfc/rfc9380#section-3\n    encodeToCurve(msg: Uint8Array, options?: htfBasicOpts) {\n      const u = hash_to_field(msg, 1, { ...def, DST: def.encodeDST, ...options } as Opts);\n      const P = Point.fromAffine(mapToCurve(u[0])).clearCofactor();\n      P.assertValidity();\n      return P;\n    },\n    // Same as encodeToCurve, but without hash\n    mapToCurve(scalars: bigint[]) {\n      if (!Array.isArray(scalars)) throw new Error('mapToCurve: expected array of bigints');\n      for (const i of scalars)\n        if (typeof i !== 'bigint')\n          throw new Error(`mapToCurve: expected array of bigints, got ${i} in array`);\n      const P = Point.fromAffine(mapToCurve(scalars)).clearCofactor();\n      P.assertValidity();\n      return P;\n    },\n  };\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Abelian group utilities\nimport { IField, validateField, nLength } from './modular.js';\nimport { validateObject, bitLen } from './utils.js';\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\n\nexport type AffinePoint<T> = {\n  x: T;\n  y: T;\n} & { z?: never; t?: never };\n\nexport interface Group<T extends Group<T>> {\n  double(): T;\n  negate(): T;\n  add(other: T): T;\n  subtract(other: T): T;\n  equals(other: T): boolean;\n  multiply(scalar: bigint): T;\n}\n\nexport type GroupConstructor<T> = {\n  BASE: T;\n  ZERO: T;\n};\nexport type Mapper<T> = (i: T[]) => T[];\n\n// Since points in different groups cannot be equal (different object constructor),\n// we can have single place to store precomputes\nconst pointPrecomputes = new WeakMap<any, any[]>();\nconst pointWindowSizes = new WeakMap<any, number>(); // This allows use make points immutable (nothing changes inside)\n\n// Elliptic curve multiplication of Point by scalar. Fragile.\n// Scalars should always be less than curve order: this should be checked inside of a curve itself.\n// Creates precomputation tables for fast multiplication:\n// - private scalar is split by fixed size windows of W bits\n// - every window point is collected from window's table & added to accumulator\n// - since windows are different, same point inside tables won't be accessed more than once per calc\n// - each multiplication is 'Math.ceil(CURVE_ORDER / \uD835\uDC4A) + 1' point additions (fixed for any scalar)\n// - +1 window is neccessary for wNAF\n// - wNAF reduces table size: 2x less memory + 2x faster generation, but 10% slower multiplication\n// TODO: Research returning 2d JS array of windows, instead of a single window. This would allow\n// windows to be in different memory locations\nexport function wNAF<T extends Group<T>>(c: GroupConstructor<T>, bits: number) {\n  const constTimeNegate = (condition: boolean, item: T): T => {\n    const neg = item.negate();\n    return condition ? neg : item;\n  };\n  const validateW = (W: number) => {\n    if (!Number.isSafeInteger(W) || W <= 0 || W > bits)\n      throw new Error(`Wrong window size=${W}, should be [1..${bits}]`);\n  };\n  const opts = (W: number) => {\n    validateW(W);\n    const windows = Math.ceil(bits / W) + 1; // +1, because\n    const windowSize = 2 ** (W - 1); // -1 because we skip zero\n    return { windows, windowSize };\n  };\n  return {\n    constTimeNegate,\n    // non-const time multiplication ladder\n    unsafeLadder(elm: T, n: bigint) {\n      let p = c.ZERO;\n      let d: T = elm;\n      while (n > _0n) {\n        if (n & _1n) p = p.add(d);\n        d = d.double();\n        n >>= _1n;\n      }\n      return p;\n    },\n\n    /**\n     * Creates a wNAF precomputation window. Used for caching.\n     * Default window size is set by `utils.precompute()` and is equal to 8.\n     * Number of precomputed points depends on the curve size:\n     * 2^(\uD835\uDC4A\u22121) * (Math.ceil(\uD835\uDC5B / \uD835\uDC4A) + 1), where:\n     * - \uD835\uDC4A is the window size\n     * - \uD835\uDC5B is the bitlength of the curve order.\n     * For a 256-bit curve and window size 8, the number of precomputed points is 128 * 33 = 4224.\n     * @returns precomputed point tables flattened to a single array\n     */\n    precomputeWindow(elm: T, W: number): Group<T>[] {\n      const { windows, windowSize } = opts(W);\n      const points: T[] = [];\n      let p: T = elm;\n      let base = p;\n      for (let window = 0; window < windows; window++) {\n        base = p;\n        points.push(base);\n        // =1, because we skip zero\n        for (let i = 1; i < windowSize; i++) {\n          base = base.add(p);\n          points.push(base);\n        }\n        p = base.double();\n      }\n      return points;\n    },\n\n    /**\n     * Implements ec multiplication using precomputed tables and w-ary non-adjacent form.\n     * @param W window size\n     * @param precomputes precomputed tables\n     * @param n scalar (we don't check here, but should be less than curve order)\n     * @returns real and fake (for const-time) points\n     */\n    wNAF(W: number, precomputes: T[], n: bigint): { p: T; f: T } {\n      // TODO: maybe check that scalar is less than group order? wNAF behavious is undefined otherwise\n      // But need to carefully remove other checks before wNAF. ORDER == bits here\n      const { windows, windowSize } = opts(W);\n\n      let p = c.ZERO;\n      let f = c.BASE;\n\n      const mask = BigInt(2 ** W - 1); // Create mask with W ones: 0b1111 for W=4 etc.\n      const maxNumber = 2 ** W;\n      const shiftBy = BigInt(W);\n\n      for (let window = 0; window < windows; window++) {\n        const offset = window * windowSize;\n        // Extract W bits.\n        let wbits = Number(n & mask);\n\n        // Shift number by W bits.\n        n >>= shiftBy;\n\n        // If the bits are bigger than max size, we'll split those.\n        // +224 => 256 - 32\n        if (wbits > windowSize) {\n          wbits -= maxNumber;\n          n += _1n;\n        }\n\n        // This code was first written with assumption that 'f' and 'p' will never be infinity point:\n        // since each addition is multiplied by 2 ** W, it cannot cancel each other. However,\n        // there is negate now: it is possible that negated element from low value\n        // would be the same as high element, which will create carry into next window.\n        // It's not obvious how this can fail, but still worth investigating later.\n\n        // Check if we're onto Zero point.\n        // Add random point inside current window to f.\n        const offset1 = offset;\n        const offset2 = offset + Math.abs(wbits) - 1; // -1 because we skip zero\n        const cond1 = window % 2 !== 0;\n        const cond2 = wbits < 0;\n        if (wbits === 0) {\n          // The most important part for const-time getPublicKey\n          f = f.add(constTimeNegate(cond1, precomputes[offset1]));\n        } else {\n          p = p.add(constTimeNegate(cond2, precomputes[offset2]));\n        }\n      }\n      // JIT-compiler should not eliminate f here, since it will later be used in normalizeZ()\n      // Even if the variable is still unused, there are some checks which will\n      // throw an exception, so compiler needs to prove they won't happen, which is hard.\n      // At this point there is a way to F be infinity-point even if p is not,\n      // which makes it less const-time: around 1 bigint multiply.\n      return { p, f };\n    },\n\n    wNAFCached(P: T, n: bigint, transform: Mapper<T>): { p: T; f: T } {\n      const W: number = pointWindowSizes.get(P) || 1;\n      // Calculate precomputes on a first run, reuse them after\n      let comp = pointPrecomputes.get(P);\n      if (!comp) {\n        comp = this.precomputeWindow(P, W) as T[];\n        if (W !== 1) pointPrecomputes.set(P, transform(comp));\n      }\n      return this.wNAF(W, comp, n);\n    },\n    // We calculate precomputes for elliptic curve point multiplication\n    // using windowed method. This specifies window size and\n    // stores precomputed values. Usually only base point would be precomputed.\n\n    setWindowSize(P: T, W: number) {\n      validateW(W);\n      pointWindowSizes.set(P, W);\n      pointPrecomputes.delete(P);\n    },\n  };\n}\n\n/**\n * Pippenger algorithm for multi-scalar multiplication (MSM).\n * MSM is basically (Pa + Qb + Rc + ...).\n * 30x faster vs naive addition on L=4096, 10x faster with precomputes.\n * For N=254bit, L=1, it does: 1024 ADD + 254 DBL. For L=5: 1536 ADD + 254 DBL.\n * Algorithmically constant-time (for same L), even when 1 point + scalar, or when scalar = 0.\n * @param c Curve Point constructor\n * @param field field over CURVE.N - important that it's not over CURVE.P\n * @param points array of L curve points\n * @param scalars array of L scalars (aka private keys / bigints)\n */\nexport function pippenger<T extends Group<T>>(\n  c: GroupConstructor<T>,\n  field: IField<bigint>,\n  points: T[],\n  scalars: bigint[]\n): T {\n  // If we split scalars by some window (let's say 8 bits), every chunk will only\n  // take 256 buckets even if there are 4096 scalars, also re-uses double.\n  // TODO:\n  // - https://eprint.iacr.org/2024/750.pdf\n  // - https://tches.iacr.org/index.php/TCHES/article/view/10287\n  // 0 is accepted in scalars\n  if (!Array.isArray(points) || !Array.isArray(scalars) || scalars.length !== points.length)\n    throw new Error('arrays of points and scalars must have equal length');\n  scalars.forEach((s, i) => {\n    if (!field.isValid(s)) throw new Error(`wrong scalar at index ${i}`);\n  });\n  points.forEach((p, i) => {\n    if (!(p instanceof (c as any))) throw new Error(`wrong point at index ${i}`);\n  });\n  const wbits = bitLen(BigInt(points.length));\n  const windowSize = wbits > 12 ? wbits - 3 : wbits > 4 ? wbits - 2 : wbits ? 2 : 1; // in bits\n  const MASK = (1 << windowSize) - 1;\n  const buckets = new Array(MASK + 1).fill(c.ZERO); // +1 for zero array\n  const lastBits = Math.floor((field.BITS - 1) / windowSize) * windowSize;\n  let sum = c.ZERO;\n  for (let i = lastBits; i >= 0; i -= windowSize) {\n    buckets.fill(c.ZERO);\n    for (let j = 0; j < scalars.length; j++) {\n      const scalar = scalars[j];\n      const wbits = Number((scalar >> BigInt(i)) & BigInt(MASK));\n      buckets[wbits] = buckets[wbits].add(points[j]);\n    }\n    let resI = c.ZERO; // not using this will do small speed-up, but will lose ct\n    // Skip first bucket, because it is zero\n    for (let j = buckets.length - 1, sumI = c.ZERO; j > 0; j--) {\n      sumI = sumI.add(buckets[j]);\n      resI = resI.add(sumI);\n    }\n    sum = sum.add(resI);\n    if (i !== 0) for (let j = 0; j < windowSize; j++) sum = sum.double();\n  }\n  return sum as T;\n}\n\n// Generic BasicCurve interface: works even for polynomial fields (BLS): P, n, h would be ok.\n// Though generator can be different (Fp2 / Fp6 for BLS).\nexport type BasicCurve<T> = {\n  Fp: IField<T>; // Field over which we'll do calculations (Fp)\n  n: bigint; // Curve order, total count of valid points in the field\n  nBitLength?: number; // bit length of curve order\n  nByteLength?: number; // byte length of curve order\n  h: bigint; // cofactor. we can assign default=1, but users will just ignore it w/o validation\n  hEff?: bigint; // Number to multiply to clear cofactor\n  Gx: T; // base point X coordinate\n  Gy: T; // base point Y coordinate\n  allowInfinityPoint?: boolean; // bls12-381 requires it. ZERO point is valid, but invalid pubkey\n};\n\nexport function validateBasic<FP, T>(curve: BasicCurve<FP> & T) {\n  validateField(curve.Fp);\n  validateObject(\n    curve,\n    {\n      n: 'bigint',\n      h: 'bigint',\n      Gx: 'field',\n      Gy: 'field',\n    },\n    {\n      nBitLength: 'isSafeInteger',\n      nByteLength: 'isSafeInteger',\n    }\n  );\n  // Set defaults\n  return Object.freeze({\n    ...nLength(curve.n, curve.nBitLength),\n    ...curve,\n    ...{ p: curve.Fp.ORDER },\n  } as const);\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Short Weierstrass curve. The formula is: y\u00B2 = x\u00B3 + ax + b\nimport {\n  AffinePoint,\n  BasicCurve,\n  Group,\n  GroupConstructor,\n  validateBasic,\n  wNAF,\n  pippenger,\n} from './curve.js';\nimport * as mod from './modular.js';\nimport * as ut from './utils.js';\nimport { CHash, Hex, PrivKey, ensureBytes, memoized, abool } from './utils.js';\n\nexport type { AffinePoint };\ntype HmacFnSync = (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array;\ntype EndomorphismOpts = {\n  beta: bigint;\n  splitScalar: (k: bigint) => { k1neg: boolean; k1: bigint; k2neg: boolean; k2: bigint };\n};\nexport type BasicWCurve<T> = BasicCurve<T> & {\n  // Params: a, b\n  a: T;\n  b: T;\n\n  // Optional params\n  allowedPrivateKeyLengths?: readonly number[]; // for P521\n  wrapPrivateKey?: boolean; // bls12-381 requires mod(n) instead of rejecting keys >= n\n  endo?: EndomorphismOpts; // Endomorphism options for Koblitz curves\n  // When a cofactor != 1, there can be an effective methods to:\n  // 1. Determine whether a point is torsion-free\n  isTorsionFree?: (c: ProjConstructor<T>, point: ProjPointType<T>) => boolean;\n  // 2. Clear torsion component\n  clearCofactor?: (c: ProjConstructor<T>, point: ProjPointType<T>) => ProjPointType<T>;\n};\n\ntype Entropy = Hex | boolean;\nexport type SignOpts = { lowS?: boolean; extraEntropy?: Entropy; prehash?: boolean };\nexport type VerOpts = { lowS?: boolean; prehash?: boolean };\n\nfunction validateSigVerOpts(opts: SignOpts | VerOpts) {\n  if (opts.lowS !== undefined) abool('lowS', opts.lowS);\n  if (opts.prehash !== undefined) abool('prehash', opts.prehash);\n}\n\n/**\n * ### Design rationale for types\n *\n * * Interaction between classes from different curves should fail:\n *   `k256.Point.BASE.add(p256.Point.BASE)`\n * * For this purpose we want to use `instanceof` operator, which is fast and works during runtime\n * * Different calls of `curve()` would return different classes -\n *   `curve(params) !== curve(params)`: if somebody decided to monkey-patch their curve,\n *   it won't affect others\n *\n * TypeScript can't infer types for classes created inside a function. Classes is one instance of nominative types in TypeScript and interfaces only check for shape, so it's hard to create unique type for every function call.\n *\n * We can use generic types via some param, like curve opts, but that would:\n *     1. Enable interaction between `curve(params)` and `curve(params)` (curves of same params)\n *     which is hard to debug.\n *     2. Params can be generic and we can't enforce them to be constant value:\n *     if somebody creates curve from non-constant params,\n *     it would be allowed to interact with other curves with non-constant params\n *\n * TODO: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#unique-symbol\n */\n\n// Instance for 3d XYZ points\nexport interface ProjPointType<T> extends Group<ProjPointType<T>> {\n  readonly px: T;\n  readonly py: T;\n  readonly pz: T;\n  get x(): T;\n  get y(): T;\n  multiply(scalar: bigint): ProjPointType<T>;\n  toAffine(iz?: T): AffinePoint<T>;\n  isTorsionFree(): boolean;\n  clearCofactor(): ProjPointType<T>;\n  assertValidity(): void;\n  hasEvenY(): boolean;\n  toRawBytes(isCompressed?: boolean): Uint8Array;\n  toHex(isCompressed?: boolean): string;\n\n  multiplyUnsafe(scalar: bigint): ProjPointType<T>;\n  multiplyAndAddUnsafe(Q: ProjPointType<T>, a: bigint, b: bigint): ProjPointType<T> | undefined;\n  _setWindowSize(windowSize: number): void;\n}\n// Static methods for 3d XYZ points\nexport interface ProjConstructor<T> extends GroupConstructor<ProjPointType<T>> {\n  new (x: T, y: T, z: T): ProjPointType<T>;\n  fromAffine(p: AffinePoint<T>): ProjPointType<T>;\n  fromHex(hex: Hex): ProjPointType<T>;\n  fromPrivateKey(privateKey: PrivKey): ProjPointType<T>;\n  normalizeZ(points: ProjPointType<T>[]): ProjPointType<T>[];\n  msm(points: ProjPointType<T>[], scalars: bigint[]): ProjPointType<T>;\n}\n\nexport type CurvePointsType<T> = BasicWCurve<T> & {\n  // Bytes\n  fromBytes?: (bytes: Uint8Array) => AffinePoint<T>;\n  toBytes?: (c: ProjConstructor<T>, point: ProjPointType<T>, isCompressed: boolean) => Uint8Array;\n};\n\nfunction validatePointOpts<T>(curve: CurvePointsType<T>) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    opts,\n    {\n      a: 'field',\n      b: 'field',\n    },\n    {\n      allowedPrivateKeyLengths: 'array',\n      wrapPrivateKey: 'boolean',\n      isTorsionFree: 'function',\n      clearCofactor: 'function',\n      allowInfinityPoint: 'boolean',\n      fromBytes: 'function',\n      toBytes: 'function',\n    }\n  );\n  const { endo, Fp, a } = opts;\n  if (endo) {\n    if (!Fp.eql(a, Fp.ZERO)) {\n      throw new Error('Endomorphism can only be defined for Koblitz curves that have a=0');\n    }\n    if (\n      typeof endo !== 'object' ||\n      typeof endo.beta !== 'bigint' ||\n      typeof endo.splitScalar !== 'function'\n    ) {\n      throw new Error('Expected endomorphism with beta: bigint and splitScalar: function');\n    }\n  }\n  return Object.freeze({ ...opts } as const);\n}\n\nexport type CurvePointsRes<T> = {\n  CURVE: ReturnType<typeof validatePointOpts<T>>;\n  ProjectivePoint: ProjConstructor<T>;\n  normPrivateKeyToScalar: (key: PrivKey) => bigint;\n  weierstrassEquation: (x: T) => T;\n  isWithinCurveOrder: (num: bigint) => boolean;\n};\n\nconst { bytesToNumberBE: b2n, hexToBytes: h2b } = ut;\n\n/**\n * ASN.1 DER encoding utilities. ASN is very complex & fragile. Format:\n *\n *     [0x30 (SEQUENCE), bytelength, 0x02 (INTEGER), intLength, R, 0x02 (INTEGER), intLength, S]\n *\n * Docs: https://letsencrypt.org/docs/a-warm-welcome-to-asn1-and-der/, https://luca.ntop.org/Teaching/Appunti/asn1.html\n */\nexport const DER = {\n  // asn.1 DER encoding utils\n  Err: class DERErr extends Error {\n    constructor(m = '') {\n      super(m);\n    }\n  },\n  // Basic building block is TLV (Tag-Length-Value)\n  _tlv: {\n    encode: (tag: number, data: string) => {\n      const { Err: E } = DER;\n      if (tag < 0 || tag > 256) throw new E('tlv.encode: wrong tag');\n      if (data.length & 1) throw new E('tlv.encode: unpadded data');\n      const dataLen = data.length / 2;\n      const len = ut.numberToHexUnpadded(dataLen);\n      if ((len.length / 2) & 0b1000_0000) throw new E('tlv.encode: long form length too big');\n      // length of length with long form flag\n      const lenLen = dataLen > 127 ? ut.numberToHexUnpadded((len.length / 2) | 0b1000_0000) : '';\n      return `${ut.numberToHexUnpadded(tag)}${lenLen}${len}${data}`;\n    },\n    // v - value, l - left bytes (unparsed)\n    decode(tag: number, data: Uint8Array): { v: Uint8Array; l: Uint8Array } {\n      const { Err: E } = DER;\n      let pos = 0;\n      if (tag < 0 || tag > 256) throw new E('tlv.encode: wrong tag');\n      if (data.length < 2 || data[pos++] !== tag) throw new E('tlv.decode: wrong tlv');\n      const first = data[pos++];\n      const isLong = !!(first & 0b1000_0000); // First bit of first length byte is flag for short/long form\n      let length = 0;\n      if (!isLong) length = first;\n      else {\n        // Long form: [longFlag(1bit), lengthLength(7bit), length (BE)]\n        const lenLen = first & 0b0111_1111;\n        if (!lenLen) throw new E('tlv.decode(long): indefinite length not supported');\n        if (lenLen > 4) throw new E('tlv.decode(long): byte length is too big'); // this will overflow u32 in js\n        const lengthBytes = data.subarray(pos, pos + lenLen);\n        if (lengthBytes.length !== lenLen) throw new E('tlv.decode: length bytes not complete');\n        if (lengthBytes[0] === 0) throw new E('tlv.decode(long): zero leftmost byte');\n        for (const b of lengthBytes) length = (length << 8) | b;\n        pos += lenLen;\n        if (length < 128) throw new E('tlv.decode(long): not minimal encoding');\n      }\n      const v = data.subarray(pos, pos + length);\n      if (v.length !== length) throw new E('tlv.decode: wrong value length');\n      return { v, l: data.subarray(pos + length) };\n    },\n  },\n  // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n  // since we always use positive integers here. It must always be empty:\n  // - add zero byte if exists\n  // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n  _int: {\n    encode(num: bigint) {\n      const { Err: E } = DER;\n      if (num < _0n) throw new E('integer: negative integers are not allowed');\n      let hex = ut.numberToHexUnpadded(num);\n      // Pad with zero byte if negative flag is present\n      if (Number.parseInt(hex[0], 16) & 0b1000) hex = '00' + hex;\n      if (hex.length & 1) throw new E('unexpected assertion');\n      return hex;\n    },\n    decode(data: Uint8Array): bigint {\n      const { Err: E } = DER;\n      if (data[0] & 0b1000_0000) throw new E('Invalid signature integer: negative');\n      if (data[0] === 0x00 && !(data[1] & 0b1000_0000))\n        throw new E('Invalid signature integer: unnecessary leading zero');\n      return b2n(data);\n    },\n  },\n  toSig(hex: string | Uint8Array): { r: bigint; s: bigint } {\n    // parse DER signature\n    const { Err: E, _int: int, _tlv: tlv } = DER;\n    const data = typeof hex === 'string' ? h2b(hex) : hex;\n    ut.abytes(data);\n    const { v: seqBytes, l: seqLeftBytes } = tlv.decode(0x30, data);\n    if (seqLeftBytes.length) throw new E('Invalid signature: left bytes after parsing');\n    const { v: rBytes, l: rLeftBytes } = tlv.decode(0x02, seqBytes);\n    const { v: sBytes, l: sLeftBytes } = tlv.decode(0x02, rLeftBytes);\n    if (sLeftBytes.length) throw new E('Invalid signature: left bytes after parsing');\n    return { r: int.decode(rBytes), s: int.decode(sBytes) };\n  },\n  hexFromSig(sig: { r: bigint; s: bigint }): string {\n    const { _tlv: tlv, _int: int } = DER;\n    const seq = `${tlv.encode(0x02, int.encode(sig.r))}${tlv.encode(0x02, int.encode(sig.s))}`;\n    return tlv.encode(0x30, seq);\n  },\n};\n\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3), _4n = BigInt(4);\n\nexport function weierstrassPoints<T>(opts: CurvePointsType<T>): CurvePointsRes<T> {\n  const CURVE = validatePointOpts(opts);\n  const { Fp } = CURVE; // All curves has same field / group length as for now, but they can differ\n  const Fn = mod.Field(CURVE.n, CURVE.nBitLength);\n\n  const toBytes =\n    CURVE.toBytes ||\n    ((_c: ProjConstructor<T>, point: ProjPointType<T>, _isCompressed: boolean) => {\n      const a = point.toAffine();\n      return ut.concatBytes(Uint8Array.from([0x04]), Fp.toBytes(a.x), Fp.toBytes(a.y));\n    });\n  const fromBytes =\n    CURVE.fromBytes ||\n    ((bytes: Uint8Array) => {\n      // const head = bytes[0];\n      const tail = bytes.subarray(1);\n      // if (head !== 0x04) throw new Error('Only non-compressed encoding is supported');\n      const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n      const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n      return { x, y };\n    });\n\n  /**\n   * y\u00B2 = x\u00B3 + ax + b: Short weierstrass curve formula\n   * @returns y\u00B2\n   */\n  function weierstrassEquation(x: T): T {\n    const { a, b } = CURVE;\n    const x2 = Fp.sqr(x); // x * x\n    const x3 = Fp.mul(x2, x); // x2 * x\n    return Fp.add(Fp.add(x3, Fp.mul(x, a)), b); // x3 + a * x + b\n  }\n  // Validate whether the passed curve params are valid.\n  // We check if curve equation works for generator point.\n  // `assertValidity()` won't work: `isTorsionFree()` is not available at this point in bls12-381.\n  // ProjectivePoint class has not been initialized yet.\n  if (!Fp.eql(Fp.sqr(CURVE.Gy), weierstrassEquation(CURVE.Gx)))\n    throw new Error('bad generator point: equation left != right');\n\n  // Valid group elements reside in range 1..n-1\n  function isWithinCurveOrder(num: bigint): boolean {\n    return ut.inRange(num, _1n, CURVE.n);\n  }\n  // Validates if priv key is valid and converts it to bigint.\n  // Supports options allowedPrivateKeyLengths and wrapPrivateKey.\n  function normPrivateKeyToScalar(key: PrivKey): bigint {\n    const { allowedPrivateKeyLengths: lengths, nByteLength, wrapPrivateKey, n: N } = CURVE;\n    if (lengths && typeof key !== 'bigint') {\n      if (ut.isBytes(key)) key = ut.bytesToHex(key);\n      // Normalize to hex string, pad. E.g. P521 would norm 130-132 char hex to 132-char bytes\n      if (typeof key !== 'string' || !lengths.includes(key.length)) throw new Error('Invalid key');\n      key = key.padStart(nByteLength * 2, '0');\n    }\n    let num: bigint;\n    try {\n      num =\n        typeof key === 'bigint'\n          ? key\n          : ut.bytesToNumberBE(ensureBytes('private key', key, nByteLength));\n    } catch (error) {\n      throw new Error(`private key must be ${nByteLength} bytes, hex or bigint, not ${typeof key}`);\n    }\n    if (wrapPrivateKey) num = mod.mod(num, N); // disabled by default, enabled for BLS\n    ut.aInRange('private key', num, _1n, N); // num in range [1..N-1]\n    return num;\n  }\n\n  function assertPrjPoint(other: unknown) {\n    if (!(other instanceof Point)) throw new Error('ProjectivePoint expected');\n  }\n\n  // Memoized toAffine / validity check. They are heavy. Points are immutable.\n\n  // Converts Projective point to affine (x, y) coordinates.\n  // Can accept precomputed Z^-1 - for example, from invertBatch.\n  // (x, y, z) \u220B (x=x/z, y=y/z)\n  const toAffineMemo = memoized((p: Point, iz?: T): AffinePoint<T> => {\n    const { px: x, py: y, pz: z } = p;\n    // Fast-path for normalized points\n    if (Fp.eql(z, Fp.ONE)) return { x, y };\n    const is0 = p.is0();\n    // If invZ was 0, we return zero point. However we still want to execute\n    // all operations, so we replace invZ with a random number, 1.\n    if (iz == null) iz = is0 ? Fp.ONE : Fp.inv(z);\n    const ax = Fp.mul(x, iz);\n    const ay = Fp.mul(y, iz);\n    const zz = Fp.mul(z, iz);\n    if (is0) return { x: Fp.ZERO, y: Fp.ZERO };\n    if (!Fp.eql(zz, Fp.ONE)) throw new Error('invZ was invalid');\n    return { x: ax, y: ay };\n  });\n  // NOTE: on exception this will crash 'cached' and no value will be set.\n  // Otherwise true will be return\n  const assertValidMemo = memoized((p: Point) => {\n    if (p.is0()) {\n      // (0, 1, 0) aka ZERO is invalid in most contexts.\n      // In BLS, ZERO can be serialized, so we allow it.\n      // (0, 0, 0) is wrong representation of ZERO and is always invalid.\n      if (CURVE.allowInfinityPoint && !Fp.is0(p.py)) return;\n      throw new Error('bad point: ZERO');\n    }\n    // Some 3rd-party test vectors require different wording between here & `fromCompressedHex`\n    const { x, y } = p.toAffine();\n    // Check if x, y are valid field elements\n    if (!Fp.isValid(x) || !Fp.isValid(y)) throw new Error('bad point: x or y not FE');\n    const left = Fp.sqr(y); // y\u00B2\n    const right = weierstrassEquation(x); // x\u00B3 + ax + b\n    if (!Fp.eql(left, right)) throw new Error('bad point: equation left != right');\n    if (!p.isTorsionFree()) throw new Error('bad point: not in prime-order subgroup');\n    return true;\n  });\n\n  /**\n   * Projective Point works in 3d / projective (homogeneous) coordinates: (x, y, z) \u220B (x=x/z, y=y/z)\n   * Default Point works in 2d / affine coordinates: (x, y)\n   * We're doing calculations in projective, because its operations don't require costly inversion.\n   */\n  class Point implements ProjPointType<T> {\n    static readonly BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n    static readonly ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO);\n\n    constructor(\n      readonly px: T,\n      readonly py: T,\n      readonly pz: T\n    ) {\n      if (px == null || !Fp.isValid(px)) throw new Error('x required');\n      if (py == null || !Fp.isValid(py)) throw new Error('y required');\n      if (pz == null || !Fp.isValid(pz)) throw new Error('z required');\n      Object.freeze(this);\n    }\n\n    // Does not validate if the point is on-curve.\n    // Use fromHex instead, or call assertValidity() later.\n    static fromAffine(p: AffinePoint<T>): Point {\n      const { x, y } = p || {};\n      if (!p || !Fp.isValid(x) || !Fp.isValid(y)) throw new Error('invalid affine point');\n      if (p instanceof Point) throw new Error('projective point not allowed');\n      const is0 = (i: T) => Fp.eql(i, Fp.ZERO);\n      // fromAffine(x:0, y:0) would produce (x:0, y:0, z:1), but we need (x:0, y:1, z:0)\n      if (is0(x) && is0(y)) return Point.ZERO;\n      return new Point(x, y, Fp.ONE);\n    }\n\n    get x(): T {\n      return this.toAffine().x;\n    }\n    get y(): T {\n      return this.toAffine().y;\n    }\n\n    /**\n     * Takes a bunch of Projective Points but executes only one\n     * inversion on all of them. Inversion is very slow operation,\n     * so this improves performance massively.\n     * Optimization: converts a list of projective points to a list of identical points with Z=1.\n     */\n    static normalizeZ(points: Point[]): Point[] {\n      const toInv = Fp.invertBatch(points.map((p) => p.pz));\n      return points.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n    }\n\n    /**\n     * Converts hash string or Uint8Array to Point.\n     * @param hex short/long ECDSA hex\n     */\n    static fromHex(hex: Hex): Point {\n      const P = Point.fromAffine(fromBytes(ensureBytes('pointHex', hex)));\n      P.assertValidity();\n      return P;\n    }\n\n    // Multiplies generator point by privateKey.\n    static fromPrivateKey(privateKey: PrivKey) {\n      return Point.BASE.multiply(normPrivateKeyToScalar(privateKey));\n    }\n\n    // Multiscalar Multiplication\n    static msm(points: Point[], scalars: bigint[]) {\n      return pippenger(Point, Fn, points, scalars);\n    }\n\n    // \"Private method\", don't use it directly\n    _setWindowSize(windowSize: number) {\n      wnaf.setWindowSize(this, windowSize);\n    }\n\n    // A point on curve is valid if it conforms to equation.\n    assertValidity(): void {\n      assertValidMemo(this);\n    }\n\n    hasEvenY(): boolean {\n      const { y } = this.toAffine();\n      if (Fp.isOdd) return !Fp.isOdd(y);\n      throw new Error(\"Field doesn't support isOdd\");\n    }\n\n    /**\n     * Compare one point to another.\n     */\n    equals(other: Point): boolean {\n      assertPrjPoint(other);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      const { px: X2, py: Y2, pz: Z2 } = other;\n      const U1 = Fp.eql(Fp.mul(X1, Z2), Fp.mul(X2, Z1));\n      const U2 = Fp.eql(Fp.mul(Y1, Z2), Fp.mul(Y2, Z1));\n      return U1 && U2;\n    }\n\n    /**\n     * Flips point to one corresponding to (x, -y) in Affine coordinates.\n     */\n    negate(): Point {\n      return new Point(this.px, Fp.neg(this.py), this.pz);\n    }\n\n    // Renes-Costello-Batina exception-free doubling formula.\n    // There is 30% faster Jacobian formula, but it is not complete.\n    // https://eprint.iacr.org/2015/1060, algorithm 3\n    // Cost: 8M + 3S + 3*a + 2*b3 + 15add.\n    double() {\n      const { a, b } = CURVE;\n      const b3 = Fp.mul(b, _3n);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n      let t0 = Fp.mul(X1, X1); // step 1\n      let t1 = Fp.mul(Y1, Y1);\n      let t2 = Fp.mul(Z1, Z1);\n      let t3 = Fp.mul(X1, Y1);\n      t3 = Fp.add(t3, t3); // step 5\n      Z3 = Fp.mul(X1, Z1);\n      Z3 = Fp.add(Z3, Z3);\n      X3 = Fp.mul(a, Z3);\n      Y3 = Fp.mul(b3, t2);\n      Y3 = Fp.add(X3, Y3); // step 10\n      X3 = Fp.sub(t1, Y3);\n      Y3 = Fp.add(t1, Y3);\n      Y3 = Fp.mul(X3, Y3);\n      X3 = Fp.mul(t3, X3);\n      Z3 = Fp.mul(b3, Z3); // step 15\n      t2 = Fp.mul(a, t2);\n      t3 = Fp.sub(t0, t2);\n      t3 = Fp.mul(a, t3);\n      t3 = Fp.add(t3, Z3);\n      Z3 = Fp.add(t0, t0); // step 20\n      t0 = Fp.add(Z3, t0);\n      t0 = Fp.add(t0, t2);\n      t0 = Fp.mul(t0, t3);\n      Y3 = Fp.add(Y3, t0);\n      t2 = Fp.mul(Y1, Z1); // step 25\n      t2 = Fp.add(t2, t2);\n      t0 = Fp.mul(t2, t3);\n      X3 = Fp.sub(X3, t0);\n      Z3 = Fp.mul(t2, t1);\n      Z3 = Fp.add(Z3, Z3); // step 30\n      Z3 = Fp.add(Z3, Z3);\n      return new Point(X3, Y3, Z3);\n    }\n\n    // Renes-Costello-Batina exception-free addition formula.\n    // There is 30% faster Jacobian formula, but it is not complete.\n    // https://eprint.iacr.org/2015/1060, algorithm 1\n    // Cost: 12M + 0S + 3*a + 3*b3 + 23add.\n    add(other: Point): Point {\n      assertPrjPoint(other);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      const { px: X2, py: Y2, pz: Z2 } = other;\n      let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n      const a = CURVE.a;\n      const b3 = Fp.mul(CURVE.b, _3n);\n      let t0 = Fp.mul(X1, X2); // step 1\n      let t1 = Fp.mul(Y1, Y2);\n      let t2 = Fp.mul(Z1, Z2);\n      let t3 = Fp.add(X1, Y1);\n      let t4 = Fp.add(X2, Y2); // step 5\n      t3 = Fp.mul(t3, t4);\n      t4 = Fp.add(t0, t1);\n      t3 = Fp.sub(t3, t4);\n      t4 = Fp.add(X1, Z1);\n      let t5 = Fp.add(X2, Z2); // step 10\n      t4 = Fp.mul(t4, t5);\n      t5 = Fp.add(t0, t2);\n      t4 = Fp.sub(t4, t5);\n      t5 = Fp.add(Y1, Z1);\n      X3 = Fp.add(Y2, Z2); // step 15\n      t5 = Fp.mul(t5, X3);\n      X3 = Fp.add(t1, t2);\n      t5 = Fp.sub(t5, X3);\n      Z3 = Fp.mul(a, t4);\n      X3 = Fp.mul(b3, t2); // step 20\n      Z3 = Fp.add(X3, Z3);\n      X3 = Fp.sub(t1, Z3);\n      Z3 = Fp.add(t1, Z3);\n      Y3 = Fp.mul(X3, Z3);\n      t1 = Fp.add(t0, t0); // step 25\n      t1 = Fp.add(t1, t0);\n      t2 = Fp.mul(a, t2);\n      t4 = Fp.mul(b3, t4);\n      t1 = Fp.add(t1, t2);\n      t2 = Fp.sub(t0, t2); // step 30\n      t2 = Fp.mul(a, t2);\n      t4 = Fp.add(t4, t2);\n      t0 = Fp.mul(t1, t4);\n      Y3 = Fp.add(Y3, t0);\n      t0 = Fp.mul(t5, t4); // step 35\n      X3 = Fp.mul(t3, X3);\n      X3 = Fp.sub(X3, t0);\n      t0 = Fp.mul(t3, t1);\n      Z3 = Fp.mul(t5, Z3);\n      Z3 = Fp.add(Z3, t0); // step 40\n      return new Point(X3, Y3, Z3);\n    }\n\n    subtract(other: Point) {\n      return this.add(other.negate());\n    }\n\n    is0() {\n      return this.equals(Point.ZERO);\n    }\n    private wNAF(n: bigint): { p: Point; f: Point } {\n      return wnaf.wNAFCached(this, n, Point.normalizeZ);\n    }\n\n    /**\n     * Non-constant-time multiplication. Uses double-and-add algorithm.\n     * It's faster, but should only be used when you don't care about\n     * an exposed private key e.g. sig verification, which works over *public* keys.\n     */\n    multiplyUnsafe(sc: bigint): Point {\n      ut.aInRange('scalar', sc, _0n, CURVE.n);\n      const I = Point.ZERO;\n      if (sc === _0n) return I;\n      if (sc === _1n) return this;\n      const { endo } = CURVE;\n      if (!endo) return wnaf.unsafeLadder(this, sc);\n\n      // Apply endomorphism\n      let { k1neg, k1, k2neg, k2 } = endo.splitScalar(sc);\n      let k1p = I;\n      let k2p = I;\n      let d: Point = this;\n      while (k1 > _0n || k2 > _0n) {\n        if (k1 & _1n) k1p = k1p.add(d);\n        if (k2 & _1n) k2p = k2p.add(d);\n        d = d.double();\n        k1 >>= _1n;\n        k2 >>= _1n;\n      }\n      if (k1neg) k1p = k1p.negate();\n      if (k2neg) k2p = k2p.negate();\n      k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n      return k1p.add(k2p);\n    }\n\n    /**\n     * Constant time multiplication.\n     * Uses wNAF method. Windowed method may be 10% faster,\n     * but takes 2x longer to generate and consumes 2x memory.\n     * Uses precomputes when available.\n     * Uses endomorphism for Koblitz curves.\n     * @param scalar by which the point would be multiplied\n     * @returns New point\n     */\n    multiply(scalar: bigint): Point {\n      const { endo, n: N } = CURVE;\n      ut.aInRange('scalar', scalar, _1n, N);\n      let point: Point, fake: Point; // Fake point is used to const-time mult\n      if (endo) {\n        const { k1neg, k1, k2neg, k2 } = endo.splitScalar(scalar);\n        let { p: k1p, f: f1p } = this.wNAF(k1);\n        let { p: k2p, f: f2p } = this.wNAF(k2);\n        k1p = wnaf.constTimeNegate(k1neg, k1p);\n        k2p = wnaf.constTimeNegate(k2neg, k2p);\n        k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n        point = k1p.add(k2p);\n        fake = f1p.add(f2p);\n      } else {\n        const { p, f } = this.wNAF(scalar);\n        point = p;\n        fake = f;\n      }\n      // Normalize `z` for both points, but return only real one\n      return Point.normalizeZ([point, fake])[0];\n    }\n\n    /**\n     * Efficiently calculate `aP + bQ`. Unsafe, can expose private key, if used incorrectly.\n     * Not using Strauss-Shamir trick: precomputation tables are faster.\n     * The trick could be useful if both P and Q are not G (not in our case).\n     * @returns non-zero affine point\n     */\n    multiplyAndAddUnsafe(Q: Point, a: bigint, b: bigint): Point | undefined {\n      const G = Point.BASE; // No Strauss-Shamir trick: we have 10% faster G precomputes\n      const mul = (\n        P: Point,\n        a: bigint // Select faster multiply() method\n      ) => (a === _0n || a === _1n || !P.equals(G) ? P.multiplyUnsafe(a) : P.multiply(a));\n      const sum = mul(this, a).add(mul(Q, b));\n      return sum.is0() ? undefined : sum;\n    }\n\n    // Converts Projective point to affine (x, y) coordinates.\n    // Can accept precomputed Z^-1 - for example, from invertBatch.\n    // (x, y, z) \u220B (x=x/z, y=y/z)\n    toAffine(iz?: T): AffinePoint<T> {\n      return toAffineMemo(this, iz);\n    }\n    isTorsionFree(): boolean {\n      const { h: cofactor, isTorsionFree } = CURVE;\n      if (cofactor === _1n) return true; // No subgroups, always torsion-free\n      if (isTorsionFree) return isTorsionFree(Point, this);\n      throw new Error('isTorsionFree() has not been declared for the elliptic curve');\n    }\n    clearCofactor(): Point {\n      const { h: cofactor, clearCofactor } = CURVE;\n      if (cofactor === _1n) return this; // Fast-path\n      if (clearCofactor) return clearCofactor(Point, this) as Point;\n      return this.multiplyUnsafe(CURVE.h);\n    }\n\n    toRawBytes(isCompressed = true): Uint8Array {\n      abool('isCompressed', isCompressed);\n      this.assertValidity();\n      return toBytes(Point, this, isCompressed);\n    }\n\n    toHex(isCompressed = true): string {\n      abool('isCompressed', isCompressed);\n      return ut.bytesToHex(this.toRawBytes(isCompressed));\n    }\n  }\n  const _bits = CURVE.nBitLength;\n  const wnaf = wNAF(Point, CURVE.endo ? Math.ceil(_bits / 2) : _bits);\n  // Validate if generator point is on curve\n  return {\n    CURVE,\n    ProjectivePoint: Point as ProjConstructor<T>,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  };\n}\n\n// Instance\nexport interface SignatureType {\n  readonly r: bigint;\n  readonly s: bigint;\n  readonly recovery?: number;\n  assertValidity(): void;\n  addRecoveryBit(recovery: number): RecoveredSignatureType;\n  hasHighS(): boolean;\n  normalizeS(): SignatureType;\n  recoverPublicKey(msgHash: Hex): ProjPointType<bigint>;\n  toCompactRawBytes(): Uint8Array;\n  toCompactHex(): string;\n  // DER-encoded\n  toDERRawBytes(isCompressed?: boolean): Uint8Array;\n  toDERHex(isCompressed?: boolean): string;\n}\nexport type RecoveredSignatureType = SignatureType & {\n  readonly recovery: number;\n};\n// Static methods\nexport type SignatureConstructor = {\n  new (r: bigint, s: bigint): SignatureType;\n  fromCompact(hex: Hex): SignatureType;\n  fromDER(hex: Hex): SignatureType;\n};\ntype SignatureLike = { r: bigint; s: bigint };\n\nexport type PubKey = Hex | ProjPointType<bigint>;\n\nexport type CurveType = BasicWCurve<bigint> & {\n  hash: CHash; // CHash not FHash because we need outputLen for DRBG\n  hmac: HmacFnSync;\n  randomBytes: (bytesLength?: number) => Uint8Array;\n  lowS?: boolean;\n  bits2int?: (bytes: Uint8Array) => bigint;\n  bits2int_modN?: (bytes: Uint8Array) => bigint;\n};\n\nfunction validateOpts(curve: CurveType) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    opts,\n    {\n      hash: 'hash',\n      hmac: 'function',\n      randomBytes: 'function',\n    },\n    {\n      bits2int: 'function',\n      bits2int_modN: 'function',\n      lowS: 'boolean',\n    }\n  );\n  return Object.freeze({ lowS: true, ...opts } as const);\n}\n\nexport type CurveFn = {\n  CURVE: ReturnType<typeof validateOpts>;\n  getPublicKey: (privateKey: PrivKey, isCompressed?: boolean) => Uint8Array;\n  getSharedSecret: (privateA: PrivKey, publicB: Hex, isCompressed?: boolean) => Uint8Array;\n  sign: (msgHash: Hex, privKey: PrivKey, opts?: SignOpts) => RecoveredSignatureType;\n  verify: (signature: Hex | SignatureLike, msgHash: Hex, publicKey: Hex, opts?: VerOpts) => boolean;\n  ProjectivePoint: ProjConstructor<bigint>;\n  Signature: SignatureConstructor;\n  utils: {\n    normPrivateKeyToScalar: (key: PrivKey) => bigint;\n    isValidPrivateKey(privateKey: PrivKey): boolean;\n    randomPrivateKey: () => Uint8Array;\n    precompute: (windowSize?: number, point?: ProjPointType<bigint>) => ProjPointType<bigint>;\n  };\n};\n\n/**\n * Creates short weierstrass curve and ECDSA signature methods for it.\n * @example\n * import { Field } from '@noble/curves/abstract/modular';\n * // Before that, define BigInt-s: a, b, p, n, Gx, Gy\n * const curve = weierstrass({ a, b, Fp: Field(p), n, Gx, Gy, h: 1n })\n */\nexport function weierstrass(curveDef: CurveType): CurveFn {\n  const CURVE = validateOpts(curveDef) as ReturnType<typeof validateOpts>;\n  const { Fp, n: CURVE_ORDER } = CURVE;\n  const compressedLen = Fp.BYTES + 1; // e.g. 33 for 32\n  const uncompressedLen = 2 * Fp.BYTES + 1; // e.g. 65 for 32\n\n  function modN(a: bigint) {\n    return mod.mod(a, CURVE_ORDER);\n  }\n  function invN(a: bigint) {\n    return mod.invert(a, CURVE_ORDER);\n  }\n\n  const {\n    ProjectivePoint: Point,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  } = weierstrassPoints({\n    ...CURVE,\n    toBytes(_c, point, isCompressed: boolean): Uint8Array {\n      const a = point.toAffine();\n      const x = Fp.toBytes(a.x);\n      const cat = ut.concatBytes;\n      abool('isCompressed', isCompressed);\n      if (isCompressed) {\n        return cat(Uint8Array.from([point.hasEvenY() ? 0x02 : 0x03]), x);\n      } else {\n        return cat(Uint8Array.from([0x04]), x, Fp.toBytes(a.y));\n      }\n    },\n    fromBytes(bytes: Uint8Array) {\n      const len = bytes.length;\n      const head = bytes[0];\n      const tail = bytes.subarray(1);\n      // this.assertValidity() is done inside of fromHex\n      if (len === compressedLen && (head === 0x02 || head === 0x03)) {\n        const x = ut.bytesToNumberBE(tail);\n        if (!ut.inRange(x, _1n, Fp.ORDER)) throw new Error('Point is not on curve');\n        const y2 = weierstrassEquation(x); // y\u00B2 = x\u00B3 + ax + b\n        let y: bigint;\n        try {\n          y = Fp.sqrt(y2); // y = y\u00B2 ^ (p+1)/4\n        } catch (sqrtError) {\n          const suffix = sqrtError instanceof Error ? ': ' + sqrtError.message : '';\n          throw new Error('Point is not on curve' + suffix);\n        }\n        const isYOdd = (y & _1n) === _1n;\n        // ECDSA\n        const isHeadOdd = (head & 1) === 1;\n        if (isHeadOdd !== isYOdd) y = Fp.neg(y);\n        return { x, y };\n      } else if (len === uncompressedLen && head === 0x04) {\n        const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n        const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n        return { x, y };\n      } else {\n        throw new Error(\n          `Point of length ${len} was invalid. Expected ${compressedLen} compressed bytes or ${uncompressedLen} uncompressed bytes`\n        );\n      }\n    },\n  });\n  const numToNByteStr = (num: bigint): string =>\n    ut.bytesToHex(ut.numberToBytesBE(num, CURVE.nByteLength));\n\n  function isBiggerThanHalfOrder(number: bigint) {\n    const HALF = CURVE_ORDER >> _1n;\n    return number > HALF;\n  }\n\n  function normalizeS(s: bigint) {\n    return isBiggerThanHalfOrder(s) ? modN(-s) : s;\n  }\n  // slice bytes num\n  const slcNum = (b: Uint8Array, from: number, to: number) => ut.bytesToNumberBE(b.slice(from, to));\n\n  /**\n   * ECDSA signature with its (r, s) properties. Supports DER & compact representations.\n   */\n  class Signature implements SignatureType {\n    constructor(\n      readonly r: bigint,\n      readonly s: bigint,\n      readonly recovery?: number\n    ) {\n      this.assertValidity();\n    }\n\n    // pair (bytes of r, bytes of s)\n    static fromCompact(hex: Hex) {\n      const l = CURVE.nByteLength;\n      hex = ensureBytes('compactSignature', hex, l * 2);\n      return new Signature(slcNum(hex, 0, l), slcNum(hex, l, 2 * l));\n    }\n\n    // DER encoded ECDSA signature\n    // https://bitcoin.stackexchange.com/questions/57644/what-are-the-parts-of-a-bitcoin-transaction-input-script\n    static fromDER(hex: Hex) {\n      const { r, s } = DER.toSig(ensureBytes('DER', hex));\n      return new Signature(r, s);\n    }\n\n    assertValidity(): void {\n      ut.aInRange('r', this.r, _1n, CURVE_ORDER); // r in [1..N]\n      ut.aInRange('s', this.s, _1n, CURVE_ORDER); // s in [1..N]\n    }\n\n    addRecoveryBit(recovery: number): RecoveredSignature {\n      return new Signature(this.r, this.s, recovery) as RecoveredSignature;\n    }\n\n    recoverPublicKey(msgHash: Hex): typeof Point.BASE {\n      const { r, s, recovery: rec } = this;\n      const h = bits2int_modN(ensureBytes('msgHash', msgHash)); // Truncate hash\n      if (rec == null || ![0, 1, 2, 3].includes(rec)) throw new Error('recovery id invalid');\n      const radj = rec === 2 || rec === 3 ? r + CURVE.n : r;\n      if (radj >= Fp.ORDER) throw new Error('recovery id 2 or 3 invalid');\n      const prefix = (rec & 1) === 0 ? '02' : '03';\n      const R = Point.fromHex(prefix + numToNByteStr(radj));\n      const ir = invN(radj); // r^-1\n      const u1 = modN(-h * ir); // -hr^-1\n      const u2 = modN(s * ir); // sr^-1\n      const Q = Point.BASE.multiplyAndAddUnsafe(R, u1, u2); // (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1)\n      if (!Q) throw new Error('point at infinify'); // unsafe is fine: no priv data leaked\n      Q.assertValidity();\n      return Q;\n    }\n\n    // Signatures should be low-s, to prevent malleability.\n    hasHighS(): boolean {\n      return isBiggerThanHalfOrder(this.s);\n    }\n\n    normalizeS() {\n      return this.hasHighS() ? new Signature(this.r, modN(-this.s), this.recovery) : this;\n    }\n\n    // DER-encoded\n    toDERRawBytes() {\n      return ut.hexToBytes(this.toDERHex());\n    }\n    toDERHex() {\n      return DER.hexFromSig({ r: this.r, s: this.s });\n    }\n\n    // padded bytes of r, then padded bytes of s\n    toCompactRawBytes() {\n      return ut.hexToBytes(this.toCompactHex());\n    }\n    toCompactHex() {\n      return numToNByteStr(this.r) + numToNByteStr(this.s);\n    }\n  }\n  type RecoveredSignature = Signature & { recovery: number };\n\n  const utils = {\n    isValidPrivateKey(privateKey: PrivKey) {\n      try {\n        normPrivateKeyToScalar(privateKey);\n        return true;\n      } catch (error) {\n        return false;\n      }\n    },\n    normPrivateKeyToScalar: normPrivateKeyToScalar,\n\n    /**\n     * Produces cryptographically secure private key from random of size\n     * (groupLen + ceil(groupLen / 2)) with modulo bias being negligible.\n     */\n    randomPrivateKey: (): Uint8Array => {\n      const length = mod.getMinHashLength(CURVE.n);\n      return mod.mapHashToField(CURVE.randomBytes(length), CURVE.n);\n    },\n\n    /**\n     * Creates precompute table for an arbitrary EC point. Makes point \"cached\".\n     * Allows to massively speed-up `point.multiply(scalar)`.\n     * @returns cached point\n     * @example\n     * const fast = utils.precompute(8, ProjectivePoint.fromHex(someonesPubKey));\n     * fast.multiply(privKey); // much faster ECDH now\n     */\n    precompute(windowSize = 8, point = Point.BASE): typeof Point.BASE {\n      point._setWindowSize(windowSize);\n      point.multiply(BigInt(3)); // 3 is arbitrary, just need any number here\n      return point;\n    },\n  };\n\n  /**\n   * Computes public key for a private key. Checks for validity of the private key.\n   * @param privateKey private key\n   * @param isCompressed whether to return compact (default), or full key\n   * @returns Public key, full when isCompressed=false; short when isCompressed=true\n   */\n  function getPublicKey(privateKey: PrivKey, isCompressed = true): Uint8Array {\n    return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);\n  }\n\n  /**\n   * Quick and dirty check for item being public key. Does not validate hex, or being on-curve.\n   */\n  function isProbPub(item: PrivKey | PubKey): boolean {\n    const arr = ut.isBytes(item);\n    const str = typeof item === 'string';\n    const len = (arr || str) && (item as Hex).length;\n    if (arr) return len === compressedLen || len === uncompressedLen;\n    if (str) return len === 2 * compressedLen || len === 2 * uncompressedLen;\n    if (item instanceof Point) return true;\n    return false;\n  }\n\n  /**\n   * ECDH (Elliptic Curve Diffie Hellman).\n   * Computes shared public key from private key and public key.\n   * Checks: 1) private key validity 2) shared key is on-curve.\n   * Does NOT hash the result.\n   * @param privateA private key\n   * @param publicB different public key\n   * @param isCompressed whether to return compact (default), or full key\n   * @returns shared public key\n   */\n  function getSharedSecret(privateA: PrivKey, publicB: Hex, isCompressed = true): Uint8Array {\n    if (isProbPub(privateA)) throw new Error('first arg must be private key');\n    if (!isProbPub(publicB)) throw new Error('second arg must be public key');\n    const b = Point.fromHex(publicB); // check for being on-curve\n    return b.multiply(normPrivateKeyToScalar(privateA)).toRawBytes(isCompressed);\n  }\n\n  // RFC6979: ensure ECDSA msg is X bytes and < N. RFC suggests optional truncating via bits2octets.\n  // FIPS 186-4 4.6 suggests the leftmost min(nBitLen, outLen) bits, which matches bits2int.\n  // bits2int can produce res>N, we can do mod(res, N) since the bitLen is the same.\n  // int2octets can't be used; pads small msgs with 0: unacceptatble for trunc as per RFC vectors\n  const bits2int =\n    CURVE.bits2int ||\n    function (bytes: Uint8Array): bigint {\n      // For curves with nBitLength % 8 !== 0: bits2octets(bits2octets(m)) !== bits2octets(m)\n      // for some cases, since bytes.length * 8 is not actual bitLength.\n      const num = ut.bytesToNumberBE(bytes); // check for == u8 done here\n      const delta = bytes.length * 8 - CURVE.nBitLength; // truncate to nBitLength leftmost bits\n      return delta > 0 ? num >> BigInt(delta) : num;\n    };\n  const bits2int_modN =\n    CURVE.bits2int_modN ||\n    function (bytes: Uint8Array): bigint {\n      return modN(bits2int(bytes)); // can't use bytesToNumberBE here\n    };\n  // NOTE: pads output with zero as per spec\n  const ORDER_MASK = ut.bitMask(CURVE.nBitLength);\n  /**\n   * Converts to bytes. Checks if num in `[0..ORDER_MASK-1]` e.g.: `[0..2^256-1]`.\n   */\n  function int2octets(num: bigint): Uint8Array {\n    ut.aInRange(`num < 2^${CURVE.nBitLength}`, num, _0n, ORDER_MASK);\n    // works with order, can have different size than numToField!\n    return ut.numberToBytesBE(num, CURVE.nByteLength);\n  }\n\n  // Steps A, D of RFC6979 3.2\n  // Creates RFC6979 seed; converts msg/privKey to numbers.\n  // Used only in sign, not in verify.\n  // NOTE: we cannot assume here that msgHash has same amount of bytes as curve order, this will be wrong at least for P521.\n  // Also it can be bigger for P224 + SHA256\n  function prepSig(msgHash: Hex, privateKey: PrivKey, opts = defaultSigOpts) {\n    if (['recovered', 'canonical'].some((k) => k in opts))\n      throw new Error('sign() legacy options not supported');\n    const { hash, randomBytes } = CURVE;\n    let { lowS, prehash, extraEntropy: ent } = opts; // generates low-s sigs by default\n    if (lowS == null) lowS = true; // RFC6979 3.2: we skip step A, because we already provide hash\n    msgHash = ensureBytes('msgHash', msgHash);\n    validateSigVerOpts(opts);\n    if (prehash) msgHash = ensureBytes('prehashed msgHash', hash(msgHash));\n\n    // We can't later call bits2octets, since nested bits2int is broken for curves\n    // with nBitLength % 8 !== 0. Because of that, we unwrap it here as int2octets call.\n    // const bits2octets = (bits) => int2octets(bits2int_modN(bits))\n    const h1int = bits2int_modN(msgHash);\n    const d = normPrivateKeyToScalar(privateKey); // validate private key, convert to bigint\n    const seedArgs = [int2octets(d), int2octets(h1int)];\n    // extraEntropy. RFC6979 3.6: additional k' (optional).\n    if (ent != null && ent !== false) {\n      // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')\n      const e = ent === true ? randomBytes(Fp.BYTES) : ent; // generate random bytes OR pass as-is\n      seedArgs.push(ensureBytes('extraEntropy', e)); // check for being bytes\n    }\n    const seed = ut.concatBytes(...seedArgs); // Step D of RFC6979 3.2\n    const m = h1int; // NOTE: no need to call bits2int second time here, it is inside truncateHash!\n    // Converts signature params into point w r/s, checks result for validity.\n    function k2sig(kBytes: Uint8Array): RecoveredSignature | undefined {\n      // RFC 6979 Section 3.2, step 3: k = bits2int(T)\n      const k = bits2int(kBytes); // Cannot use fields methods, since it is group element\n      if (!isWithinCurveOrder(k)) return; // Important: all mod() calls here must be done over N\n      const ik = invN(k); // k^-1 mod n\n      const q = Point.BASE.multiply(k).toAffine(); // q = Gk\n      const r = modN(q.x); // r = q.x mod n\n      if (r === _0n) return;\n      // Can use scalar blinding b^-1(bm + bdr) where b \u2208 [1,q\u22121] according to\n      // https://tches.iacr.org/index.php/TCHES/article/view/7337/6509. We've decided against it:\n      // a) dependency on CSPRNG b) 15% slowdown c) doesn't really help since bigints are not CT\n      const s = modN(ik * modN(m + r * d)); // Not using blinding here\n      if (s === _0n) return;\n      let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n); // recovery bit (2 or 3, when q.x > n)\n      let normS = s;\n      if (lowS && isBiggerThanHalfOrder(s)) {\n        normS = normalizeS(s); // if lowS was passed, ensure s is always\n        recovery ^= 1; // // in the bottom half of N\n      }\n      return new Signature(r, normS, recovery) as RecoveredSignature; // use normS, not s\n    }\n    return { seed, k2sig };\n  }\n  const defaultSigOpts: SignOpts = { lowS: CURVE.lowS, prehash: false };\n  const defaultVerOpts: VerOpts = { lowS: CURVE.lowS, prehash: false };\n\n  /**\n   * Signs message hash with a private key.\n   * ```\n   * sign(m, d, k) where\n   *   (x, y) = G \u00D7 k\n   *   r = x mod n\n   *   s = (m + dr)/k mod n\n   * ```\n   * @param msgHash NOT message. msg needs to be hashed to `msgHash`, or use `prehash`.\n   * @param privKey private key\n   * @param opts lowS for non-malleable sigs. extraEntropy for mixing randomness into k. prehash will hash first arg.\n   * @returns signature with recovery param\n   */\n  function sign(msgHash: Hex, privKey: PrivKey, opts = defaultSigOpts): RecoveredSignature {\n    const { seed, k2sig } = prepSig(msgHash, privKey, opts); // Steps A, D of RFC6979 3.2.\n    const C = CURVE;\n    const drbg = ut.createHmacDrbg<RecoveredSignature>(C.hash.outputLen, C.nByteLength, C.hmac);\n    return drbg(seed, k2sig); // Steps B, C, D, E, F, G\n  }\n\n  // Enable precomputes. Slows down first publicKey computation by 20ms.\n  Point.BASE._setWindowSize(8);\n  // utils.precompute(8, ProjectivePoint.BASE)\n\n  /**\n   * Verifies a signature against message hash and public key.\n   * Rejects lowS signatures by default: to override,\n   * specify option `{lowS: false}`. Implements section 4.1.4 from https://www.secg.org/sec1-v2.pdf:\n   *\n   * ```\n   * verify(r, s, h, P) where\n   *   U1 = hs^-1 mod n\n   *   U2 = rs^-1 mod n\n   *   R = U1\u22C5G - U2\u22C5P\n   *   mod(R.x, n) == r\n   * ```\n   */\n  function verify(\n    signature: Hex | SignatureLike,\n    msgHash: Hex,\n    publicKey: Hex,\n    opts = defaultVerOpts\n  ): boolean {\n    const sg = signature;\n    msgHash = ensureBytes('msgHash', msgHash);\n    publicKey = ensureBytes('publicKey', publicKey);\n    if ('strict' in opts) throw new Error('options.strict was renamed to lowS');\n    validateSigVerOpts(opts);\n    const { lowS, prehash } = opts;\n\n    let _sig: Signature | undefined = undefined;\n    let P: ProjPointType<bigint>;\n    try {\n      if (typeof sg === 'string' || ut.isBytes(sg)) {\n        // Signature can be represented in 2 ways: compact (2*nByteLength) & DER (variable-length).\n        // Since DER can also be 2*nByteLength bytes, we check for it first.\n        try {\n          _sig = Signature.fromDER(sg);\n        } catch (derError) {\n          if (!(derError instanceof DER.Err)) throw derError;\n          _sig = Signature.fromCompact(sg);\n        }\n      } else if (typeof sg === 'object' && typeof sg.r === 'bigint' && typeof sg.s === 'bigint') {\n        const { r, s } = sg;\n        _sig = new Signature(r, s);\n      } else {\n        throw new Error('PARSE');\n      }\n      P = Point.fromHex(publicKey);\n    } catch (error) {\n      if ((error as Error).message === 'PARSE')\n        throw new Error(`signature must be Signature instance, Uint8Array or hex string`);\n      return false;\n    }\n    if (lowS && _sig.hasHighS()) return false;\n    if (prehash) msgHash = CURVE.hash(msgHash);\n    const { r, s } = _sig;\n    const h = bits2int_modN(msgHash); // Cannot use fields methods, since it is group element\n    const is = invN(s); // s^-1\n    const u1 = modN(h * is); // u1 = hs^-1 mod n\n    const u2 = modN(r * is); // u2 = rs^-1 mod n\n    const R = Point.BASE.multiplyAndAddUnsafe(P, u1, u2)?.toAffine(); // R = u1\u22C5G + u2\u22C5P\n    if (!R) return false;\n    const v = modN(R.x);\n    return v === r;\n  }\n  return {\n    CURVE,\n    getPublicKey,\n    getSharedSecret,\n    sign,\n    verify,\n    ProjectivePoint: Point,\n    Signature,\n    utils,\n  };\n}\n\n/**\n * Implementation of the Shallue and van de Woestijne method for any weierstrass curve.\n * TODO: check if there is a way to merge this with uvRatio in Edwards; move to modular.\n * b = True and y = sqrt(u / v) if (u / v) is square in F, and\n * b = False and y = sqrt(Z * (u / v)) otherwise.\n * @param Fp\n * @param Z\n * @returns\n */\nexport function SWUFpSqrtRatio<T>(Fp: mod.IField<T>, Z: T) {\n  // Generic implementation\n  const q = Fp.ORDER;\n  let l = _0n;\n  for (let o = q - _1n; o % _2n === _0n; o /= _2n) l += _1n;\n  const c1 = l; // 1. c1, the largest integer such that 2^c1 divides q - 1.\n  // We need 2n ** c1 and 2n ** (c1-1). We can't use **; but we can use <<.\n  // 2n ** c1 == 2n << (c1-1)\n  const _2n_pow_c1_1 = _2n << (c1 - _1n - _1n);\n  const _2n_pow_c1 = _2n_pow_c1_1 * _2n;\n  const c2 = (q - _1n) / _2n_pow_c1; // 2. c2 = (q - 1) / (2^c1)  # Integer arithmetic\n  const c3 = (c2 - _1n) / _2n; // 3. c3 = (c2 - 1) / 2            # Integer arithmetic\n  const c4 = _2n_pow_c1 - _1n; // 4. c4 = 2^c1 - 1                # Integer arithmetic\n  const c5 = _2n_pow_c1_1; // 5. c5 = 2^(c1 - 1)                  # Integer arithmetic\n  const c6 = Fp.pow(Z, c2); // 6. c6 = Z^c2\n  const c7 = Fp.pow(Z, (c2 + _1n) / _2n); // 7. c7 = Z^((c2 + 1) / 2)\n  let sqrtRatio = (u: T, v: T): { isValid: boolean; value: T } => {\n    let tv1 = c6; // 1. tv1 = c6\n    let tv2 = Fp.pow(v, c4); // 2. tv2 = v^c4\n    let tv3 = Fp.sqr(tv2); // 3. tv3 = tv2^2\n    tv3 = Fp.mul(tv3, v); // 4. tv3 = tv3 * v\n    let tv5 = Fp.mul(u, tv3); // 5. tv5 = u * tv3\n    tv5 = Fp.pow(tv5, c3); // 6. tv5 = tv5^c3\n    tv5 = Fp.mul(tv5, tv2); // 7. tv5 = tv5 * tv2\n    tv2 = Fp.mul(tv5, v); // 8. tv2 = tv5 * v\n    tv3 = Fp.mul(tv5, u); // 9. tv3 = tv5 * u\n    let tv4 = Fp.mul(tv3, tv2); // 10. tv4 = tv3 * tv2\n    tv5 = Fp.pow(tv4, c5); // 11. tv5 = tv4^c5\n    let isQR = Fp.eql(tv5, Fp.ONE); // 12. isQR = tv5 == 1\n    tv2 = Fp.mul(tv3, c7); // 13. tv2 = tv3 * c7\n    tv5 = Fp.mul(tv4, tv1); // 14. tv5 = tv4 * tv1\n    tv3 = Fp.cmov(tv2, tv3, isQR); // 15. tv3 = CMOV(tv2, tv3, isQR)\n    tv4 = Fp.cmov(tv5, tv4, isQR); // 16. tv4 = CMOV(tv5, tv4, isQR)\n    // 17. for i in (c1, c1 - 1, ..., 2):\n    for (let i = c1; i > _1n; i--) {\n      let tv5 = i - _2n; // 18.    tv5 = i - 2\n      tv5 = _2n << (tv5 - _1n); // 19.    tv5 = 2^tv5\n      let tvv5 = Fp.pow(tv4, tv5); // 20.    tv5 = tv4^tv5\n      const e1 = Fp.eql(tvv5, Fp.ONE); // 21.    e1 = tv5 == 1\n      tv2 = Fp.mul(tv3, tv1); // 22.    tv2 = tv3 * tv1\n      tv1 = Fp.mul(tv1, tv1); // 23.    tv1 = tv1 * tv1\n      tvv5 = Fp.mul(tv4, tv1); // 24.    tv5 = tv4 * tv1\n      tv3 = Fp.cmov(tv2, tv3, e1); // 25.    tv3 = CMOV(tv2, tv3, e1)\n      tv4 = Fp.cmov(tvv5, tv4, e1); // 26.    tv4 = CMOV(tv5, tv4, e1)\n    }\n    return { isValid: isQR, value: tv3 };\n  };\n  if (Fp.ORDER % _4n === _3n) {\n    // sqrt_ratio_3mod4(u, v)\n    const c1 = (Fp.ORDER - _3n) / _4n; // 1. c1 = (q - 3) / 4     # Integer arithmetic\n    const c2 = Fp.sqrt(Fp.neg(Z)); // 2. c2 = sqrt(-Z)\n    sqrtRatio = (u: T, v: T) => {\n      let tv1 = Fp.sqr(v); // 1. tv1 = v^2\n      const tv2 = Fp.mul(u, v); // 2. tv2 = u * v\n      tv1 = Fp.mul(tv1, tv2); // 3. tv1 = tv1 * tv2\n      let y1 = Fp.pow(tv1, c1); // 4. y1 = tv1^c1\n      y1 = Fp.mul(y1, tv2); // 5. y1 = y1 * tv2\n      const y2 = Fp.mul(y1, c2); // 6. y2 = y1 * c2\n      const tv3 = Fp.mul(Fp.sqr(y1), v); // 7. tv3 = y1^2; 8. tv3 = tv3 * v\n      const isQR = Fp.eql(tv3, u); // 9. isQR = tv3 == u\n      let y = Fp.cmov(y2, y1, isQR); // 10. y = CMOV(y2, y1, isQR)\n      return { isValid: isQR, value: y }; // 11. return (isQR, y) isQR ? y : y*c2\n    };\n  }\n  // No curves uses that\n  // if (Fp.ORDER % _8n === _5n) // sqrt_ratio_5mod8\n  return sqrtRatio;\n}\n/**\n * Simplified Shallue-van de Woestijne-Ulas Method\n * https://www.rfc-editor.org/rfc/rfc9380#section-6.6.2\n */\nexport function mapToCurveSimpleSWU<T>(\n  Fp: mod.IField<T>,\n  opts: {\n    A: T;\n    B: T;\n    Z: T;\n  }\n) {\n  mod.validateField(Fp);\n  if (!Fp.isValid(opts.A) || !Fp.isValid(opts.B) || !Fp.isValid(opts.Z))\n    throw new Error('mapToCurveSimpleSWU: invalid opts');\n  const sqrtRatio = SWUFpSqrtRatio(Fp, opts.Z);\n  if (!Fp.isOdd) throw new Error('Fp.isOdd is not implemented!');\n  // Input: u, an element of F.\n  // Output: (x, y), a point on E.\n  return (u: T): { x: T; y: T } => {\n    // prettier-ignore\n    let tv1, tv2, tv3, tv4, tv5, tv6, x, y;\n    tv1 = Fp.sqr(u); // 1.  tv1 = u^2\n    tv1 = Fp.mul(tv1, opts.Z); // 2.  tv1 = Z * tv1\n    tv2 = Fp.sqr(tv1); // 3.  tv2 = tv1^2\n    tv2 = Fp.add(tv2, tv1); // 4.  tv2 = tv2 + tv1\n    tv3 = Fp.add(tv2, Fp.ONE); // 5.  tv3 = tv2 + 1\n    tv3 = Fp.mul(tv3, opts.B); // 6.  tv3 = B * tv3\n    tv4 = Fp.cmov(opts.Z, Fp.neg(tv2), !Fp.eql(tv2, Fp.ZERO)); // 7.  tv4 = CMOV(Z, -tv2, tv2 != 0)\n    tv4 = Fp.mul(tv4, opts.A); // 8.  tv4 = A * tv4\n    tv2 = Fp.sqr(tv3); // 9.  tv2 = tv3^2\n    tv6 = Fp.sqr(tv4); // 10. tv6 = tv4^2\n    tv5 = Fp.mul(tv6, opts.A); // 11. tv5 = A * tv6\n    tv2 = Fp.add(tv2, tv5); // 12. tv2 = tv2 + tv5\n    tv2 = Fp.mul(tv2, tv3); // 13. tv2 = tv2 * tv3\n    tv6 = Fp.mul(tv6, tv4); // 14. tv6 = tv6 * tv4\n    tv5 = Fp.mul(tv6, opts.B); // 15. tv5 = B * tv6\n    tv2 = Fp.add(tv2, tv5); // 16. tv2 = tv2 + tv5\n    x = Fp.mul(tv1, tv3); // 17.   x = tv1 * tv3\n    const { isValid, value } = sqrtRatio(tv2, tv6); // 18. (is_gx1_square, y1) = sqrt_ratio(tv2, tv6)\n    y = Fp.mul(tv1, u); // 19.   y = tv1 * u  -> Z * u^3 * y1\n    y = Fp.mul(y, value); // 20.   y = y * y1\n    x = Fp.cmov(x, tv3, isValid); // 21.   x = CMOV(x, tv3, is_gx1_square)\n    y = Fp.cmov(y, value, isValid); // 22.   y = CMOV(y, y1, is_gx1_square)\n    const e1 = Fp.isOdd!(u) === Fp.isOdd!(y); // 23.  e1 = sgn0(u) == sgn0(y)\n    y = Fp.cmov(Fp.neg(y), y, e1); // 24.   y = CMOV(-y, y, e1)\n    x = Fp.div(x, tv4); // 25.   x = x / tv4\n    return { x, y };\n  };\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// BLS (Barreto-Lynn-Scott) family of pairing-friendly curves.\n// TODO: import { AffinePoint } from './curve.js';\nimport { IField, getMinHashLength, mapHashToField } from './modular.js';\nimport { Hex, PrivKey, CHash, ensureBytes, memoized } from './utils.js';\n// prettier-ignore\nimport {\n  MapToCurve, Opts as HTFOpts, H2CPointConstructor, htfBasicOpts,\n  createHasher\n} from './hash-to-curve.js';\nimport {\n  CurvePointsType,\n  ProjPointType as ProjPointType,\n  CurvePointsRes,\n  weierstrassPoints,\n} from './weierstrass.js';\nimport type { Fp2, Fp6, Fp12, Fp2Bls, Fp12Bls } from './tower.js';\n\n/**\n * BLS != BLS.\n * The file implements BLS (Boneh-Lynn-Shacham) signatures.\n * Used in both BLS (Barreto-Lynn-Scott) and BN (Barreto-Naehrig)\n * families of pairing-friendly curves.\n * Consists of two curves: G1 and G2:\n * - G1 is a subgroup of (x, y) E(Fq) over y\u00B2 = x\u00B3 + 4.\n * - G2 is a subgroup of ((x\u2081, x\u2082+i), (y\u2081, y\u2082+i)) E(Fq\u00B2) over y\u00B2 = x\u00B3 + 4(1 + i) where i is \u221A-1\n * - Gt, created by bilinear (ate) pairing e(G1, G2), consists of p-th roots of unity in\n *   Fq^k where k is embedding degree. Only degree 12 is currently supported, 24 is not.\n * Pairing is used to aggregate and verify signatures.\n * There are two main ways to use it:\n * 1. Fp for short private keys, Fp\u2082 for signatures\n * 2. Fp for short signatures, Fp\u2082 for private keys\n **/\n\ntype Fp = bigint; // Can be different field?\n\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);\n\nexport type TwistType = 'multiplicative' | 'divisive';\n\nexport type ShortSignatureCoder<Fp> = {\n  fromHex(hex: Hex): ProjPointType<Fp>;\n  toRawBytes(point: ProjPointType<Fp>): Uint8Array;\n  toHex(point: ProjPointType<Fp>): string;\n};\n\nexport type SignatureCoder<Fp> = {\n  fromHex(hex: Hex): ProjPointType<Fp>;\n  toRawBytes(point: ProjPointType<Fp>): Uint8Array;\n  toHex(point: ProjPointType<Fp>): string;\n};\n\nexport type CurveType = {\n  G1: Omit<CurvePointsType<Fp>, 'n'> & {\n    ShortSignature: SignatureCoder<Fp>;\n    mapToCurve: MapToCurve<Fp>;\n    htfDefaults: HTFOpts;\n  };\n  G2: Omit<CurvePointsType<Fp2>, 'n'> & {\n    Signature: SignatureCoder<Fp2>;\n    mapToCurve: MapToCurve<Fp2>;\n    htfDefaults: HTFOpts;\n  };\n  fields: {\n    Fp: IField<Fp>;\n    Fr: IField<bigint>;\n    Fp2: Fp2Bls;\n    Fp6: IField<Fp6>;\n    Fp12: Fp12Bls;\n  };\n  params: {\n    // NOTE: MSB is always ignored and used as marker for length,\n    // otherwise leading zeros will be lost.\n    // Can be different from 'X' (seed) param!\n    ateLoopSize: bigint;\n    xNegative: boolean;\n    r: bigint;\n    twistType: TwistType; // BLS12-381: Multiplicative, BN254: Divisive\n  };\n  htfDefaults: HTFOpts;\n  hash: CHash; // Because we need outputLen for DRBG\n  randomBytes: (bytesLength?: number) => Uint8Array;\n  // This is super ugly hack for untwist point in BN254 after miller loop\n  postPrecompute?: (\n    Rx: Fp2,\n    Ry: Fp2,\n    Rz: Fp2,\n    Qx: Fp2,\n    Qy: Fp2,\n    pointAdd: (Rx: Fp2, Ry: Fp2, Rz: Fp2, Qx: Fp2, Qy: Fp2) => { Rx: Fp2; Ry: Fp2; Rz: Fp2 }\n  ) => void;\n};\n\ntype PrecomputeSingle = [Fp2, Fp2, Fp2][];\ntype Precompute = PrecomputeSingle[];\n\nexport type CurveFn = {\n  getPublicKey: (privateKey: PrivKey) => Uint8Array;\n  getPublicKeyForShortSignatures: (privateKey: PrivKey) => Uint8Array;\n  sign: {\n    (message: Hex, privateKey: PrivKey, htfOpts?: htfBasicOpts): Uint8Array;\n    (message: ProjPointType<Fp2>, privateKey: PrivKey, htfOpts?: htfBasicOpts): ProjPointType<Fp2>;\n  };\n  signShortSignature: {\n    (message: Hex, privateKey: PrivKey, htfOpts?: htfBasicOpts): Uint8Array;\n    (message: ProjPointType<Fp>, privateKey: PrivKey, htfOpts?: htfBasicOpts): ProjPointType<Fp>;\n  };\n  verify: (\n    signature: Hex | ProjPointType<Fp2>,\n    message: Hex | ProjPointType<Fp2>,\n    publicKey: Hex | ProjPointType<Fp>,\n    htfOpts?: htfBasicOpts\n  ) => boolean;\n  verifyShortSignature: (\n    signature: Hex | ProjPointType<Fp>,\n    message: Hex | ProjPointType<Fp>,\n    publicKey: Hex | ProjPointType<Fp2>,\n    htfOpts?: htfBasicOpts\n  ) => boolean;\n  verifyBatch: (\n    signature: Hex | ProjPointType<Fp2>,\n    messages: (Hex | ProjPointType<Fp2>)[],\n    publicKeys: (Hex | ProjPointType<Fp>)[],\n    htfOpts?: htfBasicOpts\n  ) => boolean;\n  aggregatePublicKeys: {\n    (publicKeys: Hex[]): Uint8Array;\n    (publicKeys: ProjPointType<Fp>[]): ProjPointType<Fp>;\n  };\n  aggregateSignatures: {\n    (signatures: Hex[]): Uint8Array;\n    (signatures: ProjPointType<Fp2>[]): ProjPointType<Fp2>;\n  };\n  aggregateShortSignatures: {\n    (signatures: Hex[]): Uint8Array;\n    (signatures: ProjPointType<Fp>[]): ProjPointType<Fp>;\n  };\n  millerLoopBatch: (pairs: [Precompute, Fp, Fp][]) => Fp12;\n  pairing: (P: ProjPointType<Fp>, Q: ProjPointType<Fp2>, withFinalExponent?: boolean) => Fp12;\n  pairingBatch: (\n    pairs: { g1: ProjPointType<Fp>; g2: ProjPointType<Fp2> }[],\n    withFinalExponent?: boolean\n  ) => Fp12;\n  G1: CurvePointsRes<Fp> & ReturnType<typeof createHasher<Fp>>;\n  G2: CurvePointsRes<Fp2> & ReturnType<typeof createHasher<Fp2>>;\n  Signature: SignatureCoder<Fp2>;\n  ShortSignature: ShortSignatureCoder<Fp>;\n  params: {\n    ateLoopSize: bigint;\n    r: bigint;\n    G1b: bigint;\n    G2b: Fp2;\n  };\n  fields: {\n    Fp: IField<Fp>;\n    Fp2: Fp2Bls;\n    Fp6: IField<Fp6>;\n    Fp12: Fp12Bls;\n    Fr: IField<bigint>;\n  };\n  utils: {\n    randomPrivateKey: () => Uint8Array;\n    calcPairingPrecomputes: (p: ProjPointType<Fp2>) => Precompute;\n  };\n};\n\n// Not used with BLS12-381 (no sequential `11` in X). Useful for other curves.\nfunction NAfDecomposition(a: bigint) {\n  const res = [];\n  // a>1 because of marker bit\n  for (; a > _1n; a >>= _1n) {\n    if ((a & _1n) === _0n) res.unshift(0);\n    else if ((a & _3n) === _3n) {\n      res.unshift(-1);\n      a += _1n;\n    } else res.unshift(1);\n  }\n  return res;\n}\n\nexport function bls(CURVE: CurveType): CurveFn {\n  // Fields are specific for curve, so for now we'll need to pass them with opts\n  const { Fp, Fr, Fp2, Fp6, Fp12 } = CURVE.fields;\n  const BLS_X_IS_NEGATIVE = CURVE.params.xNegative;\n  const TWIST: TwistType = CURVE.params.twistType;\n  // Point on G1 curve: (x, y)\n  const G1_ = weierstrassPoints({ n: Fr.ORDER, ...CURVE.G1 });\n  const G1 = Object.assign(\n    G1_,\n    createHasher(G1_.ProjectivePoint, CURVE.G1.mapToCurve, {\n      ...CURVE.htfDefaults,\n      ...CURVE.G1.htfDefaults,\n    })\n  );\n  // Point on G2 curve (complex numbers): (x\u2081, x\u2082+i), (y\u2081, y\u2082+i)\n  const G2_ = weierstrassPoints({ n: Fr.ORDER, ...CURVE.G2 });\n  const G2 = Object.assign(\n    G2_,\n    createHasher(G2_.ProjectivePoint as H2CPointConstructor<Fp2>, CURVE.G2.mapToCurve, {\n      ...CURVE.htfDefaults,\n      ...CURVE.G2.htfDefaults,\n    })\n  );\n  type G1 = typeof G1.ProjectivePoint.BASE;\n  type G2 = typeof G2.ProjectivePoint.BASE;\n\n  // Applies sparse multiplication as line function\n  let lineFunction: (c0: Fp2, c1: Fp2, c2: Fp2, f: Fp12, Px: Fp, Py: Fp) => Fp12;\n  if (TWIST === 'multiplicative') {\n    lineFunction = (c0: Fp2, c1: Fp2, c2: Fp2, f: Fp12, Px: Fp, Py: Fp) =>\n      Fp12.mul014(f, c0, Fp2.mul(c1, Px), Fp2.mul(c2, Py));\n  } else if (TWIST === 'divisive') {\n    // NOTE: it should be [c0, c1, c2], but we use different order here to reduce complexity of\n    // precompute calculations.\n    lineFunction = (c0: Fp2, c1: Fp2, c2: Fp2, f: Fp12, Px: Fp, Py: Fp) =>\n      Fp12.mul034(f, Fp2.mul(c2, Py), Fp2.mul(c1, Px), c0);\n  } else throw new Error('bls: unknown twist type');\n\n  const Fp2div2 = Fp2.div(Fp2.ONE, Fp2.mul(Fp2.ONE, _2n));\n  function pointDouble(ell: PrecomputeSingle, Rx: Fp2, Ry: Fp2, Rz: Fp2) {\n    const t0 = Fp2.sqr(Ry); // Ry\u00B2\n    const t1 = Fp2.sqr(Rz); // Rz\u00B2\n    const t2 = Fp2.mulByB(Fp2.mul(t1, _3n)); // 3 * T1 * B\n    const t3 = Fp2.mul(t2, _3n); // 3 * T2\n    const t4 = Fp2.sub(Fp2.sub(Fp2.sqr(Fp2.add(Ry, Rz)), t1), t0); // (Ry + Rz)\u00B2 - T1 - T0\n    const c0 = Fp2.sub(t2, t0); // T2 - T0 (i)\n    const c1 = Fp2.mul(Fp2.sqr(Rx), _3n); // 3 * Rx\u00B2\n    const c2 = Fp2.neg(t4); // -T4 (-h)\n\n    ell.push([c0, c1, c2]);\n\n    Rx = Fp2.mul(Fp2.mul(Fp2.mul(Fp2.sub(t0, t3), Rx), Ry), Fp2div2); // ((T0 - T3) * Rx * Ry) / 2\n    Ry = Fp2.sub(Fp2.sqr(Fp2.mul(Fp2.add(t0, t3), Fp2div2)), Fp2.mul(Fp2.sqr(t2), _3n)); // ((T0 + T3) / 2)\u00B2 - 3 * T2\u00B2\n    Rz = Fp2.mul(t0, t4); // T0 * T4\n    return { Rx, Ry, Rz };\n  }\n  function pointAdd(ell: PrecomputeSingle, Rx: Fp2, Ry: Fp2, Rz: Fp2, Qx: Fp2, Qy: Fp2) {\n    // Addition\n    const t0 = Fp2.sub(Ry, Fp2.mul(Qy, Rz)); // Ry - Qy * Rz\n    const t1 = Fp2.sub(Rx, Fp2.mul(Qx, Rz)); // Rx - Qx * Rz\n    const c0 = Fp2.sub(Fp2.mul(t0, Qx), Fp2.mul(t1, Qy)); // T0 * Qx - T1 * Qy == Ry * Qx  - Rx * Qy\n    const c1 = Fp2.neg(t0); // -T0 == Qy * Rz - Ry\n    const c2 = t1; // == Rx - Qx * Rz\n\n    ell.push([c0, c1, c2]);\n\n    const t2 = Fp2.sqr(t1); // T1\u00B2\n    const t3 = Fp2.mul(t2, t1); // T2 * T1\n    const t4 = Fp2.mul(t2, Rx); // T2 * Rx\n    const t5 = Fp2.add(Fp2.sub(t3, Fp2.mul(t4, _2n)), Fp2.mul(Fp2.sqr(t0), Rz)); // T3 - 2 * T4 + T0\u00B2 * Rz\n    Rx = Fp2.mul(t1, t5); // T1 * T5\n    Ry = Fp2.sub(Fp2.mul(Fp2.sub(t4, t5), t0), Fp2.mul(t3, Ry)); // (T4 - T5) * T0 - T3 * Ry\n    Rz = Fp2.mul(Rz, t3); // Rz * T3\n    return { Rx, Ry, Rz };\n  }\n\n  // Pre-compute coefficients for sparse multiplication\n  // Point addition and point double calculations is reused for coefficients\n  // pointAdd happens only if bit set, so wNAF is reasonable. Unfortunately we cannot combine\n  // add + double in windowed precomputes here, otherwise it would be single op (since X is static)\n  const ATE_NAF = NAfDecomposition(CURVE.params.ateLoopSize);\n\n  const calcPairingPrecomputes = memoized((point: G2) => {\n    const p = point;\n    const { x, y } = p.toAffine();\n    // prettier-ignore\n    const Qx = x, Qy = y, negQy = Fp2.neg(y);\n    // prettier-ignore\n    let Rx = Qx, Ry = Qy, Rz = Fp2.ONE;\n    const ell: Precompute = [];\n    for (const bit of ATE_NAF) {\n      const cur: PrecomputeSingle = [];\n      ({ Rx, Ry, Rz } = pointDouble(cur, Rx, Ry, Rz));\n      if (bit) ({ Rx, Ry, Rz } = pointAdd(cur, Rx, Ry, Rz, Qx, bit === -1 ? negQy : Qy));\n      ell.push(cur);\n    }\n    if (CURVE.postPrecompute) {\n      const last = ell[ell.length - 1];\n      CURVE.postPrecompute(Rx, Ry, Rz, Qx, Qy, pointAdd.bind(null, last));\n    }\n    return ell;\n  });\n\n  // Main pairing logic is here. Computes product of miller loops + final exponentiate\n  // Applies calculated precomputes\n  type MillerInput = [Precompute, Fp, Fp][];\n  function millerLoopBatch(pairs: MillerInput, withFinalExponent: boolean = false) {\n    let f12 = Fp12.ONE;\n    if (pairs.length) {\n      const ellLen = pairs[0][0].length;\n      for (let i = 0; i < ellLen; i++) {\n        f12 = Fp12.sqr(f12); // This allows us to do sqr only one time for all pairings\n        // NOTE: we apply multiple pairings in parallel here\n        for (const [ell, Px, Py] of pairs) {\n          for (const [c0, c1, c2] of ell[i]) f12 = lineFunction(c0, c1, c2, f12, Px, Py);\n        }\n      }\n    }\n    if (BLS_X_IS_NEGATIVE) f12 = Fp12.conjugate(f12);\n    return withFinalExponent ? Fp12.finalExponentiate(f12) : f12;\n  }\n  type PairingInput = { g1: G1; g2: G2 };\n  // Calculates product of multiple pairings\n  // This up to x2 faster than just `map(({g1, g2})=>pairing({g1,g2}))`\n  function pairingBatch(pairs: PairingInput[], withFinalExponent: boolean = true) {\n    const res: MillerInput = [];\n    // This cache precomputed toAffine for all points\n    G1.ProjectivePoint.normalizeZ(pairs.map(({ g1 }) => g1));\n    G2.ProjectivePoint.normalizeZ(pairs.map(({ g2 }) => g2));\n    for (const { g1, g2 } of pairs) {\n      if (g1.equals(G1.ProjectivePoint.ZERO) || g2.equals(G2.ProjectivePoint.ZERO))\n        throw new Error('pairing is not available for ZERO point');\n      // This uses toAffine inside\n      g1.assertValidity();\n      g2.assertValidity();\n      const Qa = g1.toAffine();\n      res.push([calcPairingPrecomputes(g2), Qa.x, Qa.y]);\n    }\n    return millerLoopBatch(res, withFinalExponent);\n  }\n  // Calculates bilinear pairing\n  function pairing(Q: G1, P: G2, withFinalExponent: boolean = true): Fp12 {\n    return pairingBatch([{ g1: Q, g2: P }], withFinalExponent);\n  }\n\n  const utils = {\n    randomPrivateKey: (): Uint8Array => {\n      const length = getMinHashLength(Fr.ORDER);\n      return mapHashToField(CURVE.randomBytes(length), Fr.ORDER);\n    },\n    calcPairingPrecomputes,\n  };\n\n  const { ShortSignature } = CURVE.G1;\n  const { Signature } = CURVE.G2;\n\n  type G1Hex = Hex | G1;\n  type G2Hex = Hex | G2;\n  function normP1(point: G1Hex): G1 {\n    return point instanceof G1.ProjectivePoint ? (point as G1) : G1.ProjectivePoint.fromHex(point);\n  }\n  function normP1Hash(point: G1Hex, htfOpts?: htfBasicOpts): G1 {\n    return point instanceof G1.ProjectivePoint\n      ? point\n      : (G1.hashToCurve(ensureBytes('point', point), htfOpts) as G1);\n  }\n  function normP2(point: G2Hex): G2 {\n    return point instanceof G2.ProjectivePoint ? point : Signature.fromHex(point);\n  }\n  function normP2Hash(point: G2Hex, htfOpts?: htfBasicOpts): G2 {\n    return point instanceof G2.ProjectivePoint\n      ? point\n      : (G2.hashToCurve(ensureBytes('point', point), htfOpts) as G2);\n  }\n\n  // Multiplies generator (G1) by private key.\n  // P = pk x G\n  function getPublicKey(privateKey: PrivKey): Uint8Array {\n    return G1.ProjectivePoint.fromPrivateKey(privateKey).toRawBytes(true);\n  }\n\n  // Multiplies generator (G2) by private key.\n  // P = pk x G\n  function getPublicKeyForShortSignatures(privateKey: PrivKey): Uint8Array {\n    return G2.ProjectivePoint.fromPrivateKey(privateKey).toRawBytes(true);\n  }\n\n  // Executes `hashToCurve` on the message and then multiplies the result by private key.\n  // S = pk x H(m)\n  function sign(message: Hex, privateKey: PrivKey, htfOpts?: htfBasicOpts): Uint8Array;\n  function sign(message: G2, privateKey: PrivKey, htfOpts?: htfBasicOpts): G2;\n  function sign(message: G2Hex, privateKey: PrivKey, htfOpts?: htfBasicOpts): Uint8Array | G2 {\n    const msgPoint = normP2Hash(message, htfOpts);\n    msgPoint.assertValidity();\n    const sigPoint = msgPoint.multiply(G1.normPrivateKeyToScalar(privateKey));\n    if (message instanceof G2.ProjectivePoint) return sigPoint;\n    return Signature.toRawBytes(sigPoint);\n  }\n\n  function signShortSignature(\n    message: Hex,\n    privateKey: PrivKey,\n    htfOpts?: htfBasicOpts\n  ): Uint8Array;\n  function signShortSignature(message: G1, privateKey: PrivKey, htfOpts?: htfBasicOpts): G1;\n  function signShortSignature(\n    message: G1Hex,\n    privateKey: PrivKey,\n    htfOpts?: htfBasicOpts\n  ): Uint8Array | G1 {\n    const msgPoint = normP1Hash(message, htfOpts);\n    msgPoint.assertValidity();\n    const sigPoint = msgPoint.multiply(G1.normPrivateKeyToScalar(privateKey));\n    if (message instanceof G1.ProjectivePoint) return sigPoint;\n    return ShortSignature.toRawBytes(sigPoint);\n  }\n\n  // Checks if pairing of public key & hash is equal to pairing of generator & signature.\n  // e(P, H(m)) == e(G, S)\n  function verify(\n    signature: G2Hex,\n    message: G2Hex,\n    publicKey: G1Hex,\n    htfOpts?: htfBasicOpts\n  ): boolean {\n    const P = normP1(publicKey);\n    const Hm = normP2Hash(message, htfOpts);\n    const G = G1.ProjectivePoint.BASE;\n    const S = normP2(signature);\n    const exp = pairingBatch([\n      { g1: P.negate(), g2: Hm }, // ePHM = pairing(P.negate(), Hm, false);\n      { g1: G, g2: S }, // eGS = pairing(G, S, false);\n    ]);\n    return Fp12.eql(exp, Fp12.ONE);\n  }\n\n  // Checks if pairing of public key & hash is equal to pairing of generator & signature.\n  // e(S, G) == e(H(m), P)\n  function verifyShortSignature(\n    signature: G1Hex,\n    message: G1Hex,\n    publicKey: G2Hex,\n    htfOpts?: htfBasicOpts\n  ): boolean {\n    const P = normP2(publicKey);\n    const Hm = normP1Hash(message, htfOpts);\n    const G = G2.ProjectivePoint.BASE;\n    const S = normP1(signature);\n    const exp = pairingBatch([\n      { g1: Hm, g2: P }, // eHmP = pairing(Hm, P, false);\n      { g1: S, g2: G.negate() }, // eSG = pairing(S, G.negate(), false);\n    ]);\n    return Fp12.eql(exp, Fp12.ONE);\n  }\n\n  // Adds a bunch of public key points together.\n  // pk1 + pk2 + pk3 = pkA\n  function aggregatePublicKeys(publicKeys: Hex[]): Uint8Array;\n  function aggregatePublicKeys(publicKeys: G1[]): G1;\n  function aggregatePublicKeys(publicKeys: G1Hex[]): Uint8Array | G1 {\n    if (!publicKeys.length) throw new Error('Expected non-empty array');\n    const agg = publicKeys.map(normP1).reduce((sum, p) => sum.add(p), G1.ProjectivePoint.ZERO);\n    const aggAffine = agg; //.toAffine();\n    if (publicKeys[0] instanceof G1.ProjectivePoint) {\n      aggAffine.assertValidity();\n      return aggAffine;\n    }\n    // toRawBytes ensures point validity\n    return aggAffine.toRawBytes(true);\n  }\n\n  // Adds a bunch of signature points together.\n  function aggregateSignatures(signatures: Hex[]): Uint8Array;\n  function aggregateSignatures(signatures: G2[]): G2;\n  function aggregateSignatures(signatures: G2Hex[]): Uint8Array | G2 {\n    if (!signatures.length) throw new Error('Expected non-empty array');\n    const agg = signatures.map(normP2).reduce((sum, s) => sum.add(s), G2.ProjectivePoint.ZERO);\n    const aggAffine = agg; //.toAffine();\n    if (signatures[0] instanceof G2.ProjectivePoint) {\n      aggAffine.assertValidity();\n      return aggAffine;\n    }\n    return Signature.toRawBytes(aggAffine);\n  }\n\n  // Adds a bunch of signature points together.\n  function aggregateShortSignatures(signatures: Hex[]): Uint8Array;\n  function aggregateShortSignatures(signatures: G1[]): G1;\n  function aggregateShortSignatures(signatures: G1Hex[]): Uint8Array | G1 {\n    if (!signatures.length) throw new Error('Expected non-empty array');\n    const agg = signatures.map(normP1).reduce((sum, s) => sum.add(s), G1.ProjectivePoint.ZERO);\n    const aggAffine = agg; //.toAffine();\n    if (signatures[0] instanceof G1.ProjectivePoint) {\n      aggAffine.assertValidity();\n      return aggAffine;\n    }\n    return ShortSignature.toRawBytes(aggAffine);\n  }\n\n  // https://ethresear.ch/t/fast-verification-of-multiple-bls-signatures/5407\n  // e(G, S) = e(G, SUM(n)(Si)) = MUL(n)(e(G, Si))\n  function verifyBatch(\n    signature: G2Hex,\n    // TODO: maybe `{message: G2Hex, publicKey: G1Hex}[]` instead?\n    messages: G2Hex[],\n    publicKeys: G1Hex[],\n    htfOpts?: htfBasicOpts\n  ): boolean {\n    if (!messages.length) throw new Error('Expected non-empty messages array');\n    if (publicKeys.length !== messages.length)\n      throw new Error('Pubkey count should equal msg count');\n    const sig = normP2(signature);\n    const nMessages = messages.map((i) => normP2Hash(i, htfOpts));\n    const nPublicKeys = publicKeys.map(normP1);\n    // NOTE: this works only for exact same object\n    const messagePubKeyMap = new Map<G2, G1[]>();\n    for (let i = 0; i < nPublicKeys.length; i++) {\n      const pub = nPublicKeys[i];\n      const msg = nMessages[i];\n      let keys = messagePubKeyMap.get(msg);\n      if (keys === undefined) {\n        keys = [];\n        messagePubKeyMap.set(msg, keys);\n      }\n      keys.push(pub);\n    }\n    const paired = [];\n    try {\n      for (const [msg, keys] of messagePubKeyMap) {\n        const groupPublicKey = keys.reduce((acc, msg) => acc.add(msg));\n        paired.push({ g1: groupPublicKey, g2: msg });\n      }\n      paired.push({ g1: G1.ProjectivePoint.BASE.negate(), g2: sig });\n      return Fp12.eql(pairingBatch(paired), Fp12.ONE);\n    } catch {\n      return false;\n    }\n  }\n\n  G1.ProjectivePoint.BASE._setWindowSize(4);\n\n  return {\n    getPublicKey,\n    getPublicKeyForShortSignatures,\n    sign,\n    signShortSignature,\n    verify,\n    verifyBatch,\n    verifyShortSignature,\n    aggregatePublicKeys,\n    aggregateSignatures,\n    aggregateShortSignatures,\n    millerLoopBatch,\n    pairing,\n    pairingBatch,\n    G1,\n    G2,\n    Signature,\n    ShortSignature,\n    fields: {\n      Fr,\n      Fp,\n      Fp2,\n      Fp6,\n      Fp12,\n    },\n    params: {\n      ateLoopSize: CURVE.params.ateLoopSize,\n      r: CURVE.params.r,\n      G1b: CURVE.G1.b,\n      G2b: CURVE.G2.b,\n    },\n    utils,\n  };\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport * as mod from './modular.js';\nimport { bitLen, bitMask, concatBytes, notImplemented } from './utils.js';\nimport type { ProjConstructor, ProjPointType } from './weierstrass.js';\n\n/*\nTowered extension fields\n\nRather than implementing a massive 12th-degree extension directly, it is more efficient\nto build it up from smaller extensions: a tower of extensions.\n\nFor BLS12-381, the Fp12 field is implemented as a quadratic (degree two) extension,\non top of a cubic (degree three) extension, on top of a quadratic extension of Fp.\n\nFor more info: \"Pairings for beginners\" by Costello, section 7.3.\n*/\n\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);\n\n// Fp\u2082 over complex plane\nexport type BigintTuple = [bigint, bigint];\nexport type Fp = bigint;\n// Finite extension field over irreducible polynominal.\n// Fp(u) / (u\u00B2 - \u03B2) where \u03B2 = -1\nexport type Fp2 = { c0: bigint; c1: bigint };\nexport type BigintSix = [bigint, bigint, bigint, bigint, bigint, bigint];\nexport type Fp6 = { c0: Fp2; c1: Fp2; c2: Fp2 };\nexport type Fp12 = { c0: Fp6; c1: Fp6 }; // Fp\u2081\u2082 = Fp\u2086\u00B2 => Fp\u2082\u00B3, Fp\u2086(w) / (w\u00B2 - \u03B3) where \u03B3 = v\n// prettier-ignore\nexport type BigintTwelve = [\n  bigint, bigint, bigint, bigint, bigint, bigint,\n  bigint, bigint, bigint, bigint, bigint, bigint\n];\n\nexport type Fp2Bls = mod.IField<Fp2> & {\n  reim: (num: Fp2) => { re: Fp; im: Fp };\n  mulByB: (num: Fp2) => Fp2;\n  frobeniusMap(num: Fp2, power: number): Fp2;\n  fromBigTuple(num: [bigint, bigint]): Fp2;\n};\n\nexport type Fp12Bls = mod.IField<Fp12> & {\n  frobeniusMap(num: Fp12, power: number): Fp12;\n  mul014(num: Fp12, o0: Fp2, o1: Fp2, o4: Fp2): Fp12;\n  mul034(num: Fp12, o0: Fp2, o3: Fp2, o4: Fp2): Fp12;\n  conjugate(num: Fp12): Fp12;\n  finalExponentiate(num: Fp12): Fp12;\n};\n\nfunction calcFrobeniusCoefficients<T>(\n  Fp: mod.IField<T>,\n  nonResidue: T,\n  modulus: bigint,\n  degree: number,\n  num: number = 1,\n  divisor?: number\n) {\n  const _divisor = BigInt(divisor === undefined ? degree : divisor);\n  const towerModulus: any = modulus ** BigInt(degree);\n  const res: T[][] = [];\n  for (let i = 0; i < num; i++) {\n    const a = BigInt(i + 1);\n    const powers: T[] = [];\n    for (let j = 0, qPower = _1n; j < degree; j++) {\n      const power = ((a * qPower - a) / _divisor) % towerModulus;\n      powers.push(Fp.pow(nonResidue, power));\n      qPower *= modulus;\n    }\n    res.push(powers);\n  }\n  return res;\n}\n\n// This works same at least for bls12-381, bn254 and bls12-377\nexport function psiFrobenius(Fp: mod.IField<Fp>, Fp2: Fp2Bls, base: Fp2) {\n  // \u03A8 endomorphism\n  const PSI_X = Fp2.pow(base, (Fp.ORDER - _1n) / _3n); // u^((p-1)/3)\n  const PSI_Y = Fp2.pow(base, (Fp.ORDER - _1n) / _2n); // u^((p-1)/2)\n  function psi(x: Fp2, y: Fp2): [Fp2, Fp2] {\n    // This x10 faster than previous version in bls12-381\n    const x2 = Fp2.mul(Fp2.frobeniusMap(x, 1), PSI_X);\n    const y2 = Fp2.mul(Fp2.frobeniusMap(y, 1), PSI_Y);\n    return [x2, y2];\n  }\n  // \u03A8\u00B2(P) endomorphism (psi2(x) = psi(psi(x)))\n  const PSI2_X = Fp2.pow(base, (Fp.ORDER ** _2n - _1n) / _3n); // u^((p^2 - 1)/3)\n  // This equals -1, which causes y to be Fp2.neg(y).\n  // But not sure if there are case when this is not true?\n  const PSI2_Y = Fp2.pow(base, (Fp.ORDER ** _2n - _1n) / _2n); // u^((p^2 - 1)/3)\n  if (!Fp2.eql(PSI2_Y, Fp2.neg(Fp2.ONE))) throw new Error('psiFrobenius: PSI2_Y!==-1');\n  function psi2(x: Fp2, y: Fp2): [Fp2, Fp2] {\n    return [Fp2.mul(x, PSI2_X), Fp2.neg(y)];\n  }\n  // Map points\n  const mapAffine =\n    <T>(fn: (x: T, y: T) => [T, T]) =>\n    (c: ProjConstructor<T>, P: ProjPointType<T>) => {\n      const affine = P.toAffine();\n      const p = fn(affine.x, affine.y);\n      return c.fromAffine({ x: p[0], y: p[1] });\n    };\n  const G2psi = mapAffine(psi);\n  const G2psi2 = mapAffine(psi2);\n  return { psi, psi2, G2psi, G2psi2, PSI_X, PSI_Y, PSI2_X, PSI2_Y };\n}\n\nexport type Tower12Opts = {\n  ORDER: bigint;\n  NONRESIDUE?: Fp;\n  // Fp2\n  FP2_NONRESIDUE: BigintTuple;\n  Fp2sqrt?: (num: Fp2) => Fp2;\n  Fp2mulByB: (num: Fp2) => Fp2;\n  // Fp12\n  Fp12cyclotomicSquare: (num: Fp12) => Fp12;\n  Fp12cyclotomicExp: (num: Fp12, n: bigint) => Fp12;\n  Fp12finalExponentiate: (num: Fp12) => Fp12;\n};\n\nexport function tower12(opts: Tower12Opts) {\n  const { ORDER } = opts;\n  // Fp\n  const Fp = mod.Field(ORDER);\n  const FpNONRESIDUE = Fp.create(opts.NONRESIDUE || BigInt(-1));\n  const FpLegendre = mod.FpLegendre(ORDER);\n  const Fpdiv2 = Fp.div(Fp.ONE, _2n); // 1/2\n\n  // Fp2\n  const FP2_FROBENIUS_COEFFICIENTS = calcFrobeniusCoefficients(Fp, FpNONRESIDUE, Fp.ORDER, 2)[0];\n  const Fp2Add = ({ c0, c1 }: Fp2, { c0: r0, c1: r1 }: Fp2) => ({\n    c0: Fp.add(c0, r0),\n    c1: Fp.add(c1, r1),\n  });\n  const Fp2Subtract = ({ c0, c1 }: Fp2, { c0: r0, c1: r1 }: Fp2) => ({\n    c0: Fp.sub(c0, r0),\n    c1: Fp.sub(c1, r1),\n  });\n  const Fp2Multiply = ({ c0, c1 }: Fp2, rhs: Fp2) => {\n    if (typeof rhs === 'bigint') return { c0: Fp.mul(c0, rhs), c1: Fp.mul(c1, rhs) };\n    // (a+bi)(c+di) = (ac\u2212bd) + (ad+bc)i\n    const { c0: r0, c1: r1 } = rhs;\n    let t1 = Fp.mul(c0, r0); // c0 * o0\n    let t2 = Fp.mul(c1, r1); // c1 * o1\n    // (T1 - T2) + ((c0 + c1) * (r0 + r1) - (T1 + T2))*i\n    const o0 = Fp.sub(t1, t2);\n    const o1 = Fp.sub(Fp.mul(Fp.add(c0, c1), Fp.add(r0, r1)), Fp.add(t1, t2));\n    return { c0: o0, c1: o1 };\n  };\n  const Fp2Square = ({ c0, c1 }: Fp2) => {\n    const a = Fp.add(c0, c1);\n    const b = Fp.sub(c0, c1);\n    const c = Fp.add(c0, c0);\n    return { c0: Fp.mul(a, b), c1: Fp.mul(c, c1) };\n  };\n  type Fp2Utils = {\n    NONRESIDUE: Fp2;\n    fromBigTuple: (tuple: BigintTuple | bigint[]) => Fp2;\n    reim: (num: Fp2) => { re: bigint; im: bigint };\n    mulByNonresidue: (num: Fp2) => Fp2;\n    mulByB: (num: Fp2) => Fp2;\n    frobeniusMap(num: Fp2, power: number): Fp2;\n  };\n  const Fp2fromBigTuple = (tuple: BigintTuple | bigint[]) => {\n    if (tuple.length !== 2) throw new Error('Invalid tuple');\n    const fps = tuple.map((n) => Fp.create(n)) as [Fp, Fp];\n    return { c0: fps[0], c1: fps[1] };\n  };\n\n  const FP2_ORDER = ORDER * ORDER;\n  const Fp2Nonresidue = Fp2fromBigTuple(opts.FP2_NONRESIDUE);\n  const Fp2: mod.IField<Fp2> & Fp2Utils = {\n    ORDER: FP2_ORDER,\n    NONRESIDUE: Fp2Nonresidue,\n    BITS: bitLen(FP2_ORDER),\n    BYTES: Math.ceil(bitLen(FP2_ORDER) / 8),\n    MASK: bitMask(bitLen(FP2_ORDER)),\n    ZERO: { c0: Fp.ZERO, c1: Fp.ZERO },\n    ONE: { c0: Fp.ONE, c1: Fp.ZERO },\n    create: (num) => num,\n    isValid: ({ c0, c1 }) => typeof c0 === 'bigint' && typeof c1 === 'bigint',\n    is0: ({ c0, c1 }) => Fp.is0(c0) && Fp.is0(c1),\n    eql: ({ c0, c1 }: Fp2, { c0: r0, c1: r1 }: Fp2) => Fp.eql(c0, r0) && Fp.eql(c1, r1),\n    neg: ({ c0, c1 }) => ({ c0: Fp.neg(c0), c1: Fp.neg(c1) }),\n    pow: (num, power) => mod.FpPow(Fp2, num, power),\n    invertBatch: (nums) => mod.FpInvertBatch(Fp2, nums),\n    // Normalized\n    add: Fp2Add,\n    sub: Fp2Subtract,\n    mul: Fp2Multiply,\n    sqr: Fp2Square,\n    // NonNormalized stuff\n    addN: Fp2Add,\n    subN: Fp2Subtract,\n    mulN: Fp2Multiply,\n    sqrN: Fp2Square,\n    // Why inversion for bigint inside Fp instead of Fp2? it is even used in that context?\n    div: (lhs, rhs) =>\n      Fp2.mul(lhs, typeof rhs === 'bigint' ? Fp.inv(Fp.create(rhs)) : Fp2.inv(rhs)),\n    inv: ({ c0: a, c1: b }) => {\n      // We wish to find the multiplicative inverse of a nonzero\n      // element a + bu in Fp2. We leverage an identity\n      //\n      // (a + bu)(a - bu) = a\u00B2 + b\u00B2\n      //\n      // which holds because u\u00B2 = -1. This can be rewritten as\n      //\n      // (a + bu)(a - bu)/(a\u00B2 + b\u00B2) = 1\n      //\n      // because a\u00B2 + b\u00B2 = 0 has no nonzero solutions for (a, b).\n      // This gives that (a - bu)/(a\u00B2 + b\u00B2) is the inverse\n      // of (a + bu). Importantly, this can be computing using\n      // only a single inversion in Fp.\n      const factor = Fp.inv(Fp.create(a * a + b * b));\n      return { c0: Fp.mul(factor, Fp.create(a)), c1: Fp.mul(factor, Fp.create(-b)) };\n    },\n    sqrt: (num) => {\n      if (opts.Fp2sqrt) return opts.Fp2sqrt(num);\n      // This is generic for all quadratic extensions (Fp2)\n      const { c0, c1 } = num;\n      if (Fp.is0(c1)) {\n        // if c0 is quadratic residue\n        if (Fp.eql(FpLegendre(Fp, c0), Fp.ONE)) return Fp2.create({ c0: Fp.sqrt(c0), c1: Fp.ZERO });\n        else return Fp2.create({ c0: Fp.ZERO, c1: Fp.sqrt(Fp.div(c0, FpNONRESIDUE)) });\n      }\n      const a = Fp.sqrt(Fp.sub(Fp.sqr(c0), Fp.mul(Fp.sqr(c1), FpNONRESIDUE)));\n      let d = Fp.mul(Fp.add(a, c0), Fpdiv2);\n      const legendre = FpLegendre(Fp, d);\n      // -1, Quadratic non residue\n      if (!Fp.is0(legendre) && !Fp.eql(legendre, Fp.ONE)) d = Fp.sub(d, a);\n      const a0 = Fp.sqrt(d);\n      const candidateSqrt = Fp2.create({ c0: a0, c1: Fp.div(Fp.mul(c1, Fpdiv2), a0) });\n      if (!Fp2.eql(Fp2.sqr(candidateSqrt), num)) throw new Error('Cannot find square root');\n      // Normalize root: at this point candidateSqrt ** 2 = num, but also -candidateSqrt ** 2 = num\n      const x1 = candidateSqrt;\n      const x2 = Fp2.neg(x1);\n      const { re: re1, im: im1 } = Fp2.reim(x1);\n      const { re: re2, im: im2 } = Fp2.reim(x2);\n      if (im1 > im2 || (im1 === im2 && re1 > re2)) return x1;\n      return x2;\n    },\n    // Same as sgn0_m_eq_2 in RFC 9380\n    isOdd: (x: Fp2) => {\n      const { re: x0, im: x1 } = Fp2.reim(x);\n      const sign_0 = x0 % _2n;\n      const zero_0 = x0 === _0n;\n      const sign_1 = x1 % _2n;\n      return BigInt(sign_0 || (zero_0 && sign_1)) == _1n;\n    },\n    // Bytes util\n    fromBytes(b: Uint8Array): Fp2 {\n      if (b.length !== Fp2.BYTES) throw new Error(`fromBytes wrong length=${b.length}`);\n      return { c0: Fp.fromBytes(b.subarray(0, Fp.BYTES)), c1: Fp.fromBytes(b.subarray(Fp.BYTES)) };\n    },\n    toBytes: ({ c0, c1 }) => concatBytes(Fp.toBytes(c0), Fp.toBytes(c1)),\n    cmov: ({ c0, c1 }, { c0: r0, c1: r1 }, c) => ({\n      c0: Fp.cmov(c0, r0, c),\n      c1: Fp.cmov(c1, r1, c),\n    }),\n    reim: ({ c0, c1 }) => ({ re: c0, im: c1 }),\n    // multiply by u + 1\n    mulByNonresidue: ({ c0, c1 }) => Fp2.mul({ c0, c1 }, Fp2Nonresidue),\n    mulByB: opts.Fp2mulByB,\n    fromBigTuple: Fp2fromBigTuple,\n    frobeniusMap: ({ c0, c1 }, power: number): Fp2 => ({\n      c0,\n      c1: Fp.mul(c1, FP2_FROBENIUS_COEFFICIENTS[power % 2]),\n    }),\n  };\n  // Fp6\n  const Fp6Add = ({ c0, c1, c2 }: Fp6, { c0: r0, c1: r1, c2: r2 }: Fp6) => ({\n    c0: Fp2.add(c0, r0),\n    c1: Fp2.add(c1, r1),\n    c2: Fp2.add(c2, r2),\n  });\n  const Fp6Subtract = ({ c0, c1, c2 }: Fp6, { c0: r0, c1: r1, c2: r2 }: Fp6) => ({\n    c0: Fp2.sub(c0, r0),\n    c1: Fp2.sub(c1, r1),\n    c2: Fp2.sub(c2, r2),\n  });\n  const Fp6Multiply = ({ c0, c1, c2 }: Fp6, rhs: Fp6 | bigint) => {\n    if (typeof rhs === 'bigint') {\n      return {\n        c0: Fp2.mul(c0, rhs),\n        c1: Fp2.mul(c1, rhs),\n        c2: Fp2.mul(c2, rhs),\n      };\n    }\n    const { c0: r0, c1: r1, c2: r2 } = rhs;\n    const t0 = Fp2.mul(c0, r0); // c0 * o0\n    const t1 = Fp2.mul(c1, r1); // c1 * o1\n    const t2 = Fp2.mul(c2, r2); // c2 * o2\n    return {\n      // t0 + (c1 + c2) * (r1 * r2) - (T1 + T2) * (u + 1)\n      c0: Fp2.add(\n        t0,\n        Fp2.mulByNonresidue(Fp2.sub(Fp2.mul(Fp2.add(c1, c2), Fp2.add(r1, r2)), Fp2.add(t1, t2)))\n      ),\n      // (c0 + c1) * (r0 + r1) - (T0 + T1) + T2 * (u + 1)\n      c1: Fp2.add(\n        Fp2.sub(Fp2.mul(Fp2.add(c0, c1), Fp2.add(r0, r1)), Fp2.add(t0, t1)),\n        Fp2.mulByNonresidue(t2)\n      ),\n      // T1 + (c0 + c2) * (r0 + r2) - T0 + T2\n      c2: Fp2.sub(Fp2.add(t1, Fp2.mul(Fp2.add(c0, c2), Fp2.add(r0, r2))), Fp2.add(t0, t2)),\n    };\n  };\n  const Fp6Square = ({ c0, c1, c2 }: Fp6) => {\n    let t0 = Fp2.sqr(c0); // c0\u00B2\n    let t1 = Fp2.mul(Fp2.mul(c0, c1), _2n); // 2 * c0 * c1\n    let t3 = Fp2.mul(Fp2.mul(c1, c2), _2n); // 2 * c1 * c2\n    let t4 = Fp2.sqr(c2); // c2\u00B2\n    return {\n      c0: Fp2.add(Fp2.mulByNonresidue(t3), t0), // T3 * (u + 1) + T0\n      c1: Fp2.add(Fp2.mulByNonresidue(t4), t1), // T4 * (u + 1) + T1\n      // T1 + (c0 - c1 + c2)\u00B2 + T3 - T0 - T4\n      c2: Fp2.sub(Fp2.sub(Fp2.add(Fp2.add(t1, Fp2.sqr(Fp2.add(Fp2.sub(c0, c1), c2))), t3), t0), t4),\n    };\n  };\n  type Fp6Utils = {\n    fromBigSix: (tuple: BigintSix) => Fp6;\n    mulByNonresidue: (num: Fp6) => Fp6;\n    frobeniusMap(num: Fp6, power: number): Fp6;\n    mul1(num: Fp6, b1: Fp2): Fp6;\n    mul01(num: Fp6, b0: Fp2, b1: Fp2): Fp6;\n    mulByFp2(lhs: Fp6, rhs: Fp2): Fp6;\n  };\n\n  const [FP6_FROBENIUS_COEFFICIENTS_1, FP6_FROBENIUS_COEFFICIENTS_2] = calcFrobeniusCoefficients(\n    Fp2,\n    Fp2Nonresidue,\n    Fp.ORDER,\n    6,\n    2,\n    3\n  );\n\n  const Fp6: mod.IField<Fp6> & Fp6Utils = {\n    ORDER: Fp2.ORDER, // TODO: unused, but need to verify\n    BITS: 3 * Fp2.BITS,\n    BYTES: 3 * Fp2.BYTES,\n    MASK: bitMask(3 * Fp2.BITS),\n    ZERO: { c0: Fp2.ZERO, c1: Fp2.ZERO, c2: Fp2.ZERO },\n    ONE: { c0: Fp2.ONE, c1: Fp2.ZERO, c2: Fp2.ZERO },\n    create: (num) => num,\n    isValid: ({ c0, c1, c2 }) => Fp2.isValid(c0) && Fp2.isValid(c1) && Fp2.isValid(c2),\n    is0: ({ c0, c1, c2 }) => Fp2.is0(c0) && Fp2.is0(c1) && Fp2.is0(c2),\n    neg: ({ c0, c1, c2 }) => ({ c0: Fp2.neg(c0), c1: Fp2.neg(c1), c2: Fp2.neg(c2) }),\n    eql: ({ c0, c1, c2 }, { c0: r0, c1: r1, c2: r2 }) =>\n      Fp2.eql(c0, r0) && Fp2.eql(c1, r1) && Fp2.eql(c2, r2),\n    sqrt: notImplemented,\n    // Do we need division by bigint at all? Should be done via order:\n    div: (lhs, rhs) =>\n      Fp6.mul(lhs, typeof rhs === 'bigint' ? Fp.inv(Fp.create(rhs)) : Fp6.inv(rhs)),\n    pow: (num, power) => mod.FpPow(Fp6, num, power),\n    invertBatch: (nums) => mod.FpInvertBatch(Fp6, nums),\n    // Normalized\n    add: Fp6Add,\n    sub: Fp6Subtract,\n    mul: Fp6Multiply,\n    sqr: Fp6Square,\n    // NonNormalized stuff\n    addN: Fp6Add,\n    subN: Fp6Subtract,\n    mulN: Fp6Multiply,\n    sqrN: Fp6Square,\n\n    inv: ({ c0, c1, c2 }) => {\n      let t0 = Fp2.sub(Fp2.sqr(c0), Fp2.mulByNonresidue(Fp2.mul(c2, c1))); // c0\u00B2 - c2 * c1 * (u + 1)\n      let t1 = Fp2.sub(Fp2.mulByNonresidue(Fp2.sqr(c2)), Fp2.mul(c0, c1)); // c2\u00B2 * (u + 1) - c0 * c1\n      let t2 = Fp2.sub(Fp2.sqr(c1), Fp2.mul(c0, c2)); // c1\u00B2 - c0 * c2\n      // 1/(((c2 * T1 + c1 * T2) * v) + c0 * T0)\n      let t4 = Fp2.inv(\n        Fp2.add(Fp2.mulByNonresidue(Fp2.add(Fp2.mul(c2, t1), Fp2.mul(c1, t2))), Fp2.mul(c0, t0))\n      );\n      return { c0: Fp2.mul(t4, t0), c1: Fp2.mul(t4, t1), c2: Fp2.mul(t4, t2) };\n    },\n    // Bytes utils\n    fromBytes: (b: Uint8Array): Fp6 => {\n      if (b.length !== Fp6.BYTES) throw new Error(`fromBytes wrong length=${b.length}`);\n      return {\n        c0: Fp2.fromBytes(b.subarray(0, Fp2.BYTES)),\n        c1: Fp2.fromBytes(b.subarray(Fp2.BYTES, 2 * Fp2.BYTES)),\n        c2: Fp2.fromBytes(b.subarray(2 * Fp2.BYTES)),\n      };\n    },\n    toBytes: ({ c0, c1, c2 }): Uint8Array =>\n      concatBytes(Fp2.toBytes(c0), Fp2.toBytes(c1), Fp2.toBytes(c2)),\n    cmov: ({ c0, c1, c2 }: Fp6, { c0: r0, c1: r1, c2: r2 }: Fp6, c) => ({\n      c0: Fp2.cmov(c0, r0, c),\n      c1: Fp2.cmov(c1, r1, c),\n      c2: Fp2.cmov(c2, r2, c),\n    }),\n    fromBigSix: (t: BigintSix): Fp6 => {\n      if (!Array.isArray(t) || t.length !== 6) throw new Error('Invalid Fp6 usage');\n      return {\n        c0: Fp2.fromBigTuple(t.slice(0, 2)),\n        c1: Fp2.fromBigTuple(t.slice(2, 4)),\n        c2: Fp2.fromBigTuple(t.slice(4, 6)),\n      };\n    },\n    frobeniusMap: ({ c0, c1, c2 }, power: number) => ({\n      c0: Fp2.frobeniusMap(c0, power),\n      c1: Fp2.mul(Fp2.frobeniusMap(c1, power), FP6_FROBENIUS_COEFFICIENTS_1[power % 6]),\n      c2: Fp2.mul(Fp2.frobeniusMap(c2, power), FP6_FROBENIUS_COEFFICIENTS_2[power % 6]),\n    }),\n    mulByFp2: ({ c0, c1, c2 }, rhs: Fp2): Fp6 => ({\n      c0: Fp2.mul(c0, rhs),\n      c1: Fp2.mul(c1, rhs),\n      c2: Fp2.mul(c2, rhs),\n    }),\n    mulByNonresidue: ({ c0, c1, c2 }) => ({ c0: Fp2.mulByNonresidue(c2), c1: c0, c2: c1 }),\n    // Sparse multiplication\n    mul1: ({ c0, c1, c2 }, b1: Fp2): Fp6 => ({\n      c0: Fp2.mulByNonresidue(Fp2.mul(c2, b1)),\n      c1: Fp2.mul(c0, b1),\n      c2: Fp2.mul(c1, b1),\n    }),\n    // Sparse multiplication\n    mul01({ c0, c1, c2 }, b0: Fp2, b1: Fp2): Fp6 {\n      let t0 = Fp2.mul(c0, b0); // c0 * b0\n      let t1 = Fp2.mul(c1, b1); // c1 * b1\n      return {\n        // ((c1 + c2) * b1 - T1) * (u + 1) + T0\n        c0: Fp2.add(Fp2.mulByNonresidue(Fp2.sub(Fp2.mul(Fp2.add(c1, c2), b1), t1)), t0),\n        // (b0 + b1) * (c0 + c1) - T0 - T1\n        c1: Fp2.sub(Fp2.sub(Fp2.mul(Fp2.add(b0, b1), Fp2.add(c0, c1)), t0), t1),\n        // (c0 + c2) * b0 - T0 + T1\n        c2: Fp2.add(Fp2.sub(Fp2.mul(Fp2.add(c0, c2), b0), t0), t1),\n      };\n    },\n  };\n\n  // Fp12\n  const FP12_FROBENIUS_COEFFICIENTS = calcFrobeniusCoefficients(\n    Fp2,\n    Fp2Nonresidue,\n    Fp.ORDER,\n    12,\n    1,\n    6\n  )[0];\n\n  const Fp12Add = ({ c0, c1 }: Fp12, { c0: r0, c1: r1 }: Fp12) => ({\n    c0: Fp6.add(c0, r0),\n    c1: Fp6.add(c1, r1),\n  });\n  const Fp12Subtract = ({ c0, c1 }: Fp12, { c0: r0, c1: r1 }: Fp12) => ({\n    c0: Fp6.sub(c0, r0),\n    c1: Fp6.sub(c1, r1),\n  });\n  const Fp12Multiply = ({ c0, c1 }: Fp12, rhs: Fp12 | bigint) => {\n    if (typeof rhs === 'bigint') return { c0: Fp6.mul(c0, rhs), c1: Fp6.mul(c1, rhs) };\n    let { c0: r0, c1: r1 } = rhs;\n    let t1 = Fp6.mul(c0, r0); // c0 * r0\n    let t2 = Fp6.mul(c1, r1); // c1 * r1\n    return {\n      c0: Fp6.add(t1, Fp6.mulByNonresidue(t2)), // T1 + T2 * v\n      // (c0 + c1) * (r0 + r1) - (T1 + T2)\n      c1: Fp6.sub(Fp6.mul(Fp6.add(c0, c1), Fp6.add(r0, r1)), Fp6.add(t1, t2)),\n    };\n  };\n  const Fp12Square = ({ c0, c1 }: Fp12) => {\n    let ab = Fp6.mul(c0, c1); // c0 * c1\n    return {\n      // (c1 * v + c0) * (c0 + c1) - AB - AB * v\n      c0: Fp6.sub(\n        Fp6.sub(Fp6.mul(Fp6.add(Fp6.mulByNonresidue(c1), c0), Fp6.add(c0, c1)), ab),\n        Fp6.mulByNonresidue(ab)\n      ),\n      c1: Fp6.add(ab, ab),\n    }; // AB + AB\n  };\n  function Fp4Square(a: Fp2, b: Fp2): { first: Fp2; second: Fp2 } {\n    const a2 = Fp2.sqr(a);\n    const b2 = Fp2.sqr(b);\n    return {\n      first: Fp2.add(Fp2.mulByNonresidue(b2), a2), // b\u00B2 * Nonresidue + a\u00B2\n      second: Fp2.sub(Fp2.sub(Fp2.sqr(Fp2.add(a, b)), a2), b2), // (a + b)\u00B2 - a\u00B2 - b\u00B2\n    };\n  }\n  type Fp12Utils = {\n    fromBigTwelve: (t: BigintTwelve) => Fp12;\n    frobeniusMap(num: Fp12, power: number): Fp12;\n    mul014(num: Fp12, o0: Fp2, o1: Fp2, o4: Fp2): Fp12;\n    mul034(num: Fp12, o0: Fp2, o3: Fp2, o4: Fp2): Fp12;\n    mulByFp2(lhs: Fp12, rhs: Fp2): Fp12;\n    conjugate(num: Fp12): Fp12;\n    finalExponentiate(num: Fp12): Fp12;\n    _cyclotomicSquare(num: Fp12): Fp12;\n    _cyclotomicExp(num: Fp12, n: bigint): Fp12;\n  };\n\n  const Fp12: mod.IField<Fp12> & Fp12Utils = {\n    ORDER: Fp2.ORDER, // TODO: unused, but need to verify\n    BITS: 2 * Fp2.BITS,\n    BYTES: 2 * Fp2.BYTES,\n    MASK: bitMask(2 * Fp2.BITS),\n    ZERO: { c0: Fp6.ZERO, c1: Fp6.ZERO },\n    ONE: { c0: Fp6.ONE, c1: Fp6.ZERO },\n    create: (num) => num,\n    isValid: ({ c0, c1 }) => Fp6.isValid(c0) && Fp6.isValid(c1),\n    is0: ({ c0, c1 }) => Fp6.is0(c0) && Fp6.is0(c1),\n    neg: ({ c0, c1 }) => ({ c0: Fp6.neg(c0), c1: Fp6.neg(c1) }),\n    eql: ({ c0, c1 }, { c0: r0, c1: r1 }) => Fp6.eql(c0, r0) && Fp6.eql(c1, r1),\n    sqrt: notImplemented,\n    inv: ({ c0, c1 }) => {\n      let t = Fp6.inv(Fp6.sub(Fp6.sqr(c0), Fp6.mulByNonresidue(Fp6.sqr(c1)))); // 1 / (c0\u00B2 - c1\u00B2 * v)\n      return { c0: Fp6.mul(c0, t), c1: Fp6.neg(Fp6.mul(c1, t)) }; // ((C0 * T) * T) + (-C1 * T) * w\n    },\n    div: (lhs, rhs) =>\n      Fp12.mul(lhs, typeof rhs === 'bigint' ? Fp.inv(Fp.create(rhs)) : Fp12.inv(rhs)),\n    pow: (num, power) => mod.FpPow(Fp12, num, power),\n    invertBatch: (nums) => mod.FpInvertBatch(Fp12, nums),\n    // Normalized\n    add: Fp12Add,\n    sub: Fp12Subtract,\n    mul: Fp12Multiply,\n    sqr: Fp12Square,\n    // NonNormalized stuff\n    addN: Fp12Add,\n    subN: Fp12Subtract,\n    mulN: Fp12Multiply,\n    sqrN: Fp12Square,\n\n    // Bytes utils\n    fromBytes: (b: Uint8Array): Fp12 => {\n      if (b.length !== Fp12.BYTES) throw new Error(`fromBytes wrong length=${b.length}`);\n      return {\n        c0: Fp6.fromBytes(b.subarray(0, Fp6.BYTES)),\n        c1: Fp6.fromBytes(b.subarray(Fp6.BYTES)),\n      };\n    },\n    toBytes: ({ c0, c1 }): Uint8Array => concatBytes(Fp6.toBytes(c0), Fp6.toBytes(c1)),\n    cmov: ({ c0, c1 }, { c0: r0, c1: r1 }, c) => ({\n      c0: Fp6.cmov(c0, r0, c),\n      c1: Fp6.cmov(c1, r1, c),\n    }),\n    // Utils\n    // toString() {\n    //   return `Fp12(${this.c0} + ${this.c1} * w)`;\n    // },\n    // fromTuple(c: [Fp6, Fp6]) {\n    //   return new Fp12(...c);\n    // }\n    fromBigTwelve: (t: BigintTwelve): Fp12 => ({\n      c0: Fp6.fromBigSix(t.slice(0, 6) as BigintSix),\n      c1: Fp6.fromBigSix(t.slice(6, 12) as BigintSix),\n    }),\n    // Raises to q**i -th power\n    frobeniusMap(lhs, power: number) {\n      const { c0, c1, c2 } = Fp6.frobeniusMap(lhs.c1, power);\n      const coeff = FP12_FROBENIUS_COEFFICIENTS[power % 12];\n      return {\n        c0: Fp6.frobeniusMap(lhs.c0, power),\n        c1: Fp6.create({\n          c0: Fp2.mul(c0, coeff),\n          c1: Fp2.mul(c1, coeff),\n          c2: Fp2.mul(c2, coeff),\n        }),\n      };\n    },\n    mulByFp2: ({ c0, c1 }, rhs: Fp2): Fp12 => ({\n      c0: Fp6.mulByFp2(c0, rhs),\n      c1: Fp6.mulByFp2(c1, rhs),\n    }),\n    conjugate: ({ c0, c1 }): Fp12 => ({ c0, c1: Fp6.neg(c1) }),\n    // Sparse multiplication\n    mul014: ({ c0, c1 }, o0: Fp2, o1: Fp2, o4: Fp2) => {\n      let t0 = Fp6.mul01(c0, o0, o1);\n      let t1 = Fp6.mul1(c1, o4);\n      return {\n        c0: Fp6.add(Fp6.mulByNonresidue(t1), t0), // T1 * v + T0\n        // (c1 + c0) * [o0, o1+o4] - T0 - T1\n        c1: Fp6.sub(Fp6.sub(Fp6.mul01(Fp6.add(c1, c0), o0, Fp2.add(o1, o4)), t0), t1),\n      };\n    },\n    mul034: ({ c0, c1 }, o0: Fp2, o3: Fp2, o4: Fp2) => {\n      const a = Fp6.create({\n        c0: Fp2.mul(c0.c0, o0),\n        c1: Fp2.mul(c0.c1, o0),\n        c2: Fp2.mul(c0.c2, o0),\n      });\n      const b = Fp6.mul01(c1, o3, o4);\n      const e = Fp6.mul01(Fp6.add(c0, c1), Fp2.add(o0, o3), o4);\n      return {\n        c0: Fp6.add(Fp6.mulByNonresidue(b), a),\n        c1: Fp6.sub(e, Fp6.add(a, b)),\n      };\n    },\n\n    // A cyclotomic group is a subgroup of Fp^n defined by\n    //   G\u03A6\u2099(p) = {\u03B1 \u2208 Fp\u207F : \u03B1^\u03A6\u2099(p) = 1}\n    // The result of any pairing is in a cyclotomic subgroup\n    // https://eprint.iacr.org/2009/565.pdf\n    _cyclotomicSquare: opts.Fp12cyclotomicSquare,\n    _cyclotomicExp: opts.Fp12cyclotomicExp,\n    // https://eprint.iacr.org/2010/354.pdf\n    // https://eprint.iacr.org/2009/565.pdf\n    finalExponentiate: opts.Fp12finalExponentiate,\n  };\n\n  return { Fp, Fp2, Fp6, Fp4Square, Fp12 };\n}\n", "const U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n\n// We are not using BigUint64Array, because they are extremely slow as per 2022\nfunction fromBig(n: bigint, le = false) {\n  if (le) return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n  return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n\nfunction split(lst: bigint[], le = false) {\n  let Ah = new Uint32Array(lst.length);\n  let Al = new Uint32Array(lst.length);\n  for (let i = 0; i < lst.length; i++) {\n    const { h, l } = fromBig(lst[i], le);\n    [Ah[i], Al[i]] = [h, l];\n  }\n  return [Ah, Al];\n}\n\nconst toBig = (h: number, l: number) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, _l: number, s: number) => h >>> s;\nconst shrSL = (h: number, l: number, s: number) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: number) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h: number, l: number, s: number) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h: number, l: number) => l;\nconst rotr32L = (h: number, _l: number) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: number) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h: number, l: number, s: number) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: number) => (h << (s - 32)) | (l >>> (64 - s));\n\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah: number, Al: number, Bh: number, Bl: number) {\n  const l = (Al >>> 0) + (Bl >>> 0);\n  return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al: number, Bl: number, Cl: number) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number) =>\n  (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number) =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number) =>\n  (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: number) =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number) =>\n  (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nexport {\n  fromBig, split, toBig,\n  shrSH, shrSL,\n  rotrSH, rotrSL, rotrBH, rotrBL,\n  rotr32H, rotr32L,\n  rotlSH, rotlSL, rotlBH, rotlBL,\n  add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\n// prettier-ignore\nconst u64 = {\n  fromBig, split, toBig,\n  shrSH, shrSL,\n  rotrSH, rotrSL, rotrBH, rotrBL,\n  rotr32H, rotr32L,\n  rotlSH, rotlSL, rotlBH, rotlBL,\n  add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n", "import { bytes, exists, number, output } from './_assert.js';\nimport { rotlBH, rotlBL, rotlSH, rotlSL, split } from './_u64.js';\nimport {\n  Hash,\n  u32,\n  Input,\n  toBytes,\n  wrapConstructor,\n  wrapXOFConstructorWithOpts,\n  HashXOF,\n  isLE,\n  byteSwap32,\n} from './utils.js';\n\n// SHA3 (keccak) is based on a new design: basically, the internal state is bigger than output size.\n// It's called a sponge function.\n\n// Various per round constants calculations\nconst SHA3_PI: number[] = [];\nconst SHA3_ROTL: number[] = [];\nconst _SHA3_IOTA: bigint[] = [];\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nconst _2n = /* @__PURE__ */ BigInt(2);\nconst _7n = /* @__PURE__ */ BigInt(7);\nconst _256n = /* @__PURE__ */ BigInt(256);\nconst _0x71n = /* @__PURE__ */ BigInt(0x71);\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n  // Pi\n  [x, y] = [y, (2 * x + 3 * y) % 5];\n  SHA3_PI.push(2 * (5 * y + x));\n  // Rotational\n  SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n  // Iota\n  let t = _0n;\n  for (let j = 0; j < 7; j++) {\n    R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n    if (R & _2n) t ^= _1n << ((_1n << /* @__PURE__ */ BigInt(j)) - _1n);\n  }\n  _SHA3_IOTA.push(t);\n}\nconst [SHA3_IOTA_H, SHA3_IOTA_L] = /* @__PURE__ */ split(_SHA3_IOTA, true);\n\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h: number, l: number, s: number) => (s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s));\nconst rotlL = (h: number, l: number, s: number) => (s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s));\n\n// Same as keccakf1600, but allows to skip some rounds\nexport function keccakP(s: Uint32Array, rounds: number = 24) {\n  const B = new Uint32Array(5 * 2);\n  // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n  for (let round = 24 - rounds; round < 24; round++) {\n    // Theta \u03B8\n    for (let x = 0; x < 10; x++) B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n    for (let x = 0; x < 10; x += 2) {\n      const idx1 = (x + 8) % 10;\n      const idx0 = (x + 2) % 10;\n      const B0 = B[idx0];\n      const B1 = B[idx0 + 1];\n      const Th = rotlH(B0, B1, 1) ^ B[idx1];\n      const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n      for (let y = 0; y < 50; y += 10) {\n        s[x + y] ^= Th;\n        s[x + y + 1] ^= Tl;\n      }\n    }\n    // Rho (\u03C1) and Pi (\u03C0)\n    let curH = s[2];\n    let curL = s[3];\n    for (let t = 0; t < 24; t++) {\n      const shift = SHA3_ROTL[t];\n      const Th = rotlH(curH, curL, shift);\n      const Tl = rotlL(curH, curL, shift);\n      const PI = SHA3_PI[t];\n      curH = s[PI];\n      curL = s[PI + 1];\n      s[PI] = Th;\n      s[PI + 1] = Tl;\n    }\n    // Chi (\u03C7)\n    for (let y = 0; y < 50; y += 10) {\n      for (let x = 0; x < 10; x++) B[x] = s[y + x];\n      for (let x = 0; x < 10; x++) s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n    }\n    // Iota (\u03B9)\n    s[0] ^= SHA3_IOTA_H[round];\n    s[1] ^= SHA3_IOTA_L[round];\n  }\n  B.fill(0);\n}\n\nexport class Keccak extends Hash<Keccak> implements HashXOF<Keccak> {\n  protected state: Uint8Array;\n  protected pos = 0;\n  protected posOut = 0;\n  protected finished = false;\n  protected state32: Uint32Array;\n  protected destroyed = false;\n  // NOTE: we accept arguments in bytes instead of bits here.\n  constructor(\n    public blockLen: number,\n    public suffix: number,\n    public outputLen: number,\n    protected enableXOF = false,\n    protected rounds: number = 24\n  ) {\n    super();\n    // Can be passed from user as dkLen\n    number(outputLen);\n    // 1600 = 5x5 matrix of 64bit.  1600 bits === 200 bytes\n    if (0 >= this.blockLen || this.blockLen >= 200)\n      throw new Error('Sha3 supports only keccak-f1600 function');\n    this.state = new Uint8Array(200);\n    this.state32 = u32(this.state);\n  }\n  protected keccak() {\n    if (!isLE) byteSwap32(this.state32);\n    keccakP(this.state32, this.rounds);\n    if (!isLE) byteSwap32(this.state32);\n    this.posOut = 0;\n    this.pos = 0;\n  }\n  update(data: Input) {\n    exists(this);\n    const { blockLen, state } = this;\n    data = toBytes(data);\n    const len = data.length;\n    for (let pos = 0; pos < len; ) {\n      const take = Math.min(blockLen - this.pos, len - pos);\n      for (let i = 0; i < take; i++) state[this.pos++] ^= data[pos++];\n      if (this.pos === blockLen) this.keccak();\n    }\n    return this;\n  }\n  protected finish() {\n    if (this.finished) return;\n    this.finished = true;\n    const { state, suffix, pos, blockLen } = this;\n    // Do the padding\n    state[pos] ^= suffix;\n    if ((suffix & 0x80) !== 0 && pos === blockLen - 1) this.keccak();\n    state[blockLen - 1] ^= 0x80;\n    this.keccak();\n  }\n  protected writeInto(out: Uint8Array): Uint8Array {\n    exists(this, false);\n    bytes(out);\n    this.finish();\n    const bufferOut = this.state;\n    const { blockLen } = this;\n    for (let pos = 0, len = out.length; pos < len; ) {\n      if (this.posOut >= blockLen) this.keccak();\n      const take = Math.min(blockLen - this.posOut, len - pos);\n      out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n      this.posOut += take;\n      pos += take;\n    }\n    return out;\n  }\n  xofInto(out: Uint8Array): Uint8Array {\n    // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n    if (!this.enableXOF) throw new Error('XOF is not possible for this instance');\n    return this.writeInto(out);\n  }\n  xof(bytes: number): Uint8Array {\n    number(bytes);\n    return this.xofInto(new Uint8Array(bytes));\n  }\n  digestInto(out: Uint8Array) {\n    output(out, this);\n    if (this.finished) throw new Error('digest() was already called');\n    this.writeInto(out);\n    this.destroy();\n    return out;\n  }\n  digest() {\n    return this.digestInto(new Uint8Array(this.outputLen));\n  }\n  destroy() {\n    this.destroyed = true;\n    this.state.fill(0);\n  }\n  _cloneInto(to?: Keccak): Keccak {\n    const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n    to ||= new Keccak(blockLen, suffix, outputLen, enableXOF, rounds);\n    to.state32.set(this.state32);\n    to.pos = this.pos;\n    to.posOut = this.posOut;\n    to.finished = this.finished;\n    to.rounds = rounds;\n    // Suffix can change in cSHAKE\n    to.suffix = suffix;\n    to.outputLen = outputLen;\n    to.enableXOF = enableXOF;\n    to.destroyed = this.destroyed;\n    return to;\n  }\n}\n\nconst gen = (suffix: number, blockLen: number, outputLen: number) =>\n  wrapConstructor(() => new Keccak(blockLen, suffix, outputLen));\n\nexport const sha3_224 = /* @__PURE__ */ gen(0x06, 144, 224 / 8);\n/**\n * SHA3-256 hash function\n * @param message - that would be hashed\n */\nexport const sha3_256 = /* @__PURE__ */ gen(0x06, 136, 256 / 8);\nexport const sha3_384 = /* @__PURE__ */ gen(0x06, 104, 384 / 8);\nexport const sha3_512 = /* @__PURE__ */ gen(0x06, 72, 512 / 8);\nexport const keccak_224 = /* @__PURE__ */ gen(0x01, 144, 224 / 8);\n/**\n * keccak-256 hash function. Different from SHA3-256.\n * @param message - that would be hashed\n */\nexport const keccak_256 = /* @__PURE__ */ gen(0x01, 136, 256 / 8);\nexport const keccak_384 = /* @__PURE__ */ gen(0x01, 104, 384 / 8);\nexport const keccak_512 = /* @__PURE__ */ gen(0x01, 72, 512 / 8);\n\nexport type ShakeOpts = { dkLen?: number };\n\nconst genShake = (suffix: number, blockLen: number, outputLen: number) =>\n  wrapXOFConstructorWithOpts<HashXOF<Keccak>, ShakeOpts>(\n    (opts: ShakeOpts = {}) =>\n      new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true)\n  );\n\nexport const shake128 = /* @__PURE__ */ genShake(0x1f, 168, 128 / 8);\nexport const shake256 = /* @__PURE__ */ genShake(0x1f, 136, 256 / 8);\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bn254 = void 0;\nexports.mapToCurveSVDW = mapToCurveSVDW;\nconst utils_1 = require(\"@noble/hashes/utils\");\nconst bls_1 = require(\"@noble/curves/abstract/bls\");\nconst modular_1 = require(\"@noble/curves/abstract/modular\");\nconst utils_2 = require(\"@noble/curves/abstract/utils\");\nconst tower_1 = require(\"@noble/curves/abstract/tower\");\nconst mod = __importStar(require(\"@noble/curves/abstract/modular\"));\nconst sha3_1 = require(\"@noble/hashes/sha3\");\nconst utils_3 = require(\"@noble/curves/abstract/utils\");\n/*\nbn254, previously known as alt_bn_128, when it had 128-bit security.\nBarbulescu-Duquesne 2017 shown it's weaker: just about 100 bits,\nso the naming has been adjusted to its prime bit count:\nhttps://hal.science/hal-01534101/file/main.pdf\n\nThere are huge compatibility issues in the ecosystem:\n\n1. Different libraries call it in different ways: \"bn254\", \"bn256\", \"alt_bn128\", \"bn128\".\n2. libff has bn128, but it's a different curve with different G2:\n   https://github.com/scipr-lab/libff/blob/a44f482e18b8ac04d034c193bd9d7df7817ad73f/libff/algebra/curves/bn128/bn128_init.cpp#L166-L169\n3. halo2curves bn256 is also incompatible and returns different outputs\n\nThe goal of our implementation is to support \"Ethereum\" variant of the curve,\nbecause it at least has specs:\n\n- EIP196 (https://eips.ethereum.org/EIPS/eip-196) describes bn254 ECADD and ECMUL opcodes for EVM\n- EIP197 (https://eips.ethereum.org/EIPS/eip-197) describes bn254 pairings\n- It's hard: EIPs don't have proper tests. EIP-197 returns boolean output instead of Fp12\n- The existing implementations are bad. Some are deprecated:\n    - https://github.com/paritytech/bn (old version)\n    - https://github.com/ewasm/ethereum-bn128.rs (uses paritytech/bn)\n    - https://github.com/zcash-hackworks/bn\n    - https://github.com/arkworks-rs/curves/blob/master/bn254/src/lib.rs\n- Python implementations use different towers and produce different Fp12 outputs:\n    - https://github.com/ethereum/py_pairing\n    - https://github.com/ethereum/execution-specs/blob/master/src/ethereum/crypto/alt_bn128.py\n- Points are encoded differently in different implementations\n*/\n// prettier-ignore\nconst _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);\n// prettier-ignore\nconst _6n = BigInt(6);\n/*\nSeed (X): 4965661367192848881\nFr: (36x\u2074+36x\u00B3+18x\u00B2+6x+1)\nFp: (36x\u2074+36x\u00B3+24x\u00B2+6x+1)\n(E  / Fp ): Y\u00B2 = X\u00B3+3\n(Et / Fp\u00B2): Y\u00B2 = X\u00B3+3/(u+9) (D-type twist)\nAte loop size: 6x+2\n\nTowers:\n- Fp\u00B2[u] = Fp/u\u00B2+1\n- Fp\u2076[v] = Fp\u00B2/v\u00B3-9-u\n- Fp\u00B9\u00B2[w] = Fp\u2076/w\u00B2-v\n*/\nconst BN_X = BigInt('4965661367192848881');\nconst BN_X_LEN = (0, utils_2.bitLen)(BN_X);\nconst SIX_X_SQUARED = _6n * BN_X ** _2n;\n// Finite field over r. It's for convenience and is not used in the code below.\nconst Fr = (0, modular_1.Field)(BigInt('21888242871839275222246405745257275088548364400416034343698204186575808495617'));\n// Fp2.div(Fp2.mul(Fp2.ONE, _3n), Fp2.NONRESIDUE)\nconst Fp2B = {\n    c0: BigInt('19485874751759354771024239261021720505790618469301721065564631296452457478373'),\n    c1: BigInt('266929791119991161246907387137283842545076965332900288569378510910307636690'),\n};\nconst { Fp, Fp2, Fp6, Fp4Square, Fp12 } = (0, tower_1.tower12)({\n    ORDER: BigInt('21888242871839275222246405745257275088696311157297823662689037894645226208583'),\n    FP2_NONRESIDUE: [BigInt(9), _1n],\n    Fp2mulByB: (num) => Fp2.mul(num, Fp2B),\n    // The result of any pairing is in a cyclotomic subgroup\n    // https://eprint.iacr.org/2009/565.pdf\n    Fp12cyclotomicSquare: ({ c0, c1 }) => {\n        const { c0: c0c0, c1: c0c1, c2: c0c2 } = c0;\n        const { c0: c1c0, c1: c1c1, c2: c1c2 } = c1;\n        const { first: t3, second: t4 } = Fp4Square(c0c0, c1c1);\n        const { first: t5, second: t6 } = Fp4Square(c1c0, c0c2);\n        const { first: t7, second: t8 } = Fp4Square(c0c1, c1c2);\n        let t9 = Fp2.mulByNonresidue(t8); // T8 * (u + 1)\n        return {\n            c0: Fp6.create({\n                c0: Fp2.add(Fp2.mul(Fp2.sub(t3, c0c0), _2n), t3), // 2 * (T3 - c0c0)  + T3\n                c1: Fp2.add(Fp2.mul(Fp2.sub(t5, c0c1), _2n), t5), // 2 * (T5 - c0c1)  + T5\n                c2: Fp2.add(Fp2.mul(Fp2.sub(t7, c0c2), _2n), t7),\n            }), // 2 * (T7 - c0c2)  + T7\n            c1: Fp6.create({\n                c0: Fp2.add(Fp2.mul(Fp2.add(t9, c1c0), _2n), t9), // 2 * (T9 + c1c0) + T9\n                c1: Fp2.add(Fp2.mul(Fp2.add(t4, c1c1), _2n), t4), // 2 * (T4 + c1c1) + T4\n                c2: Fp2.add(Fp2.mul(Fp2.add(t6, c1c2), _2n), t6),\n            }),\n        }; // 2 * (T6 + c1c2) + T6\n    },\n    Fp12cyclotomicExp(num, n) {\n        let z = Fp12.ONE;\n        for (let i = BN_X_LEN - 1; i >= 0; i--) {\n            z = Fp12._cyclotomicSquare(z);\n            if ((0, utils_2.bitGet)(n, i))\n                z = Fp12.mul(z, num);\n        }\n        return z;\n    },\n    // https://eprint.iacr.org/2010/354.pdf\n    // https://eprint.iacr.org/2009/565.pdf\n    Fp12finalExponentiate: (num) => {\n        const powMinusX = (num) => Fp12.conjugate(Fp12._cyclotomicExp(num, BN_X));\n        const r0 = Fp12.mul(Fp12.conjugate(num), Fp12.inv(num));\n        const r = Fp12.mul(Fp12.frobeniusMap(r0, 2), r0);\n        const y1 = Fp12._cyclotomicSquare(powMinusX(r));\n        const y2 = Fp12.mul(Fp12._cyclotomicSquare(y1), y1);\n        const y4 = powMinusX(y2);\n        const y6 = powMinusX(Fp12._cyclotomicSquare(y4));\n        const y8 = Fp12.mul(Fp12.mul(Fp12.conjugate(y6), y4), Fp12.conjugate(y2));\n        const y9 = Fp12.mul(y8, y1);\n        return Fp12.mul(Fp12.frobeniusMap(Fp12.mul(Fp12.conjugate(r), y9), 3), Fp12.mul(Fp12.frobeniusMap(y8, 2), Fp12.mul(Fp12.frobeniusMap(y9, 1), Fp12.mul(Fp12.mul(y8, y4), r))));\n    },\n});\n// END OF CURVE FIELDS\nconst { G2psi, psi } = (0, tower_1.psiFrobenius)(Fp, Fp2, Fp2.NONRESIDUE);\n///////////////////////////////////////////////////////////////////////////////\n/// BEGIN DRAND MODIFICATIONS /////////////////////////////////////////////////\n///////////////////////////////////////////////////////////////////////////////\nfunction SVDWFpIsSquare(Fp) {\n    // Compute the Legendre symbol to determine if `u` is a quadratic residue\n    return (u) => {\n        const x = Fp.pow(u, (Fp.ORDER - 1n) / 2n);\n        let legendre;\n        if (Fp.eql(x, Fp.neg(Fp.ONE))) {\n            legendre = -1n;\n        }\n        else if (Fp.eql(x, Fp.ZERO)) {\n            legendre = 0n;\n        }\n        else if (Fp.eql(x, Fp.ONE)) {\n            legendre = 1n;\n        }\n        else {\n            throw new Error('Legendre failed');\n        }\n        return legendre === 1n;\n    };\n}\n/**\n * Shallue-van de Woestijne (SVDW) map-to-curve (\"straight-line\" implementation)\n * https://datatracker.ietf.org/doc/html/rfc9380/#appendix-F.1\n */\nfunction mapToCurveSVDW(Fp, opts) {\n    mod.validateField(Fp);\n    if (!Fp.isValid(opts.A) || !Fp.isValid(opts.B) || !Fp.isValid(opts.Z))\n        throw new Error('mapToCurveSimpleSVDW: invalid opts');\n    const isSquare = SVDWFpIsSquare(Fp);\n    if (!Fp.isOdd)\n        throw new Error('Fp.isOdd is not implemented!');\n    // g(x) is the short Weierstrass equation of the curve g(x) = x^3 + A*x + B\n    const g = (x) => Fp.add(Fp.add(Fp.mul(Fp.mul(x, x), x), Fp.mul(opts.A, x)), opts.B);\n    const two = Fp.add(Fp.ONE, Fp.ONE);\n    const three = Fp.add(two, Fp.ONE);\n    const four = Fp.add(three, Fp.ONE);\n    // C1 = g(Z) where g(x) = x^3 + A*x + B\n    const c1 = g(opts.Z);\n    // C2 = -Z / 2\n    const c2 = Fp.mul(Fp.neg(opts.Z), Fp.inv(Fp.add(Fp.ONE, Fp.ONE)));\n    // C3 = sqrt(-g(Z) * (3 * Z^2 + 4 * A))\n    const c3 = Fp.sqrt(Fp.mul(Fp.neg(c1), Fp.add(Fp.mul(three, Fp.mul(opts.Z, opts.Z)), Fp.mul(four, opts.A))));\n    // C4 = 4 * -g(Z) / (3 * Z^2 + 4 * A)\n    const c4 = Fp.mul(Fp.mul(four, Fp.neg(c1)), Fp.inv(Fp.add(Fp.mul(three, Fp.mul(opts.Z, opts.Z)), Fp.mul(four, opts.A))));\n    // Input: u, an element of F.\n    // Output: (x, y), a point on E.\n    return (u) => {\n        // prettier-ignore\n        let tv1, tv2, tv3, tv4, x1, gx1, e1, x2, gx2, e2, x3, x, gx, y, e3;\n        tv1 = Fp.mul(u, u);\n        tv1 = Fp.mul(tv1, c1);\n        tv2 = Fp.add(Fp.ONE, tv1);\n        tv1 = Fp.sub(Fp.ONE, tv1);\n        tv3 = Fp.mul(tv1, tv2);\n        tv3 = Fp.inv(tv3);\n        tv4 = Fp.mul(u, tv1);\n        tv4 = Fp.mul(tv4, tv3);\n        tv4 = Fp.mul(tv4, c3);\n        x1 = Fp.sub(c2, tv4);\n        gx1 = Fp.mul(x1, x1);\n        gx1 = Fp.add(gx1, opts.A);\n        gx1 = Fp.mul(gx1, x1);\n        gx1 = Fp.add(gx1, opts.B);\n        e1 = isSquare(gx1);\n        x2 = Fp.add(c2, tv4);\n        gx2 = Fp.mul(x2, x2);\n        gx2 = Fp.add(gx2, opts.A);\n        gx2 = Fp.mul(gx2, x2);\n        gx2 = Fp.add(gx2, opts.B);\n        e2 = isSquare(gx2) && !e1;\n        x3 = Fp.mul(tv2, tv2);\n        x3 = Fp.mul(x3, tv3);\n        x3 = Fp.mul(x3, x3);\n        x3 = Fp.mul(x3, c4);\n        x3 = Fp.add(x3, opts.Z);\n        x = Fp.cmov(x3, x1, !!e1);\n        x = Fp.cmov(x, x2, !!e2);\n        gx = Fp.mul(x, x);\n        gx = Fp.add(gx, opts.A);\n        gx = Fp.mul(gx, x);\n        gx = Fp.add(gx, opts.B);\n        y = Fp.sqrt(gx);\n        e3 = Fp.isOdd(u) === Fp.isOdd(y);\n        y = Fp.cmov(Fp.neg(y), y, e3);\n        return { x, y };\n    };\n}\nconst G1_SVDW = mapToCurveSVDW(Fp, {\n    A: Fp.ZERO,\n    B: _3n,\n    Z: Fp.ONE,\n});\nconst mapToCurveG1 = (scalars) => G1_SVDW(scalars[0]);\n/*\nHash-to-curve & signatures implemented to drand evmnet specs.\n- Uses SVDW, test vectors generated using Sage reference implementation\n- Signatures on G1 only\n- No support for compressed points\n- Uses keccak256 for hashing\n*/\nconst drandHtf = Object.freeze({\n    // DST: a domain separation tag\n    // defined in section 2.2.5\n    // Use utils.getDSTLabel(), utils.setDSTLabel(value)\n    DST: 'BLS_SIG_BN254G1_XMD:KECCAK-256_SVDW_RO_NUL_',\n    encodeDST: 'BLS_SIG_BN254G1_XMD:KECCAK-256_SVDW_RO_NUL_',\n    // p: the characteristic of F\n    //    where F is a finite field of characteristic p and order q = p^m\n    p: Fp.ORDER,\n    // m: the extension degree of F, m >= 1\n    //     where F is a finite field of characteristic p and order q = p^m\n    m: 1,\n    // k: the target security level for the suite in bits\n    // defined in section 5.1\n    k: 128,\n    // option to use a message that has already been processed by\n    // expand_message_xmd\n    expand: 'xmd',\n    // NB: We use keccak_256 to hash-to-curve for bn254 drand, as it is the\n    // cheapest hash function in the EVM.\n    hash: sha3_1.keccak_256,\n});\n/**\n * bn254 (a.k.a. alt_bn128) pairing-friendly curve.\n * Contains G1 / G2 operations and pairings.\n */\nexports.bn254 = (0, bls_1.bls)({\n    // Fields\n    fields: { Fp, Fp2, Fp6, Fp12, Fr },\n    G1: {\n        Fp,\n        h: BigInt(1),\n        Gx: BigInt(1),\n        Gy: BigInt(2),\n        a: Fp.ZERO,\n        b: _3n,\n        htfDefaults: { ...drandHtf, m: 1 },\n        wrapPrivateKey: true,\n        allowInfinityPoint: true,\n        mapToCurve: mapToCurveG1,\n        fromBytes: (bytes) => {\n            // Deserialise from Kyber format\n            const p = [bytes.slice(0, 32), bytes.slice(32, 64)].map((buf) => (0, utils_3.bytesToNumberBE)(buf));\n            const point = { x: Fp.create(p[0]), y: Fp.create(p[1]) };\n            exports.bn254.G1.ProjectivePoint.fromAffine(point).assertValidity();\n            return point;\n        },\n        toBytes: (c, point, _isCompressed) => {\n            // Serialise to Kyber format\n            const isZero = point.equals(c.ZERO);\n            const { x, y } = point.toAffine();\n            const { BYTES: len } = Fp;\n            if (isZero) {\n                return new Uint8Array(len);\n            }\n            return (0, utils_2.concatBytes)((0, utils_3.numberToBytesBE)(x, len), (0, utils_3.numberToBytesBE)(y, len));\n        },\n        ShortSignature: {\n            fromHex(hex) {\n                return exports.bn254.G1.ProjectivePoint.fromHex(hex);\n            },\n            toRawBytes(point) {\n                return point.toRawBytes();\n            },\n            toHex(point) {\n                return point.toHex();\n            },\n        },\n    },\n    G2: {\n        Fp: Fp2,\n        // cofactor: (36 * X^4) + (36 * X^3) + (30 * X^2) + 6*X + 1\n        h: BigInt('21888242871839275222246405745257275088844257914179612981679871602714643921549'),\n        Gx: Fp2.fromBigTuple([\n            BigInt('10857046999023057135944570762232829481370756359578518086990519993285655852781'),\n            BigInt('11559732032986387107991004021392285783925812861821192530917403151452391805634'),\n        ]),\n        Gy: Fp2.fromBigTuple([\n            BigInt('8495653923123431417604973247489272438418190587263600148770280649306958101930'),\n            BigInt('4082367875863433681332203403145435568316851327593401208105741076214120093531'),\n        ]),\n        a: Fp2.ZERO,\n        b: Fp2B,\n        hEff: BigInt('21888242871839275222246405745257275088844257914179612981679871602714643921549'),\n        htfDefaults: { ...drandHtf, m: 2 },\n        wrapPrivateKey: true,\n        allowInfinityPoint: true,\n        isTorsionFree: (c, P) => P.multiplyUnsafe(SIX_X_SQUARED).equals(G2psi(c, P)), // [p]P = [6X^2]P\n        mapToCurve: utils_2.notImplemented,\n        fromBytes: (bytes) => {\n            // Deserialise from Kyber format\n            const p = [\n                bytes.slice(32, 64),\n                bytes.slice(0, 32),\n                bytes.slice(96, 128),\n                bytes.slice(64, 96),\n            ].map((buf) => (0, utils_3.bytesToNumberBE)(buf));\n            const x = Fp2.create({ c0: p[0], c1: p[1] });\n            const y = Fp2.create({ c0: p[2], c1: p[3] });\n            exports.bn254.G2.ProjectivePoint.fromAffine({ x, y }).assertValidity();\n            return { x, y };\n        },\n        toBytes: (c, point, _isCompressed) => {\n            // Serialise to Kyber format. No point compression.\n            // https://github.com/drand/kyber/blob/master/pairing/bn254/point.go#L415\n            const { BYTES: len } = Fp;\n            const isZero = point.equals(c.ZERO);\n            const { x, y } = point.toAffine();\n            const marshalSize = 4 * len;\n            if (isZero) {\n                // Kyber returns zero bytes for point at infinity\n                return new Uint8Array(marshalSize);\n            }\n            // Kyber format is x = b + ai\n            const { re: x0, im: x1 } = Fp2.reim(x);\n            const { re: y0, im: y1 } = Fp2.reim(y);\n            return (0, utils_2.concatBytes)((0, utils_3.numberToBytesBE)(x1, len), (0, utils_3.numberToBytesBE)(x0, len), (0, utils_3.numberToBytesBE)(y1, len), (0, utils_3.numberToBytesBE)(y0, len));\n        },\n        Signature: {\n            fromHex(hex) {\n                return exports.bn254.G2.ProjectivePoint.fromHex(hex);\n            },\n            toRawBytes(point) {\n                return point.toRawBytes();\n            },\n            toHex(point) {\n                return point.toHex();\n            },\n        },\n    },\n    params: {\n        ateLoopSize: BN_X * _6n + _2n,\n        r: Fr.ORDER,\n        xNegative: false,\n        twistType: 'divisive',\n    },\n    htfDefaults: drandHtf,\n    hash: sha3_1.keccak_256,\n    randomBytes: utils_1.randomBytes,\n    postPrecompute: (Rx, Ry, Rz, Qx, Qy, pointAdd) => {\n        const q = psi(Qx, Qy);\n        ({ Rx, Ry, Rz } = pointAdd(Rx, Ry, Rz, q[0], q[1]));\n        const q2 = psi(q[0], q[1]);\n        pointAdd(Rx, Ry, Rz, q2[0], Fp2.neg(q2[1]));\n    },\n});\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./bn254\"), exports);\n", "import {bn254} from \"@kevincharm/noble-bn254-drand\"\nimport {randomBytes} from \"@noble/hashes/utils\"\n\n// these are some helper wrappers so you don't end up passing the wrong byte array to the wrong function.\n// most functions take both variants anyway\nexport type SecretKey = { sk: Uint8Array }\nexport type PublicKey = { pk: Uint8Array }\nexport type PublicKeyShare = { index: bigint, pk: Uint8Array }\nexport type SecretKeyShare = { index: bigint, share: bigint }\n\nexport function createPrivateKey(): SecretKey {\n    return {sk: bn254.utils.randomPrivateKey()}\n}\n\nexport function createPublicKey(secretKey: SecretKey | Uint8Array): PublicKey {\n    const sk = secretKey instanceof Uint8Array ? secretKey : secretKey.sk\n    const fieldElement = bn254.fields.Fr.fromBytes(sk)\n    const pk = bn254.G2.ProjectivePoint.BASE.multiply(fieldElement)\n    return {pk: pk.toRawBytes()}\n}\n\nexport function createPublicKeyShare(secretKeyShare: SecretKeyShare): PublicKeyShare {\n    return {\n        index: secretKeyShare.index,\n        pk: bn254.G2.ProjectivePoint.BASE.multiply(secretKeyShare.share).toRawBytes()\n    }\n}\n\nexport function sign(secretKey: SecretKey | Uint8Array, message: Uint8Array): Uint8Array {\n    const sk = secretKey instanceof Uint8Array ? secretKey : secretKey.sk\n    return bn254.signShortSignature(message, sk)\n}\n\nexport function signPartial(secretKeyShare: SecretKeyShare, message: Uint8Array): Uint8Array {\n    const share = secretKeyShare instanceof Uint8Array ? secretKeyShare : secretKeyShare.share\n    return bn254.signShortSignature(message, share)\n}\n\nexport function verify(publicKey: PublicKey | Uint8Array, message: Uint8Array, signature: Uint8Array): boolean {\n    const pk = publicKey instanceof Uint8Array ? publicKey : publicKey.pk\n    return bn254.verifyShortSignature(signature, message, pk)\n}\n\nexport function verifyPartial(publicKey: PublicKeyShare | Uint8Array, message: Uint8Array, partialSignature: PartialSignature | Uint8Array): boolean {\n    const sig = partialSignature instanceof Uint8Array ? partialSignature : partialSignature.signature\n    const pk = publicKey instanceof Uint8Array ? publicKey : publicKey.pk\n    return bn254.verifyShortSignature(sig, message, pk)\n}\n\nexport type PartialSignature = { index: bigint, signature: Uint8Array }\nconst Fr = bn254.fields.Fr\n\n// aggregatePartialSignatures takes an array of partial signatures and creates a final group signature\n// (presuming there are threshold or more partials!)\nexport function aggregateGroupSignature(partials: Array<PartialSignature>): Uint8Array {\n    const xs = partials.map((entry) => entry.index)\n    let agg = bn254.G1.ProjectivePoint.ZERO\n\n    for (let i = 0; i < partials.length; i++) {\n        const entry = partials[i]\n        const sig = bn254.G1.ProjectivePoint.fromHex(entry.signature)\n        const term = sig.multiply(lagrangeCoeff0(i, xs))\n        agg = agg.add(term)\n    }\n\n    return agg.toRawBytes()\n}\n\nfunction lagrangeCoeff0(index: number, xs: bigint[]): bigint {\n    const xi = xs[index]\n    if (xi == null) {\n        throw new Error(\"xi expected a value\")\n    }\n    let num = 1n\n    let den = 1n\n    for (let i = 0; i < xs.length; i++) {\n        if (i === index) continue\n        const xj = xs[i]\n        if (xj == null) {\n            throw new Error(\"xj expected a value\")\n        }\n        num = Fr.mul(num, Fr.neg(xj))      // (0 \u2212 xj)\n        den = Fr.mul(den, Fr.sub(xi, xj))  // (xi \u2212 xj)\n    }\n    return Fr.div(num, den)\n}\n\n// split splits a secret key into `n` shares with threshold `t`\nexport function split(secretKey: SecretKey | Uint8Array, numberOfShares: number, threshold: number): Array<SecretKeyShare> {\n    const sk = secretKey instanceof Uint8Array ? secretKey : secretKey.sk\n    if (threshold > numberOfShares) {\n        throw new Error(\"threshold can'threshold be lower than node count - you probably have the parameters the wrong way round\")\n    }\n    if (threshold < 2) {\n        throw new Error(\"threshold less than two means everyone can recover the secret\")\n    }\n\n    // sample random polynomial of degree (threshold-1), evaluations[0]=secret\n    const evaluations: bigint[] = [encodeBigint(sk)]\n    for (let i = 1; i < threshold; i++) {\n        evaluations.push(randomFr())\n    }\n\n    // evaluate at x = 1..numberOfShares\n    const shares: Array<SecretKeyShare> = []\n    for (let x = 1n; x <= numberOfShares; x++) {\n        let share = 0n\n        // horner\u2019s method: share = evaluations[0] + evaluations[1]*x + ... + evaluations[threshold-1]*x^(threshold-1)\n        for (let i = evaluations.length - 1; i >= 0; i--) {\n            const rhs = evaluations[i]\n            if (rhs == null) {\n                throw new Error(\"invalid split\")\n            }\n            share = bn254.fields.Fr.add(bn254.fields.Fr.mul(share, x), rhs)\n        }\n        shares.push({index: x, share})\n    }\n\n    return shares\n}\n\nfunction randomFr(): bigint {\n    while (true) {\n        const fr = encodeBigint(randomBytes(bn254.fields.Fr.BYTES))\n        if (fr < bn254.fields.Fr.ORDER) {\n            return fr\n        }\n    }\n}\n\nfunction encodeBigint(input: Uint8Array): bigint {\n    return bn254.fields.Fr.fromBytes(input)\n}\n", "// We prefer WebCrypto aka globalThis.crypto, which exists in node.js 16+.\n// Falls back to Node.js built-in crypto for Node.js <=v14\n// See utils.ts for details.\n// @ts-ignore\nimport * as nc from 'node:crypto';\nexport const crypto =\n  nc && typeof nc === 'object' && 'webcrypto' in nc\n    ? (nc.webcrypto as any)\n    : nc && typeof nc === 'object' && 'randomBytes' in nc\n      ? nc\n      : undefined;\n", "/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\nimport { bytes as abytes } from './_assert.js';\n// export { isBytes } from './_assert.js';\n// We can't reuse isBytes from _assert, because somehow this causes huge perf issues\nexport function isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n// Cast array to different type\nexport const u8 = (arr: TypedArray) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr: TypedArray) =>\n  new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n\n// Cast array to view\nexport const createView = (arr: TypedArray) =>\n  new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word: number, shift: number) => (word << (32 - shift)) | (word >>> shift);\n// The rotate left (circular left shift) operation for uint32\nexport const rotl = (word: number, shift: number) =>\n  (word << shift) | ((word >>> (32 - shift)) >>> 0);\n\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\n// The byte swap operation for uint32\nexport const byteSwap = (word: number) =>\n  ((word << 24) & 0xff000000) |\n  ((word << 8) & 0xff0000) |\n  ((word >>> 8) & 0xff00) |\n  ((word >>> 24) & 0xff);\n// Conditionally byte swap if on a big-endian platform\nexport const byteSwapIfBE = isLE ? (n: number) => n : (n: number) => byteSwap(n);\n\n// In place byte swap for Uint32Array\nexport function byteSwap32(arr: Uint32Array) {\n  for (let i = 0; i < arr.length; i++) {\n    arr[i] = byteSwap(arr[i]);\n  }\n}\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  abytes(bytes);\n  // pre-caching improves the speed 6x\n  let hex = '';\n  for (let i = 0; i < bytes.length; i++) {\n    hex += hexes[bytes[i]];\n  }\n  return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, _A: 65, _F: 70, _a: 97, _f: 102 } as const;\nfunction asciiToBase16(char: number): number | undefined {\n  if (char >= asciis._0 && char <= asciis._9) return char - asciis._0;\n  if (char >= asciis._A && char <= asciis._F) return char - (asciis._A - 10);\n  if (char >= asciis._a && char <= asciis._f) return char - (asciis._a - 10);\n  return;\n}\n\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const hl = hex.length;\n  const al = hl / 2;\n  if (hl % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + hl);\n  const array = new Uint8Array(al);\n  for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n    const n1 = asciiToBase16(hex.charCodeAt(hi));\n    const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n    if (n1 === undefined || n2 === undefined) {\n      const char = hex[hi] + hex[hi + 1];\n      throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n    }\n    array[ai] = n1 * 16 + n2;\n  }\n  return array;\n}\n\n// There is no setImmediate in browser and setTimeout is slow.\n// call of async fn will return Promise, which will be fullfiled only on\n// next scheduler queue processing step and this is exactly what we need.\nexport const nextTick = async () => {};\n\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters: number, tick: number, cb: (i: number) => void) {\n  let ts = Date.now();\n  for (let i = 0; i < iters; i++) {\n    cb(i);\n    // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n    const diff = Date.now() - ts;\n    if (diff >= 0 && diff < tick) continue;\n    await nextTick();\n    ts += diff;\n  }\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\nexport type Input = Uint8Array | string;\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data: Input): Uint8Array {\n  if (typeof data === 'string') data = utf8ToBytes(data);\n  abytes(data);\n  return data;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  let sum = 0;\n  for (let i = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    abytes(a);\n    sum += a.length;\n  }\n  const res = new Uint8Array(sum);\n  for (let i = 0, pad = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    res.set(a, pad);\n    pad += a.length;\n  }\n  return res;\n}\n\n// For runtime check if class implements interface\nexport abstract class Hash<T extends Hash<T>> {\n  abstract blockLen: number; // Bytes per block\n  abstract outputLen: number; // Bytes in output\n  abstract update(buf: Input): this;\n  // Writes digest into buf\n  abstract digestInto(buf: Uint8Array): void;\n  abstract digest(): Uint8Array;\n  /**\n   * Resets internal state. Makes Hash instance unusable.\n   * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n   * by user, they will need to manually call `destroy()` when zeroing is necessary.\n   */\n  abstract destroy(): void;\n  /**\n   * Clones hash instance. Unsafe: doesn't check whether `to` is valid. Can be used as `clone()`\n   * when no options are passed.\n   * Reasons to use `_cloneInto` instead of clone: 1) performance 2) reuse instance => all internal\n   * buffers are overwritten => causes buffer overwrite which is used for digest in some cases.\n   * There are no guarantees for clean-up because it's impossible in JS.\n   */\n  abstract _cloneInto(to?: T): T;\n  // Safe version that clones internal state\n  clone(): T {\n    return this._cloneInto();\n  }\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n  xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n  xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\nconst toStr = {}.toString;\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && toStr.call(opts) !== '[object Object]')\n    throw new Error('Options should be object or undefined');\n  const merged = Object.assign(defaults, opts);\n  return merged as T1 & T2;\n}\n\nexport type CHash = ReturnType<typeof wrapConstructor>;\n\nexport function wrapConstructor<T extends Hash<T>>(hashCons: () => Hash<T>) {\n  const hashC = (msg: Input): Uint8Array => hashCons().update(toBytes(msg)).digest();\n  const tmp = hashCons();\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = () => hashCons();\n  return hashC;\n}\n\nexport function wrapConstructorWithOpts<H extends Hash<H>, T extends Object>(\n  hashCons: (opts?: T) => Hash<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\nexport function wrapXOFConstructorWithOpts<H extends HashXOF<H>, T extends Object>(\n  hashCons: (opts?: T) => HashXOF<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n  if (crypto && typeof crypto.getRandomValues === 'function') {\n    return crypto.getRandomValues(new Uint8Array(bytesLength));\n  }\n  // Legacy Node.js compatibility\n  if (crypto && typeof crypto.randomBytes === 'function') {\n    return crypto.randomBytes(bytesLength);\n  }\n  throw new Error('crypto.getRandomValues must be defined');\n}\n"],
  "mappings": "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",
  "names": ["nc", "exports", "exports", "exports", "randomBytes", "toStr", "exports", "exports", "isLE", "exports", "exports", "wbits", "exports", "a", "randomBytes", "sign", "verify", "r", "s", "tv5", "c1", "c2", "exports", "Fr", "sign", "verify", "msg", "exports", "exports", "split", "exports", "exports", "mod", "Fr", "num", "Fp", "exports"]
}
