{"version":3,"sources":["../../airaccount/src/auth/passkey/passkey.manager.ts","../../airaccount/src/core/tier/types.ts","../../../node_modules/.pnpm/@noble+hashes@2.0.1/node_modules/@noble/hashes/src/utils.ts","../../../node_modules/.pnpm/@noble+hashes@2.0.1/node_modules/@noble/hashes/src/_md.ts","../../../node_modules/.pnpm/@noble+hashes@2.0.1/node_modules/@noble/hashes/src/sha2.ts","../../../node_modules/.pnpm/@noble+curves@2.0.1/node_modules/@noble/curves/src/utils.ts","../../../node_modules/.pnpm/@noble+curves@2.0.1/node_modules/@noble/curves/src/abstract/modular.ts","../../../node_modules/.pnpm/@noble+curves@2.0.1/node_modules/@noble/curves/src/abstract/curve.ts","../../../node_modules/.pnpm/@noble+curves@2.0.1/node_modules/@noble/curves/src/abstract/hash-to-curve.ts","../../../node_modules/.pnpm/@noble+hashes@2.0.1/node_modules/@noble/hashes/src/hmac.ts","../../../node_modules/.pnpm/@noble+curves@2.0.1/node_modules/@noble/curves/src/abstract/weierstrass.ts","../../../node_modules/.pnpm/@noble+curves@2.0.1/node_modules/@noble/curves/src/abstract/bls.ts","../../../node_modules/.pnpm/@noble+curves@2.0.1/node_modules/@noble/curves/src/abstract/tower.ts","../../../node_modules/.pnpm/@noble+curves@2.0.1/node_modules/@noble/curves/src/bls12-381.ts","../../../node_modules/.pnpm/@noble+curves@2.0.1/node_modules/@noble/curves/src/nist.ts","../../airaccount/src/migration/viem/bls-packing.ts","../../airaccount/src/core/bls/bls.manager.ts","../../airaccount/src/client.ts","../../airaccount/src/core/erc4337/utils.ts","../../airaccount/src/migration/viem/abi-encoding.ts","../../airaccount/src/migration/viem/hashing.ts","../../airaccount/src/core/erc4337/userop.builder.ts","../../airaccount/src/core/tier/tier-router.ts","../../airaccount/src/core/tier/resolve-transfer.ts","../../airaccount/src/core/tier/profile.ts","../../airaccount/src/core/dvt-confirmation.ts","../../airaccount/src/core/contact-binding.ts","../../airaccount/src/index.ts"],"names":["axios","startRegistration","startAuthentication","fields","_0n","_1n","Fp","createHasher","_2n","_3n","_4n","endo","tv5","c1","c2","randomBytes","hmac","size","r","s","Fp2","Fp12","msg","G1_Point","G2_Point","Fp6","signatureCoders","G2psi","G2psi2","sortNodeIdsAscending","encodePacked","encodeCommitteeBLSBlock","ALG_CUMULATIVE_T2_WA","ALG_CUMULATIVE_T3_WA","hexToBytes","numberToHex","encodeAbiParameters","bytesToHex","stringToBytes","concat","isHex","parseAbiParameters","viemKeccak256","AAStarAirAccountV7ABI","GuardClient","PolicyRegistryABI","parseEther","encodeFunctionData","opDataModifyTierLimits","keccak256","GUARDIAN_SIG_VERSION","__export"],"mappings":"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","file":"chunk-MYW4HNOG.cjs","sourcesContent":["import axios, { AxiosInstance } from \"axios\";\nimport { startRegistration, startAuthentication } from \"@simplewebauthn/browser\";\nimport {\n  PasskeyRegistrationParams,\n  PasskeyAuthenticationParams,\n  PasskeyInfo,\n  BeginRegistrationResponse,\n  BeginAuthenticationResponse,\n  TransactionVerificationParams,\n  BeginTransactionVerificationResponse,\n} from \"./types\";\n\n/**\n * Configurable backend routes for the passkey (WebAuthn) flows.\n *\n * These default paths are the standardized contract served by AAStar's\n * `@aastar/passkey-server` (any compatible RP exposing the same endpoints).\n * They are NOT specific to any single backend. Consumers pointing at a\n * different backend can override individual paths without changing code.\n */\nexport interface PasskeyRoutes {\n  /** POST — begin passkey registration. Default: `/auth/passkey/register/begin` */\n  registerBegin: string;\n  /** POST — complete passkey registration. Default: `/auth/passkey/register/complete` */\n  registerComplete: string;\n  /** POST — begin passkey login/authentication. Default: `/auth/passkey/login/begin` */\n  loginBegin: string;\n  /** POST — complete passkey login/authentication. Default: `/auth/passkey/login/complete` */\n  loginComplete: string;\n  /** POST — begin adding a new device (passkey). Default: `/auth/device/passkey/begin` */\n  deviceBegin: string;\n  /** POST — complete adding a new device (passkey). Default: `/auth/device/passkey/complete` */\n  deviceComplete: string;\n  /** POST — begin transaction verification. Default: `/auth/transaction/verify/begin` */\n  transactionVerifyBegin: string;\n}\n\n/**\n * Default passkey routes — the standardized `@aastar/passkey-server` contract.\n */\nexport const DEFAULT_PASSKEY_ROUTES: PasskeyRoutes = {\n  registerBegin: \"/auth/passkey/register/begin\",\n  registerComplete: \"/auth/passkey/register/complete\",\n  loginBegin: \"/auth/passkey/login/begin\",\n  loginComplete: \"/auth/passkey/login/complete\",\n  deviceBegin: \"/auth/device/passkey/begin\",\n  deviceComplete: \"/auth/device/passkey/complete\",\n  transactionVerifyBegin: \"/auth/transaction/verify/begin\",\n};\n\nexport class PasskeyManager {\n  private api: AxiosInstance;\n  private routes: PasskeyRoutes;\n\n  constructor(\n    baseURL: string,\n    tokenProvider?: () => string | null,\n    routes?: Partial<PasskeyRoutes>\n  ) {\n    // Merge any overrides over the standardized defaults so behavior is\n    // identical when no override is given.\n    this.routes = { ...DEFAULT_PASSKEY_ROUTES, ...routes };\n\n    this.api = axios.create({\n      baseURL,\n      headers: {\n        \"Content-Type\": \"application/json\",\n      },\n    });\n\n    // Add auth interceptor\n    if (tokenProvider) {\n      this.api.interceptors.request.use(config => {\n        const token = tokenProvider();\n        if (token) {\n          config.headers.Authorization = `Bearer ${token}`;\n        }\n        return config;\n      });\n    }\n  }\n\n  /**\n   * Complete Passkey Registration Flow\n   */\n  async register(\n    params: PasskeyRegistrationParams\n  ): Promise<{ user: any; token: string; passkey: PasskeyInfo }> {\n    // 1. Begin Registration (Get options from backend)\n    const beginResponse = await this.api.post<BeginRegistrationResponse>(\n      this.routes.registerBegin,\n      params\n    );\n\n    // 2. Client-side WebAuthn (Browser UI)\n    // @ts-expect-error - simplewebauthn types mismatch sometimes\n    const credential = await startRegistration(beginResponse.data);\n\n    // 3. Complete Registration (Verify with backend)\n    const completeResponse = await this.api.post(this.routes.registerComplete, {\n      email: params.email,\n      username: params.username,\n      password: params.password,\n      credential,\n    });\n\n    return completeResponse.data;\n  }\n\n  /**\n   * Complete Passkey Login/Authentication Flow\n   */\n  async authenticate(params?: PasskeyAuthenticationParams): Promise<{ user: any; token: string }> {\n    // 1. Begin Authentication\n    const beginResponse = await this.api.post<BeginAuthenticationResponse>(\n      this.routes.loginBegin,\n      params\n    );\n\n    // 2. Client-side WebAuthn\n    const credential = await startAuthentication(beginResponse.data as any);\n\n    // 3. Complete Authentication\n    const completeResponse = await this.api.post(this.routes.loginComplete, { credential });\n\n    return completeResponse.data;\n  }\n\n  /**\n   * Verify a transaction (Sign UserOpHash) with Passkey\n   * Returns the verification credential needed for the transaction\n   */\n  async verifyTransaction(params: TransactionVerificationParams): Promise<any> {\n    // 1. Begin Verification (Get challenge based on tx params)\n    const beginResponse = await this.api.post<BeginTransactionVerificationResponse>(\n      this.routes.transactionVerifyBegin,\n      { transaction: params }\n    );\n\n    const { userOpHash, ...authOptions } = beginResponse.data;\n\n    // 2. Client-side WebAuthn (Sign the challenge)\n    const credential = await startAuthentication(authOptions as any);\n\n    // NOTE: We don't complete the verification here immediately.\n    // The credential is sent along with the transaction to be verified during execution.\n    // But for some flows, we might want to verify it pre-execution:\n\n    // Optional: Verify on backend immediately (if API supports it)\n    // await this.api.post(\"/auth/transaction/verify/complete\", { credential });\n\n    return {\n      credential,\n      userOpHash, // Return pre-calculated hash to ensure consistency\n    };\n  }\n\n  /**\n   * Add a new device (Passkey) to existing account\n   */\n  async addDevice(params: { email: string; password?: string }): Promise<PasskeyInfo> {\n    // 1. Begin Device Add\n    const beginResponse = await this.api.post<BeginRegistrationResponse>(\n      this.routes.deviceBegin,\n      params\n    );\n\n    // 2. WebAuthn\n    // @ts-expect-error - simplewebauthn types mismatch sometimes\n    const credential = await startRegistration(beginResponse.data);\n\n    // 3. Complete\n    const completeResponse = await this.api.post(this.routes.deviceComplete, {\n      email: params.email,\n      password: params.password,\n      credential,\n    });\n\n    return completeResponse.data.passkey;\n  }\n}\n","// ─── Algorithm IDs (matches AAStarAirAccountBase constants) ─────\n\nexport const ALG_BLS = 0x01;\nexport const ALG_ECDSA = 0x02;\nexport const ALG_P256 = 0x03;\nexport const ALG_CUMULATIVE_T2 = 0x04; // raw-P256 + BLS\nexport const ALG_CUMULATIVE_T3 = 0x05; // raw-P256 + BLS + Guardian ECDSA\nexport const ALG_CUMULATIVE_T2_WA = 0x09; // WebAuthn(device-passkey) + BLS\nexport const ALG_CUMULATIVE_T3_WA = 0x0a; // WebAuthn(device-passkey) + BLS + Guardian ECDSA\n\nexport type AlgId =\n  | typeof ALG_BLS\n  | typeof ALG_ECDSA\n  | typeof ALG_P256\n  | typeof ALG_CUMULATIVE_T2\n  | typeof ALG_CUMULATIVE_T3\n  | typeof ALG_CUMULATIVE_T2_WA\n  | typeof ALG_CUMULATIVE_T3_WA;\n\n// ─── Tier Levels ───────────────────────────────────────────────\n\nexport type TierLevel = 1 | 2 | 3;\n\nexport interface TierConfig {\n  /** Max value for Tier 1 (single ECDSA/Passkey). 0 = no enforcement. */\n  tier1Limit: bigint;\n  /** Max value for Tier 2 (P256 + BLS). 0 = no enforcement. */\n  tier2Limit: bigint;\n}\n\n// ─── Guard Status ──────────────────────────────────────────────\n\nexport interface GuardStatus {\n  hasGuard: boolean;\n  guardAddress: string;\n  dailyLimit: bigint;\n  dailyRemaining: bigint;\n}\n\n// ─── Pre-check result ──────────────────────────────────────────\n\nexport interface PreCheckResult {\n  ok: boolean;\n  errors: string[];\n  tier: TierLevel;\n  algId: AlgId;\n}\n","/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a: unknown): a is Uint8Array {\n  return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\n/** Asserts something is positive integer. */\nexport function anumber(n: number, title: string = ''): void {\n  if (!Number.isSafeInteger(n) || n < 0) {\n    const prefix = title && `\"${title}\" `;\n    throw new Error(`${prefix}expected integer >= 0, got ${n}`);\n  }\n}\n\n/** Asserts something is Uint8Array. */\nexport function abytes(value: Uint8Array, length?: number, title: string = ''): Uint8Array {\n  const bytes = isBytes(value);\n  const len = value?.length;\n  const needsLen = length !== undefined;\n  if (!bytes || (needsLen && len !== length)) {\n    const prefix = title && `\"${title}\" `;\n    const ofLen = needsLen ? ` of length ${length}` : '';\n    const got = bytes ? `length=${len}` : `type=${typeof value}`;\n    throw new Error(prefix + 'expected Uint8Array' + ofLen + ', got ' + got);\n  }\n  return value;\n}\n\n/** Asserts something is hash */\nexport function ahash(h: CHash): void {\n  if (typeof h !== 'function' || typeof h.create !== 'function')\n    throw new Error('Hash must wrapped by utils.createHasher');\n  anumber(h.outputLen);\n  anumber(h.blockLen);\n}\n\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance: any, checkFinished = true): void {\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}\n\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out: any, instance: any): void {\n  abytes(out, undefined, 'digestInto() output');\n  const min = instance.outputLen;\n  if (out.length < min) {\n    throw new Error('\"digestInto() output\" expected to be of length >=' + min);\n  }\n}\n\n/** Generic type encompassing 8/16/32-byte arrays - but not 64-byte. */\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr: TypedArray): Uint8Array {\n  return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr: TypedArray): Uint32Array {\n  return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays: TypedArray[]): void {\n  for (let i = 0; i < arrays.length; i++) {\n    arrays[i].fill(0);\n  }\n}\n\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr: TypedArray): DataView {\n  return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word: number, shift: number): number {\n  return (word << (32 - shift)) | (word >>> shift);\n}\n\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word: number, shift: number): number {\n  return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE: boolean = /* @__PURE__ */ (() =>\n  new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n\n/** The byte swap operation for uint32 */\nexport function byteSwap(word: number): number {\n  return (\n    ((word << 24) & 0xff000000) |\n    ((word << 8) & 0xff0000) |\n    ((word >>> 8) & 0xff00) |\n    ((word >>> 24) & 0xff)\n  );\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE: (n: number) => number = isLE\n  ? (n: number) => n\n  : (n: number) => byteSwap(n);\n\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr: Uint32Array): Uint32Array {\n  for (let i = 0; i < arr.length; i++) {\n    arr[i] = byteSwap(arr[i]);\n  }\n  return arr;\n}\n\nexport const swap32IfBE: (u: Uint32Array) => Uint32Array = isLE\n  ? (u: Uint32Array) => u\n  : byteSwap32;\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin: boolean = /* @__PURE__ */ (() =>\n  // @ts-ignore\n  typeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\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/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  abytes(bytes);\n  // @ts-ignore\n  if (hasHexBuiltin) return bytes.toHex();\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(ch: number): number | undefined {\n  if (ch >= asciis._0 && ch <= asciis._9) return ch - asciis._0; // '2' => 50-48\n  if (ch >= asciis.A && ch <= asciis.F) return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n  if (ch >= asciis.a && ch <= asciis.f) return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n  return;\n}\n\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\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  // @ts-ignore\n  if (hasHexBuiltin) return Uint8Array.fromHex(hex);\n  const hl = hex.length;\n  const al = hl / 2;\n  if (hl % 2) throw new Error('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; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n  }\n  return array;\n}\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.\n */\nexport const nextTick = async (): Promise<void> => {};\n\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(\n  iters: number,\n  tick: number,\n  cb: (i: number) => void\n): Promise<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, but ts doesn't see them: https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * Converts string to bytes using UTF8 encoding.\n * Built-in doesn't validate input to be string: we do the check.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error('string expected');\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n/** KDFs can accept string or Uint8Array for user convenience. */\nexport type KDFInput = string | Uint8Array;\n\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data: KDFInput, errorTitle = ''): Uint8Array {\n  if (typeof data === 'string') return utf8ToBytes(data);\n  return abytes(data, undefined, errorTitle);\n}\n\n/** Copies several Uint8Arrays into one. */\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\ntype EmptyObj = {};\n/** Merges default options and passed options. */\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n    throw new Error('options must be object or undefined');\n  const merged = Object.assign(defaults, opts);\n  return merged as T1 & T2;\n}\n\n/** Common interface for all hashes. */\nexport interface Hash<T> {\n  blockLen: number; // Bytes per block\n  outputLen: number; // Bytes in output\n  update(buf: Uint8Array): this;\n  digestInto(buf: Uint8Array): void;\n  digest(): Uint8Array;\n  destroy(): void;\n  _cloneInto(to?: T): T;\n  clone(): T;\n}\n\n/** PseudoRandom (number) Generator */\nexport interface PRG {\n  addEntropy(seed: Uint8Array): void;\n  randomBytes(length: number): Uint8Array;\n  clean(): void;\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\n/** Hash constructor */\nexport type HasherCons<T, Opts = undefined> = Opts extends undefined ? () => T : (opts?: Opts) => T;\n/** Optional hash params. */\nexport type HashInfo = {\n  oid?: Uint8Array; // DER encoded OID in bytes\n};\n/** Hash function */\nexport type CHash<T extends Hash<T> = Hash<any>, Opts = undefined> = {\n  outputLen: number;\n  blockLen: number;\n} & HashInfo &\n  (Opts extends undefined\n    ? {\n        (msg: Uint8Array): Uint8Array;\n        create(): T;\n      }\n    : {\n        (msg: Uint8Array, opts?: Opts): Uint8Array;\n        create(opts?: Opts): T;\n      });\n/** XOF with output */\nexport type CHashXOF<T extends HashXOF<T> = HashXOF<any>, Opts = undefined> = CHash<T, Opts>;\n\n/** Creates function with outputLen, blockLen, create properties from a class constructor. */\nexport function createHasher<T extends Hash<T>, Opts = undefined>(\n  hashCons: HasherCons<T, Opts>,\n  info: HashInfo = {}\n): CHash<T, Opts> {\n  const hashC: any = (msg: Uint8Array, opts?: Opts) => hashCons(opts).update(msg).digest();\n  const tmp = hashCons(undefined);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts?: Opts) => hashCons(opts);\n  Object.assign(hashC, info);\n  return Object.freeze(hashC);\n}\n\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n  const cr = typeof globalThis === 'object' ? (globalThis as any).crypto : null;\n  if (typeof cr?.getRandomValues !== 'function')\n    throw new Error('crypto.getRandomValues must be defined');\n  return cr.getRandomValues(new Uint8Array(bytesLength));\n}\n\n/** Creates OID opts for NIST hashes, with prefix 06 09 60 86 48 01 65 03 04 02. */\nexport const oidNist = (suffix: number): Required<HashInfo> => ({\n  oid: Uint8Array.from([0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, suffix]),\n});\n","/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { abytes, aexists, aoutput, clean, createView, type Hash } from './utils.ts';\n\n/** Choice: a ? b : c */\nexport function Chi(a: number, b: number, c: number): number {\n  return (a & b) ^ (~a & c);\n}\n\n/** Majority function, true if any two inputs is true. */\nexport function Maj(a: number, b: number, c: number): number {\n  return (a & b) ^ (a & c) ^ (b & c);\n}\n\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport abstract class HashMD<T extends HashMD<T>> implements Hash<T> {\n  protected abstract process(buf: DataView, offset: number): void;\n  protected abstract get(): number[];\n  protected abstract set(...args: number[]): void;\n  abstract destroy(): void;\n  protected abstract roundClean(): void;\n\n  readonly blockLen: number;\n  readonly outputLen: number;\n  readonly padOffset: number;\n  readonly isLE: boolean;\n\n  // For partial updates less than block size\n  protected buffer: Uint8Array;\n  protected view: DataView;\n  protected finished = false;\n  protected length = 0;\n  protected pos = 0;\n  protected destroyed = false;\n\n  constructor(blockLen: number, outputLen: number, padOffset: number, isLE: boolean) {\n    this.blockLen = blockLen;\n    this.outputLen = outputLen;\n    this.padOffset = padOffset;\n    this.isLE = isLE;\n    this.buffer = new Uint8Array(blockLen);\n    this.view = createView(this.buffer);\n  }\n  update(data: Uint8Array): this {\n    aexists(this);\n    abytes(data);\n    const { view, buffer, blockLen } = this;\n    const len = data.length;\n    for (let pos = 0; pos < len; ) {\n      const take = Math.min(blockLen - this.pos, len - pos);\n      // Fast path: we have at least one block in input, cast it to view and process\n      if (take === blockLen) {\n        const dataView = createView(data);\n        for (; blockLen <= len - pos; pos += blockLen) this.process(dataView, pos);\n        continue;\n      }\n      buffer.set(data.subarray(pos, pos + take), this.pos);\n      this.pos += take;\n      pos += take;\n      if (this.pos === blockLen) {\n        this.process(view, 0);\n        this.pos = 0;\n      }\n    }\n    this.length += data.length;\n    this.roundClean();\n    return this;\n  }\n  digestInto(out: Uint8Array): void {\n    aexists(this);\n    aoutput(out, this);\n    this.finished = true;\n    // Padding\n    // We can avoid allocation of buffer for padding completely if it\n    // was previously not allocated here. But it won't change performance.\n    const { buffer, view, blockLen, isLE } = this;\n    let { pos } = this;\n    // append the bit '1' to the message\n    buffer[pos++] = 0b10000000;\n    clean(this.buffer.subarray(pos));\n    // we have less than padOffset left in buffer, so we cannot put length in\n    // current block, need process it and pad again\n    if (this.padOffset > blockLen - pos) {\n      this.process(view, 0);\n      pos = 0;\n    }\n    // Pad until full block byte with zeros\n    for (let i = pos; i < blockLen; i++) buffer[i] = 0;\n    // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n    // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n    // So we just write lowest 64 bits of that value.\n    view.setBigUint64(blockLen - 8, BigInt(this.length * 8), isLE);\n    this.process(view, 0);\n    const oview = createView(out);\n    const len = this.outputLen;\n    // NOTE: we do division by 4 later, which must be fused in single op with modulo by JIT\n    if (len % 4) throw new Error('_sha2: outputLen must be aligned to 32bit');\n    const outLen = len / 4;\n    const state = this.get();\n    if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n    for (let i = 0; i < outLen; i++) oview.setUint32(4 * i, state[i], isLE);\n  }\n  digest(): Uint8Array {\n    const { buffer, outputLen } = this;\n    this.digestInto(buffer);\n    const res = buffer.slice(0, outputLen);\n    this.destroy();\n    return res;\n  }\n  _cloneInto(to?: T): T {\n    to ||= new (this.constructor as any)() as T;\n    to.set(...this.get());\n    const { blockLen, buffer, length, finished, destroyed, pos } = this;\n    to.destroyed = destroyed;\n    to.finished = finished;\n    to.length = length;\n    to.pos = pos;\n    if (length % blockLen) to.buffer.set(buffer);\n    return to as unknown as any;\n  }\n  clone(): T {\n    return this._cloneInto();\n  }\n}\n\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexport const SHA256_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n  0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexport const SHA224_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n  0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexport const SHA384_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n  0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n  0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexport const SHA512_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n  0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n  0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n","/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://www.rfc-editor.org/rfc/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nimport { Chi, HashMD, Maj, SHA224_IV, SHA256_IV, SHA384_IV, SHA512_IV } from './_md.ts';\nimport * as u64 from './_u64.ts';\nimport { type CHash, clean, createHasher, oidNist, rotr } from './utils.ts';\n\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n  0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n  0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n  0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\n\n/** Internal 32-byte base SHA2 hash class. */\nabstract class SHA2_32B<T extends SHA2_32B<T>> extends HashMD<T> {\n  // We cannot use array here since array allows indexing by variable\n  // which means optimizer/compiler cannot use registers.\n  protected abstract A: number;\n  protected abstract B: number;\n  protected abstract C: number;\n  protected abstract D: number;\n  protected abstract E: number;\n  protected abstract F: number;\n  protected abstract G: number;\n  protected abstract H: number;\n\n  constructor(outputLen: number) {\n    super(64, outputLen, 8, false);\n  }\n  protected get(): [number, number, number, number, number, number, number, number] {\n    const { A, B, C, D, E, F, G, H } = this;\n    return [A, B, C, D, E, F, G, H];\n  }\n  // prettier-ignore\n  protected set(\n    A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n  ): void {\n    this.A = A | 0;\n    this.B = B | 0;\n    this.C = C | 0;\n    this.D = D | 0;\n    this.E = E | 0;\n    this.F = F | 0;\n    this.G = G | 0;\n    this.H = H | 0;\n  }\n  protected process(view: DataView, offset: number): void {\n    // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n    for (let i = 0; i < 16; i++, offset += 4) SHA256_W[i] = view.getUint32(offset, false);\n    for (let i = 16; i < 64; i++) {\n      const W15 = SHA256_W[i - 15];\n      const W2 = SHA256_W[i - 2];\n      const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n      const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n      SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n    }\n    // Compression function main loop, 64 rounds\n    let { A, B, C, D, E, F, G, H } = this;\n    for (let i = 0; i < 64; i++) {\n      const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n      const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n      const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n      const T2 = (sigma0 + Maj(A, B, C)) | 0;\n      H = G;\n      G = F;\n      F = E;\n      E = (D + T1) | 0;\n      D = C;\n      C = B;\n      B = A;\n      A = (T1 + T2) | 0;\n    }\n    // Add the compressed chunk to the current hash value\n    A = (A + this.A) | 0;\n    B = (B + this.B) | 0;\n    C = (C + this.C) | 0;\n    D = (D + this.D) | 0;\n    E = (E + this.E) | 0;\n    F = (F + this.F) | 0;\n    G = (G + this.G) | 0;\n    H = (H + this.H) | 0;\n    this.set(A, B, C, D, E, F, G, H);\n  }\n  protected roundClean(): void {\n    clean(SHA256_W);\n  }\n  destroy(): void {\n    this.set(0, 0, 0, 0, 0, 0, 0, 0);\n    clean(this.buffer);\n  }\n}\n\n/** Internal SHA2-256 hash class. */\nexport class _SHA256 extends SHA2_32B<_SHA256> {\n  // We cannot use array here since array allows indexing by variable\n  // which means optimizer/compiler cannot use registers.\n  protected A: number = SHA256_IV[0] | 0;\n  protected B: number = SHA256_IV[1] | 0;\n  protected C: number = SHA256_IV[2] | 0;\n  protected D: number = SHA256_IV[3] | 0;\n  protected E: number = SHA256_IV[4] | 0;\n  protected F: number = SHA256_IV[5] | 0;\n  protected G: number = SHA256_IV[6] | 0;\n  protected H: number = SHA256_IV[7] | 0;\n  constructor() {\n    super(32);\n  }\n}\n\n/** Internal SHA2-224 hash class. */\nexport class _SHA224 extends SHA2_32B<_SHA224> {\n  protected A: number = SHA224_IV[0] | 0;\n  protected B: number = SHA224_IV[1] | 0;\n  protected C: number = SHA224_IV[2] | 0;\n  protected D: number = SHA224_IV[3] | 0;\n  protected E: number = SHA224_IV[4] | 0;\n  protected F: number = SHA224_IV[5] | 0;\n  protected G: number = SHA224_IV[6] | 0;\n  protected H: number = SHA224_IV[7] | 0;\n  constructor() {\n    super(28);\n  }\n}\n\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n  '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n  '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n  '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n  '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n  '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n  '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n  '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n  '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n  '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n  '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n  '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n  '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n  '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n  '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n  '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n  '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n  '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n  '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n  '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n  '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\n\n/** Internal 64-byte base SHA2 hash class. */\nabstract class SHA2_64B<T extends SHA2_64B<T>> extends HashMD<T> {\n  // We cannot use array here since array allows indexing by variable\n  // which means optimizer/compiler cannot use registers.\n  // h -- high 32 bits, l -- low 32 bits\n  protected abstract Ah: number;\n  protected abstract Al: number;\n  protected abstract Bh: number;\n  protected abstract Bl: number;\n  protected abstract Ch: number;\n  protected abstract Cl: number;\n  protected abstract Dh: number;\n  protected abstract Dl: number;\n  protected abstract Eh: number;\n  protected abstract El: number;\n  protected abstract Fh: number;\n  protected abstract Fl: number;\n  protected abstract Gh: number;\n  protected abstract Gl: number;\n  protected abstract Hh: number;\n  protected abstract Hl: number;\n\n  constructor(outputLen: number) {\n    super(128, outputLen, 16, false);\n  }\n  // prettier-ignore\n  protected get(): [\n    number, number, number, number, number, number, number, number,\n    number, number, number, number, number, number, number, number\n  ] {\n    const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n    return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n  }\n  // prettier-ignore\n  protected set(\n    Ah: number, Al: number, Bh: number, Bl: number, Ch: number, Cl: number, Dh: number, Dl: number,\n    Eh: number, El: number, Fh: number, Fl: number, Gh: number, Gl: number, Hh: number, Hl: number\n  ): void {\n    this.Ah = Ah | 0;\n    this.Al = Al | 0;\n    this.Bh = Bh | 0;\n    this.Bl = Bl | 0;\n    this.Ch = Ch | 0;\n    this.Cl = Cl | 0;\n    this.Dh = Dh | 0;\n    this.Dl = Dl | 0;\n    this.Eh = Eh | 0;\n    this.El = El | 0;\n    this.Fh = Fh | 0;\n    this.Fl = Fl | 0;\n    this.Gh = Gh | 0;\n    this.Gl = Gl | 0;\n    this.Hh = Hh | 0;\n    this.Hl = Hl | 0;\n  }\n  protected process(view: DataView, offset: number): void {\n    // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n    for (let i = 0; i < 16; i++, offset += 4) {\n      SHA512_W_H[i] = view.getUint32(offset);\n      SHA512_W_L[i] = view.getUint32((offset += 4));\n    }\n    for (let i = 16; i < 80; i++) {\n      // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n      const W15h = SHA512_W_H[i - 15] | 0;\n      const W15l = SHA512_W_L[i - 15] | 0;\n      const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n      const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n      // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n      const W2h = SHA512_W_H[i - 2] | 0;\n      const W2l = SHA512_W_L[i - 2] | 0;\n      const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n      const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n      // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n      const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n      const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n      SHA512_W_H[i] = SUMh | 0;\n      SHA512_W_L[i] = SUMl | 0;\n    }\n    let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n    // Compression function main loop, 80 rounds\n    for (let i = 0; i < 80; i++) {\n      // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n      const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n      const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n      //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n      const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n      const CHIl = (El & Fl) ^ (~El & Gl);\n      // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n      // prettier-ignore\n      const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n      const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n      const T1l = T1ll | 0;\n      // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n      const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n      const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n      const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n      const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n      Hh = Gh | 0;\n      Hl = Gl | 0;\n      Gh = Fh | 0;\n      Gl = Fl | 0;\n      Fh = Eh | 0;\n      Fl = El | 0;\n      ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n      Dh = Ch | 0;\n      Dl = Cl | 0;\n      Ch = Bh | 0;\n      Cl = Bl | 0;\n      Bh = Ah | 0;\n      Bl = Al | 0;\n      const All = u64.add3L(T1l, sigma0l, MAJl);\n      Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n      Al = All | 0;\n    }\n    // Add the compressed chunk to the current hash value\n    ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n    ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n    ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n    ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n    ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n    ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n    ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n    ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n    this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n  }\n  protected roundClean(): void {\n    clean(SHA512_W_H, SHA512_W_L);\n  }\n  destroy(): void {\n    clean(this.buffer);\n    this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n  }\n}\n\n/** Internal SHA2-512 hash class. */\nexport class _SHA512 extends SHA2_64B<_SHA512> {\n  protected Ah: number = SHA512_IV[0] | 0;\n  protected Al: number = SHA512_IV[1] | 0;\n  protected Bh: number = SHA512_IV[2] | 0;\n  protected Bl: number = SHA512_IV[3] | 0;\n  protected Ch: number = SHA512_IV[4] | 0;\n  protected Cl: number = SHA512_IV[5] | 0;\n  protected Dh: number = SHA512_IV[6] | 0;\n  protected Dl: number = SHA512_IV[7] | 0;\n  protected Eh: number = SHA512_IV[8] | 0;\n  protected El: number = SHA512_IV[9] | 0;\n  protected Fh: number = SHA512_IV[10] | 0;\n  protected Fl: number = SHA512_IV[11] | 0;\n  protected Gh: number = SHA512_IV[12] | 0;\n  protected Gl: number = SHA512_IV[13] | 0;\n  protected Hh: number = SHA512_IV[14] | 0;\n  protected Hl: number = SHA512_IV[15] | 0;\n\n  constructor() {\n    super(64);\n  }\n}\n\n/** Internal SHA2-384 hash class. */\nexport class _SHA384 extends SHA2_64B<_SHA384> {\n  protected Ah: number = SHA384_IV[0] | 0;\n  protected Al: number = SHA384_IV[1] | 0;\n  protected Bh: number = SHA384_IV[2] | 0;\n  protected Bl: number = SHA384_IV[3] | 0;\n  protected Ch: number = SHA384_IV[4] | 0;\n  protected Cl: number = SHA384_IV[5] | 0;\n  protected Dh: number = SHA384_IV[6] | 0;\n  protected Dl: number = SHA384_IV[7] | 0;\n  protected Eh: number = SHA384_IV[8] | 0;\n  protected El: number = SHA384_IV[9] | 0;\n  protected Fh: number = SHA384_IV[10] | 0;\n  protected Fl: number = SHA384_IV[11] | 0;\n  protected Gh: number = SHA384_IV[12] | 0;\n  protected Gl: number = SHA384_IV[13] | 0;\n  protected Hh: number = SHA384_IV[14] | 0;\n  protected Hl: number = SHA384_IV[15] | 0;\n\n  constructor() {\n    super(48);\n  }\n}\n\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n  0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n  0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n  0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n  0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\n\n/** Internal SHA2-512/224 hash class. */\nexport class _SHA512_224 extends SHA2_64B<_SHA512_224> {\n  protected Ah: number = T224_IV[0] | 0;\n  protected Al: number = T224_IV[1] | 0;\n  protected Bh: number = T224_IV[2] | 0;\n  protected Bl: number = T224_IV[3] | 0;\n  protected Ch: number = T224_IV[4] | 0;\n  protected Cl: number = T224_IV[5] | 0;\n  protected Dh: number = T224_IV[6] | 0;\n  protected Dl: number = T224_IV[7] | 0;\n  protected Eh: number = T224_IV[8] | 0;\n  protected El: number = T224_IV[9] | 0;\n  protected Fh: number = T224_IV[10] | 0;\n  protected Fl: number = T224_IV[11] | 0;\n  protected Gh: number = T224_IV[12] | 0;\n  protected Gl: number = T224_IV[13] | 0;\n  protected Hh: number = T224_IV[14] | 0;\n  protected Hl: number = T224_IV[15] | 0;\n\n  constructor() {\n    super(28);\n  }\n}\n\n/** Internal SHA2-512/256 hash class. */\nexport class _SHA512_256 extends SHA2_64B<_SHA512_256> {\n  protected Ah: number = T256_IV[0] | 0;\n  protected Al: number = T256_IV[1] | 0;\n  protected Bh: number = T256_IV[2] | 0;\n  protected Bl: number = T256_IV[3] | 0;\n  protected Ch: number = T256_IV[4] | 0;\n  protected Cl: number = T256_IV[5] | 0;\n  protected Dh: number = T256_IV[6] | 0;\n  protected Dl: number = T256_IV[7] | 0;\n  protected Eh: number = T256_IV[8] | 0;\n  protected El: number = T256_IV[9] | 0;\n  protected Fh: number = T256_IV[10] | 0;\n  protected Fl: number = T256_IV[11] | 0;\n  protected Gh: number = T256_IV[12] | 0;\n  protected Gl: number = T256_IV[13] | 0;\n  protected Hh: number = T256_IV[14] | 0;\n  protected Hl: number = T256_IV[15] | 0;\n\n  constructor() {\n    super(32);\n  }\n}\n\n/**\n * SHA2-256 hash function from RFC 4634. In JS it's the fastest: even faster than Blake3. Some info:\n *\n * - Trying 2^128 hashes would get 50% chance of collision, using birthday attack.\n * - BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n * - Each sha256 hash is executing 2^18 bit operations.\n * - Good 2024 ASICs can do 200Th/sec with 3500 watts of power, corresponding to 2^36 hashes/joule.\n */\nexport const sha256: CHash<_SHA256> = /* @__PURE__ */ createHasher(\n  () => new _SHA256(),\n  /* @__PURE__ */ oidNist(0x01)\n);\n/** SHA2-224 hash function from RFC 4634 */\nexport const sha224: CHash<_SHA224> = /* @__PURE__ */ createHasher(\n  () => new _SHA224(),\n  /* @__PURE__ */ oidNist(0x04)\n);\n\n/** SHA2-512 hash function from RFC 4634. */\nexport const sha512: CHash<_SHA512> = /* @__PURE__ */ createHasher(\n  () => new _SHA512(),\n  /* @__PURE__ */ oidNist(0x03)\n);\n/** SHA2-384 hash function from RFC 4634. */\nexport const sha384: CHash<_SHA384> = /* @__PURE__ */ createHasher(\n  () => new _SHA384(),\n  /* @__PURE__ */ oidNist(0x02)\n);\n\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_256: CHash<_SHA512_256> = /* @__PURE__ */ createHasher(\n  () => new _SHA512_256(),\n  /* @__PURE__ */ oidNist(0x06)\n);\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_224: CHash<_SHA512_224> = /* @__PURE__ */ createHasher(\n  () => new _SHA512_224(),\n  /* @__PURE__ */ oidNist(0x05)\n);\n","/**\n * Hex, bytes and number utilities.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport {\n  abytes as abytes_,\n  anumber,\n  bytesToHex as bytesToHex_,\n  concatBytes as concatBytes_,\n  hexToBytes as hexToBytes_,\n} from '@noble/hashes/utils.js';\nexport {\n  abytes,\n  anumber,\n  bytesToHex,\n  concatBytes,\n  hexToBytes,\n  isBytes,\n  randomBytes,\n} from '@noble/hashes/utils.js';\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\n\nexport type CHash = {\n  (message: Uint8Array): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create(opts?: { dkLen?: number }): any; // For shake\n};\nexport type FHash = (message: Uint8Array) => Uint8Array;\nexport function abool(value: boolean, title: string = ''): boolean {\n  if (typeof value !== 'boolean') {\n    const prefix = title && `\"${title}\" `;\n    throw new Error(prefix + 'expected boolean, got type=' + typeof value);\n  }\n  return value;\n}\n\n// Used in weierstrass, der\nfunction abignumber(n: number | bigint) {\n  if (typeof n === 'bigint') {\n    if (!isPosBig(n)) throw new Error('positive bigint expected, got ' + n);\n  } else anumber(n);\n  return n;\n}\n\nexport function asafenumber(value: number, title: string = ''): void {\n  if (!Number.isSafeInteger(value)) {\n    const prefix = title && `\"${title}\" `;\n    throw new Error(prefix + 'expected safe integer, got type=' + typeof value);\n  }\n}\n\nexport function numberToHexUnpadded(num: number | bigint): string {\n  const hex = abignumber(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  return hex === '' ? _0n : BigInt('0x' + hex); // Big Endian\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  return hexToNumber(bytesToHex_(copyBytes(abytes_(bytes)).reverse()));\n}\n\nexport function numberToBytesBE(n: number | bigint, len: number): Uint8Array {\n  anumber(len);\n  n = abignumber(n);\n  const res = hexToBytes_(n.toString(16).padStart(len * 2, '0'));\n  if (res.length !== len) throw new Error('number too large');\n  return res;\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(abignumber(n)));\n}\n\n// Compares 2 u8a-s in kinda constant time\nexport function equalBytes(a: Uint8Array, b: Uint8Array): boolean {\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/**\n * Copies Uint8Array. We can't use u8a.slice(), because u8a can be Buffer,\n * and Buffer#slice creates mutable copy. Never use Buffers!\n */\nexport function copyBytes(bytes: Uint8Array): Uint8Array {\n  return Uint8Array.from(bytes);\n}\n\n/**\n * Decodes 7-bit ASCII string to Uint8Array, throws on non-ascii symbols\n * Should be safe to use for things expected to be ASCII.\n * Returns exact same result as `TextEncoder` for ASCII or throws.\n */\nexport function asciiToBytes(ascii: string): Uint8Array {\n  return Uint8Array.from(ascii, (c, i) => {\n    const charCode = c.charCodeAt(0);\n    if (c.length !== 1 || charCode > 127) {\n      throw new Error(\n        `string contains non-ASCII character \"${ascii[i]}\" with code ${charCode} at position ${i}`\n      );\n    }\n    return charCode;\n  });\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): boolean {\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): void {\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 ' + n);\n}\n\n// Bit operations\n\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n * TODO: merge with nLength in modular\n */\nexport function bitLen(n: bigint): number {\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): bigint {\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): bigint {\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): bigint => (_1n << BigInt(n)) - _1n;\n\n// DRBG\n\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, message: Uint8Array) => Uint8Array\n): (seed: Uint8Array, predicate: Pred<T>) => T {\n  anumber(hashLen, 'hashLen');\n  anumber(qByteLen, 'qByteLen');\n  if (typeof hmacFn !== 'function') throw new Error('hmacFn must be a function');\n  const u8n = (len: number): Uint8Array => new Uint8Array(len); // creates Uint8Array\n  const NULL = Uint8Array.of();\n  const byte0 = Uint8Array.of(0x00);\n  const byte1 = Uint8Array.of(0x01);\n  const _maxDrbgIters = 1000;\n\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 = (...msgs: Uint8Array[]) => hmacFn(k, concatBytes_(v, ...msgs)); // hmac(k)(v, ...values)\n  const reseed = (seed: Uint8Array = NULL) => {\n    // HMAC-DRBG reseed() function. Steps D-G\n    k = h(byte0, seed); // k = hmac(k || v || 0x00 || seed)\n    v = h(); // v = hmac(k || v)\n    if (seed.length === 0) return;\n    k = h(byte1, 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++ >= _maxDrbgIters) throw new Error('drbg: tried max amount of iterations');\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\nexport function validateObject(\n  object: Record<string, any>,\n  fields: Record<string, string> = {},\n  optFields: Record<string, string> = {}\n): void {\n  if (!object || typeof object !== 'object') throw new Error('expected valid options object');\n  type Item = keyof typeof object;\n  function checkField(fieldName: Item, expectedType: string, isOpt: boolean) {\n    const val = object[fieldName];\n    if (isOpt && val === undefined) return;\n    const current = typeof val;\n    if (current !== expectedType || val === null)\n      throw new Error(`param \"${fieldName}\" is invalid: expected ${expectedType}, got ${current}`);\n  }\n  const iter = (f: typeof fields, isOpt: boolean) =>\n    Object.entries(f).forEach(([k, v]) => checkField(k, v, isOpt));\n  iter(fields, false);\n  iter(optFields, true);\n}\n\n/**\n * throws not implemented error\n */\nexport const notImplemented = (): never => {\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[]>(\n  fn: (arg: T, ...args: O) => R\n): (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\nexport interface CryptoKeys {\n  lengths: { seed?: number; public?: number; secret?: number };\n  keygen: (seed?: Uint8Array) => { secretKey: Uint8Array; publicKey: Uint8Array };\n  getPublicKey: (secretKey: Uint8Array) => Uint8Array;\n}\n\n/** Generic interface for signatures. Has keygen, sign and verify. */\nexport interface Signer extends CryptoKeys {\n  // Interfaces are fun. We cannot just add new fields without copying old ones.\n  lengths: {\n    seed?: number;\n    public?: number;\n    secret?: number;\n    signRand?: number;\n    signature?: number;\n  };\n  sign: (msg: Uint8Array, secretKey: Uint8Array) => Uint8Array;\n  verify: (sig: Uint8Array, msg: Uint8Array, publicKey: Uint8Array) => boolean;\n}\n","/**\n * Utils for modular division and fields.\n * Field over 11 is a finite (Galois) field is integer number operations `mod 11`.\n * There is no division: it is replaced by modular multiplicative inverse.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport {\n  abytes,\n  anumber,\n  bytesToNumberBE,\n  bytesToNumberLE,\n  numberToBytesBE,\n  numberToBytesLE,\n  validateObject,\n} from '../utils.ts';\n\n// Numbers aren't used in x25519 / x448 builds\n// prettier-ignore\nconst _0n = /* @__PURE__ */ BigInt(0), _1n = /* @__PURE__ */ BigInt(1), _2n = /* @__PURE__ */ BigInt(2);\n// prettier-ignore\nconst _3n = /* @__PURE__ */ BigInt(3), _4n = /* @__PURE__ */ BigInt(4), _5n = /* @__PURE__ */ BigInt(5);\n// prettier-ignore\nconst _7n = /* @__PURE__ */ BigInt(7), _8n = /* @__PURE__ */ BigInt(8), _9n = /* @__PURE__ */ BigInt(9);\nconst _16n = /* @__PURE__ */ 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 */\nexport function pow(num: bigint, power: bigint, modulo: bigint): bigint {\n  return FpPow(Field(modulo), num, power);\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/**\n * Inverses number over modulo.\n * Implemented using [Euclidean GCD](https://brilliant.org/wiki/extended-euclidean-algorithm/).\n */\nexport function invert(number: bigint, modulo: bigint): bigint {\n  if (number === _0n) throw new Error('invert: expected non-zero number');\n  if (modulo <= _0n) throw new Error('invert: expected positive modulus, got ' + modulo);\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\nfunction assertIsSquare<T>(Fp: IField<T>, root: T, n: T): void {\n  if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n}\n\n// Not all roots are possible! Example which will throw:\n// const NUM =\n// n = 72057594037927816n;\n// Fp = Field(BigInt('0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab'));\nfunction sqrt3mod4<T>(Fp: IField<T>, n: T) {\n  const p1div4 = (Fp.ORDER + _1n) / _4n;\n  const root = Fp.pow(n, p1div4);\n  assertIsSquare(Fp, root, n);\n  return root;\n}\n\nfunction sqrt5mod8<T>(Fp: IField<T>, n: T) {\n  const p5div8 = (Fp.ORDER - _5n) / _8n;\n  const n2 = Fp.mul(n, _2n);\n  const v = Fp.pow(n2, p5div8);\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  assertIsSquare(Fp, root, n);\n  return root;\n}\n\n// Based on RFC9380, Kong algorithm\n// prettier-ignore\nfunction sqrt9mod16(P: bigint): <T>(Fp: IField<T>, n: T) => T {\n  const Fp_ = Field(P);\n  const tn = tonelliShanks(P);\n  const c1 = tn(Fp_, Fp_.neg(Fp_.ONE));//  1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F\n  const c2 = tn(Fp_, c1);              //  2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F\n  const c3 = tn(Fp_, Fp_.neg(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  return <T>(Fp: IField<T>, n: T) => {\n    let tv1 = Fp.pow(n, c4);           //  1. tv1 = x^c4\n    let tv2 = Fp.mul(tv1, c1);         //  2. tv2 = c1 * tv1\n    const tv3 = Fp.mul(tv1, c2);       //  3. tv3 = c2 * tv1\n    const tv4 = Fp.mul(tv1, c3);       //  4. tv4 = c3 * tv1\n    const e1 = Fp.eql(Fp.sqr(tv2), n); //  5.  e1 = (tv2^2) == x\n    const e2 = Fp.eql(Fp.sqr(tv3), n); //  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.eql(Fp.sqr(tv2), n); //  9.  e3 = (tv2^2) == x\n    const root = Fp.cmov(tv1, tv2, e3);// 10.  z = CMOV(tv1, tv2, e3)   # Select sqrt from tv1 & tv2\n    assertIsSquare(Fp, root, n);\n    return root;\n  };\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 * @param P field order\n * @returns function that takes field Fp (created from P) and number n\n */\nexport function tonelliShanks(P: bigint): <T>(Fp: IField<T>, n: T) => T {\n  // Initialization (precomputation).\n  // Caching initialization could boost perf by 7%.\n  if (P < _3n) throw new Error('sqrt is not defined for small field');\n  // Factor P - 1 = Q * 2^S, where Q is odd\n  let Q = P - _1n;\n  let S = 0;\n  while (Q % _2n === _0n) {\n    Q /= _2n;\n    S++;\n  }\n\n  // Find the first quadratic non-residue Z >= 2\n  let Z = _2n;\n  const _Fp = Field(P);\n  while (FpLegendre(_Fp, Z) === 1) {\n    // Basic primality test for P. After x iterations, chance of\n    // not finding quadratic non-residue is 2^x, so 2^1000.\n    if (Z++ > 1000) throw new Error('Cannot find square root: probably non-prime P');\n  }\n  // Fast-path; usually done before Z, but we do \"primality test\".\n  if (S === 1) return sqrt3mod4;\n\n  // Slow-path\n  // TODO: test on Fp2 and others\n  let cc = _Fp.pow(Z, Q); // c = z^Q\n  const Q1div2 = (Q + _1n) / _2n;\n  return function tonelliSlow<T>(Fp: IField<T>, n: T): T {\n    if (Fp.is0(n)) return n;\n    // Check if n is a quadratic residue using Legendre symbol\n    if (FpLegendre(Fp, n) !== 1) throw new Error('Cannot find square root');\n\n    // Initialize variables for the main loop\n    let M = S;\n    let c = Fp.mul(Fp.ONE, cc); // c = z^Q, move cc from field _Fp into field Fp\n    let t = Fp.pow(n, Q); // t = n^Q, first guess at the fudge factor\n    let R = Fp.pow(n, Q1div2); // R = n^((Q+1)/2), first guess at the square root\n\n    // Main loop\n    // while t != 1\n    while (!Fp.eql(t, Fp.ONE)) {\n      if (Fp.is0(t)) return Fp.ZERO; // if t=0 return R=0\n      let i = 1;\n\n      // Find the smallest i >= 1 such that t^(2^i) ≡ 1 (mod P)\n      let t_tmp = Fp.sqr(t); // t^(2^1)\n      while (!Fp.eql(t_tmp, Fp.ONE)) {\n        i++;\n        t_tmp = Fp.sqr(t_tmp); // t^(2^2)...\n        if (i === M) throw new Error('Cannot find square root');\n      }\n\n      // Calculate the exponent for b: 2^(M - i - 1)\n      const exponent = _1n << BigInt(M - i - 1); // bigint is important\n      const b = Fp.pow(c, exponent); // b = 2^(M - i - 1)\n\n      // Update variables\n      M = i;\n      c = Fp.sqr(b); // c = b^2\n      t = Fp.mul(t, c); // t = (t * b^2)\n      R = Fp.mul(R, b); // R = R*b\n    }\n    return R;\n  };\n}\n\n/**\n * Square root for a finite field. Will try optimized versions first:\n *\n * 1. P ≡ 3 (mod 4)\n * 2. P ≡ 5 (mod 8)\n * 3. P ≡ 9 (mod 16)\n * 4. Tonelli-Shanks algorithm\n *\n * 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 */\nexport function FpSqrt(P: bigint): <T>(Fp: IField<T>, n: T) => T {\n  // P ≡ 3 (mod 4) => √n = n^((P+1)/4)\n  if (P % _4n === _3n) return sqrt3mod4;\n  // P ≡ 5 (mod 8) => Atkin algorithm, page 10 of https://eprint.iacr.org/2012/685.pdf\n  if (P % _8n === _5n) return sqrt5mod8;\n  // P ≡ 9 (mod 16) => Kong algorithm, page 11 of https://eprint.iacr.org/2012/685.pdf (algorithm 4)\n  if (P % _16n === _9n) return sqrt9mod16(P);\n  // 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): boolean =>\n  (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  isLE: boolean;\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  isValidNot0: (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  invertBatch: (lst: T[]) => T[];\n  toBytes(num: T): Uint8Array;\n  fromBytes(bytes: Uint8Array, skipValidation?: boolean): 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>): IField<T> {\n  const initial = {\n    ORDER: 'bigint',\n    BYTES: 'number',\n    BITS: 'number',\n  } as Record<string, string>;\n  const opts = FIELD_FIELDS.reduce((map, val: string) => {\n    map[val] = 'function';\n    return map;\n  }, initial);\n  validateObject(field, opts);\n  // const max = 16384;\n  // if (field.BYTES < 1 || field.BYTES > max) throw new Error('invalid field');\n  // if (field.BITS < 1 || field.BITS > 8 * max) throw new Error('invalid field');\n  return field;\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>(Fp: IField<T>, num: T, power: bigint): T {\n  if (power < _0n) throw new Error('invalid exponent, negatives unsupported');\n  if (power === _0n) return Fp.ONE;\n  if (power === _1n) return num;\n  let p = Fp.ONE;\n  let d = num;\n  while (power > _0n) {\n    if (power & _1n) p = Fp.mul(p, d);\n    d = Fp.sqr(d);\n    power >>= _1n;\n  }\n  return p;\n}\n\n/**\n * Efficiently invert an array of Field elements.\n * Exception-free. Will return `undefined` for 0 elements.\n * @param passZero map 0 to 0 (instead of undefined)\n */\nexport function FpInvertBatch<T>(Fp: IField<T>, nums: T[], passZero = false): T[] {\n  const inverted = new Array(nums.length).fill(passZero ? Fp.ZERO : undefined);\n  // Walk from first to last, multiply them by each other MOD p\n  const multipliedAcc = nums.reduce((acc, num, i) => {\n    if (Fp.is0(num)) return acc;\n    inverted[i] = acc;\n    return Fp.mul(acc, num);\n  }, Fp.ONE);\n  // Invert last element\n  const invertedAcc = Fp.inv(multipliedAcc);\n  // Walk from last to first, multiply them by inverted each other MOD p\n  nums.reduceRight((acc, num, i) => {\n    if (Fp.is0(num)) return acc;\n    inverted[i] = Fp.mul(acc, inverted[i]);\n    return Fp.mul(acc, num);\n  }, invertedAcc);\n  return inverted;\n}\n\n// TODO: remove\nexport function FpDiv<T>(Fp: IField<T>, lhs: T, rhs: T | bigint): T {\n  return Fp.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, Fp.ORDER) : Fp.inv(rhs));\n}\n\n/**\n * Legendre symbol.\n * Legendre constant is used to calculate Legendre symbol (a | p)\n * which denotes the value of a^((p-1)/2) (mod p).\n *\n * * (a | p) ≡ 1    if a is a square (mod p), quadratic residue\n * * (a | p) ≡ -1   if a is not a square (mod p), quadratic non residue\n * * (a | p) ≡ 0    if a ≡ 0 (mod p)\n */\nexport function FpLegendre<T>(Fp: IField<T>, n: T): -1 | 0 | 1 {\n  // We can use 3rd argument as optional cache of this value\n  // but seems unneeded for now. The operation is very fast.\n  const p1mod2 = (Fp.ORDER - _1n) / _2n;\n  const powered = Fp.pow(n, p1mod2);\n  const yes = Fp.eql(powered, Fp.ONE);\n  const zero = Fp.eql(powered, Fp.ZERO);\n  const no = Fp.eql(powered, Fp.neg(Fp.ONE));\n  if (!yes && !zero && !no) throw new Error('invalid Legendre symbol result');\n  return yes ? 1 : zero ? 0 : -1;\n}\n\n// This function returns True whenever the value x is a square in the field F.\nexport function FpIsSquare<T>(Fp: IField<T>, n: T): boolean {\n  const l = FpLegendre(Fp, n);\n  return l === 1;\n}\n\nexport type NLength = { nByteLength: number; nBitLength: number };\n// CURVE.n lengths\nexport function nLength(n: bigint, nBitLength?: number): NLength {\n  // Bit size, byte size of CURVE.n\n  if (nBitLength !== undefined) anumber(nBitLength);\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'>>;\ntype SqrtFn = (n: bigint) => bigint;\ntype FieldOpts = Partial<{\n  isLE: boolean;\n  BITS: number;\n  sqrt: SqrtFn;\n  allowedLengths?: readonly number[]; // for P521 (adds padding for smaller sizes)\n  modFromBytes: boolean; // bls12-381 requires mod(n) instead of rejecting keys >= n\n}>;\nclass _Field implements IField<bigint> {\n  readonly ORDER: bigint;\n  readonly BITS: number;\n  readonly BYTES: number;\n  readonly isLE: boolean;\n  readonly ZERO = _0n;\n  readonly ONE = _1n;\n  readonly _lengths?: number[];\n  private _sqrt: ReturnType<typeof FpSqrt> | undefined; // cached sqrt\n  private readonly _mod?: boolean;\n  constructor(ORDER: bigint, opts: FieldOpts = {}) {\n    if (ORDER <= _0n) throw new Error('invalid field: expected ORDER > 0, got ' + ORDER);\n    let _nbitLength: number | undefined = undefined;\n    this.isLE = false;\n    if (opts != null && typeof opts === 'object') {\n      if (typeof opts.BITS === 'number') _nbitLength = opts.BITS;\n      if (typeof opts.sqrt === 'function') this.sqrt = opts.sqrt;\n      if (typeof opts.isLE === 'boolean') this.isLE = opts.isLE;\n      if (opts.allowedLengths) this._lengths = opts.allowedLengths?.slice();\n      if (typeof opts.modFromBytes === 'boolean') this._mod = opts.modFromBytes;\n    }\n    const { nBitLength, nByteLength } = nLength(ORDER, _nbitLength);\n    if (nByteLength > 2048) throw new Error('invalid field: expected ORDER of <= 2048 bytes');\n    this.ORDER = ORDER;\n    this.BITS = nBitLength;\n    this.BYTES = nByteLength;\n    this._sqrt = undefined;\n    Object.preventExtensions(this);\n  }\n\n  create(num: bigint) {\n    return mod(num, this.ORDER);\n  }\n  isValid(num: bigint) {\n    if (typeof num !== 'bigint')\n      throw new Error('invalid field element: expected bigint, got ' + typeof num);\n    return _0n <= num && num < this.ORDER; // 0 is valid element, but it's not invertible\n  }\n  is0(num: bigint) {\n    return num === _0n;\n  }\n  // is valid and invertible\n  isValidNot0(num: bigint) {\n    return !this.is0(num) && this.isValid(num);\n  }\n  isOdd(num: bigint) {\n    return (num & _1n) === _1n;\n  }\n  neg(num: bigint) {\n    return mod(-num, this.ORDER);\n  }\n  eql(lhs: bigint, rhs: bigint) {\n    return lhs === rhs;\n  }\n\n  sqr(num: bigint) {\n    return mod(num * num, this.ORDER);\n  }\n  add(lhs: bigint, rhs: bigint) {\n    return mod(lhs + rhs, this.ORDER);\n  }\n  sub(lhs: bigint, rhs: bigint) {\n    return mod(lhs - rhs, this.ORDER);\n  }\n  mul(lhs: bigint, rhs: bigint) {\n    return mod(lhs * rhs, this.ORDER);\n  }\n  pow(num: bigint, power: bigint): bigint {\n    return FpPow(this, num, power);\n  }\n  div(lhs: bigint, rhs: bigint) {\n    return mod(lhs * invert(rhs, this.ORDER), this.ORDER);\n  }\n\n  // Same as above, but doesn't normalize\n  sqrN(num: bigint) {\n    return num * num;\n  }\n  addN(lhs: bigint, rhs: bigint) {\n    return lhs + rhs;\n  }\n  subN(lhs: bigint, rhs: bigint) {\n    return lhs - rhs;\n  }\n  mulN(lhs: bigint, rhs: bigint) {\n    return lhs * rhs;\n  }\n\n  inv(num: bigint) {\n    return invert(num, this.ORDER);\n  }\n  sqrt(num: bigint): bigint {\n    // Caching _sqrt speeds up sqrt9mod16 by 5x and tonneli-shanks by 10%\n    if (!this._sqrt) this._sqrt = FpSqrt(this.ORDER);\n    return this._sqrt(this, num);\n  }\n  toBytes(num: bigint) {\n    return this.isLE ? numberToBytesLE(num, this.BYTES) : numberToBytesBE(num, this.BYTES);\n  }\n  fromBytes(bytes: Uint8Array, skipValidation = false) {\n    abytes(bytes);\n    const { _lengths: allowedLengths, BYTES, isLE, ORDER, _mod: modFromBytes } = this;\n    if (allowedLengths) {\n      if (!allowedLengths.includes(bytes.length) || bytes.length > BYTES) {\n        throw new Error(\n          'Field.fromBytes: expected ' + allowedLengths + ' bytes, got ' + bytes.length\n        );\n      }\n      const padded = new Uint8Array(BYTES);\n      // isLE add 0 to right, !isLE to the left.\n      padded.set(bytes, isLE ? 0 : padded.length - bytes.length);\n      bytes = padded;\n    }\n    if (bytes.length !== BYTES)\n      throw new Error('Field.fromBytes: expected ' + BYTES + ' bytes, got ' + bytes.length);\n    let scalar = isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n    if (modFromBytes) scalar = mod(scalar, ORDER);\n    if (!skipValidation)\n      if (!this.isValid(scalar))\n        throw new Error('invalid field element: outside of range 0..ORDER');\n    // NOTE: we don't validate scalar here, please use isValid. This done such way because some\n    // protocol may allow non-reduced scalar that reduced later or changed some other way.\n    return scalar;\n  }\n  // TODO: we don't need it here, move out to separate fn\n  invertBatch(lst: bigint[]): bigint[] {\n    return FpInvertBatch(this, lst);\n  }\n  // We can't move this out because Fp6, Fp12 implement it\n  // and it's unclear what to return in there.\n  cmov(a: bigint, b: bigint, condition: boolean) {\n    return condition ? b : a;\n  }\n}\n\n/**\n * Creates a finite field. Major performance optimizations:\n * * 1. Denormalized operations like mulN instead of mul.\n * * 2. Identical object shape: never add or remove keys.\n * * 3. `Object.freeze`.\n * Fragile: always run a benchmark on a change.\n * Security 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're doing.\n *\n * Note about field properties:\n * * CHARACTERISTIC p = prime number, number of elements in main subgroup.\n * * ORDER q = similar to cofactor in curves, may be composite `q = p^m`.\n *\n * @param ORDER field order, probably prime, or could be composite\n * @param bitLen how many bits the field consumes\n * @param isLE (default: false) if encoding / decoding should be in little-endian\n * @param redef optional faster redefinitions of sqrt and other methods\n */\nexport function Field(ORDER: bigint, opts: FieldOpts = {}): Readonly<FpField> {\n  return new _Field(ORDER, opts);\n}\n\n// Generic random scalar, we can do same for other fields if via Fp2.mul(Fp2.ONE, Fp2.random)?\n// This allows unsafe methods like ignore bias or zero. These unsafe, but often used in different protocols (if deterministic RNG).\n// which mean we cannot force this via opts.\n// Not sure what to do with randomBytes, we can accept it inside opts if wanted.\n// Probably need to export getMinHashLength somewhere?\n// random(bytes?: Uint8Array, unsafeAllowZero = false, unsafeAllowBias = false) {\n//   const LEN = !unsafeAllowBias ? getMinHashLength(ORDER) : BYTES;\n//   if (bytes === undefined) bytes = randomBytes(LEN); // _opts.randomBytes?\n//   const num = isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n//   // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n//   const reduced = unsafeAllowZero ? mod(num, ORDER) : mod(num, ORDER - _1n) + _1n;\n//   return reduced;\n// },\n\nexport function FpSqrtOdd<T>(Fp: IField<T>, elm: T): 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): 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 * 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.Point.Fn.ORDER)\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  abytes(key);\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 ? bytesToNumberLE(key) : bytesToNumberBE(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","/**\n * Methods for elliptic curve multiplication by scalars.\n * Contains wNAF, pippenger.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { bitLen, bitMask, type Signer } from '../utils.ts';\nimport { Field, FpInvertBatch, validateField, type IField } from './modular.ts';\n\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\n\nexport type AffinePoint<T> = {\n  x: T;\n  y: T;\n} & { Z?: never };\n\n// We can't \"abstract out\" coordinates (X, Y, Z; and T in Edwards): argument names of constructor\n// are not accessible. See Typescript gh-56093, gh-41594.\n//\n// We have to use recursive types, so it will return actual point, not constained `CurvePoint`.\n// If, at any point, P is `any`, it will erase all types and replace it\n// with `any`, because of recursion, `any implements CurvePoint`,\n// but we lose all constrains on methods.\n\n/** Base interface for all elliptic curve Points. */\nexport interface CurvePoint<F, P extends CurvePoint<F, P>> {\n  /** Affine x coordinate. Different from projective / extended X coordinate. */\n  x: F;\n  /** Affine y coordinate. Different from projective / extended Y coordinate. */\n  y: F;\n  Z?: F;\n  double(): P;\n  negate(): P;\n  add(other: P): P;\n  subtract(other: P): P;\n  equals(other: P): boolean;\n  multiply(scalar: bigint): P;\n  assertValidity(): void;\n  clearCofactor(): P;\n  is0(): boolean;\n  isTorsionFree(): boolean;\n  isSmallOrder(): boolean;\n  multiplyUnsafe(scalar: bigint): P;\n  /**\n   * Massively speeds up `p.multiply(n)` by using precompute tables (caching). See {@link wNAF}.\n   * @param isLazy calculate cache now. Default (true) ensures it's deferred to first `multiply()`\n   */\n  precompute(windowSize?: number, isLazy?: boolean): P;\n  /** Converts point to 2D xy affine coordinates */\n  toAffine(invertedZ?: F): AffinePoint<F>;\n  toBytes(): Uint8Array;\n  toHex(): string;\n}\n\n/** Base interface for all elliptic curve Point constructors. */\nexport interface CurvePointCons<P extends CurvePoint<any, P>> {\n  [Symbol.hasInstance]: (item: unknown) => boolean;\n  BASE: P;\n  ZERO: P;\n  /** Field for basic curve math */\n  Fp: IField<P_F<P>>;\n  /** Scalar field, for scalars in multiply and others */\n  Fn: IField<bigint>;\n  /** Creates point from x, y. Does NOT validate if the point is valid. Use `.assertValidity()`. */\n  fromAffine(p: AffinePoint<P_F<P>>): P;\n  fromBytes(bytes: Uint8Array): P;\n  fromHex(hex: string): P;\n}\n\n// Type inference helpers: PC - PointConstructor, P - Point, Fp - Field element\n// Short names, because we use them a lot in result types:\n// * we can't do 'P = GetCurvePoint<PC>': this is default value and doesn't constrain anything\n// * we can't do 'type X = GetCurvePoint<PC>': it won't be accesible for arguments/return types\n// * `CurvePointCons<P extends CurvePoint<any, P>>` constraints from interface definition\n//   won't propagate, if `PC extends CurvePointCons<any>`: the P would be 'any', which is incorrect\n// * PC could be super specific with super specific P, which implements CurvePoint<any, P>.\n//   this means we need to do stuff like\n//   `function test<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(`\n//   if we want type safety around P, otherwise PC_P<PC> will be any\n\n/** Returns Fp type from Point (P_F<P> == P.F) */\nexport type P_F<P extends CurvePoint<any, P>> = P extends CurvePoint<infer F, P> ? F : never;\n/** Returns Fp type from PointCons (PC_F<PC> == PC.P.F) */\nexport type PC_F<PC extends CurvePointCons<CurvePoint<any, any>>> = PC['Fp']['ZERO'];\n/** Returns Point type from PointCons (PC_P<PC> == PC.P) */\nexport type PC_P<PC extends CurvePointCons<CurvePoint<any, any>>> = PC['ZERO'];\n\n// Ugly hack to get proper type inference, because in typescript fails to infer resursively.\n// The hack allows to do up to 10 chained operations without applying type erasure.\n//\n// Types which won't work:\n// * `CurvePointCons<CurvePoint<any, any>>`, will return `any` after 1 operation\n// * `CurvePointCons<any>: WeierstrassPointCons<bigint> extends CurvePointCons<any> = false`\n// * `P extends CurvePoint, PC extends CurvePointCons<P>`\n//     * It can't infer P from PC alone\n//     * Too many relations between F, P & PC\n//     * It will infer P/F if `arg: CurvePointCons<F, P>`, but will fail if PC is generic\n//     * It will work correctly if there is an additional argument of type P\n//     * But generally, we don't want to parametrize `CurvePointCons` over `F`: it will complicate\n//       types, making them un-inferable\n// prettier-ignore\nexport type PC_ANY = CurvePointCons<\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any,\n  CurvePoint<any, any>\n  >>>>>>>>>\n>;\n\nexport interface CurveLengths {\n  secretKey?: number;\n  publicKey?: number;\n  publicKeyUncompressed?: number;\n  publicKeyHasPrefix?: boolean;\n  signature?: number;\n  seed?: number;\n}\n\nexport type Mapper<T> = (i: T[]) => T[];\n\nexport function negateCt<T extends { negate: () => T }>(condition: boolean, item: T): T {\n  const neg = item.negate();\n  return condition ? neg : item;\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 */\nexport function normalizeZ<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(\n  c: PC,\n  points: P[]\n): P[] {\n  const invertedZs = FpInvertBatch(\n    c.Fp,\n    points.map((p) => p.Z!)\n  );\n  return points.map((p, i) => c.fromAffine(p.toAffine(invertedZs[i])));\n}\n\nfunction validateW(W: number, bits: number) {\n  if (!Number.isSafeInteger(W) || W <= 0 || W > bits)\n    throw new Error('invalid window size, expected [1..' + bits + '], got W=' + W);\n}\n\n/** Internal wNAF opts for specific W and scalarBits */\ntype WOpts = {\n  windows: number;\n  windowSize: number;\n  mask: bigint;\n  maxNumber: number;\n  shiftBy: bigint;\n};\n\nfunction calcWOpts(W: number, scalarBits: number): WOpts {\n  validateW(W, scalarBits);\n  const windows = Math.ceil(scalarBits / W) + 1; // W=8 33. Not 32, because we skip zero\n  const windowSize = 2 ** (W - 1); // W=8 128. Not 256, because we skip zero\n  const maxNumber = 2 ** W; // W=8 256\n  const mask = bitMask(W); // W=8 255 == mask 0b11111111\n  const shiftBy = BigInt(W); // W=8 8\n  return { windows, windowSize, mask, maxNumber, shiftBy };\n}\n\nfunction calcOffsets(n: bigint, window: number, wOpts: WOpts) {\n  const { windowSize, mask, maxNumber, shiftBy } = wOpts;\n  let wbits = Number(n & mask); // extract W bits.\n  let nextN = n >> shiftBy; // shift number by W bits.\n\n  // What actually happens here:\n  // const highestBit = Number(mask ^ (mask >> 1n));\n  // let wbits2 = wbits - 1; // skip zero\n  // if (wbits2 & highestBit) { wbits2 ^= Number(mask); // (~);\n\n  // split if bits > max: +224 => 256-32\n  if (wbits > windowSize) {\n    // we skip zero, which means instead of `>= size-1`, we do `> size`\n    wbits -= maxNumber; // -32, can be maxNumber - wbits, but then we need to set isNeg here.\n    nextN += _1n; // +256 (carry)\n  }\n  const offsetStart = window * windowSize;\n  const offset = offsetStart + Math.abs(wbits) - 1; // -1 because we skip zero\n  const isZero = wbits === 0; // is current window slice a 0?\n  const isNeg = wbits < 0; // is current window slice negative?\n  const isNegF = window % 2 !== 0; // fake random statement for noise\n  const offsetF = offsetStart; // fake offset for noise\n  return { nextN, offset, isZero, isNeg, isNegF, offsetF };\n}\n\nfunction validateMSMPoints(points: any[], c: any) {\n  if (!Array.isArray(points)) throw new Error('array expected');\n  points.forEach((p, i) => {\n    if (!(p instanceof c)) throw new Error('invalid point at index ' + i);\n  });\n}\nfunction validateMSMScalars(scalars: any[], field: any) {\n  if (!Array.isArray(scalars)) throw new Error('array of scalars expected');\n  scalars.forEach((s, i) => {\n    if (!field.isValid(s)) throw new Error('invalid scalar at index ' + i);\n  });\n}\n\n// Since points in different groups cannot be equal (different object constructor),\n// we can have single place to store precomputes.\n// Allows to make points frozen / immutable.\nconst pointPrecomputes = new WeakMap<any, any[]>();\nconst pointWindowSizes = new WeakMap<any, number>();\n\nfunction getW(P: any): number {\n  // To disable precomputes:\n  // return 1;\n  return pointWindowSizes.get(P) || 1;\n}\n\nfunction assert0(n: bigint): void {\n  if (n !== _0n) throw new Error('invalid wNAF');\n}\n\n/**\n * Elliptic curve multiplication of Point by scalar. Fragile.\n * Table generation takes **30MB of ram and 10ms on high-end CPU**,\n * but may take much longer on slow devices. Actual generation will happen on\n * first call of `multiply()`. By default, `BASE` point is precomputed.\n *\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 / 𝑊) + 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 *\n * @todo Research returning 2d JS array of windows, instead of a single window.\n * This would allow windows to be in different memory locations\n */\nexport class wNAF<PC extends PC_ANY> {\n  private readonly BASE: PC_P<PC>;\n  private readonly ZERO: PC_P<PC>;\n  private readonly Fn: PC['Fn'];\n  readonly bits: number;\n\n  // Parametrized with a given Point class (not individual point)\n  constructor(Point: PC, bits: number) {\n    this.BASE = Point.BASE;\n    this.ZERO = Point.ZERO;\n    this.Fn = Point.Fn;\n    this.bits = bits;\n  }\n\n  // non-const time multiplication ladder\n  _unsafeLadder(elm: PC_P<PC>, n: bigint, p: PC_P<PC> = this.ZERO): PC_P<PC> {\n    let d: PC_P<PC> = 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^(𝑊−1) * (Math.ceil(𝑛 / 𝑊) + 1), where:\n   * - 𝑊 is the window size\n   * - 𝑛 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   * @param point Point instance\n   * @param W window size\n   * @returns precomputed point tables flattened to a single array\n   */\n  private precomputeWindow(point: PC_P<PC>, W: number): PC_P<PC>[] {\n    const { windows, windowSize } = calcWOpts(W, this.bits);\n    const points: PC_P<PC>[] = [];\n    let p: PC_P<PC> = point;\n    let base = p;\n    for (let window = 0; window < windows; window++) {\n      base = p;\n      points.push(base);\n      // i=1, bc we skip 0\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   * More compact implementation:\n   * https://github.com/paulmillr/noble-secp256k1/blob/47cb1669b6e506ad66b35fe7d76132ae97465da2/index.ts#L502-L541\n   * @returns real and fake (for const-time) points\n   */\n  private wNAF(W: number, precomputes: PC_P<PC>[], n: bigint): { p: PC_P<PC>; f: PC_P<PC> } {\n    // Scalar should be smaller than field order\n    if (!this.Fn.isValid(n)) throw new Error('invalid scalar');\n    // Accumulators\n    let p = this.ZERO;\n    let f = this.BASE;\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    const wo = calcWOpts(W, this.bits);\n    for (let window = 0; window < wo.windows; window++) {\n      // (n === _0n) is handled and not early-exited. isEven and offsetF are used for noise\n      const { nextN, offset, isZero, isNeg, isNegF, offsetF } = calcOffsets(n, window, wo);\n      n = nextN;\n      if (isZero) {\n        // bits are 0: add garbage to fake point\n        // Important part for const-time getPublicKey: add random \"noise\" point to f.\n        f = f.add(negateCt(isNegF, precomputes[offsetF]));\n      } else {\n        // bits are 1: add to result point\n        p = p.add(negateCt(isNeg, precomputes[offset]));\n      }\n    }\n    assert0(n);\n    // Return both real and fake points: JIT won't eliminate f.\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  /**\n   * Implements ec unsafe (non const-time) multiplication using precomputed tables and w-ary non-adjacent form.\n   * @param acc accumulator point to add result of multiplication\n   * @returns point\n   */\n  private wNAFUnsafe(\n    W: number,\n    precomputes: PC_P<PC>[],\n    n: bigint,\n    acc: PC_P<PC> = this.ZERO\n  ): PC_P<PC> {\n    const wo = calcWOpts(W, this.bits);\n    for (let window = 0; window < wo.windows; window++) {\n      if (n === _0n) break; // Early-exit, skip 0 value\n      const { nextN, offset, isZero, isNeg } = calcOffsets(n, window, wo);\n      n = nextN;\n      if (isZero) {\n        // Window bits are 0: skip processing.\n        // Move to next window.\n        continue;\n      } else {\n        const item = precomputes[offset];\n        acc = acc.add(isNeg ? item.negate() : item); // Re-using acc allows to save adds in MSM\n      }\n    }\n    assert0(n);\n    return acc;\n  }\n\n  private getPrecomputes(W: number, point: PC_P<PC>, transform?: Mapper<PC_P<PC>>): PC_P<PC>[] {\n    // Calculate precomputes on a first run, reuse them after\n    let comp = pointPrecomputes.get(point);\n    if (!comp) {\n      comp = this.precomputeWindow(point, W) as PC_P<PC>[];\n      if (W !== 1) {\n        // Doing transform outside of if brings 15% perf hit\n        if (typeof transform === 'function') comp = transform(comp);\n        pointPrecomputes.set(point, comp);\n      }\n    }\n    return comp;\n  }\n\n  cached(\n    point: PC_P<PC>,\n    scalar: bigint,\n    transform?: Mapper<PC_P<PC>>\n  ): { p: PC_P<PC>; f: PC_P<PC> } {\n    const W = getW(point);\n    return this.wNAF(W, this.getPrecomputes(W, point, transform), scalar);\n  }\n\n  unsafe(point: PC_P<PC>, scalar: bigint, transform?: Mapper<PC_P<PC>>, prev?: PC_P<PC>): PC_P<PC> {\n    const W = getW(point);\n    if (W === 1) return this._unsafeLadder(point, scalar, prev); // For W=1 ladder is ~x2 faster\n    return this.wNAFUnsafe(W, this.getPrecomputes(W, point, transform), scalar, prev);\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  createCache(P: PC_P<PC>, W: number): void {\n    validateW(W, this.bits);\n    pointWindowSizes.set(P, W);\n    pointPrecomputes.delete(P);\n  }\n\n  hasCache(elm: PC_P<PC>): boolean {\n    return getW(elm) !== 1;\n  }\n}\n\n/**\n * Endomorphism-specific multiplication for Koblitz curves.\n * Cost: 128 dbl, 0-256 adds.\n */\nexport function mulEndoUnsafe<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(\n  Point: PC,\n  point: P,\n  k1: bigint,\n  k2: bigint\n): { p1: P; p2: P } {\n  let acc = point;\n  let p1 = Point.ZERO;\n  let p2 = Point.ZERO;\n  while (k1 > _0n || k2 > _0n) {\n    if (k1 & _1n) p1 = p1.add(acc);\n    if (k2 & _1n) p2 = p2.add(acc);\n    acc = acc.double();\n    k1 >>= _1n;\n    k2 >>= _1n;\n  }\n  return { p1, p2 };\n}\n\n/**\n * Pippenger algorithm for multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n * 30x faster vs naive addition on L=4096, 10x faster than 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 fieldN 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 secret keys / bigints)\n */\nexport function pippenger<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(\n  c: PC,\n  points: P[],\n  scalars: bigint[]\n): P {\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  const fieldN = c.Fn;\n  validateMSMPoints(points, c);\n  validateMSMScalars(scalars, fieldN);\n  const plength = points.length;\n  const slength = scalars.length;\n  if (plength !== slength) throw new Error('arrays of points and scalars must have equal length');\n  // if (plength === 0) throw new Error('array must be of length >= 2');\n  const zero = c.ZERO;\n  const wbits = bitLen(BigInt(plength));\n  let windowSize = 1; // bits\n  if (wbits > 12) windowSize = wbits - 3;\n  else if (wbits > 4) windowSize = wbits - 2;\n  else if (wbits > 0) windowSize = 2;\n  const MASK = bitMask(windowSize);\n  const buckets = new Array(Number(MASK) + 1).fill(zero); // +1 for zero array\n  const lastBits = Math.floor((fieldN.BITS - 1) / windowSize) * windowSize;\n  let sum = zero;\n  for (let i = lastBits; i >= 0; i -= windowSize) {\n    buckets.fill(zero);\n    for (let j = 0; j < slength; j++) {\n      const scalar = scalars[j];\n      const wbits = Number((scalar >> BigInt(i)) & MASK);\n      buckets[wbits] = buckets[wbits].add(points[j]);\n    }\n    let resI = 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 = 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 P;\n}\n/**\n * Precomputed multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n * @param c Curve Point constructor\n * @param fieldN field over CURVE.N - important that it's not over CURVE.P\n * @param points array of L curve points\n * @returns function which multiplies points with scaars\n */\nexport function precomputeMSMUnsafe<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(\n  c: PC,\n  points: P[],\n  windowSize: number\n): (scalars: bigint[]) => P {\n  /**\n   * Performance Analysis of Window-based Precomputation\n   *\n   * Base Case (256-bit scalar, 8-bit window):\n   * - Standard precomputation requires:\n   *   - 31 additions per scalar × 256 scalars = 7,936 ops\n   *   - Plus 255 summary additions = 8,191 total ops\n   *   Note: Summary additions can be optimized via accumulator\n   *\n   * Chunked Precomputation Analysis:\n   * - Using 32 chunks requires:\n   *   - 255 additions per chunk\n   *   - 256 doublings\n   *   - Total: (255 × 32) + 256 = 8,416 ops\n   *\n   * Memory Usage Comparison:\n   * Window Size | Standard Points | Chunked Points\n   * ------------|-----------------|---------------\n   *     4-bit   |     520         |      15\n   *     8-bit   |    4,224        |     255\n   *    10-bit   |   13,824        |   1,023\n   *    16-bit   |  557,056        |  65,535\n   *\n   * Key Advantages:\n   * 1. Enables larger window sizes due to reduced memory overhead\n   * 2. More efficient for smaller scalar counts:\n   *    - 16 chunks: (16 × 255) + 256 = 4,336 ops\n   *    - ~2x faster than standard 8,191 ops\n   *\n   * Limitations:\n   * - Not suitable for plain precomputes (requires 256 constant doublings)\n   * - Performance degrades with larger scalar counts:\n   *   - Optimal for ~256 scalars\n   *   - Less efficient for 4096+ scalars (Pippenger preferred)\n   */\n  const fieldN = c.Fn;\n  validateW(windowSize, fieldN.BITS);\n  validateMSMPoints(points, c);\n  const zero = c.ZERO;\n  const tableSize = 2 ** windowSize - 1; // table size (without zero)\n  const chunks = Math.ceil(fieldN.BITS / windowSize); // chunks of item\n  const MASK = bitMask(windowSize);\n  const tables = points.map((p: P) => {\n    const res = [];\n    for (let i = 0, acc = p; i < tableSize; i++) {\n      res.push(acc);\n      acc = acc.add(p);\n    }\n    return res;\n  });\n  return (scalars: bigint[]): P => {\n    validateMSMScalars(scalars, fieldN);\n    if (scalars.length > points.length)\n      throw new Error('array of scalars must be smaller than array of points');\n    let res = zero;\n    for (let i = 0; i < chunks; i++) {\n      // No need to double if accumulator is still zero.\n      if (res !== zero) for (let j = 0; j < windowSize; j++) res = res.double();\n      const shiftBy = BigInt(chunks * windowSize - (i + 1) * windowSize);\n      for (let j = 0; j < scalars.length; j++) {\n        const n = scalars[j];\n        const curr = Number((n >> shiftBy) & MASK);\n        if (!curr) continue; // skip zero scalars chunks\n        res = res.add(tables[j][curr - 1]);\n      }\n    }\n    return res;\n  };\n}\n\nexport type ValidCurveParams<T> = {\n  p: bigint;\n  n: bigint;\n  h: bigint;\n  a: T;\n  b?: T;\n  d?: T;\n  Gx: T;\n  Gy: T;\n};\n\nfunction createField<T>(order: bigint, field?: IField<T>, isLE?: boolean): IField<T> {\n  if (field) {\n    if (field.ORDER !== order) throw new Error('Field.ORDER must match order: Fp == p, Fn == n');\n    validateField(field);\n    return field;\n  } else {\n    return Field(order, { isLE }) as unknown as IField<T>;\n  }\n}\nexport type FpFn<T> = { Fp: IField<T>; Fn: IField<bigint> };\n\n/** Validates CURVE opts and creates fields */\nexport function createCurveFields<T>(\n  type: 'weierstrass' | 'edwards',\n  CURVE: ValidCurveParams<T>,\n  curveOpts: Partial<FpFn<T>> = {},\n  FpFnLE?: boolean\n): FpFn<T> & { CURVE: ValidCurveParams<T> } {\n  if (FpFnLE === undefined) FpFnLE = type === 'edwards';\n  if (!CURVE || typeof CURVE !== 'object') throw new Error(`expected valid ${type} CURVE object`);\n  for (const p of ['p', 'n', 'h'] as const) {\n    const val = CURVE[p];\n    if (!(typeof val === 'bigint' && val > _0n))\n      throw new Error(`CURVE.${p} must be positive bigint`);\n  }\n  const Fp = createField(CURVE.p, curveOpts.Fp, FpFnLE);\n  const Fn = createField(CURVE.n, curveOpts.Fn, FpFnLE);\n  const _b: 'b' | 'd' = type === 'weierstrass' ? 'b' : 'd';\n  const params = ['Gx', 'Gy', 'a', _b] as const;\n  for (const p of params) {\n    // @ts-ignore\n    if (!Fp.isValid(CURVE[p]))\n      throw new Error(`CURVE.${p} must be valid field element of CURVE.Fp`);\n  }\n  CURVE = Object.freeze(Object.assign({}, CURVE));\n  return { CURVE, Fp, Fn };\n}\n\ntype KeygenFn = (\n  seed?: Uint8Array,\n  isCompressed?: boolean\n) => { secretKey: Uint8Array; publicKey: Uint8Array };\nexport function createKeygen(\n  randomSecretKey: Function,\n  getPublicKey: Signer['getPublicKey']\n): KeygenFn {\n  return function keygen(seed?: Uint8Array) {\n    const secretKey = randomSecretKey(seed);\n    return { secretKey, publicKey: getPublicKey(secretKey) };\n  };\n}\n","/**\n * hash-to-curve from RFC 9380.\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\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport type { CHash } from '../utils.ts';\nimport {\n  abytes,\n  asafenumber,\n  asciiToBytes,\n  bytesToNumberBE,\n  concatBytes,\n  isBytes,\n  validateObject,\n} from '../utils.ts';\nimport type { AffinePoint, PC_ANY, PC_F, PC_P } from './curve.ts';\nimport { FpInvertBatch, mod, type IField } from './modular.ts';\n\nexport type AsciiOrBytes = string | Uint8Array;\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 */\nexport type H2COpts = {\n  DST: AsciiOrBytes;\n  expand: 'xmd' | 'xof';\n  hash: CHash;\n  p: bigint;\n  m: number;\n  k: number;\n};\nexport type H2CHashOpts = {\n  expand: 'xmd' | 'xof';\n  hash: CHash;\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 H2CDSTOpts = { DST: AsciiOrBytes };\nexport type H2CHasherBase<PC extends PC_ANY> = {\n  hashToCurve(msg: Uint8Array, options?: H2CDSTOpts): PC_P<PC>;\n  hashToScalar(msg: Uint8Array, options?: H2CDSTOpts): bigint;\n  deriveToCurve?(msg: Uint8Array, options?: H2CDSTOpts): PC_P<PC>;\n  Point: PC;\n};\n/**\n * RFC 9380 methods, with cofactor clearing. See https://www.rfc-editor.org/rfc/rfc9380#section-3.\n *\n * * hashToCurve: `map(hash(input))`, encodes RANDOM bytes to curve (WITH hashing)\n * * encodeToCurve: `map(hash(input))`, encodes NON-UNIFORM bytes to curve (WITH hashing)\n * * mapToCurve: `map(scalars)`, encodes NON-UNIFORM scalars to curve (NO hashing)\n */\nexport type H2CHasher<PC extends PC_ANY> = H2CHasherBase<PC> & {\n  encodeToCurve(msg: Uint8Array, options?: H2CDSTOpts): PC_P<PC>;\n  mapToCurve: MapToCurve<PC_F<PC>>;\n  defaults: H2COpts & { encodeDST?: AsciiOrBytes };\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  asafenumber(value);\n  asafenumber(length);\n  if (value < 0 || value >= 1 << (8 * length)) throw new Error('invalid I2OSP input: ' + value);\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\n// User can always use utf8 if they want, by passing Uint8Array.\n// If string is passed, we treat it as ASCII: other formats are likely a mistake.\nfunction normDST(DST: AsciiOrBytes): Uint8Array {\n  if (!isBytes(DST) && typeof DST !== 'string')\n    throw new Error('DST must be Uint8Array or ascii string');\n  return typeof DST === 'string' ? asciiToBytes(DST) : DST;\n}\n\n/**\n * Produces a uniformly random byte string using a cryptographic hash function H that outputs b bits.\n * [RFC 9380 5.3.1](https://www.rfc-editor.org/rfc/rfc9380#section-5.3.1).\n */\nexport function expand_message_xmd(\n  msg: Uint8Array,\n  DST: AsciiOrBytes,\n  lenInBytes: number,\n  H: CHash\n): Uint8Array {\n  abytes(msg);\n  asafenumber(lenInBytes);\n  DST = normDST(DST);\n  // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3\n  if (DST.length > 255) DST = H(concatBytes(asciiToBytes('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/**\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 * [RFC 9380 5.3.2](https://www.rfc-editor.org/rfc/rfc9380#section-5.3.2).\n */\nexport function expand_message_xof(\n  msg: Uint8Array,\n  DST: AsciiOrBytes,\n  lenInBytes: number,\n  k: number,\n  H: CHash\n): Uint8Array {\n  abytes(msg);\n  asafenumber(lenInBytes);\n  DST = normDST(DST);\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(asciiToBytes('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 * [RFC 9380 5.2](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: H2COpts): bigint[][] {\n  validateObject(options, {\n    p: 'bigint',\n    m: 'number',\n    k: 'number',\n    hash: 'function',\n  });\n  const { p, k, m, hash, expand, DST } = options;\n  asafenumber(hash.outputLen, 'valid hash');\n  abytes(msg);\n  asafenumber(count);\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\ntype XY<T> = (x: T, y: T) => { x: T; y: T };\ntype XYRatio<T> = [T[], T[], T[], T[]]; // xn/xd, yn/yd\nexport function isogenyMap<T, F extends IField<T>>(field: F, map: XYRatio<T>): XY<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 [xn, xd, yn, yd] = coeff.map((val) =>\n      val.reduce((acc, i) => field.add(field.mul(acc, x), i))\n    );\n    // 6.6.3\n    // Exceptional cases of iso_map are inputs that cause the denominator of\n    // either rational function to evaluate to zero; such cases MUST return\n    // the identity point on E.\n    const [xd_inv, yd_inv] = FpInvertBatch(field, [xd, yd], true);\n    x = field.mul(xn, xd_inv); // xNum / xDen\n    y = field.mul(y, field.mul(yn, yd_inv)); // y * (yNum / yDev)\n    return { x, y };\n  };\n}\n\nexport const _DST_scalar: Uint8Array = asciiToBytes('HashToScalar-');\n\n/** Creates hash-to-curve methods from EC Point and mapToCurve function. See {@link H2CHasher}. */\nexport function createHasher<PC extends PC_ANY>(\n  Point: PC,\n  mapToCurve: MapToCurve<PC_F<PC>>,\n  defaults: H2COpts & { encodeDST?: AsciiOrBytes }\n): H2CHasher<PC> {\n  if (typeof mapToCurve !== 'function') throw new Error('mapToCurve() must be defined');\n  function map(num: bigint[]): PC_P<PC> {\n    return Point.fromAffine(mapToCurve(num)) as PC_P<PC>;\n  }\n  function clear(initial: PC_P<PC>): PC_P<PC> {\n    const P = initial.clearCofactor();\n    if (P.equals(Point.ZERO)) return Point.ZERO as PC_P<PC>; // zero will throw in assert\n    P.assertValidity();\n    return P as PC_P<PC>;\n  }\n\n  return {\n    defaults: Object.freeze(defaults),\n    Point,\n\n    hashToCurve(msg: Uint8Array, options?: H2CDSTOpts): PC_P<PC> {\n      const opts = Object.assign({}, defaults, options);\n      const u = hash_to_field(msg, 2, opts);\n      const u0 = map(u[0]);\n      const u1 = map(u[1]);\n      return clear(u0.add(u1) as PC_P<PC>);\n    },\n    encodeToCurve(msg: Uint8Array, options?: H2CDSTOpts): PC_P<PC> {\n      const optsDst = defaults.encodeDST ? { DST: defaults.encodeDST } : {};\n      const opts = Object.assign({}, defaults, optsDst, options);\n      const u = hash_to_field(msg, 1, opts);\n      const u0 = map(u[0]);\n      return clear(u0);\n    },\n    /** See {@link H2CHasher} */\n    mapToCurve(scalars: bigint | bigint[]): PC_P<PC> {\n      // Curves with m=1 accept only single scalar\n      if (defaults.m === 1) {\n        if (typeof scalars !== 'bigint') throw new Error('expected bigint (m=1)');\n        return clear(map([scalars]));\n      }\n      if (!Array.isArray(scalars)) throw new Error('expected array of bigints');\n      for (const i of scalars)\n        if (typeof i !== 'bigint') throw new Error('expected array of bigints');\n      return clear(map(scalars));\n    },\n\n    // hash_to_scalar can produce 0: https://www.rfc-editor.org/errata/eid8393\n    // RFC 9380, draft-irtf-cfrg-bbs-signatures-08\n    hashToScalar(msg: Uint8Array, options?: H2CDSTOpts): bigint {\n      // @ts-ignore\n      const N = Point.Fn.ORDER;\n      const opts = Object.assign({}, defaults, { p: N, m: 1, DST: _DST_scalar }, options);\n      return hash_to_field(msg, 1, opts)[0][0];\n    },\n  };\n}\n","/**\n * HMAC: RFC2104 message authentication code.\n * @module\n */\nimport { abytes, aexists, ahash, clean, type CHash, type Hash } from './utils.ts';\n\n/** Internal class for HMAC. */\nexport class _HMAC<T extends Hash<T>> implements Hash<_HMAC<T>> {\n  oHash: T;\n  iHash: T;\n  blockLen: number;\n  outputLen: number;\n  private finished = false;\n  private destroyed = false;\n\n  constructor(hash: CHash, key: Uint8Array) {\n    ahash(hash);\n    abytes(key, undefined, 'key');\n    this.iHash = hash.create() as T;\n    if (typeof this.iHash.update !== 'function')\n      throw new Error('Expected instance of class which extends utils.Hash');\n    this.blockLen = this.iHash.blockLen;\n    this.outputLen = this.iHash.outputLen;\n    const blockLen = this.blockLen;\n    const pad = new Uint8Array(blockLen);\n    // blockLen can be bigger than outputLen\n    pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n    for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36;\n    this.iHash.update(pad);\n    // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n    this.oHash = hash.create() as T;\n    // Undo internal XOR && apply outer XOR\n    for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36 ^ 0x5c;\n    this.oHash.update(pad);\n    clean(pad);\n  }\n  update(buf: Uint8Array): this {\n    aexists(this);\n    this.iHash.update(buf);\n    return this;\n  }\n  digestInto(out: Uint8Array): void {\n    aexists(this);\n    abytes(out, this.outputLen, 'output');\n    this.finished = true;\n    this.iHash.digestInto(out);\n    this.oHash.update(out);\n    this.oHash.digestInto(out);\n    this.destroy();\n  }\n  digest(): Uint8Array {\n    const out = new Uint8Array(this.oHash.outputLen);\n    this.digestInto(out);\n    return out;\n  }\n  _cloneInto(to?: _HMAC<T>): _HMAC<T> {\n    // Create new instance without calling constructor since key already in state and we don't know it.\n    to ||= Object.create(Object.getPrototypeOf(this), {});\n    const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n    to = to as this;\n    to.finished = finished;\n    to.destroyed = destroyed;\n    to.blockLen = blockLen;\n    to.outputLen = outputLen;\n    to.oHash = oHash._cloneInto(to.oHash);\n    to.iHash = iHash._cloneInto(to.iHash);\n    return to;\n  }\n  clone(): _HMAC<T> {\n    return this._cloneInto();\n  }\n  destroy(): void {\n    this.destroyed = true;\n    this.oHash.destroy();\n    this.iHash.destroy();\n  }\n}\n\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n * @example\n * import { hmac } from '@noble/hashes/hmac';\n * import { sha256 } from '@noble/hashes/sha2';\n * const mac1 = hmac(sha256, 'key', 'message');\n */\nexport const hmac: {\n  (hash: CHash, key: Uint8Array, message: Uint8Array): Uint8Array;\n  create(hash: CHash, key: Uint8Array): _HMAC<any>;\n} = (hash: CHash, key: Uint8Array, message: Uint8Array): Uint8Array =>\n  new _HMAC<any>(hash, key).update(message).digest();\nhmac.create = (hash: CHash, key: Uint8Array) => new _HMAC<any>(hash, key);\n","/**\n * Short Weierstrass curve methods. The formula is: y² = x³ + ax + b.\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\n * of nominative types in TypeScript and interfaces only check for shape, so it's hard to create\n * 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 * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { hmac as nobleHmac } from '@noble/hashes/hmac.js';\nimport { ahash } from '@noble/hashes/utils.js';\nimport {\n  abool,\n  abytes,\n  aInRange,\n  bitLen,\n  bitMask,\n  bytesToHex,\n  bytesToNumberBE,\n  concatBytes,\n  createHmacDrbg,\n  hexToBytes,\n  isBytes,\n  memoized,\n  numberToHexUnpadded,\n  validateObject,\n  randomBytes as wcRandomBytes,\n  type CHash,\n  type Signer,\n} from '../utils.ts';\nimport {\n  createCurveFields,\n  createKeygen,\n  mulEndoUnsafe,\n  negateCt,\n  normalizeZ,\n  wNAF,\n  type AffinePoint,\n  type CurveLengths,\n  type CurvePoint,\n  type CurvePointCons,\n} from './curve.ts';\nimport {\n  FpInvertBatch,\n  getMinHashLength,\n  mapHashToField,\n  validateField,\n  type IField,\n} from './modular.ts';\n\nexport type { AffinePoint };\n\ntype EndoBasis = [[bigint, bigint], [bigint, bigint]];\n/**\n * When Weierstrass curve has `a=0`, it becomes Koblitz curve.\n * Koblitz curves allow using **efficiently-computable GLV endomorphism ψ**.\n * Endomorphism uses 2x less RAM, speeds up precomputation by 2x and ECDH / key recovery by 20%.\n * For precomputed wNAF it trades off 1/2 init time & 1/3 ram for 20% perf hit.\n *\n * Endomorphism consists of beta, lambda and splitScalar:\n *\n * 1. GLV endomorphism ψ transforms a point: `P = (x, y) ↦ ψ(P) = (β·x mod p, y)`\n * 2. GLV scalar decomposition transforms a scalar: `k ≡ k₁ + k₂·λ (mod n)`\n * 3. Then these are combined: `k·P = k₁·P + k₂·ψ(P)`\n * 4. Two 128-bit point-by-scalar multiplications + one point addition is faster than\n *    one 256-bit multiplication.\n *\n * where\n * * beta: β ∈ Fₚ with β³ = 1, β ≠ 1\n * * lambda: λ ∈ Fₙ with λ³ = 1, λ ≠ 1\n * * splitScalar decomposes k ↦ k₁, k₂, by using reduced basis vectors.\n *   Gauss lattice reduction calculates them from initial basis vectors `(n, 0), (-λ, 0)`\n *\n * Check out `test/misc/endomorphism.js` and\n * [gist](https://gist.github.com/paulmillr/eb670806793e84df628a7c434a873066).\n */\nexport type EndomorphismOpts = {\n  beta: bigint;\n  basises?: EndoBasis;\n  splitScalar?: (k: bigint) => { k1neg: boolean; k1: bigint; k2neg: boolean; k2: bigint };\n};\n// We construct basis in such way that den is always positive and equals n, but num sign depends on basis (not on secret value)\nconst divNearest = (num: bigint, den: bigint) => (num + (num >= 0 ? den : -den) / _2n) / den;\n\nexport type ScalarEndoParts = { k1neg: boolean; k1: bigint; k2neg: boolean; k2: bigint };\n\n/**\n * Splits scalar for GLV endomorphism.\n */\nexport function _splitEndoScalar(k: bigint, basis: EndoBasis, n: bigint): ScalarEndoParts {\n  // Split scalar into two such that part is ~half bits: `abs(part) < sqrt(N)`\n  // Since part can be negative, we need to do this on point.\n  // TODO: verifyScalar function which consumes lambda\n  const [[a1, b1], [a2, b2]] = basis;\n  const c1 = divNearest(b2 * k, n);\n  const c2 = divNearest(-b1 * k, n);\n  // |k1|/|k2| is < sqrt(N), but can be negative.\n  // If we do `k1 mod N`, we'll get big scalar (`> sqrt(N)`): so, we do cheaper negation instead.\n  let k1 = k - c1 * a1 - c2 * a2;\n  let k2 = -c1 * b1 - c2 * b2;\n  const k1neg = k1 < _0n;\n  const k2neg = k2 < _0n;\n  if (k1neg) k1 = -k1;\n  if (k2neg) k2 = -k2;\n  // Double check that resulting scalar less than half bits of N: otherwise wNAF will fail.\n  // This should only happen on wrong basises. Also, math inside is too complex and I don't trust it.\n  const MAX_NUM = bitMask(Math.ceil(bitLen(n) / 2)) + _1n; // Half bits of N\n  if (k1 < _0n || k1 >= MAX_NUM || k2 < _0n || k2 >= MAX_NUM) {\n    throw new Error('splitScalar (endomorphism): failed, k=' + k);\n  }\n  return { k1neg, k1, k2neg, k2 };\n}\n\n/**\n * Option to enable hedged signatures with improved security.\n *\n * * Randomly generated k is bad, because broken CSPRNG would leak private keys.\n * * Deterministic k (RFC6979) is better; but is suspectible to fault attacks.\n *\n * We allow using technique described in RFC6979 3.6: additional k', a.k.a. adding randomness\n * to deterministic sig. If CSPRNG is broken & randomness is weak, it would STILL be as secure\n * as ordinary sig without ExtraEntropy.\n *\n * * `true` means \"fetch data, from CSPRNG, incorporate it into k generation\"\n * * `false` means \"disable extra entropy, use purely deterministic k\"\n * * `Uint8Array` passed means \"incorporate following data into k generation\"\n *\n * https://paulmillr.com/posts/deterministic-signatures/\n */\nexport type ECDSAExtraEntropy = boolean | Uint8Array;\n/**\n * - `compact` is the default format\n * - `recovered` is the same as compact, but with an extra byte indicating recovery byte\n * - `der` is ASN.1 DER encoding\n */\nexport type ECDSASignatureFormat = 'compact' | 'recovered' | 'der';\n/**\n * - `prehash`: (default: true) indicates whether to do sha256(message).\n *   When a custom hash is used, it must be set to `false`.\n */\nexport type ECDSARecoverOpts = {\n  prehash?: boolean;\n};\n/**\n * - `prehash`: (default: true) indicates whether to do sha256(message).\n *   When a custom hash is used, it must be set to `false`.\n * - `lowS`: (default: true) prohibits signatures which have (sig.s >= CURVE.n/2n).\n *   Compatible with BTC/ETH. Setting `lowS: false` allows to create malleable signatures,\n *   which is default openssl behavior.\n *   Non-malleable signatures can still be successfully verified in openssl.\n * - `format`: (default: 'compact') 'compact' or 'recovered' with recovery byte\n */\nexport type ECDSAVerifyOpts = {\n  prehash?: boolean;\n  lowS?: boolean;\n  format?: ECDSASignatureFormat;\n};\n/**\n * - `prehash`: (default: true) indicates whether to do sha256(message).\n *   When a custom hash is used, it must be set to `false`.\n * - `lowS`: (default: true) prohibits signatures which have (sig.s >= CURVE.n/2n).\n *   Compatible with BTC/ETH. Setting `lowS: false` allows to create malleable signatures,\n *   which is default openssl behavior.\n *   Non-malleable signatures can still be successfully verified in openssl.\n * - `format`: (default: 'compact') 'compact' or 'recovered' with recovery byte\n * - `extraEntropy`: (default: false) creates sigs with increased security, see {@link ECDSAExtraEntropy}\n */\nexport type ECDSASignOpts = {\n  prehash?: boolean;\n  lowS?: boolean;\n  format?: ECDSASignatureFormat;\n  extraEntropy?: ECDSAExtraEntropy;\n};\n\nfunction validateSigFormat(format: string): ECDSASignatureFormat {\n  if (!['compact', 'recovered', 'der'].includes(format))\n    throw new Error('Signature format must be \"compact\", \"recovered\", or \"der\"');\n  return format as ECDSASignatureFormat;\n}\n\nfunction validateSigOpts<T extends ECDSASignOpts, D extends Required<ECDSASignOpts>>(\n  opts: T,\n  def: D\n): Required<ECDSASignOpts> {\n  const optsn: ECDSASignOpts = {};\n  for (let optName of Object.keys(def)) {\n    // @ts-ignore\n    optsn[optName] = opts[optName] === undefined ? def[optName] : opts[optName];\n  }\n  abool(optsn.lowS!, 'lowS');\n  abool(optsn.prehash!, 'prehash');\n  if (optsn.format !== undefined) validateSigFormat(optsn.format);\n  return optsn as Required<ECDSASignOpts>;\n}\n\n/** Instance methods for 3D XYZ projective points. */\nexport interface WeierstrassPoint<T> extends CurvePoint<T, WeierstrassPoint<T>> {\n  /** projective X coordinate. Different from affine x. */\n  readonly X: T;\n  /** projective Y coordinate. Different from affine y. */\n  readonly Y: T;\n  /** projective z coordinate */\n  readonly Z: T;\n  /** affine x coordinate. Different from projective X. */\n  get x(): T;\n  /** affine y coordinate. Different from projective Y. */\n  get y(): T;\n  /** Encodes point using IEEE P1363 (DER) encoding. First byte is 2/3/4. Default = isCompressed. */\n  toBytes(isCompressed?: boolean): Uint8Array;\n  toHex(isCompressed?: boolean): string;\n}\n\n/** Static methods for 3D XYZ projective points. */\nexport interface WeierstrassPointCons<T> extends CurvePointCons<WeierstrassPoint<T>> {\n  /** Does NOT validate if the point is valid. Use `.assertValidity()`. */\n  new (X: T, Y: T, Z: T): WeierstrassPoint<T>;\n  CURVE(): WeierstrassOpts<T>;\n}\n\n/**\n * Weierstrass curve options.\n *\n * * p: prime characteristic (order) of finite field, in which arithmetics is done\n * * n: order of prime subgroup a.k.a total amount of valid curve points\n * * h: cofactor, usually 1. h*n is group order; n is subgroup order\n * * a: formula param, must be in field of p\n * * b: formula param, must be in field of p\n * * Gx: x coordinate of generator point a.k.a. base point\n * * Gy: y coordinate of generator point\n */\nexport type WeierstrassOpts<T> = Readonly<{\n  p: bigint;\n  n: bigint;\n  h: bigint;\n  a: T;\n  b: T;\n  Gx: T;\n  Gy: T;\n}>;\n\n// When a cofactor != 1, there can be an effective methods to:\n// 1. Determine whether a point is torsion-free\n// 2. Clear torsion component\nexport type WeierstrassExtraOpts<T> = Partial<{\n  Fp: IField<T>;\n  Fn: IField<bigint>;\n  allowInfinityPoint: boolean;\n  endo: EndomorphismOpts;\n  isTorsionFree: (c: WeierstrassPointCons<T>, point: WeierstrassPoint<T>) => boolean;\n  clearCofactor: (c: WeierstrassPointCons<T>, point: WeierstrassPoint<T>) => WeierstrassPoint<T>;\n  fromBytes: (bytes: Uint8Array) => AffinePoint<T>;\n  toBytes: (\n    c: WeierstrassPointCons<T>,\n    point: WeierstrassPoint<T>,\n    isCompressed: boolean\n  ) => Uint8Array;\n}>;\n\n/**\n * Options for ECDSA signatures over a Weierstrass curve.\n *\n * * lowS: (default: true) whether produced / verified signatures occupy low half of ecdsaOpts.p. Prevents malleability.\n * * hmac: (default: noble-hashes hmac) function, would be used to init hmac-drbg for k generation.\n * * randomBytes: (default: webcrypto os-level CSPRNG) custom method for fetching secure randomness.\n * * bits2int, bits2int_modN: used in sigs, sometimes overridden by curves\n */\nexport type ECDSAOpts = Partial<{\n  lowS: boolean;\n  hmac: (key: Uint8Array, message: Uint8Array) => Uint8Array;\n  randomBytes: (bytesLength?: number) => Uint8Array;\n  bits2int: (bytes: Uint8Array) => bigint;\n  bits2int_modN: (bytes: Uint8Array) => bigint;\n}>;\n\n/**\n * Elliptic Curve Diffie-Hellman interface.\n * Provides keygen, secret-to-public conversion, calculating shared secrets.\n */\nexport interface ECDH {\n  keygen: (seed?: Uint8Array) => { secretKey: Uint8Array; publicKey: Uint8Array };\n  getPublicKey: (secretKey: Uint8Array, isCompressed?: boolean) => Uint8Array;\n  getSharedSecret: (\n    secretKeyA: Uint8Array,\n    publicKeyB: Uint8Array,\n    isCompressed?: boolean\n  ) => Uint8Array;\n  Point: WeierstrassPointCons<bigint>;\n  utils: {\n    isValidSecretKey: (secretKey: Uint8Array) => boolean;\n    isValidPublicKey: (publicKey: Uint8Array, isCompressed?: boolean) => boolean;\n    randomSecretKey: (seed?: Uint8Array) => Uint8Array;\n  };\n  lengths: CurveLengths;\n}\n\n/**\n * ECDSA interface.\n * Only supported for prime fields, not Fp2 (extension fields).\n */\nexport interface ECDSA extends ECDH {\n  sign: (message: Uint8Array, secretKey: Uint8Array, opts?: ECDSASignOpts) => Uint8Array;\n  verify: (\n    signature: Uint8Array,\n    message: Uint8Array,\n    publicKey: Uint8Array,\n    opts?: ECDSAVerifyOpts\n  ) => boolean;\n  recoverPublicKey(signature: Uint8Array, message: Uint8Array, opts?: ECDSARecoverOpts): Uint8Array;\n  Signature: ECDSASignatureCons;\n}\nexport class DERErr extends Error {\n  constructor(m = '') {\n    super(m);\n  }\n}\nexport type IDER = {\n  // asn.1 DER encoding utils\n  Err: typeof DERErr;\n  // Basic building block is TLV (Tag-Length-Value)\n  _tlv: {\n    encode: (tag: number, data: string) => string;\n    // v - value, l - left bytes (unparsed)\n    decode(tag: number, data: Uint8Array): { v: Uint8Array; l: Uint8Array };\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): string;\n    decode(data: Uint8Array): bigint;\n  };\n  toSig(hex: string | Uint8Array): { r: bigint; s: bigint };\n  hexFromSig(sig: { r: bigint; s: bigint }): string;\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: IDER = {\n  // asn.1 DER encoding utils\n  Err: DERErr,\n  // Basic building block is TLV (Tag-Length-Value)\n  _tlv: {\n    encode: (tag: number, data: string): 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 = 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 ? numberToHexUnpadded((len.length / 2) | 0b1000_0000) : '';\n      const t = numberToHexUnpadded(tag);\n      return t + 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): string {\n      const { Err: E } = DER;\n      if (num < _0n) throw new E('integer: negative integers are not allowed');\n      let hex = 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 DER parsing assertion: unpadded hex');\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 bytesToNumberBE(data);\n    },\n  },\n  toSig(bytes: Uint8Array): { r: bigint; s: bigint } {\n    // parse DER signature\n    const { Err: E, _int: int, _tlv: tlv } = DER;\n    const data = abytes(bytes, undefined, 'signature');\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 rs = tlv.encode(0x02, int.encode(sig.r));\n    const ss = tlv.encode(0x02, int.encode(sig.s));\n    const seq = rs + ss;\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\n/**\n * Creates weierstrass Point constructor, based on specified curve options.\n *\n * See {@link WeierstrassOpts}.\n *\n * @example\n```js\nconst opts = {\n  p: 0xfffffffffffffffffffffffffffffffeffffac73n,\n  n: 0x100000000000000000001b8fa16dfab9aca16b6b3n,\n  h: 1n,\n  a: 0n,\n  b: 7n,\n  Gx: 0x3b4c382ce37aa192a4019e763036f4f5dd4d7ebbn,\n  Gy: 0x938cf935318fdced6bc28286531733c3f03c4feen,\n};\nconst secp160k1_Point = weierstrass(opts);\n```\n */\nexport function weierstrass<T>(\n  params: WeierstrassOpts<T>,\n  extraOpts: WeierstrassExtraOpts<T> = {}\n): WeierstrassPointCons<T> {\n  const validated = createCurveFields('weierstrass', params, extraOpts);\n  const { Fp, Fn } = validated;\n  let CURVE = validated.CURVE as WeierstrassOpts<T>;\n  const { h: cofactor, n: CURVE_ORDER } = CURVE;\n  validateObject(\n    extraOpts,\n    {},\n    {\n      allowInfinityPoint: 'boolean',\n      clearCofactor: 'function',\n      isTorsionFree: 'function',\n      fromBytes: 'function',\n      toBytes: 'function',\n      endo: 'object',\n    }\n  );\n\n  const { endo } = extraOpts;\n  if (endo) {\n    // validateObject(endo, { beta: 'bigint', splitScalar: 'function' });\n    if (!Fp.is0(CURVE.a) || typeof endo.beta !== 'bigint' || !Array.isArray(endo.basises)) {\n      throw new Error('invalid endo: expected \"beta\": bigint and \"basises\": array');\n    }\n  }\n\n  const lengths = getWLengths(Fp, Fn);\n\n  function assertCompressionIsSupported() {\n    if (!Fp.isOdd) throw new Error('compression is not supported: Field does not have .isOdd()');\n  }\n\n  // Implements IEEE P1363 point encoding\n  function pointToBytes(\n    _c: WeierstrassPointCons<T>,\n    point: WeierstrassPoint<T>,\n    isCompressed: boolean\n  ): Uint8Array {\n    const { x, y } = point.toAffine();\n    const bx = Fp.toBytes(x);\n    abool(isCompressed, 'isCompressed');\n    if (isCompressed) {\n      assertCompressionIsSupported();\n      const hasEvenY = !Fp.isOdd!(y);\n      return concatBytes(pprefix(hasEvenY), bx);\n    } else {\n      return concatBytes(Uint8Array.of(0x04), bx, Fp.toBytes(y));\n    }\n  }\n  function pointFromBytes(bytes: Uint8Array) {\n    abytes(bytes, undefined, 'Point');\n    const { publicKey: comp, publicKeyUncompressed: uncomp } = lengths; // e.g. for 32-byte: 33, 65\n    const length = bytes.length;\n    const head = bytes[0];\n    const tail = bytes.subarray(1);\n    // No actual validation is done here: use .assertValidity()\n    if (length === comp && (head === 0x02 || head === 0x03)) {\n      const x = Fp.fromBytes(tail);\n      if (!Fp.isValid(x)) throw new Error('bad point: is not on curve, wrong x');\n      const y2 = weierstrassEquation(x); // y² = x³ + ax + b\n      let y: T;\n      try {\n        y = Fp.sqrt(y2); // y = y² ^ (p+1)/4\n      } catch (sqrtError) {\n        const err = sqrtError instanceof Error ? ': ' + sqrtError.message : '';\n        throw new Error('bad point: is not on curve, sqrt error' + err);\n      }\n      assertCompressionIsSupported();\n      const evenY = Fp.isOdd!(y);\n      const evenH = (head & 1) === 1; // ECDSA-specific\n      if (evenH !== evenY) y = Fp.neg(y);\n      return { x, y };\n    } else if (length === uncomp && head === 0x04) {\n      // TODO: more checks\n      const L = Fp.BYTES;\n      const x = Fp.fromBytes(tail.subarray(0, L));\n      const y = Fp.fromBytes(tail.subarray(L, L * 2));\n      if (!isValidXY(x, y)) throw new Error('bad point: is not on curve');\n      return { x, y };\n    } else {\n      throw new Error(\n        `bad point: got length ${length}, expected compressed=${comp} or uncompressed=${uncomp}`\n      );\n    }\n  }\n\n  const encodePoint = extraOpts.toBytes || pointToBytes;\n  const decodePoint = extraOpts.fromBytes || pointFromBytes;\n  function weierstrassEquation(x: T): T {\n    const x2 = Fp.sqr(x); // x * x\n    const x3 = Fp.mul(x2, x); // x² * x\n    return Fp.add(Fp.add(x3, Fp.mul(x, CURVE.a)), CURVE.b); // x³ + a * x + b\n  }\n\n  // TODO: move top-level\n  /** Checks whether equation holds for given x, y: y² == x³ + ax + b */\n  function isValidXY(x: T, y: T): boolean {\n    const left = Fp.sqr(y); // y²\n    const right = weierstrassEquation(x); // x³ + ax + b\n    return Fp.eql(left, right);\n  }\n\n  // Validate whether the passed curve params are valid.\n  // Test 1: equation y² = x³ + ax + b should work for generator point.\n  if (!isValidXY(CURVE.Gx, CURVE.Gy)) throw new Error('bad curve params: generator point');\n\n  // Test 2: discriminant Δ part should be non-zero: 4a³ + 27b² != 0.\n  // Guarantees curve is genus-1, smooth (non-singular).\n  const _4a3 = Fp.mul(Fp.pow(CURVE.a, _3n), _4n);\n  const _27b2 = Fp.mul(Fp.sqr(CURVE.b), BigInt(27));\n  if (Fp.is0(Fp.add(_4a3, _27b2))) throw new Error('bad curve params: a or b');\n\n  /** Asserts coordinate is valid: 0 <= n < Fp.ORDER. */\n  function acoord(title: string, n: T, banZero = false) {\n    if (!Fp.isValid(n) || (banZero && Fp.is0(n))) throw new Error(`bad point coordinate ${title}`);\n    return n;\n  }\n\n  function aprjpoint(other: unknown) {\n    if (!(other instanceof Point)) throw new Error('Weierstrass Point expected');\n  }\n\n  function splitEndoScalarN(k: bigint) {\n    if (!endo || !endo.basises) throw new Error('no endo');\n    return _splitEndoScalar(k, endo.basises, Fn.ORDER);\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) ∋ (x=X/Z, y=Y/Z)\n  const toAffineMemo = memoized((p: Point, iz?: T): AffinePoint<T> => {\n    const { X, Y, Z } = p;\n    // Fast-path for normalized points\n    if (Fp.eql(Z, Fp.ONE)) return { x: X, y: 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 x = Fp.mul(X, iz);\n    const y = 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, y };\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 invalid representation of ZERO.\n      if (extraOpts.allowInfinityPoint && !Fp.is0(p.Y)) 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    if (!Fp.isValid(x) || !Fp.isValid(y)) throw new Error('bad point: x or y not field elements');\n    if (!isValidXY(x, y)) 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  function finishEndo(\n    endoBeta: EndomorphismOpts['beta'],\n    k1p: Point,\n    k2p: Point,\n    k1neg: boolean,\n    k2neg: boolean\n  ) {\n    k2p = new Point(Fp.mul(k2p.X, endoBeta), k2p.Y, k2p.Z);\n    k1p = negateCt(k1neg, k1p);\n    k2p = negateCt(k2neg, k2p);\n    return k1p.add(k2p);\n  }\n\n  /**\n   * Projective Point works in 3d / projective (homogeneous) coordinates:(X, Y, Z) ∋ (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 WeierstrassPoint<T> {\n    // base / generator point\n    static readonly BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n    // zero / infinity / identity point\n    static readonly ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO); // 0, 1, 0\n    // math field\n    static readonly Fp = Fp;\n    // scalar field\n    static readonly Fn = Fn;\n\n    readonly X: T;\n    readonly Y: T;\n    readonly Z: T;\n\n    /** Does NOT validate if the point is valid. Use `.assertValidity()`. */\n    constructor(X: T, Y: T, Z: T) {\n      this.X = acoord('x', X);\n      this.Y = acoord('y', Y, true);\n      this.Z = acoord('z', Z);\n      Object.freeze(this);\n    }\n\n    static CURVE(): WeierstrassOpts<T> {\n      return CURVE;\n    }\n\n    /** Does NOT validate if the point is valid. Use `.assertValidity()`. */\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      // (0, 0) would've produced (0, 0, 1) - instead, we need (0, 1, 0)\n      if (Fp.is0(x) && Fp.is0(y)) return Point.ZERO;\n      return new Point(x, y, Fp.ONE);\n    }\n\n    static fromBytes(bytes: Uint8Array): Point {\n      const P = Point.fromAffine(decodePoint(abytes(bytes, undefined, 'point')));\n      P.assertValidity();\n      return P;\n    }\n\n    static fromHex(hex: string): Point {\n      return Point.fromBytes(hexToBytes(hex));\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     *\n     * @param windowSize\n     * @param isLazy true will defer table computation until the first multiplication\n     * @returns\n     */\n    precompute(windowSize: number = 8, isLazy = true): Point {\n      wnaf.createCache(this, windowSize);\n      if (!isLazy) this.multiply(_3n); // random number\n      return this;\n    }\n\n    // TODO: return `this`\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) throw new Error(\"Field doesn't support isOdd\");\n      return !Fp.isOdd(y);\n    }\n\n    /** Compare one point to another. */\n    equals(other: Point): boolean {\n      aprjpoint(other);\n      const { X: X1, Y: Y1, Z: Z1 } = this;\n      const { X: X2, Y: Y2, Z: 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    /** Flips point to one corresponding to (x, -y) in Affine coordinates. */\n    negate(): Point {\n      return new Point(this.X, Fp.neg(this.Y), this.Z);\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 { X: X1, Y: Y1, Z: 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      aprjpoint(other);\n      const { X: X1, Y: Y1, Z: Z1 } = this;\n      const { X: X2, Y: Y2, Z: 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(): boolean {\n      return this.equals(Point.ZERO);\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 } = extraOpts;\n      if (!Fn.isValidNot0(scalar)) throw new Error('invalid scalar: out of range'); // 0 is invalid\n      let point: Point, fake: Point; // Fake point is used to const-time mult\n      const mul = (n: bigint) => wnaf.cached(this, n, (p) => normalizeZ(Point, p));\n      /** See docs for {@link EndomorphismOpts} */\n      if (endo) {\n        const { k1neg, k1, k2neg, k2 } = splitEndoScalarN(scalar);\n        const { p: k1p, f: k1f } = mul(k1);\n        const { p: k2p, f: k2f } = mul(k2);\n        fake = k1f.add(k2f);\n        point = finishEndo(endo.beta, k1p, k2p, k1neg, k2neg);\n      } else {\n        const { p, f } = mul(scalar);\n        point = p;\n        fake = f;\n      }\n      // Normalize `z` for both points, but return only real one\n      return normalizeZ(Point, [point, fake])[0];\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 secret key e.g. sig verification, which works over *public* keys.\n     */\n    multiplyUnsafe(sc: bigint): Point {\n      const { endo } = extraOpts;\n      const p = this as Point;\n      if (!Fn.isValid(sc)) throw new Error('invalid scalar: out of range'); // 0 is valid\n      if (sc === _0n || p.is0()) return Point.ZERO; // 0\n      if (sc === _1n) return p; // 1\n      if (wnaf.hasCache(this)) return this.multiply(sc); // precomputes\n      // We don't have method for double scalar multiplication (aP + bQ):\n      // Even with using Strauss-Shamir trick, it's 35% slower than naïve mul+add.\n      if (endo) {\n        const { k1neg, k1, k2neg, k2 } = splitEndoScalarN(sc);\n        const { p1, p2 } = mulEndoUnsafe(Point, p, k1, k2); // 30% faster vs wnaf.unsafe\n        return finishEndo(endo.beta, p1, p2, k1neg, k2neg);\n      } else {\n        return wnaf.unsafe(p, sc);\n      }\n    }\n\n    /**\n     * Converts Projective point to affine (x, y) coordinates.\n     * @param invertedZ Z^-1 (inverted zero) - optional, precomputation is useful for invertBatch\n     */\n    toAffine(invertedZ?: T): AffinePoint<T> {\n      return toAffineMemo(this, invertedZ);\n    }\n\n    /**\n     * Checks whether Point is free of torsion elements (is in prime subgroup).\n     * Always torsion-free for cofactor=1 curves.\n     */\n    isTorsionFree(): boolean {\n      const { isTorsionFree } = extraOpts;\n      if (cofactor === _1n) return true;\n      if (isTorsionFree) return isTorsionFree(Point, this);\n      return wnaf.unsafe(this, CURVE_ORDER).is0();\n    }\n\n    clearCofactor(): Point {\n      const { clearCofactor } = extraOpts;\n      if (cofactor === _1n) return this; // Fast-path\n      if (clearCofactor) return clearCofactor(Point, this) as Point;\n      return this.multiplyUnsafe(cofactor);\n    }\n\n    isSmallOrder(): boolean {\n      // can we use this.clearCofactor()?\n      return this.multiplyUnsafe(cofactor).is0();\n    }\n\n    toBytes(isCompressed = true): Uint8Array {\n      abool(isCompressed, 'isCompressed');\n      this.assertValidity();\n      return encodePoint(Point, this, isCompressed);\n    }\n\n    toHex(isCompressed = true): string {\n      return bytesToHex(this.toBytes(isCompressed));\n    }\n\n    toString() {\n      return `<Point ${this.is0() ? 'ZERO' : this.toHex()}>`;\n    }\n  }\n  const bits = Fn.BITS;\n  const wnaf = new wNAF(Point, extraOpts.endo ? Math.ceil(bits / 2) : bits);\n  Point.BASE.precompute(8); // Enable precomputes. Slows down first publicKey computation by 20ms.\n  return Point;\n}\n\n/** Methods of ECDSA signature instance. */\nexport interface ECDSASignature {\n  readonly r: bigint;\n  readonly s: bigint;\n  readonly recovery?: number;\n  addRecoveryBit(recovery: number): ECDSASignature & { readonly recovery: number };\n  hasHighS(): boolean;\n  recoverPublicKey(messageHash: Uint8Array): WeierstrassPoint<bigint>;\n  toBytes(format?: string): Uint8Array;\n  toHex(format?: string): string;\n}\n/** Methods of ECDSA signature constructor. */\nexport type ECDSASignatureCons = {\n  new (r: bigint, s: bigint, recovery?: number): ECDSASignature;\n  fromBytes(bytes: Uint8Array, format?: ECDSASignatureFormat): ECDSASignature;\n  fromHex(hex: string, format?: ECDSASignatureFormat): ECDSASignature;\n};\n\n// Points start with byte 0x02 when y is even; otherwise 0x03\nfunction pprefix(hasEvenY: boolean): Uint8Array {\n  return Uint8Array.of(hasEvenY ? 0x02 : 0x03);\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>(\n  Fp: IField<T>,\n  Z: T\n): (u: T, v: T) => { isValid: boolean; value: 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: IField<T>,\n  opts: {\n    A: T;\n    B: T;\n    Z: T;\n  }\n): (u: T) => { x: T; y: T } {\n  validateField(Fp);\n  const { A, B, Z } = opts;\n  if (!Fp.isValid(A) || !Fp.isValid(B) || !Fp.isValid(Z))\n    throw new Error('mapToCurveSimpleSWU: invalid opts');\n  const sqrtRatio = SWUFpSqrtRatio(Fp, Z);\n  if (!Fp.isOdd) throw new Error('Field does not have .isOdd()');\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, 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, B); // 6.  tv3 = B * tv3\n    tv4 = Fp.cmov(Z, Fp.neg(tv2), !Fp.eql(tv2, Fp.ZERO)); // 7.  tv4 = CMOV(Z, -tv2, tv2 != 0)\n    tv4 = Fp.mul(tv4, 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, 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, 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    const tv4_inv = FpInvertBatch(Fp, [tv4], true)[0];\n    x = Fp.mul(x, tv4_inv); // 25.   x = x / tv4\n    return { x, y };\n  };\n}\n\nfunction getWLengths<T>(Fp: IField<T>, Fn: IField<bigint>) {\n  return {\n    secretKey: Fn.BYTES,\n    publicKey: 1 + Fp.BYTES,\n    publicKeyUncompressed: 1 + 2 * Fp.BYTES,\n    publicKeyHasPrefix: true,\n    signature: 2 * Fn.BYTES,\n  };\n}\n\n/**\n * Sometimes users only need getPublicKey, getSharedSecret, and secret key handling.\n * This helper ensures no signature functionality is present. Less code, smaller bundle size.\n */\nexport function ecdh(\n  Point: WeierstrassPointCons<bigint>,\n  ecdhOpts: { randomBytes?: (bytesLength?: number) => Uint8Array } = {}\n): ECDH {\n  const { Fn } = Point;\n  const randomBytes_ = ecdhOpts.randomBytes || wcRandomBytes;\n  const lengths = Object.assign(getWLengths(Point.Fp, Fn), { seed: getMinHashLength(Fn.ORDER) });\n\n  function isValidSecretKey(secretKey: Uint8Array) {\n    try {\n      const num = Fn.fromBytes(secretKey);\n      return Fn.isValidNot0(num);\n    } catch (error) {\n      return false;\n    }\n  }\n\n  function isValidPublicKey(publicKey: Uint8Array, isCompressed?: boolean): boolean {\n    const { publicKey: comp, publicKeyUncompressed } = lengths;\n    try {\n      const l = publicKey.length;\n      if (isCompressed === true && l !== comp) return false;\n      if (isCompressed === false && l !== publicKeyUncompressed) return false;\n      return !!Point.fromBytes(publicKey);\n    } catch (error) {\n      return false;\n    }\n  }\n\n  /**\n   * Produces cryptographically secure secret key from random of size\n   * (groupLen + ceil(groupLen / 2)) with modulo bias being negligible.\n   */\n  function randomSecretKey(seed = randomBytes_(lengths.seed)): Uint8Array {\n    return mapHashToField(abytes(seed, lengths.seed, 'seed'), Fn.ORDER);\n  }\n\n  /**\n   * Computes public key for a secret key. Checks for validity of the secret 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(secretKey: Uint8Array, isCompressed = true): Uint8Array {\n    return Point.BASE.multiply(Fn.fromBytes(secretKey)).toBytes(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: Uint8Array): boolean | undefined {\n    const { secretKey, publicKey, publicKeyUncompressed } = lengths;\n    if (!isBytes(item)) return undefined;\n    if (('_lengths' in Fn && Fn._lengths) || secretKey === publicKey) return undefined;\n    const l = abytes(item, undefined, 'key').length;\n    return l === publicKey || l === publicKeyUncompressed;\n  }\n\n  /**\n   * ECDH (Elliptic Curve Diffie Hellman).\n   * Computes shared public key from secret key A and public key B.\n   * Checks: 1) secret key validity 2) shared key is on-curve.\n   * Does NOT hash the result.\n   * @param isCompressed whether to return compact (default), or full key\n   * @returns shared public key\n   */\n  function getSharedSecret(\n    secretKeyA: Uint8Array,\n    publicKeyB: Uint8Array,\n    isCompressed = true\n  ): Uint8Array {\n    if (isProbPub(secretKeyA) === true) throw new Error('first arg must be private key');\n    if (isProbPub(publicKeyB) === false) throw new Error('second arg must be public key');\n    const s = Fn.fromBytes(secretKeyA);\n    const b = Point.fromBytes(publicKeyB); // checks for being on-curve\n    return b.multiply(s).toBytes(isCompressed);\n  }\n\n  const utils = {\n    isValidSecretKey,\n    isValidPublicKey,\n    randomSecretKey,\n  };\n  const keygen = createKeygen(randomSecretKey, getPublicKey);\n\n  return Object.freeze({ getPublicKey, getSharedSecret, keygen, Point, utils, lengths });\n}\n\n/**\n * Creates ECDSA signing interface for given elliptic curve `Point` and `hash` function.\n *\n * @param Point created using {@link weierstrass} function\n * @param hash used for 1) message prehash-ing 2) k generation in `sign`, using hmac_drbg(hash)\n * @param ecdsaOpts rarely needed, see {@link ECDSAOpts}\n *\n * @example\n * ```js\n * const p256_Point = weierstrass(...);\n * const p256_sha256 = ecdsa(p256_Point, sha256);\n * const p256_sha224 = ecdsa(p256_Point, sha224);\n * const p256_sha224_r = ecdsa(p256_Point, sha224, { randomBytes: (length) => { ... } });\n * ```\n */\nexport function ecdsa(\n  Point: WeierstrassPointCons<bigint>,\n  hash: CHash,\n  ecdsaOpts: ECDSAOpts = {}\n): ECDSA {\n  ahash(hash);\n  validateObject(\n    ecdsaOpts,\n    {},\n    {\n      hmac: 'function',\n      lowS: 'boolean',\n      randomBytes: 'function',\n      bits2int: 'function',\n      bits2int_modN: 'function',\n    }\n  );\n  ecdsaOpts = Object.assign({}, ecdsaOpts);\n  const randomBytes = ecdsaOpts.randomBytes || wcRandomBytes;\n  const hmac = ecdsaOpts.hmac || ((key, msg) => nobleHmac(hash, key, msg));\n\n  const { Fp, Fn } = Point;\n  const { ORDER: CURVE_ORDER, BITS: fnBits } = Fn;\n  const { keygen, getPublicKey, getSharedSecret, utils, lengths } = ecdh(Point, ecdsaOpts);\n  const defaultSigOpts: Required<ECDSASignOpts> = {\n    prehash: true,\n    lowS: typeof ecdsaOpts.lowS === 'boolean' ? ecdsaOpts.lowS : true,\n    format: 'compact' as ECDSASignatureFormat,\n    extraEntropy: false,\n  };\n  const hasLargeCofactor = CURVE_ORDER * _2n < Fp.ORDER; // Won't CURVE().h > 2n be more effective?\n\n  function isBiggerThanHalfOrder(number: bigint) {\n    const HALF = CURVE_ORDER >> _1n;\n    return number > HALF;\n  }\n  function validateRS(title: string, num: bigint): bigint {\n    if (!Fn.isValidNot0(num))\n      throw new Error(`invalid signature ${title}: out of range 1..Point.Fn.ORDER`);\n    return num;\n  }\n  function assertSmallCofactor(): void {\n    // ECDSA recovery is hard for cofactor > 1 curves.\n    // In sign, `r = q.x mod n`, and here we recover q.x from r.\n    // While recovering q.x >= n, we need to add r+n for cofactor=1 curves.\n    // However, for cofactor>1, r+n may not get q.x:\n    // r+n*i would need to be done instead where i is unknown.\n    // To easily get i, we either need to:\n    // a. increase amount of valid recid values (4, 5...); OR\n    // b. prohibit non-prime-order signatures (recid > 1).\n    if (hasLargeCofactor)\n      throw new Error('\"recovered\" sig type is not supported for cofactor >2 curves');\n  }\n  function validateSigLength(bytes: Uint8Array, format: ECDSASignatureFormat) {\n    validateSigFormat(format);\n    const size = lengths.signature!;\n    const sizer = format === 'compact' ? size : format === 'recovered' ? size + 1 : undefined;\n    return abytes(bytes, sizer);\n  }\n\n  /**\n   * ECDSA signature with its (r, s) properties. Supports compact, recovered & DER representations.\n   */\n  class Signature implements ECDSASignature {\n    readonly r: bigint;\n    readonly s: bigint;\n    readonly recovery?: number;\n\n    constructor(r: bigint, s: bigint, recovery?: number) {\n      this.r = validateRS('r', r); // r in [1..N-1];\n      this.s = validateRS('s', s); // s in [1..N-1];\n      if (recovery != null) {\n        assertSmallCofactor();\n        if (![0, 1, 2, 3].includes(recovery)) throw new Error('invalid recovery id');\n        this.recovery = recovery;\n      }\n      Object.freeze(this);\n    }\n\n    static fromBytes(\n      bytes: Uint8Array,\n      format: ECDSASignatureFormat = defaultSigOpts.format\n    ): Signature {\n      validateSigLength(bytes, format);\n      let recid: number | undefined;\n      if (format === 'der') {\n        const { r, s } = DER.toSig(abytes(bytes));\n        return new Signature(r, s);\n      }\n      if (format === 'recovered') {\n        recid = bytes[0];\n        format = 'compact';\n        bytes = bytes.subarray(1);\n      }\n      const L = lengths.signature! / 2;\n      const r = bytes.subarray(0, L);\n      const s = bytes.subarray(L, L * 2);\n      return new Signature(Fn.fromBytes(r), Fn.fromBytes(s), recid);\n    }\n\n    static fromHex(hex: string, format?: ECDSASignatureFormat) {\n      return this.fromBytes(hexToBytes(hex), format);\n    }\n\n    private assertRecovery(): number {\n      const { recovery } = this;\n      if (recovery == null) throw new Error('invalid recovery id: must be present');\n      return recovery;\n    }\n\n    addRecoveryBit(recovery: number): RecoveredSignature {\n      return new Signature(this.r, this.s, recovery) as RecoveredSignature;\n    }\n\n    recoverPublicKey(messageHash: Uint8Array): WeierstrassPoint<bigint> {\n      const { r, s } = this;\n      const recovery = this.assertRecovery();\n      const radj = recovery === 2 || recovery === 3 ? r + CURVE_ORDER : r;\n      if (!Fp.isValid(radj)) throw new Error('invalid recovery id: sig.r+curve.n != R.x');\n      const x = Fp.toBytes(radj);\n      const R = Point.fromBytes(concatBytes(pprefix((recovery & 1) === 0), x));\n      const ir = Fn.inv(radj); // r^-1\n      const h = bits2int_modN(abytes(messageHash, undefined, 'msgHash')); // Truncate hash\n      const u1 = Fn.create(-h * ir); // -hr^-1\n      const u2 = Fn.create(s * ir); // sr^-1\n      // (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1). unsafe is fine: there is no private data.\n      const Q = Point.BASE.multiplyUnsafe(u1).add(R.multiplyUnsafe(u2));\n      if (Q.is0()) throw new Error('invalid recovery: point at infinify');\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    toBytes(format: ECDSASignatureFormat = defaultSigOpts.format) {\n      validateSigFormat(format);\n      if (format === 'der') return hexToBytes(DER.hexFromSig(this));\n      const { r, s } = this;\n      const rb = Fn.toBytes(r);\n      const sb = Fn.toBytes(s);\n      if (format === 'recovered') {\n        assertSmallCofactor();\n        return concatBytes(Uint8Array.of(this.assertRecovery()), rb, sb);\n      }\n      return concatBytes(rb, sb);\n    }\n\n    toHex(format?: ECDSASignatureFormat) {\n      return bytesToHex(this.toBytes(format));\n    }\n  }\n  type RecoveredSignature = Signature & { recovery: number };\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    ecdsaOpts.bits2int ||\n    function bits2int_def(bytes: Uint8Array): bigint {\n      // Our custom check \"just in case\", for protection against DoS\n      if (bytes.length > 8192) throw new Error('input is too large');\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 = bytesToNumberBE(bytes); // check for == u8 done here\n      const delta = bytes.length * 8 - fnBits; // truncate to nBitLength leftmost bits\n      return delta > 0 ? num >> BigInt(delta) : num;\n    };\n  const bits2int_modN =\n    ecdsaOpts.bits2int_modN ||\n    function bits2int_modN_def(bytes: Uint8Array): bigint {\n      return Fn.create(bits2int(bytes)); // can't use bytesToNumberBE here\n    };\n  // Pads output with zero as per spec\n  const ORDER_MASK = bitMask(fnBits);\n  /** Converts to bytes. Checks if num in `[0..ORDER_MASK-1]` e.g.: `[0..2^256-1]`. */\n  function int2octets(num: bigint): Uint8Array {\n    // IMPORTANT: the check ensures working for case `Fn.BYTES != Fn.BITS * 8`\n    aInRange('num < 2^' + fnBits, num, _0n, ORDER_MASK);\n    return Fn.toBytes(num);\n  }\n\n  function validateMsgAndHash(message: Uint8Array, prehash: boolean) {\n    abytes(message, undefined, 'message');\n    return prehash ? abytes(hash(message), undefined, 'prehashed message') : message;\n  }\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   *\n   * Warning: we cannot assume here that message has same amount of bytes as curve order,\n   * this will be invalid at least for P521. Also it can be bigger for P224 + SHA256.\n   */\n  function prepSig(message: Uint8Array, secretKey: Uint8Array, opts: ECDSASignOpts) {\n    const { lowS, prehash, extraEntropy } = validateSigOpts(opts, defaultSigOpts);\n    message = validateMsgAndHash(message, prehash); // RFC6979 3.2 A: h1 = H(m)\n    // We can't later call bits2octets, since nested bits2int is broken for curves\n    // with fnBits % 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(message);\n    const d = Fn.fromBytes(secretKey); // validate secret key, convert to bigint\n    if (!Fn.isValidNot0(d)) throw new Error('invalid private key');\n    const seedArgs = [int2octets(d), int2octets(h1int)];\n    // extraEntropy. RFC6979 3.6: additional k' (optional).\n    if (extraEntropy != null && extraEntropy !== false) {\n      // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')\n      // gen random bytes OR pass as-is\n      const e = extraEntropy === true ? randomBytes(lengths.secretKey) : extraEntropy;\n      seedArgs.push(abytes(e, undefined, 'extraEntropy')); // check for being bytes\n    }\n    const seed = concatBytes(...seedArgs); // Step D of RFC6979 3.2\n    const m = h1int; // 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    // To transform k => Signature:\n    // q = k⋅G\n    // r = q.x mod n\n    // s = k^-1(m + rd) mod n\n    // Can use scalar blinding b^-1(bm + bdr) where b ∈ [1,q−1] 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    function k2sig(kBytes: Uint8Array): Signature | undefined {\n      // RFC 6979 Section 3.2, step 3: k = bits2int(T)\n      // Important: all mod() calls here must be done over N\n      const k = bits2int(kBytes); // Cannot use fields methods, since it is group element\n      if (!Fn.isValidNot0(k)) return; // Valid scalars (including k) must be in 1..N-1\n      const ik = Fn.inv(k); // k^-1 mod n\n      const q = Point.BASE.multiply(k).toAffine(); // q = k⋅G\n      const r = Fn.create(q.x); // r = q.x mod n\n      if (r === _0n) return;\n      const s = Fn.create(ik * Fn.create(m + r * d)); // s = k^-1(m + rd) mod n\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 = Fn.neg(s); // if lowS was passed, ensure s is always in the bottom half of N\n        recovery ^= 1;\n      }\n      return new Signature(r, normS, hasLargeCofactor ? undefined : recovery);\n    }\n    return { seed, k2sig };\n  }\n\n  /**\n   * Signs message hash with a secret key.\n   *\n   * ```\n   * sign(m, d) where\n   *   k = rfc6979_hmac_drbg(m, d)\n   *   (x, y) = G × k\n   *   r = x mod n\n   *   s = (m + dr) / k mod n\n   * ```\n   */\n  function sign(message: Uint8Array, secretKey: Uint8Array, opts: ECDSASignOpts = {}): Uint8Array {\n    const { seed, k2sig } = prepSig(message, secretKey, opts); // Steps A, D of RFC6979 3.2.\n    const drbg = createHmacDrbg<Signature>(hash.outputLen, Fn.BYTES, hmac);\n    const sig = drbg(seed, k2sig); // Steps B, C, D, E, F, G\n    return sig.toBytes(opts.format);\n  }\n\n  /**\n   * Verifies a signature against message and public key.\n   * Rejects lowS signatures by default: see {@link ECDSAVerifyOpts}.\n   * 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⋅G + u2⋅P\n   *   mod(R.x, n) == r\n   * ```\n   */\n  function verify(\n    signature: Uint8Array,\n    message: Uint8Array,\n    publicKey: Uint8Array,\n    opts: ECDSAVerifyOpts = {}\n  ): boolean {\n    const { lowS, prehash, format } = validateSigOpts(opts, defaultSigOpts);\n    publicKey = abytes(publicKey, undefined, 'publicKey');\n    message = validateMsgAndHash(message, prehash);\n    if (!isBytes(signature as any)) {\n      const end = signature instanceof Signature ? ', use sig.toBytes()' : '';\n      throw new Error('verify expects Uint8Array signature' + end);\n    }\n    validateSigLength(signature, format); // execute this twice because we want loud error\n    try {\n      const sig = Signature.fromBytes(signature, format);\n      const P = Point.fromBytes(publicKey);\n      if (lowS && sig.hasHighS()) return false;\n      const { r, s } = sig;\n      const h = bits2int_modN(message); // mod n, not mod p\n      const is = Fn.inv(s); // s^-1 mod n\n      const u1 = Fn.create(h * is); // u1 = hs^-1 mod n\n      const u2 = Fn.create(r * is); // u2 = rs^-1 mod n\n      const R = Point.BASE.multiplyUnsafe(u1).add(P.multiplyUnsafe(u2)); // u1⋅G + u2⋅P\n      if (R.is0()) return false;\n      const v = Fn.create(R.x); // v = r.x mod n\n      return v === r;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  function recoverPublicKey(\n    signature: Uint8Array,\n    message: Uint8Array,\n    opts: ECDSARecoverOpts = {}\n  ): Uint8Array {\n    const { prehash } = validateSigOpts(opts, defaultSigOpts);\n    message = validateMsgAndHash(message, prehash);\n    return Signature.fromBytes(signature, 'recovered').recoverPublicKey(message).toBytes();\n  }\n\n  return Object.freeze({\n    keygen,\n    getPublicKey,\n    getSharedSecret,\n    utils,\n    lengths,\n    Point,\n    sign,\n    verify,\n    recoverPublicKey,\n    Signature,\n    hash,\n  }) satisfies Signer;\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² = x³ + 4.\n * - G2 is a subgroup of ((x₁, x₂+i), (y₁, y₂+i)) E(Fq²) over y² = x³ + 4(1 + i) where i is √-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 modes of operation:\n * - Long signatures:  X-byte keys + 2X-byte sigs (G1 keys + G2 sigs).\n * - Short signatures: 2X-byte keys + X-byte sigs (G2 keys + G1 sigs).\n * @module\n **/\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { abytes, memoized, notImplemented, randomBytes } from '../utils.ts';\nimport { normalizeZ, type CurveLengths } from './curve.ts';\nimport {\n  createHasher,\n  type H2CDSTOpts,\n  type H2CHasher,\n  type H2CHashOpts,\n  type H2COpts,\n  type MapToCurve,\n} from './hash-to-curve.ts';\nimport { getMinHashLength, mapHashToField, type IField } from './modular.ts';\nimport type { Fp12, Fp12Bls, Fp2, Fp2Bls, Fp6Bls } from './tower.ts';\nimport { type WeierstrassPoint, type WeierstrassPointCons } from './weierstrass.ts';\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 BlsTwistType = 'multiplicative' | 'divisive';\n\nexport type BlsShortSignatureCoder<Fp> = {\n  fromBytes(bytes: Uint8Array): WeierstrassPoint<Fp>;\n  fromHex(hex: string): WeierstrassPoint<Fp>;\n  toBytes(point: WeierstrassPoint<Fp>): Uint8Array;\n  toHex(point: WeierstrassPoint<Fp>): string;\n};\n\nexport type BlsLongSignatureCoder<Fp> = {\n  fromBytes(bytes: Uint8Array): WeierstrassPoint<Fp>;\n  fromHex(hex: string): WeierstrassPoint<Fp>;\n  toBytes(point: WeierstrassPoint<Fp>): Uint8Array;\n  toHex(point: WeierstrassPoint<Fp>): string;\n};\n\nexport type BlsFields = {\n  Fp: IField<Fp>;\n  Fr: IField<bigint>;\n  Fp2: Fp2Bls;\n  Fp6: Fp6Bls;\n  Fp12: Fp12Bls;\n};\n\nexport type BlsPostPrecomputePointAddFn = (\n  Rx: Fp2,\n  Ry: Fp2,\n  Rz: Fp2,\n  Qx: Fp2,\n  Qy: Fp2\n) => { Rx: Fp2; Ry: Fp2; Rz: Fp2 };\nexport type BlsPostPrecomputeFn = (\n  Rx: Fp2,\n  Ry: Fp2,\n  Rz: Fp2,\n  Qx: Fp2,\n  Qy: Fp2,\n  pointAdd: BlsPostPrecomputePointAddFn\n) => void;\nexport type BlsPairing = {\n  lengths: CurveLengths;\n  Fr: IField<bigint>;\n  Fp12: Fp12Bls;\n  calcPairingPrecomputes: (p: WeierstrassPoint<Fp2>) => Precompute;\n  millerLoopBatch: (pairs: [Precompute, Fp, Fp][]) => Fp12;\n  pairing: (P: WeierstrassPoint<Fp>, Q: WeierstrassPoint<Fp2>, withFinalExponent?: boolean) => Fp12;\n  pairingBatch: (\n    pairs: { g1: WeierstrassPoint<Fp>; g2: WeierstrassPoint<Fp2> }[],\n    withFinalExponent?: boolean\n  ) => Fp12;\n  randomSecretKey: (seed?: Uint8Array) => Uint8Array;\n};\n\nexport type BlsPairingParams = {\n  // MSB is always ignored and used as marker for length, otherwise leading zeros will be lost.\n  // Can be different from `X` (seed) param.\n  ateLoopSize: bigint;\n  xNegative: boolean;\n  twistType: BlsTwistType; // BLS12-381: Multiplicative, BN254: Divisive\n  randomBytes?: (len?: number) => Uint8Array;\n  postPrecompute?: BlsPostPrecomputeFn; // Ugly hack to untwist point in BN254 after miller loop\n};\nexport type BlsHasherParams = {\n  mapToG1?: MapToCurve<Fp>;\n  mapToG2?: MapToCurve<Fp2>;\n  hasherOpts: H2COpts;\n  hasherOptsG1: H2COpts;\n  hasherOptsG2: H2COpts;\n};\ntype PrecomputeSingle = [Fp2, Fp2, Fp2][];\ntype Precompute = PrecomputeSingle[];\n\n/**\n * BLS consists of two curves: G1 and G2:\n * - G1 is a subgroup of (x, y) E(Fq) over y² = x³ + 4.\n * - G2 is a subgroup of ((x₁, x₂+i), (y₁, y₂+i)) E(Fq²) over y² = x³ + 4(1 + i) where i is √-1\n */\nexport interface BlsCurvePair {\n  lengths: CurveLengths;\n  millerLoopBatch: BlsPairing['millerLoopBatch'];\n  pairing: BlsPairing['pairing'];\n  pairingBatch: BlsPairing['pairingBatch'];\n  G1: { Point: WeierstrassPointCons<Fp> };\n  G2: { Point: WeierstrassPointCons<Fp2> };\n  fields: {\n    Fp: IField<Fp>;\n    Fp2: Fp2Bls;\n    Fp6: Fp6Bls;\n    Fp12: Fp12Bls;\n    Fr: IField<bigint>;\n  };\n  utils: {\n    randomSecretKey: (seed?: Uint8Array) => Uint8Array;\n    calcPairingPrecomputes: BlsPairing['calcPairingPrecomputes'];\n  };\n  params: {\n    ateLoopSize: bigint;\n    twistType: BlsTwistType;\n  };\n}\n\nexport interface BlsCurvePairWithHashers extends BlsCurvePair {\n  G1: H2CHasher<WeierstrassPointCons<Fp>>;\n  G2: H2CHasher<WeierstrassPointCons<Fp2>>;\n}\n\nexport interface BlsCurvePairWithSignatures extends BlsCurvePairWithHashers {\n  longSignatures: BlsSigs<bigint, Fp2>;\n  shortSignatures: BlsSigs<Fp2, bigint>;\n}\n\ntype BLSInput = Uint8Array;\nexport interface BlsSigs<P, S> {\n  lengths: CurveLengths;\n  keygen(seed?: Uint8Array): {\n    secretKey: Uint8Array;\n    publicKey: WeierstrassPoint<P>;\n  };\n  getPublicKey(secretKey: Uint8Array): WeierstrassPoint<P>;\n  sign(hashedMessage: WeierstrassPoint<S>, secretKey: Uint8Array): WeierstrassPoint<S>;\n  verify(\n    signature: WeierstrassPoint<S> | BLSInput,\n    message: WeierstrassPoint<S>,\n    publicKey: WeierstrassPoint<P> | BLSInput\n  ): boolean;\n  verifyBatch: (\n    signature: WeierstrassPoint<S> | BLSInput,\n    items: { message: WeierstrassPoint<S>; publicKey: WeierstrassPoint<P> | BLSInput }[]\n  ) => boolean;\n  aggregatePublicKeys(publicKeys: (WeierstrassPoint<P> | BLSInput)[]): WeierstrassPoint<P>;\n  aggregateSignatures(signatures: (WeierstrassPoint<S> | BLSInput)[]): WeierstrassPoint<S>;\n  hash(message: Uint8Array, DST?: string | Uint8Array, hashOpts?: H2CHashOpts): WeierstrassPoint<S>;\n  Signature: BlsLongSignatureCoder<S>;\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\nfunction aNonEmpty(arr: any[]) {\n  if (!Array.isArray(arr) || arr.length === 0) throw new Error('expected non-empty array');\n}\n\n// This should be enough for bn254, no need to export full stuff?\nfunction createBlsPairing(\n  fields: BlsFields,\n  G1: WeierstrassPointCons<Fp>,\n  G2: WeierstrassPointCons<Fp2>,\n  params: BlsPairingParams\n): BlsPairing {\n  const { Fr, Fp2, Fp12 } = fields;\n  const { twistType, ateLoopSize, xNegative, postPrecompute } = params;\n  type G1 = typeof G1.BASE;\n  type G2 = typeof G2.BASE;\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 (twistType === '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 (twistType === '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²\n    const t1 = Fp2.sqr(Rz); // Rz²\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)² - T1 - T0\n    const c0 = Fp2.sub(t2, t0); // T2 - T0 (i)\n    const c1 = Fp2.mul(Fp2.sqr(Rx), _3n); // 3 * Rx²\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)² - 3 * T2²\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²\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² * 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(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 (postPrecompute) {\n      const last = ell[ell.length - 1];\n      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 (xNegative) 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    // Cache precomputed toAffine for all points\n    normalizeZ(\n      G1,\n      pairs.map(({ g1 }) => g1)\n    );\n    normalizeZ(\n      G2,\n      pairs.map(({ g2 }) => g2)\n    );\n    for (const { g1, g2 } of pairs) {\n      if (g1.is0() || g2.is0()) 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  const lengths = {\n    seed: getMinHashLength(Fr.ORDER),\n  };\n  const rand = params.randomBytes || randomBytes;\n  const randomSecretKey = (seed = rand(lengths.seed)): Uint8Array => {\n    abytes(seed, lengths.seed, 'seed');\n    return mapHashToField(seed, Fr.ORDER);\n  };\n  return {\n    lengths,\n    Fr,\n    Fp12, // NOTE: we re-export Fp12 here because pairing results are Fp12!\n    millerLoopBatch,\n    pairing,\n    pairingBatch,\n    calcPairingPrecomputes,\n    randomSecretKey,\n  };\n}\n\nfunction createBlsSig<P, S>(\n  blsPairing: BlsPairing,\n  PubPoint: WeierstrassPointCons<P>,\n  SigPoint: WeierstrassPointCons<S>,\n  isSigG1: boolean,\n  hashToSigCurve: (msg: Uint8Array, options?: H2CDSTOpts) => WeierstrassPoint<S>,\n  SignatureCoder?: BlsLongSignatureCoder<S>\n): BlsSigs<P, S> {\n  const { Fr, Fp12, pairingBatch, randomSecretKey, lengths } = blsPairing;\n  if (!SignatureCoder) {\n    SignatureCoder = {\n      fromBytes: notImplemented,\n      fromHex: notImplemented,\n      toBytes: notImplemented,\n      toHex: notImplemented,\n    };\n  }\n  type PubPoint = WeierstrassPoint<P>;\n  type SigPoint = WeierstrassPoint<S>;\n  function normPub(point: PubPoint | BLSInput): PubPoint {\n    return point instanceof PubPoint ? (point as PubPoint) : PubPoint.fromBytes(point);\n  }\n  function normSig(point: SigPoint | BLSInput): SigPoint {\n    return point instanceof SigPoint ? (point as SigPoint) : SigPoint.fromBytes(point);\n  }\n  function amsg(m: unknown): SigPoint {\n    if (!(m instanceof SigPoint))\n      throw new Error(`expected valid message hashed to ${!isSigG1 ? 'G2' : 'G1'} curve`);\n    return m as SigPoint;\n  }\n\n  type G1 = WeierstrassPoint<Fp>;\n  type G2 = WeierstrassPoint<Fp2>;\n  type PairingInput = { g1: G1; g2: G2 };\n  // What matters here is what point pairing API accepts as G1 or G2, not actual size or names\n  const pair: (a: PubPoint, b: SigPoint) => PairingInput = !isSigG1\n    ? (a: PubPoint, b: SigPoint) => ({ g1: a, g2: b }) as PairingInput\n    : (a: PubPoint, b: SigPoint) => ({ g1: b, g2: a }) as PairingInput;\n  return Object.freeze({\n    lengths: { ...lengths, secretKey: Fr.BYTES },\n    keygen(seed?: Uint8Array) {\n      const secretKey = randomSecretKey(seed);\n      const publicKey = this.getPublicKey(secretKey);\n      return { secretKey, publicKey };\n    },\n    // P = pk x G\n    getPublicKey(secretKey: Uint8Array): PubPoint {\n      let sec;\n      try {\n        sec = PubPoint.Fn.fromBytes(secretKey);\n      } catch (error) {\n        // @ts-ignore\n        throw new Error('invalid private key: ' + typeof secretKey, { cause: error });\n      }\n      return PubPoint.BASE.multiply(sec);\n    },\n    // S = pk x H(m)\n    sign(message: SigPoint, secretKey: Uint8Array, unusedArg?: any): SigPoint {\n      if (unusedArg != null) throw new Error('sign() expects 2 arguments');\n      const sec = PubPoint.Fn.fromBytes(secretKey);\n      amsg(message).assertValidity();\n      return message.multiply(sec);\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    // e(S, G) == e(H(m), P)\n    verify(\n      signature: SigPoint | BLSInput,\n      message: SigPoint,\n      publicKey: PubPoint | BLSInput,\n      unusedArg?: any\n    ): boolean {\n      if (unusedArg != null) throw new Error('verify() expects 3 arguments');\n      signature = normSig(signature);\n      publicKey = normPub(publicKey);\n      const P = publicKey.negate();\n      const G = PubPoint.BASE;\n      const Hm = amsg(message);\n      const S = signature;\n      // This code was changed in 1.9.x:\n      // Before it was G.negate() in G2, now it's always pubKey.negate\n      // e(P, -Q)===e(-P, Q)==e(P, Q)^-1. Negate can be done anywhere (as long it is done once per pair).\n      // We just moving sign, but since pairing is multiplicative, we doing X * X^-1 = 1\n      try {\n        const exp = pairingBatch([pair(P, Hm), pair(G, S)]);\n        return Fp12.eql(exp, Fp12.ONE);\n      } catch {\n        return false;\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    // TODO: maybe `{message: G2Hex, publicKey: G1Hex}[]` instead?\n    verifyBatch(\n      signature: SigPoint | BLSInput,\n      items: { message: SigPoint; publicKey: PubPoint | BLSInput }[]\n    ): boolean {\n      aNonEmpty(items);\n      const sig = normSig(signature);\n      const nMessages = items.map((i) => i.message);\n      const nPublicKeys = items.map((i) => normPub(i.publicKey));\n      // NOTE: this works only for exact same object\n      const messagePubKeyMap = new Map<SigPoint, PubPoint[]>();\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      const G = PubPoint.BASE;\n      try {\n        for (const [msg, keys] of messagePubKeyMap) {\n          const groupPublicKey = keys.reduce((acc, msg) => acc.add(msg));\n          paired.push(pair(groupPublicKey, msg));\n        }\n        paired.push(pair(G.negate(), sig));\n        return Fp12.eql(pairingBatch(paired), Fp12.ONE);\n      } catch {\n        return false;\n      }\n    },\n    // Adds a bunch of public key points together.\n    // pk1 + pk2 + pk3 = pkA\n    aggregatePublicKeys(publicKeys: (PubPoint | BLSInput)[]): PubPoint {\n      aNonEmpty(publicKeys);\n      publicKeys = publicKeys.map((pub) => normPub(pub));\n      const agg = (publicKeys as PubPoint[]).reduce((sum, p) => sum.add(p), PubPoint.ZERO);\n      agg.assertValidity();\n      return agg;\n    },\n\n    // Adds a bunch of signature points together.\n    // pk1 + pk2 + pk3 = pkA\n    aggregateSignatures(signatures: (SigPoint | BLSInput)[]): SigPoint {\n      aNonEmpty(signatures);\n      signatures = signatures.map((sig) => normSig(sig));\n      const agg = (signatures as SigPoint[]).reduce((sum, s) => sum.add(s), SigPoint.ZERO);\n      agg.assertValidity();\n      return agg;\n    },\n\n    hash(messageBytes: Uint8Array, DST?: string | Uint8Array): SigPoint {\n      abytes(messageBytes);\n      const opts = DST ? { DST } : undefined;\n      return hashToSigCurve(messageBytes, opts);\n    },\n    Signature: SignatureCoder,\n  }) /*satisfies Signer */;\n}\n\ntype BlsSignatureCoders = Partial<{\n  LongSignature: BlsLongSignatureCoder<Fp2>;\n  ShortSignature: BlsShortSignatureCoder<Fp>;\n}>;\n\n// NOTE: separate function instead of function override, so we don't depend on hasher in bn254.\nexport function blsBasic(\n  fields: BlsFields,\n  G1_Point: WeierstrassPointCons<Fp>,\n  G2_Point: WeierstrassPointCons<Fp2>,\n  params: BlsPairingParams\n): BlsCurvePair {\n  // Fields are specific for curve, so for now we'll need to pass them with opts\n  const { Fp, Fr, Fp2, Fp6, Fp12 } = fields;\n  // Point on G1 curve: (x, y)\n  // const G1_Point = weierstrass(CURVE.G1, { Fn: Fr });\n  const G1 = { Point: G1_Point };\n  // Point on G2 curve (complex numbers): (x₁, x₂+i), (y₁, y₂+i)\n  const G2 = { Point: G2_Point };\n\n  const pairingRes = createBlsPairing(fields, G1_Point, G2_Point, params);\n  const {\n    millerLoopBatch,\n    pairing,\n    pairingBatch,\n    calcPairingPrecomputes,\n    randomSecretKey,\n    lengths,\n  } = pairingRes;\n\n  G1.Point.BASE.precompute(4);\n  return Object.freeze({\n    lengths,\n    millerLoopBatch,\n    pairing,\n    pairingBatch,\n    G1,\n    G2,\n    fields: { Fr, Fp, Fp2, Fp6, Fp12 },\n    params: {\n      ateLoopSize: params.ateLoopSize,\n      twistType: params.twistType,\n    },\n    utils: {\n      randomSecretKey,\n      calcPairingPrecomputes,\n    },\n  });\n}\n\n// We can export this too, but seems there is not much reasons for now? If user wants hasher, they can just create hasher.\nfunction blsHashers(\n  fields: BlsFields,\n  G1_Point: WeierstrassPointCons<Fp>,\n  G2_Point: WeierstrassPointCons<Fp2>,\n  params: BlsPairingParams,\n  hasherParams: BlsHasherParams\n): BlsCurvePairWithHashers {\n  const base = blsBasic(fields, G1_Point, G2_Point, params);\n  const G1Hasher = createHasher(G1_Point, hasherParams.mapToG1 || notImplemented, {\n    ...hasherParams.hasherOpts,\n    ...hasherParams.hasherOptsG1,\n  });\n  const G2Hasher = createHasher(G2_Point, hasherParams.mapToG2 || notImplemented, {\n    ...hasherParams.hasherOpts,\n    ...hasherParams.hasherOptsG2,\n  });\n  return Object.freeze({ ...base, G1: G1Hasher, G2: G2Hasher });\n}\n\n// G1_Point: ProjConstructor<bigint>, G2_Point: ProjConstructor<Fp2>,\n// Rename to blsSignatures?\nexport function bls(\n  fields: BlsFields,\n  G1_Point: WeierstrassPointCons<Fp>,\n  G2_Point: WeierstrassPointCons<Fp2>,\n  params: BlsPairingParams,\n  hasherParams: BlsHasherParams,\n  signatureCoders: BlsSignatureCoders\n): BlsCurvePairWithSignatures {\n  const base = blsHashers(fields, G1_Point, G2_Point, params, hasherParams);\n  const pairingRes: BlsPairing = {\n    ...base,\n    Fr: base.fields.Fr,\n    Fp12: base.fields.Fp12,\n    calcPairingPrecomputes: base.utils.calcPairingPrecomputes,\n    randomSecretKey: base.utils.randomSecretKey,\n  };\n  const longSignatures = createBlsSig(\n    pairingRes,\n    G1_Point,\n    G2_Point,\n    false,\n    base.G2.hashToCurve,\n    signatureCoders?.LongSignature\n  );\n  const shortSignatures = createBlsSig(\n    pairingRes,\n    G2_Point,\n    G1_Point,\n    true,\n    base.G1.hashToCurve,\n    signatureCoders?.ShortSignature\n  );\n  return Object.freeze({ ...base, longSignatures, shortSignatures });\n}\n","/**\n * Towered extension fields.\n * Rather than implementing a massive 12th-degree extension directly, it is more efficient\n * to build it up from smaller extensions: a tower of extensions.\n *\n * For BLS12-381, the Fp12 field is implemented as a quadratic (degree two) extension,\n * on top of a cubic (degree three) extension, on top of a quadratic extension of Fp.\n *\n * For more info: \"Pairings for beginners\" by Costello, section 7.3.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { bitGet, bitLen, concatBytes, notImplemented } from '../utils.ts';\nimport * as mod from './modular.ts';\nimport type { WeierstrassPoint, WeierstrassPointCons } from './weierstrass.ts';\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₂ over complex plane\nexport type BigintTuple = [bigint, bigint];\nexport type Fp = bigint;\n// Finite extension field over irreducible polynominal.\n// Fp(u) / (u² - β) where β = -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₁₂ = Fp₆² => Fp₂³, Fp₆(w) / (w² - γ) where γ = 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  Fp: mod.IField<Fp>;\n  frobeniusMap(num: Fp2, power: number): Fp2;\n  fromBigTuple(num: BigintTuple): Fp2;\n  mulByB: (num: Fp2) => Fp2;\n  mulByNonresidue: (num: Fp2) => Fp2;\n  reim: (num: Fp2) => { re: Fp; im: Fp };\n  Fp4Square: (a: Fp2, b: Fp2) => { first: Fp2; second: Fp2 };\n  NONRESIDUE: Fp2;\n};\n\nexport type Fp6Bls = mod.IField<Fp6> & {\n  Fp2: Fp2Bls;\n  frobeniusMap(num: Fp6, power: number): Fp6;\n  fromBigSix: (tuple: BigintSix) => 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  mulByNonresidue: (num: Fp6) => Fp6;\n};\n\nexport type Fp12Bls = mod.IField<Fp12> & {\n  Fp6: Fp6Bls;\n  frobeniusMap(num: Fp12, power: number): Fp12;\n  fromBigTwelve: (t: BigintTwelve) => 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\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(\n  Fp: mod.IField<Fp>,\n  Fp2: Fp2Bls,\n  base: Fp2\n): {\n  psi: (x: Fp2, y: Fp2) => [Fp2, Fp2];\n  psi2: (x: Fp2, y: Fp2) => [Fp2, Fp2];\n  G2psi: (c: WeierstrassPointCons<Fp2>, P: WeierstrassPoint<Fp2>) => WeierstrassPoint<Fp2>;\n  G2psi2: (c: WeierstrassPointCons<Fp2>, P: WeierstrassPoint<Fp2>) => WeierstrassPoint<Fp2>;\n  PSI_X: Fp2;\n  PSI_Y: Fp2;\n  PSI2_X: Fp2;\n  PSI2_Y: Fp2;\n} {\n  // GLV endomorphism Ψ(P)\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  // Ψ²(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: WeierstrassPointCons<T>, P: WeierstrassPoint<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  X_LEN: number;\n  NONRESIDUE?: Fp;\n  FP2_NONRESIDUE: BigintTuple;\n  Fp2sqrt?: (num: Fp2) => Fp2;\n  Fp2mulByB: (num: Fp2) => Fp2;\n  Fp12finalExponentiate: (num: Fp12) => Fp12;\n};\n\nconst Fp2fromBigTuple = (Fp: mod.IField<bigint>, tuple: BigintTuple | bigint[]) => {\n  if (tuple.length !== 2) throw new Error('invalid tuple');\n  const fps = tuple.map((n) => Fp.create(n)) as BigintTuple;\n  return { c0: fps[0], c1: fps[1] };\n};\n\nclass _Field2 implements mod.IField<Fp2> {\n  readonly ORDER: bigint;\n  readonly BITS: number;\n  readonly BYTES: number;\n  readonly isLE: boolean;\n\n  readonly ZERO: Fp2;\n  readonly ONE: Fp2;\n  readonly Fp: mod.IField<bigint>;\n\n  readonly NONRESIDUE: Fp2;\n  readonly mulByB: Tower12Opts['Fp2mulByB'];\n  readonly Fp_NONRESIDUE: bigint;\n  readonly Fp_div2: bigint;\n  readonly FROBENIUS_COEFFICIENTS: Fp[];\n\n  constructor(\n    Fp: mod.IField<bigint>,\n    opts: Partial<{\n      NONRESIDUE: bigint;\n      FP2_NONRESIDUE: BigintTuple;\n      Fp2mulByB: Tower12Opts['Fp2mulByB'];\n    }> = {}\n  ) {\n    const ORDER = Fp.ORDER;\n    const FP2_ORDER = ORDER * ORDER;\n    this.Fp = Fp;\n    this.ORDER = FP2_ORDER;\n    this.BITS = bitLen(FP2_ORDER);\n    this.BYTES = Math.ceil(bitLen(FP2_ORDER) / 8);\n    this.isLE = Fp.isLE;\n    this.ZERO = { c0: Fp.ZERO, c1: Fp.ZERO };\n    this.ONE = { c0: Fp.ONE, c1: Fp.ZERO };\n\n    this.Fp_NONRESIDUE = Fp.create(opts.NONRESIDUE || BigInt(-1));\n    this.Fp_div2 = Fp.div(Fp.ONE, _2n); // 1/2\n    this.NONRESIDUE = Fp2fromBigTuple(Fp, opts.FP2_NONRESIDUE!);\n    // const Fp2Nonresidue = Fp2fromBigTuple(opts.FP2_NONRESIDUE);\n    this.FROBENIUS_COEFFICIENTS = calcFrobeniusCoefficients(Fp, this.Fp_NONRESIDUE, Fp.ORDER, 2)[0];\n    this.mulByB = opts.Fp2mulByB!;\n    Object.seal(this);\n  }\n  fromBigTuple(tuple: BigintTuple) {\n    return Fp2fromBigTuple(this.Fp, tuple);\n  }\n  create(num: Fp2) {\n    return num;\n  }\n  isValid({ c0, c1 }: Fp2) {\n    function isValidC(num: bigint, ORDER: bigint) {\n      return typeof num === 'bigint' && _0n <= num && num < ORDER;\n    }\n    return isValidC(c0, this.ORDER) && isValidC(c1, this.ORDER);\n  }\n  is0({ c0, c1 }: Fp2) {\n    return this.Fp.is0(c0) && this.Fp.is0(c1);\n  }\n  isValidNot0(num: Fp2) {\n    return !this.is0(num) && this.isValid(num);\n  }\n  eql({ c0, c1 }: Fp2, { c0: r0, c1: r1 }: Fp2) {\n    return this.Fp.eql(c0, r0) && this.Fp.eql(c1, r1);\n  }\n  neg({ c0, c1 }: Fp2) {\n    return { c0: this.Fp.neg(c0), c1: this.Fp.neg(c1) };\n  }\n  pow(num: Fp2, power: bigint): Fp2 {\n    return mod.FpPow(this, num, power);\n  }\n  invertBatch(nums: Fp2[]): Fp2[] {\n    return mod.FpInvertBatch(this, nums);\n  }\n  // Normalized\n  add(f1: Fp2, f2: Fp2): Fp2 {\n    const { c0, c1 } = f1;\n    const { c0: r0, c1: r1 } = f2;\n    return {\n      c0: this.Fp.add(c0, r0),\n      c1: this.Fp.add(c1, r1),\n    };\n  }\n  sub({ c0, c1 }: Fp2, { c0: r0, c1: r1 }: Fp2) {\n    return {\n      c0: this.Fp.sub(c0, r0),\n      c1: this.Fp.sub(c1, r1),\n    };\n  }\n  mul({ c0, c1 }: Fp2, rhs: Fp2) {\n    const { Fp } = this;\n    if (typeof rhs === 'bigint') return { c0: Fp.mul(c0, rhs), c1: Fp.mul(c1, rhs) };\n    // (a+bi)(c+di) = (ac−bd) + (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  sqr({ c0, c1 }: Fp2) {\n    const { Fp } = this;\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  // NonNormalized stuff\n  addN(a: Fp2, b: Fp2): Fp2 {\n    return this.add(a, b);\n  }\n  subN(a: Fp2, b: Fp2): Fp2 {\n    return this.sub(a, b);\n  }\n  mulN(a: Fp2, b: Fp2): Fp2 {\n    return this.mul(a, b);\n  }\n  sqrN(a: Fp2): Fp2 {\n    return this.sqr(a);\n  }\n  // Why inversion for bigint inside Fp instead of Fp2? it is even used in that context?\n  div(lhs: Fp2, rhs: Fp2): Fp2 {\n    const { Fp } = this;\n    // @ts-ignore\n    return this.mul(lhs, typeof rhs === 'bigint' ? Fp.inv(Fp.create(rhs)) : this.inv(rhs));\n  }\n  inv({ c0: a, c1: b }: Fp2): Fp2 {\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² + b²\n    //\n    // which holds because u² = -1. This can be rewritten as\n    //\n    // (a + bu)(a - bu)/(a² + b²) = 1\n    //\n    // because a² + b² = 0 has no nonzero solutions for (a, b).\n    // This gives that (a - bu)/(a² + b²) is the inverse\n    // of (a + bu). Importantly, this can be computing using\n    // only a single inversion in Fp.\n    const { Fp } = this;\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: Fp2) {\n    // This is generic for all quadratic extensions (Fp2)\n    const { Fp } = this;\n    const Fp2 = this;\n    const { c0, c1 } = num;\n    if (Fp.is0(c1)) {\n      // if c0 is quadratic residue\n      if (mod.FpLegendre(Fp, c0) === 1) return Fp2.create({ c0: Fp.sqrt(c0), c1: Fp.ZERO });\n      else return Fp2.create({ c0: Fp.ZERO, c1: Fp.sqrt(Fp.div(c0, this.Fp_NONRESIDUE)) });\n    }\n    const a = Fp.sqrt(Fp.sub(Fp.sqr(c0), Fp.mul(Fp.sqr(c1), this.Fp_NONRESIDUE)));\n    let d = Fp.mul(Fp.add(a, c0), this.Fp_div2);\n    const legendre = mod.FpLegendre(Fp, d);\n    // -1, Quadratic non residue\n    if (legendre === -1) d = Fp.sub(d, a);\n    const a0 = Fp.sqrt(d);\n    const candidateSqrt = Fp2.create({ c0: a0, c1: Fp.div(Fp.mul(c1, this.Fp_div2), 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 } = this.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    const { Fp } = this;\n    if (b.length !== this.BYTES) throw new Error('fromBytes invalid 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 }: Fp2) {\n    return concatBytes(this.Fp.toBytes(c0), this.Fp.toBytes(c1));\n  }\n  cmov({ c0, c1 }: Fp2, { c0: r0, c1: r1 }: Fp2, c: boolean) {\n    return {\n      c0: this.Fp.cmov(c0, r0, c),\n      c1: this.Fp.cmov(c1, r1, c),\n    };\n  }\n  reim({ c0, c1 }: Fp2) {\n    return { re: c0, im: c1 };\n  }\n  Fp4Square(a: Fp2, b: Fp2): { first: Fp2; second: Fp2 } {\n    const Fp2 = this;\n    const a2 = Fp2.sqr(a);\n    const b2 = Fp2.sqr(b);\n    return {\n      first: Fp2.add(Fp2.mulByNonresidue(b2), a2), // b² * Nonresidue + a²\n      second: Fp2.sub(Fp2.sub(Fp2.sqr(Fp2.add(a, b)), a2), b2), // (a + b)² - a² - b²\n    };\n  }\n  // multiply by u + 1\n  mulByNonresidue({ c0, c1 }: Fp2) {\n    return this.mul({ c0, c1 }, this.NONRESIDUE);\n  }\n  frobeniusMap({ c0, c1 }: Fp2, power: number): Fp2 {\n    return {\n      c0,\n      c1: this.Fp.mul(c1, this.FROBENIUS_COEFFICIENTS[power % 2]),\n    };\n  }\n}\n\nclass _Field6 implements Fp6Bls {\n  readonly ORDER: bigint;\n  readonly BITS: number;\n  readonly BYTES: number;\n  readonly isLE: boolean;\n\n  readonly ZERO: Fp6;\n  readonly ONE: Fp6;\n  readonly Fp2: Fp2Bls;\n  readonly FROBENIUS_COEFFICIENTS_1: Fp2[];\n  readonly FROBENIUS_COEFFICIENTS_2: Fp2[];\n\n  constructor(Fp2: Fp2Bls) {\n    this.Fp2 = Fp2;\n    this.ORDER = Fp2.ORDER; // TODO: unused, but need to verify\n    this.BITS = 3 * Fp2.BITS;\n    this.BYTES = 3 * Fp2.BYTES;\n    this.isLE = Fp2.isLE;\n    this.ZERO = { c0: Fp2.ZERO, c1: Fp2.ZERO, c2: Fp2.ZERO };\n    this.ONE = { c0: Fp2.ONE, c1: Fp2.ZERO, c2: Fp2.ZERO };\n    const { Fp } = Fp2;\n    const frob = calcFrobeniusCoefficients(Fp2, Fp2.NONRESIDUE, Fp.ORDER, 6, 2, 3);\n    this.FROBENIUS_COEFFICIENTS_1 = frob[0];\n    this.FROBENIUS_COEFFICIENTS_2 = frob[1];\n    Object.seal(this);\n  }\n  add({ c0, c1, c2 }: Fp6, { c0: r0, c1: r1, c2: r2 }: Fp6) {\n    const { Fp2 } = this;\n    return {\n      c0: Fp2.add(c0, r0),\n      c1: Fp2.add(c1, r1),\n      c2: Fp2.add(c2, r2),\n    };\n  }\n  sub({ c0, c1, c2 }: Fp6, { c0: r0, c1: r1, c2: r2 }: Fp6) {\n    const { Fp2 } = this;\n    return {\n      c0: Fp2.sub(c0, r0),\n      c1: Fp2.sub(c1, r1),\n      c2: Fp2.sub(c2, r2),\n    };\n  }\n  mul({ c0, c1, c2 }: Fp6, rhs: Fp6 | bigint) {\n    const { Fp2 } = this;\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  sqr({ c0, c1, c2 }: Fp6) {\n    const { Fp2 } = this;\n    let t0 = Fp2.sqr(c0); // c0²\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²\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)² + 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  addN(a: Fp6, b: Fp6): Fp6 {\n    return this.add(a, b);\n  }\n  subN(a: Fp6, b: Fp6): Fp6 {\n    return this.sub(a, b);\n  }\n  mulN(a: Fp6, b: Fp6): Fp6 {\n    return this.mul(a, b);\n  }\n  sqrN(a: Fp6): Fp6 {\n    return this.sqr(a);\n  }\n\n  create(num: Fp6) {\n    return num;\n  }\n\n  isValid({ c0, c1, c2 }: Fp6) {\n    const { Fp2 } = this;\n    return Fp2.isValid(c0) && Fp2.isValid(c1) && Fp2.isValid(c2);\n  }\n  is0({ c0, c1, c2 }: Fp6) {\n    const { Fp2 } = this;\n    return Fp2.is0(c0) && Fp2.is0(c1) && Fp2.is0(c2);\n  }\n  isValidNot0(num: Fp6) {\n    return !this.is0(num) && this.isValid(num);\n  }\n  neg({ c0, c1, c2 }: Fp6) {\n    const { Fp2 } = this;\n    return { c0: Fp2.neg(c0), c1: Fp2.neg(c1), c2: Fp2.neg(c2) };\n  }\n  eql({ c0, c1, c2 }: Fp6, { c0: r0, c1: r1, c2: r2 }: Fp6) {\n    const { Fp2 } = this;\n    return Fp2.eql(c0, r0) && Fp2.eql(c1, r1) && Fp2.eql(c2, r2);\n  }\n  sqrt(_: Fp6) {\n    return notImplemented();\n  }\n  // Do we need division by bigint at all? Should be done via order:\n  div(lhs: Fp6, rhs: Fp6) {\n    const { Fp2 } = this;\n    const { Fp } = Fp2;\n    return this.mul(lhs, typeof rhs === 'bigint' ? Fp.inv(Fp.create(rhs)) : this.inv(rhs));\n  }\n  pow(num: Fp6, power: Fp): Fp6 {\n    return mod.FpPow(this, num, power);\n  }\n  invertBatch(nums: Fp6[]): Fp6[] {\n    return mod.FpInvertBatch(this, nums);\n  }\n\n  inv({ c0, c1, c2 }: Fp6) {\n    const { Fp2 } = this;\n    let t0 = Fp2.sub(Fp2.sqr(c0), Fp2.mulByNonresidue(Fp2.mul(c2, c1))); // c0² - c2 * c1 * (u + 1)\n    let t1 = Fp2.sub(Fp2.mulByNonresidue(Fp2.sqr(c2)), Fp2.mul(c0, c1)); // c2² * (u + 1) - c0 * c1\n    let t2 = Fp2.sub(Fp2.sqr(c1), Fp2.mul(c0, c2)); // c1² - 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    const { Fp2 } = this;\n    if (b.length !== this.BYTES) throw new Error('fromBytes invalid length=' + b.length);\n    const B2 = Fp2.BYTES;\n    return {\n      c0: Fp2.fromBytes(b.subarray(0, B2)),\n      c1: Fp2.fromBytes(b.subarray(B2, B2 * 2)),\n      c2: Fp2.fromBytes(b.subarray(2 * B2)),\n    };\n  }\n  toBytes({ c0, c1, c2 }: Fp6): Uint8Array {\n    const { Fp2 } = this;\n    return concatBytes(Fp2.toBytes(c0), Fp2.toBytes(c1), Fp2.toBytes(c2));\n  }\n  cmov({ c0, c1, c2 }: Fp6, { c0: r0, c1: r1, c2: r2 }: Fp6, c: boolean) {\n    const { Fp2 } = this;\n    return {\n      c0: Fp2.cmov(c0, r0, c),\n      c1: Fp2.cmov(c1, r1, c),\n      c2: Fp2.cmov(c2, r2, c),\n    };\n  }\n  fromBigSix(t: BigintSix): Fp6 {\n    const { Fp2 } = this;\n    if (!Array.isArray(t) || t.length !== 6) throw new Error('invalid Fp6 usage');\n    return {\n      c0: Fp2.fromBigTuple(t.slice(0, 2) as BigintTuple),\n      c1: Fp2.fromBigTuple(t.slice(2, 4) as BigintTuple),\n      c2: Fp2.fromBigTuple(t.slice(4, 6) as BigintTuple),\n    };\n  }\n  frobeniusMap({ c0, c1, c2 }: Fp6, power: number) {\n    const { Fp2 } = this;\n    return {\n      c0: Fp2.frobeniusMap(c0, power),\n      c1: Fp2.mul(Fp2.frobeniusMap(c1, power), this.FROBENIUS_COEFFICIENTS_1[power % 6]),\n      c2: Fp2.mul(Fp2.frobeniusMap(c2, power), this.FROBENIUS_COEFFICIENTS_2[power % 6]),\n    };\n  }\n  mulByFp2({ c0, c1, c2 }: Fp6, rhs: Fp2): Fp6 {\n    const { Fp2 } = this;\n    return {\n      c0: Fp2.mul(c0, rhs),\n      c1: Fp2.mul(c1, rhs),\n      c2: Fp2.mul(c2, rhs),\n    };\n  }\n  mulByNonresidue({ c0, c1, c2 }: Fp6) {\n    const { Fp2 } = this;\n    return { c0: Fp2.mulByNonresidue(c2), c1: c0, c2: c1 };\n  }\n  // Sparse multiplication\n  mul1({ c0, c1, c2 }: Fp6, b1: Fp2): Fp6 {\n    const { Fp2 } = this;\n    return {\n      c0: Fp2.mulByNonresidue(Fp2.mul(c2, b1)),\n      c1: Fp2.mul(c0, b1),\n      c2: Fp2.mul(c1, b1),\n    };\n  }\n  // Sparse multiplication\n  mul01({ c0, c1, c2 }: Fp6, b0: Fp2, b1: Fp2): Fp6 {\n    const { Fp2 } = this;\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\nclass _Field12 implements Fp12Bls {\n  readonly ORDER: bigint;\n  readonly BITS: number;\n  readonly BYTES: number;\n  readonly isLE: boolean;\n\n  readonly ZERO: Fp12;\n  readonly ONE: Fp12;\n\n  readonly Fp6: Fp6Bls;\n  readonly FROBENIUS_COEFFICIENTS: Fp2[];\n  readonly X_LEN: number;\n  readonly finalExponentiate: Tower12Opts['Fp12finalExponentiate'];\n\n  constructor(Fp6: Fp6Bls, opts: Tower12Opts) {\n    const { Fp2 } = Fp6;\n    const { Fp } = Fp2;\n    this.Fp6 = Fp6;\n\n    this.ORDER = Fp2.ORDER; // TODO: verify if it's unuesd\n    this.BITS = 2 * Fp6.BITS;\n    this.BYTES = 2 * Fp6.BYTES;\n    this.isLE = Fp6.isLE;\n    this.ZERO = { c0: Fp6.ZERO, c1: Fp6.ZERO };\n    this.ONE = { c0: Fp6.ONE, c1: Fp6.ZERO };\n\n    this.FROBENIUS_COEFFICIENTS = calcFrobeniusCoefficients(\n      Fp2,\n      Fp2.NONRESIDUE,\n      Fp.ORDER,\n      12,\n      1,\n      6\n    )[0];\n    this.X_LEN = opts.X_LEN;\n    this.finalExponentiate = opts.Fp12finalExponentiate;\n  }\n  create(num: Fp12) {\n    return num;\n  }\n  isValid({ c0, c1 }: Fp12) {\n    const { Fp6 } = this;\n    return Fp6.isValid(c0) && Fp6.isValid(c1);\n  }\n  is0({ c0, c1 }: Fp12) {\n    const { Fp6 } = this;\n    return Fp6.is0(c0) && Fp6.is0(c1);\n  }\n  isValidNot0(num: Fp12) {\n    return !this.is0(num) && this.isValid(num);\n  }\n  neg({ c0, c1 }: Fp12) {\n    const { Fp6 } = this;\n    return { c0: Fp6.neg(c0), c1: Fp6.neg(c1) };\n  }\n  eql({ c0, c1 }: Fp12, { c0: r0, c1: r1 }: Fp12) {\n    const { Fp6 } = this;\n    return Fp6.eql(c0, r0) && Fp6.eql(c1, r1);\n  }\n  sqrt(_: any): any {\n    notImplemented();\n  }\n  inv({ c0, c1 }: Fp12) {\n    const { Fp6 } = this;\n    let t = Fp6.inv(Fp6.sub(Fp6.sqr(c0), Fp6.mulByNonresidue(Fp6.sqr(c1)))); // 1 / (c0² - c1² * 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: Fp12, rhs: Fp12) {\n    const { Fp6 } = this;\n    const { Fp2 } = Fp6;\n    const { Fp } = Fp2;\n    return this.mul(lhs, typeof rhs === 'bigint' ? Fp.inv(Fp.create(rhs)) : this.inv(rhs));\n  }\n  pow(num: Fp12, power: bigint): Fp12 {\n    return mod.FpPow(this, num, power);\n  }\n  invertBatch(nums: Fp12[]): Fp12[] {\n    return mod.FpInvertBatch(this, nums);\n  }\n\n  // Normalized\n  add({ c0, c1 }: Fp12, { c0: r0, c1: r1 }: Fp12) {\n    const { Fp6 } = this;\n    return {\n      c0: Fp6.add(c0, r0),\n      c1: Fp6.add(c1, r1),\n    };\n  }\n  sub({ c0, c1 }: Fp12, { c0: r0, c1: r1 }: Fp12) {\n    const { Fp6 } = this;\n    return {\n      c0: Fp6.sub(c0, r0),\n      c1: Fp6.sub(c1, r1),\n    };\n  }\n  mul({ c0, c1 }: Fp12, rhs: Fp12 | bigint) {\n    const { Fp6 } = this;\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  sqr({ c0, c1 }: Fp12) {\n    const { Fp6 } = this;\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  // NonNormalized stuff\n  addN(a: Fp12, b: Fp12): Fp12 {\n    return this.add(a, b);\n  }\n  subN(a: Fp12, b: Fp12): Fp12 {\n    return this.sub(a, b);\n  }\n  mulN(a: Fp12, b: Fp12): Fp12 {\n    return this.mul(a, b);\n  }\n  sqrN(a: Fp12): Fp12 {\n    return this.sqr(a);\n  }\n\n  // Bytes utils\n  fromBytes(b: Uint8Array): Fp12 {\n    const { Fp6 } = this;\n    if (b.length !== this.BYTES) throw new Error('fromBytes invalid 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 }: Fp12): Uint8Array {\n    const { Fp6 } = this;\n    return concatBytes(Fp6.toBytes(c0), Fp6.toBytes(c1));\n  }\n  cmov({ c0, c1 }: Fp12, { c0: r0, c1: r1 }: Fp12, c: boolean) {\n    const { Fp6 } = this;\n    return {\n      c0: Fp6.cmov(c0, r0, c),\n      c1: Fp6.cmov(c1, r1, c),\n    };\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    const { Fp6 } = this;\n    return {\n      c0: Fp6.fromBigSix(t.slice(0, 6) as BigintSix),\n      c1: Fp6.fromBigSix(t.slice(6, 12) as BigintSix),\n    };\n  }\n  // Raises to q**i -th power\n  frobeniusMap(lhs: Fp12, power: number) {\n    const { Fp6 } = this;\n    const { Fp2 } = Fp6;\n    const { c0, c1, c2 } = Fp6.frobeniusMap(lhs.c1, power);\n    const coeff = this.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 }: Fp12, rhs: Fp2): Fp12 {\n    const { Fp6 } = this;\n    return {\n      c0: Fp6.mulByFp2(c0, rhs),\n      c1: Fp6.mulByFp2(c1, rhs),\n    };\n  }\n  conjugate({ c0, c1 }: Fp12): Fp12 {\n    return { c0, c1: this.Fp6.neg(c1) };\n  }\n  // Sparse multiplication\n  mul014({ c0, c1 }: Fp12, o0: Fp2, o1: Fp2, o4: Fp2) {\n    const { Fp6 } = this;\n    const { Fp2 } = Fp6;\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 }: Fp12, o0: Fp2, o3: Fp2, o4: Fp2) {\n    const { Fp6 } = this;\n    const { Fp2 } = Fp6;\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Φₙ(p) = {α ∈ Fpⁿ : α^Φₙ(p) = 1}\n  // The result of any pairing is in a cyclotomic subgroup\n  // https://eprint.iacr.org/2009/565.pdf\n  // https://eprint.iacr.org/2010/354.pdf\n  _cyclotomicSquare({ c0, c1 }: Fp12): Fp12 {\n    const { Fp6 } = this;\n    const { Fp2 } = Fp6;\n    const { c0: c0c0, c1: c0c1, c2: c0c2 } = c0;\n    const { c0: c1c0, c1: c1c1, c2: c1c2 } = c1;\n    const { first: t3, second: t4 } = Fp2.Fp4Square(c0c0, c1c1);\n    const { first: t5, second: t6 } = Fp2.Fp4Square(c1c0, c0c2);\n    const { first: t7, second: t8 } = Fp2.Fp4Square(c0c1, c1c2);\n    const 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  // https://eprint.iacr.org/2009/565.pdf\n  _cyclotomicExp(num: Fp12, n: bigint): Fp12 {\n    let z = this.ONE;\n    for (let i = this.X_LEN - 1; i >= 0; i--) {\n      z = this._cyclotomicSquare(z);\n      if (bitGet(n, i)) z = this.mul(z, num);\n    }\n    return z;\n  }\n}\n\nexport function tower12(opts: Tower12Opts): {\n  Fp: Readonly<mod.IField<bigint> & Required<Pick<mod.IField<bigint>, 'isOdd'>>>;\n  Fp2: Fp2Bls;\n  Fp6: Fp6Bls;\n  Fp12: Fp12Bls;\n} {\n  const Fp = mod.Field(opts.ORDER);\n  const Fp2 = new _Field2(Fp, opts);\n  const Fp6 = new _Field6(Fp2);\n  const Fp12 = new _Field12(Fp6, opts);\n  return { Fp, Fp2, Fp6, Fp12 };\n}\n","/**\n * bls12-381 is pairing-friendly Barreto-Lynn-Scott elliptic curve construction allowing to:\n\n* Construct zk-SNARKs at the ~120-bit security, as per [Barbulescu-Duquesne 2017](https://hal.science/hal-01534101/file/main.pdf)\n* Efficiently verify N aggregate signatures with 1 pairing and N ec additions:\nthe Boneh-Lynn-Shacham signature scheme is orders of magnitude more efficient than Schnorr\n\nBLS can mean 2 different things:\n\n* Barreto-Lynn-Scott: BLS12, a Pairing Friendly Elliptic Curve\n* Boneh-Lynn-Shacham: A Signature Scheme.\n\n### Summary\n\n1. BLS Relies on expensive bilinear pairing\n2. Secret Keys: 32 bytes\n3. Public Keys: 48 OR 96 bytes - big-endian x coordinate of point on G1 OR G2 curve\n4. Signatures: 96 OR 48 bytes - big-endian x coordinate of point on G2 OR G1 curve\n5. The 12 stands for the Embedding degree.\n\nModes of operation:\n\n* Long signatures:  48-byte keys + 96-byte sigs (G1 keys + G2 sigs).\n* Short signatures: 96-byte keys + 48-byte sigs (G2 keys + G1 sigs).\n\n### Formulas\n\n- `P = pk x G` - public keys\n- `S = pk x H(m)` - signing, uses hash-to-curve on m\n- `e(P, H(m)) == e(G, S)` - verification using pairings\n- `e(G, S) = e(G, SUM(n)(Si)) = MUL(n)(e(G, Si))` - signature aggregation\n\n### Curves\n\nG1 is ordinary elliptic curve. G2 is extension field curve, think \"over complex numbers\".\n\n- G1: y² = x³ + 4\n- G2: y² = x³ + 4(u + 1) where u = √−1; r-order subgroup of E'(Fp²), M-type twist\n\n### Towers\n\nPairing G1 + G2 produces element in Fp₁₂, 12-degree polynomial.\nFp₁₂ is usually implemented using tower of lower-degree polynomials for speed.\n\n- Fp₁₂ = Fp₆² => Fp₂³\n- Fp(u) / (u² - β) where β = -1\n- Fp₂(v) / (v³ - ξ) where ξ = u + 1\n- Fp₆(w) / (w² - γ) where γ = v\n- Fp²[u] = Fp/u²+1\n- Fp⁶[v] = Fp²/v³-1-u\n- Fp¹²[w] = Fp⁶/w²-v\n\n### Params\n\n* Embedding degree (k): 12\n* Seed is sometimes named x or t\n* t = -15132376222941642752\n* p = (t-1)² * (t⁴-t²+1)/3 + t\n* r = t⁴-t²+1\n* Ate loop size: X\n\nTo verify curve parameters, see\n[pairing-friendly-curves spec](https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-pairing-friendly-curves-11).\nBasic math is done over finite fields over p.\nMore complicated math is done over polynominal extension fields.\n\n### Compatibility and notes\n1. It is compatible with Algorand, Chia, Dfinity, Ethereum, Filecoin, ZEC.\nFilecoin uses little endian byte arrays for secret keys - make sure to reverse byte order.\n2. Make sure to correctly select mode: \"long signature\" or \"short signature\".\n3. Compatible with specs:\n   RFC 9380,\n   [cfrg-pairing-friendly-curves-11](https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-pairing-friendly-curves-11),\n   [cfrg-bls-signature-05](https://datatracker.ietf.org/doc/draft-irtf-cfrg-bls-signature/).\n\n *\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256 } from '@noble/hashes/sha2.js';\nimport { bls, type BlsCurvePairWithSignatures } from './abstract/bls.ts';\nimport { Field, type IField } from './abstract/modular.ts';\nimport {\n  abytes,\n  bitLen,\n  bitMask,\n  bytesToHex,\n  bytesToNumberBE,\n  concatBytes,\n  copyBytes,\n  hexToBytes,\n  numberToBytesBE,\n  randomBytes,\n} from './utils.ts';\n// Types\nimport { isogenyMap } from './abstract/hash-to-curve.ts';\nimport type { BigintTuple, Fp, Fp12, Fp2, Fp6 } from './abstract/tower.ts';\nimport { psiFrobenius, tower12 } from './abstract/tower.ts';\nimport {\n  mapToCurveSimpleSWU,\n  weierstrass,\n  type AffinePoint,\n  type WeierstrassOpts,\n  type WeierstrassPoint,\n  type WeierstrassPointCons,\n} from './abstract/weierstrass.ts';\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\n// To verify math:\n// https://tools.ietf.org/html/draft-irtf-cfrg-pairing-friendly-curves-11\n\n// The BLS parameter x (seed) for BLS12-381. NOTE: it is negative!\n// x = -2^63 - 2^62 - 2^60 - 2^57 - 2^48 - 2^16\nconst BLS_X = BigInt('0xd201000000010000');\n// t = x (called differently in different places)\n// const t = -BLS_X;\nconst BLS_X_LEN = bitLen(BLS_X);\n\n// a=0, b=4\n// P is characteristic of field Fp, in which curve calculations are done.\n// p = (t-1)² * (t⁴-t²+1)/3 + t\n// bls12_381_Fp = (t-1n)**2n * (t**4n - t**2n + 1n) / 3n + t\n// r*h is curve order, amount of points on curve,\n// where r is order of prime subgroup and h is cofactor.\n// r = t⁴-t²+1\n// r = (t**4n - t**2n + 1n)\n// cofactor h of G1: (t - 1)²/3\n// cofactorG1 = (t-1n)**2n/3n\n// x = 3685416753713387016781088315183077757961620795782546409894578378688607592378376318836054947676345821548104185464507\n// y = 1339506544944476473020471379941921221584933875938349620426543736416511423956333506472724655353366534992391756441569\nconst bls12_381_CURVE_G1: WeierstrassOpts<bigint> = {\n  p: BigInt(\n    '0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab'\n  ),\n  n: BigInt('0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001'),\n  h: BigInt('0x396c8c005555e1568c00aaab0000aaab'),\n  a: _0n,\n  b: _4n,\n  Gx: BigInt(\n    '0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb'\n  ),\n  Gy: BigInt(\n    '0x08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1'\n  ),\n};\n\n// CURVE FIELDS\n// r = z⁴ − z² + 1; CURVE.n from other curves\n/** bls12-381 Fr (Fn) field. Note: does mod() on fromBytes, due to modFromBytes option. */\nexport const bls12_381_Fr: IField<bigint> = Field(bls12_381_CURVE_G1.n, {\n  modFromBytes: true,\n});\nconst { Fp, Fp2, Fp6, Fp12 } = tower12({\n  ORDER: bls12_381_CURVE_G1.p,\n  X_LEN: BLS_X_LEN,\n  // Finite extension field over irreducible polynominal.\n  // Fp(u) / (u² - β) where β = -1\n  FP2_NONRESIDUE: [_1n, _1n],\n  Fp2mulByB: ({ c0, c1 }) => {\n    const t0 = Fp.mul(c0, _4n); // 4 * c0\n    const t1 = Fp.mul(c1, _4n); // 4 * c1\n    // (T0-T1) + (T0+T1)*i\n    return { c0: Fp.sub(t0, t1), c1: Fp.add(t0, t1) };\n  },\n  Fp12finalExponentiate: (num) => {\n    const x = BLS_X;\n    // this^(q⁶) / this\n    const t0 = Fp12.div(Fp12.frobeniusMap(num, 6), num);\n    // t0^(q²) * t0\n    const t1 = Fp12.mul(Fp12.frobeniusMap(t0, 2), t0);\n    const t2 = Fp12.conjugate(Fp12._cyclotomicExp(t1, x));\n    const t3 = Fp12.mul(Fp12.conjugate(Fp12._cyclotomicSquare(t1)), t2);\n    const t4 = Fp12.conjugate(Fp12._cyclotomicExp(t3, x));\n    const t5 = Fp12.conjugate(Fp12._cyclotomicExp(t4, x));\n    const t6 = Fp12.mul(Fp12.conjugate(Fp12._cyclotomicExp(t5, x)), Fp12._cyclotomicSquare(t2));\n    const t7 = Fp12.conjugate(Fp12._cyclotomicExp(t6, x));\n    const t2_t5_pow_q2 = Fp12.frobeniusMap(Fp12.mul(t2, t5), 2);\n    const t4_t1_pow_q3 = Fp12.frobeniusMap(Fp12.mul(t4, t1), 3);\n    const t6_t1c_pow_q1 = Fp12.frobeniusMap(Fp12.mul(t6, Fp12.conjugate(t1)), 1);\n    const t7_t3c_t1 = Fp12.mul(Fp12.mul(t7, Fp12.conjugate(t3)), t1);\n    // (t2 * t5)^(q²) * (t4 * t1)^(q³) * (t6 * t1.conj)^(q^1) * t7 * t3.conj * t1\n    return Fp12.mul(Fp12.mul(Fp12.mul(t2_t5_pow_q2, t4_t1_pow_q3), t6_t1c_pow_q1), t7_t3c_t1);\n  },\n});\n\n// GLV endomorphism Ψ(P), for fast cofactor clearing\nconst { G2psi, G2psi2 } = psiFrobenius(Fp, Fp2, Fp2.div(Fp2.ONE, Fp2.NONRESIDUE)); // 1/(u+1)\n\n/**\n * Default hash_to_field / hash-to-curve for BLS.\n * m: 1 for G1, 2 for G2\n * k: target security level in bits\n * hash: any function, e.g. BBS+ uses BLAKE2: see [github](https://github.com/hyperledger/aries-framework-go/issues/2247).\n * Parameter values come from [section 8.8.2 of RFC 9380](https://www.rfc-editor.org/rfc/rfc9380#section-8.8.2).\n */\nconst hasher_opts = Object.freeze({\n  DST: 'BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_NUL_',\n  encodeDST: 'BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_NUL_',\n  p: Fp.ORDER,\n  m: 2,\n  k: 128,\n  expand: 'xmd',\n  hash: sha256,\n});\n\n// a=0, b=4\n// cofactor h of G2\n// (t^8 - 4t^7 + 5t^6 - 4t^4 + 6t^3 - 4t^2 - 4t + 13)/9\n// cofactorG2 = (t**8n - 4n*t**7n + 5n*t**6n - 4n*t**4n + 6n*t**3n - 4n*t**2n - 4n*t+13n)/9n\n// x = 3059144344244213709971259814753781636986470325476647558659373206291635324768958432433509563104347017837885763365758*u + 352701069587466618187139116011060144890029952792775240219908644239793785735715026873347600343865175952761926303160\n// y = 927553665492332455747201965776037880757740193453592970025027978793976877002675564980949289727957565575433344219582*u + 1985150602287291935568054521177171638300868978215655730859378665066344726373823718423869104263333984641494340347905\nconst bls12_381_CURVE_G2 = {\n  p: Fp2.ORDER,\n  n: bls12_381_CURVE_G1.n,\n  h: BigInt(\n    '0x5d543a95414e7f1091d50792876a202cd91de4547085abaa68a205b2e5a7ddfa628f1cb4d9e82ef21537e293a6691ae1616ec6e786f0c70cf1c38e31c7238e5'\n  ),\n  a: Fp2.ZERO,\n  b: Fp2.fromBigTuple([_4n, _4n]),\n  Gx: Fp2.fromBigTuple([\n    BigInt(\n      '0x024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8'\n    ),\n    BigInt(\n      '0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e'\n    ),\n  ]),\n  Gy: Fp2.fromBigTuple([\n    BigInt(\n      '0x0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801'\n    ),\n    BigInt(\n      '0x0606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be'\n    ),\n  ]),\n};\n\n// Encoding utils\n// Compressed point of infinity\n// Set compressed & point-at-infinity bits\nconst COMPZERO = setMask(Fp.toBytes(_0n), { infinity: true, compressed: true });\n\nfunction parseMask(bytes: Uint8Array) {\n  // Copy, so we can remove mask data.\n  // It will be removed also later, when Fp.create will call modulo.\n  bytes = copyBytes(bytes);\n  const mask = bytes[0] & 0b1110_0000;\n  const compressed = !!((mask >> 7) & 1); // compression bit (0b1000_0000)\n  const infinity = !!((mask >> 6) & 1); // point at infinity bit (0b0100_0000)\n  const sort = !!((mask >> 5) & 1); // sort bit (0b0010_0000)\n  bytes[0] &= 0b0001_1111; // clear mask (zero first 3 bits)\n  return { compressed, infinity, sort, value: bytes };\n}\n\nfunction setMask(\n  bytes: Uint8Array,\n  mask: { compressed?: boolean; infinity?: boolean; sort?: boolean }\n) {\n  if (bytes[0] & 0b1110_0000) throw new Error('setMask: non-empty mask');\n  if (mask.compressed) bytes[0] |= 0b1000_0000;\n  if (mask.infinity) bytes[0] |= 0b0100_0000;\n  if (mask.sort) bytes[0] |= 0b0010_0000;\n  return bytes;\n}\n\nfunction pointG1ToBytes(\n  _c: WeierstrassPointCons<Fp>,\n  point: WeierstrassPoint<Fp>,\n  isComp: boolean\n) {\n  const { BYTES: L, ORDER: P } = Fp;\n  const is0 = point.is0();\n  const { x, y } = point.toAffine();\n  if (isComp) {\n    if (is0) return COMPZERO.slice();\n    const sort = Boolean((y * _2n) / P);\n    return setMask(numberToBytesBE(x, L), { compressed: true, sort });\n  } else {\n    if (is0) {\n      return concatBytes(Uint8Array.of(0x40), new Uint8Array(2 * L - 1));\n    } else {\n      return concatBytes(numberToBytesBE(x, L), numberToBytesBE(y, L));\n    }\n  }\n}\n\nfunction signatureG1ToBytes(point: WeierstrassPoint<Fp>) {\n  point.assertValidity();\n  const { BYTES: L, ORDER: P } = Fp;\n  const { x, y } = point.toAffine();\n  if (point.is0()) return COMPZERO.slice();\n  const sort = Boolean((y * _2n) / P);\n  return setMask(numberToBytesBE(x, L), { compressed: true, sort });\n}\n\nfunction pointG1FromBytes(bytes: Uint8Array): AffinePoint<Fp> {\n  const { compressed, infinity, sort, value } = parseMask(bytes);\n  const { BYTES: L, ORDER: P } = Fp;\n  if (value.length === 48 && compressed) {\n    const compressedValue = bytesToNumberBE(value);\n    // Zero\n    const x = Fp.create(compressedValue & bitMask(Fp.BITS));\n    if (infinity) {\n      if (x !== _0n) throw new Error('invalid G1 point: non-empty, at infinity, with compression');\n      return { x: _0n, y: _0n };\n    }\n    const right = Fp.add(Fp.pow(x, _3n), Fp.create(bls12_381_CURVE_G1.b)); // y² = x³ + b\n    let y = Fp.sqrt(right);\n    if (!y) throw new Error('invalid G1 point: compressed point');\n    if ((y * _2n) / P !== BigInt(sort)) y = Fp.neg(y);\n    return { x: Fp.create(x), y: Fp.create(y) };\n  } else if (value.length === 96 && !compressed) {\n    // Check if the infinity flag is set\n    const x = bytesToNumberBE(value.subarray(0, L));\n    const y = bytesToNumberBE(value.subarray(L));\n    if (infinity) {\n      if (x !== _0n || y !== _0n) throw new Error('G1: non-empty point at infinity');\n      return bls12_381.G1.Point.ZERO.toAffine();\n    }\n    return { x: Fp.create(x), y: Fp.create(y) };\n  } else {\n    throw new Error('invalid G1 point: expected 48/96 bytes');\n  }\n}\n\nfunction signatureG1FromBytes(bytes: Uint8Array): WeierstrassPoint<Fp> {\n  const { infinity, sort, value } = parseMask(abytes(bytes, 48, 'signature'));\n  const P = Fp.ORDER;\n  const Point = bls12_381.G1.Point;\n  const compressedValue = bytesToNumberBE(value);\n  // Zero\n  if (infinity) return Point.ZERO;\n  const x = Fp.create(compressedValue & bitMask(Fp.BITS));\n  const right = Fp.add(Fp.pow(x, _3n), Fp.create(bls12_381_CURVE_G1.b)); // y² = x³ + b\n  let y = Fp.sqrt(right);\n  if (!y) throw new Error('invalid G1 point: compressed');\n  const aflag = BigInt(sort);\n  if ((y * _2n) / P !== aflag) y = Fp.neg(y);\n  const point = Point.fromAffine({ x, y });\n  point.assertValidity();\n  return point;\n}\n\nfunction pointG2ToBytes(\n  _c: WeierstrassPointCons<Fp2>,\n  point: WeierstrassPoint<Fp2>,\n  isComp: boolean\n) {\n  const { BYTES: L, ORDER: P } = Fp;\n  const is0 = point.is0();\n  const { x, y } = point.toAffine();\n  if (isComp) {\n    if (is0) return concatBytes(COMPZERO, numberToBytesBE(_0n, L));\n    const flag = Boolean(y.c1 === _0n ? (y.c0 * _2n) / P : (y.c1 * _2n) / P);\n    return concatBytes(\n      setMask(numberToBytesBE(x.c1, L), { compressed: true, sort: flag }),\n      numberToBytesBE(x.c0, L)\n    );\n  } else {\n    if (is0) return concatBytes(Uint8Array.of(0x40), new Uint8Array(4 * L - 1));\n    const { re: x0, im: x1 } = Fp2.reim(x);\n    const { re: y0, im: y1 } = Fp2.reim(y);\n    return concatBytes(\n      numberToBytesBE(x1, L),\n      numberToBytesBE(x0, L),\n      numberToBytesBE(y1, L),\n      numberToBytesBE(y0, L)\n    );\n  }\n}\n\nfunction signatureG2ToBytes(point: WeierstrassPoint<Fp2>) {\n  point.assertValidity();\n  const { BYTES: L } = Fp;\n  if (point.is0()) return concatBytes(COMPZERO, numberToBytesBE(_0n, L));\n  const { x, y } = point.toAffine();\n  const { re: x0, im: x1 } = Fp2.reim(x);\n  const { re: y0, im: y1 } = Fp2.reim(y);\n  const tmp = y1 > _0n ? y1 * _2n : y0 * _2n;\n  const sort = Boolean((tmp / Fp.ORDER) & _1n);\n  const z2 = x0;\n  return concatBytes(\n    setMask(numberToBytesBE(x1, L), { sort, compressed: true }),\n    numberToBytesBE(z2, L)\n  );\n}\n\nfunction pointG2FromBytes(bytes: Uint8Array): AffinePoint<Fp2> {\n  const { BYTES: L, ORDER: P } = Fp;\n  const { compressed, infinity, sort, value } = parseMask(bytes);\n  if (\n    (!compressed && !infinity && sort) || // 00100000\n    (!compressed && infinity && sort) || // 01100000\n    (sort && infinity && compressed) // 11100000\n  ) {\n    throw new Error('invalid encoding flag: ' + (bytes[0] & 0b1110_0000));\n  }\n  const slc = (b: Uint8Array, from: number, to?: number) => bytesToNumberBE(b.slice(from, to));\n  if (value.length === 96 && compressed) {\n    if (infinity) {\n      // check that all bytes are 0\n      if (value.reduce((p, c) => (p !== 0 ? c + 1 : c), 0) > 0) {\n        throw new Error('invalid G2 point: compressed');\n      }\n      return { x: Fp2.ZERO, y: Fp2.ZERO };\n    }\n    const x_1 = slc(value, 0, L);\n    const x_0 = slc(value, L, 2 * L);\n    const x = Fp2.create({ c0: Fp.create(x_0), c1: Fp.create(x_1) });\n    const right = Fp2.add(Fp2.pow(x, _3n), bls12_381_CURVE_G2.b); // y² = x³ + 4 * (u+1) = x³ + b\n    let y = Fp2.sqrt(right);\n    const Y_bit = y.c1 === _0n ? (y.c0 * _2n) / P : (y.c1 * _2n) / P ? _1n : _0n;\n    y = sort && Y_bit > 0 ? y : Fp2.neg(y);\n    return { x, y };\n  } else if (value.length === 192 && !compressed) {\n    if (infinity) {\n      if (value.reduce((p, c) => (p !== 0 ? c + 1 : c), 0) > 0) {\n        throw new Error('invalid G2 point: uncompressed');\n      }\n      return { x: Fp2.ZERO, y: Fp2.ZERO };\n    }\n    const x1 = slc(value, 0 * L, 1 * L);\n    const x0 = slc(value, 1 * L, 2 * L);\n    const y1 = slc(value, 2 * L, 3 * L);\n    const y0 = slc(value, 3 * L, 4 * L);\n    return { x: Fp2.fromBigTuple([x0, x1]), y: Fp2.fromBigTuple([y0, y1]) };\n  } else {\n    throw new Error('invalid G2 point: expected 96/192 bytes');\n  }\n}\n\nfunction signatureG2FromBytes(bytes: Uint8Array) {\n  const { ORDER: P } = Fp;\n  // TODO: Optimize, it's very slow because of sqrt.\n  const { infinity, sort, value } = parseMask(abytes(bytes));\n  const Point = bls12_381.G2.Point;\n  const half = value.length / 2;\n  if (half !== 48 && half !== 96)\n    throw new Error('invalid compressed signature length, expected 96/192 bytes');\n  const z1 = bytesToNumberBE(value.slice(0, half));\n  const z2 = bytesToNumberBE(value.slice(half));\n  // Indicates the infinity point\n  if (infinity) return Point.ZERO;\n  const x1 = Fp.create(z1 & bitMask(Fp.BITS));\n  const x2 = Fp.create(z2);\n  const x = Fp2.create({ c0: x2, c1: x1 });\n  const y2 = Fp2.add(Fp2.pow(x, _3n), bls12_381_CURVE_G2.b); // y² = x³ + 4\n  // The slow part\n  let y = Fp2.sqrt(y2);\n  if (!y) throw new Error('Failed to find a square root');\n\n  // Choose the y whose leftmost bit of the imaginary part is equal to the a_flag1\n  // If y1 happens to be zero, then use the bit of y0\n  const { re: y0, im: y1 } = Fp2.reim(y);\n  const aflag1 = BigInt(sort);\n  const isGreater = y1 > _0n && (y1 * _2n) / P !== aflag1;\n  const is0 = y1 === _0n && (y0 * _2n) / P !== aflag1;\n  if (isGreater || is0) y = Fp2.neg(y);\n  const point = Point.fromAffine({ x, y });\n  point.assertValidity();\n  return point;\n}\n\nconst signatureCoders = {\n  ShortSignature: {\n    fromBytes(bytes: Uint8Array) {\n      return signatureG1FromBytes(abytes(bytes));\n    },\n    fromHex(hex: string): WeierstrassPoint<Fp> {\n      return signatureG1FromBytes(hexToBytes(hex));\n    },\n    toBytes(point: WeierstrassPoint<Fp>) {\n      return signatureG1ToBytes(point);\n    },\n    toRawBytes(point: WeierstrassPoint<Fp>) {\n      return signatureG1ToBytes(point);\n    },\n    toHex(point: WeierstrassPoint<Fp>) {\n      return bytesToHex(signatureG1ToBytes(point));\n    },\n  },\n  LongSignature: {\n    fromBytes(bytes: Uint8Array): WeierstrassPoint<Fp2> {\n      return signatureG2FromBytes(abytes(bytes));\n    },\n    fromHex(hex: string): WeierstrassPoint<Fp2> {\n      return signatureG2FromBytes(hexToBytes(hex));\n    },\n    toBytes(point: WeierstrassPoint<Fp2>) {\n      return signatureG2ToBytes(point);\n    },\n    toRawBytes(point: WeierstrassPoint<Fp2>) {\n      return signatureG2ToBytes(point);\n    },\n    toHex(point: WeierstrassPoint<Fp2>) {\n      return bytesToHex(signatureG2ToBytes(point));\n    },\n  },\n};\n\nconst fields = {\n  Fp,\n  Fp2,\n  Fp6,\n  Fp12,\n  Fr: bls12_381_Fr,\n};\nconst G1_Point = weierstrass(bls12_381_CURVE_G1, {\n  allowInfinityPoint: true,\n  Fn: bls12_381_Fr,\n  fromBytes: pointG1FromBytes,\n  toBytes: pointG1ToBytes,\n  // Checks is the point resides in prime-order subgroup.\n  // point.isTorsionFree() should return true for valid points\n  // It returns false for shitty points.\n  // https://eprint.iacr.org/2021/1130.pdf\n  isTorsionFree: (c, point): boolean => {\n    // GLV endomorphism ψ(P)\n    const beta = BigInt(\n      '0x5f19672fdf76ce51ba69c6076a0f77eaddb3a93be6f89688de17d813620a00022e01fffffffefffe'\n    );\n    const phi = new c(Fp.mul(point.X, beta), point.Y, point.Z);\n    // TODO: unroll\n    const xP = point.multiplyUnsafe(BLS_X).negate(); // [x]P\n    const u2P = xP.multiplyUnsafe(BLS_X); // [u2]P\n    return u2P.equals(phi);\n  },\n  // Clear cofactor of G1\n  // https://eprint.iacr.org/2019/403\n  clearCofactor: (_c, point) => {\n    // return this.multiplyUnsafe(CURVE.h);\n    return point.multiplyUnsafe(BLS_X).add(point); // x*P + P\n  },\n});\nconst G2_Point = weierstrass(bls12_381_CURVE_G2, {\n  Fp: Fp2,\n  allowInfinityPoint: true,\n  Fn: bls12_381_Fr,\n  fromBytes: pointG2FromBytes,\n  toBytes: pointG2ToBytes,\n  // https://eprint.iacr.org/2021/1130.pdf\n  // Older version: https://eprint.iacr.org/2019/814.pdf\n  isTorsionFree: (c, P): boolean => {\n    return P.multiplyUnsafe(BLS_X).negate().equals(G2psi(c, P)); // ψ(P) == [u](P)\n  },\n  // clear_cofactor_bls12381_g2 from RFC 9380.\n  // https://eprint.iacr.org/2017/419.pdf\n  // prettier-ignore\n  clearCofactor: (c, P) => {\n    const x = BLS_X;\n    let t1 = P.multiplyUnsafe(x).negate();  // [-x]P\n    let t2 = G2psi(c, P);                   // Ψ(P)\n    let t3 = P.double();                    // 2P\n    t3 = G2psi2(c, t3);                     // Ψ²(2P)\n    t3 = t3.subtract(t2);                   // Ψ²(2P) - Ψ(P)\n    t2 = t1.add(t2);                        // [-x]P + Ψ(P)\n    t2 = t2.multiplyUnsafe(x).negate();     // [x²]P - [x]Ψ(P)\n    t3 = t3.add(t2);                        // Ψ²(2P) - Ψ(P) + [x²]P - [x]Ψ(P)\n    t3 = t3.subtract(t1);                   // Ψ²(2P) - Ψ(P) + [x²]P - [x]Ψ(P) + [x]P\n    const Q = t3.subtract(P);               // Ψ²(2P) - Ψ(P) + [x²]P - [x]Ψ(P) + [x]P - 1P\n    return Q;                               // [x²-x-1]P + [x-1]Ψ(P) + Ψ²(2P)\n  },\n});\n\nconst bls12_hasher_opts = {\n  mapToG1: mapToG1,\n  mapToG2: mapToG2,\n  hasherOpts: hasher_opts,\n  hasherOptsG1: { ...hasher_opts, m: 1, DST: 'BLS_SIG_BLS12381G1_XMD:SHA-256_SSWU_RO_NUL_' },\n  hasherOptsG2: { ...hasher_opts },\n} as const;\n\nconst bls12_params = {\n  ateLoopSize: BLS_X, // The BLS parameter x for BLS12-381\n  xNegative: true,\n  twistType: 'multiplicative' as const,\n  randomBytes: randomBytes,\n};\n\n/**\n * bls12-381 pairing-friendly curve construction.\n * Provides both longSignatures and shortSignatures.\n */\nexport const bls12_381: BlsCurvePairWithSignatures = bls(\n  fields,\n  G1_Point,\n  G2_Point,\n  bls12_params,\n  bls12_hasher_opts,\n  signatureCoders\n);\n\n// 3-isogeny map from E' to E https://www.rfc-editor.org/rfc/rfc9380#appendix-E.3\nconst isogenyMapG2 = isogenyMap(\n  Fp2,\n  [\n    // xNum\n    [\n      [\n        '0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97d6',\n        '0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97d6',\n      ],\n      [\n        '0x0',\n        '0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71a',\n      ],\n      [\n        '0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71e',\n        '0x8ab05f8bdd54cde190937e76bc3e447cc27c3d6fbd7063fcd104635a790520c0a395554e5c6aaaa9354ffffffffe38d',\n      ],\n      [\n        '0x171d6541fa38ccfaed6dea691f5fb614cb14b4e7f4e810aa22d6108f142b85757098e38d0f671c7188e2aaaaaaaa5ed1',\n        '0x0',\n      ],\n    ],\n    // xDen\n    [\n      [\n        '0x0',\n        '0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa63',\n      ],\n      [\n        '0xc',\n        '0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa9f',\n      ],\n      ['0x1', '0x0'], // LAST 1\n    ],\n    // yNum\n    [\n      [\n        '0x1530477c7ab4113b59a4c18b076d11930f7da5d4a07f649bf54439d87d27e500fc8c25ebf8c92f6812cfc71c71c6d706',\n        '0x1530477c7ab4113b59a4c18b076d11930f7da5d4a07f649bf54439d87d27e500fc8c25ebf8c92f6812cfc71c71c6d706',\n      ],\n      [\n        '0x0',\n        '0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97be',\n      ],\n      [\n        '0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71c',\n        '0x8ab05f8bdd54cde190937e76bc3e447cc27c3d6fbd7063fcd104635a790520c0a395554e5c6aaaa9354ffffffffe38f',\n      ],\n      [\n        '0x124c9ad43b6cf79bfbf7043de3811ad0761b0f37a1e26286b0e977c69aa274524e79097a56dc4bd9e1b371c71c718b10',\n        '0x0',\n      ],\n    ],\n    // yDen\n    [\n      [\n        '0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa8fb',\n        '0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa8fb',\n      ],\n      [\n        '0x0',\n        '0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa9d3',\n      ],\n      [\n        '0x12',\n        '0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa99',\n      ],\n      ['0x1', '0x0'], // LAST 1\n    ],\n  ].map((i) => i.map((pair) => Fp2.fromBigTuple(pair.map(BigInt) as BigintTuple))) as [\n    Fp2[],\n    Fp2[],\n    Fp2[],\n    Fp2[],\n  ]\n);\n// 11-isogeny map from E' to E\nconst isogenyMapG1 = isogenyMap(\n  Fp,\n  [\n    // xNum\n    [\n      '0x11a05f2b1e833340b809101dd99815856b303e88a2d7005ff2627b56cdb4e2c85610c2d5f2e62d6eaeac1662734649b7',\n      '0x17294ed3e943ab2f0588bab22147a81c7c17e75b2f6a8417f565e33c70d1e86b4838f2a6f318c356e834eef1b3cb83bb',\n      '0xd54005db97678ec1d1048c5d10a9a1bce032473295983e56878e501ec68e25c958c3e3d2a09729fe0179f9dac9edcb0',\n      '0x1778e7166fcc6db74e0609d307e55412d7f5e4656a8dbf25f1b33289f1b330835336e25ce3107193c5b388641d9b6861',\n      '0xe99726a3199f4436642b4b3e4118e5499db995a1257fb3f086eeb65982fac18985a286f301e77c451154ce9ac8895d9',\n      '0x1630c3250d7313ff01d1201bf7a74ab5db3cb17dd952799b9ed3ab9097e68f90a0870d2dcae73d19cd13c1c66f652983',\n      '0xd6ed6553fe44d296a3726c38ae652bfb11586264f0f8ce19008e218f9c86b2a8da25128c1052ecaddd7f225a139ed84',\n      '0x17b81e7701abdbe2e8743884d1117e53356de5ab275b4db1a682c62ef0f2753339b7c8f8c8f475af9ccb5618e3f0c88e',\n      '0x80d3cf1f9a78fc47b90b33563be990dc43b756ce79f5574a2c596c928c5d1de4fa295f296b74e956d71986a8497e317',\n      '0x169b1f8e1bcfa7c42e0c37515d138f22dd2ecb803a0c5c99676314baf4bb1b7fa3190b2edc0327797f241067be390c9e',\n      '0x10321da079ce07e272d8ec09d2565b0dfa7dccdde6787f96d50af36003b14866f69b771f8c285decca67df3f1605fb7b',\n      '0x6e08c248e260e70bd1e962381edee3d31d79d7e22c837bc23c0bf1bc24c6b68c24b1b80b64d391fa9c8ba2e8ba2d229',\n    ],\n    // xDen\n    [\n      '0x8ca8d548cff19ae18b2e62f4bd3fa6f01d5ef4ba35b48ba9c9588617fc8ac62b558d681be343df8993cf9fa40d21b1c',\n      '0x12561a5deb559c4348b4711298e536367041e8ca0cf0800c0126c2588c48bf5713daa8846cb026e9e5c8276ec82b3bff',\n      '0xb2962fe57a3225e8137e629bff2991f6f89416f5a718cd1fca64e00b11aceacd6a3d0967c94fedcfcc239ba5cb83e19',\n      '0x3425581a58ae2fec83aafef7c40eb545b08243f16b1655154cca8abc28d6fd04976d5243eecf5c4130de8938dc62cd8',\n      '0x13a8e162022914a80a6f1d5f43e7a07dffdfc759a12062bb8d6b44e833b306da9bd29ba81f35781d539d395b3532a21e',\n      '0xe7355f8e4e667b955390f7f0506c6e9395735e9ce9cad4d0a43bcef24b8982f7400d24bc4228f11c02df9a29f6304a5',\n      '0x772caacf16936190f3e0c63e0596721570f5799af53a1894e2e073062aede9cea73b3538f0de06cec2574496ee84a3a',\n      '0x14a7ac2a9d64a8b230b3f5b074cf01996e7f63c21bca68a81996e1cdf9822c580fa5b9489d11e2d311f7d99bbdcc5a5e',\n      '0xa10ecf6ada54f825e920b3dafc7a3cce07f8d1d7161366b74100da67f39883503826692abba43704776ec3a79a1d641',\n      '0x95fc13ab9e92ad4476d6e3eb3a56680f682b4ee96f7d03776df533978f31c1593174e4b4b7865002d6384d168ecdd0a',\n      '0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n    ],\n    // yNum\n    [\n      '0x90d97c81ba24ee0259d1f094980dcfa11ad138e48a869522b52af6c956543d3cd0c7aee9b3ba3c2be9845719707bb33',\n      '0x134996a104ee5811d51036d776fb46831223e96c254f383d0f906343eb67ad34d6c56711962fa8bfe097e75a2e41c696',\n      '0xcc786baa966e66f4a384c86a3b49942552e2d658a31ce2c344be4b91400da7d26d521628b00523b8dfe240c72de1f6',\n      '0x1f86376e8981c217898751ad8746757d42aa7b90eeb791c09e4a3ec03251cf9de405aba9ec61deca6355c77b0e5f4cb',\n      '0x8cc03fdefe0ff135caf4fe2a21529c4195536fbe3ce50b879833fd221351adc2ee7f8dc099040a841b6daecf2e8fedb',\n      '0x16603fca40634b6a2211e11db8f0a6a074a7d0d4afadb7bd76505c3d3ad5544e203f6326c95a807299b23ab13633a5f0',\n      '0x4ab0b9bcfac1bbcb2c977d027796b3ce75bb8ca2be184cb5231413c4d634f3747a87ac2460f415ec961f8855fe9d6f2',\n      '0x987c8d5333ab86fde9926bd2ca6c674170a05bfe3bdd81ffd038da6c26c842642f64550fedfe935a15e4ca31870fb29',\n      '0x9fc4018bd96684be88c9e221e4da1bb8f3abd16679dc26c1e8b6e6a1f20cabe69d65201c78607a360370e577bdba587',\n      '0xe1bba7a1186bdb5223abde7ada14a23c42a0ca7915af6fe06985e7ed1e4d43b9b3f7055dd4eba6f2bafaaebca731c30',\n      '0x19713e47937cd1be0dfd0b8f1d43fb93cd2fcbcb6caf493fd1183e416389e61031bf3a5cce3fbafce813711ad011c132',\n      '0x18b46a908f36f6deb918c143fed2edcc523559b8aaf0c2462e6bfe7f911f643249d9cdf41b44d606ce07c8a4d0074d8e',\n      '0xb182cac101b9399d155096004f53f447aa7b12a3426b08ec02710e807b4633f06c851c1919211f20d4c04f00b971ef8',\n      '0x245a394ad1eca9b72fc00ae7be315dc757b3b080d4c158013e6632d3c40659cc6cf90ad1c232a6442d9d3f5db980133',\n      '0x5c129645e44cf1102a159f748c4a3fc5e673d81d7e86568d9ab0f5d396a7ce46ba1049b6579afb7866b1e715475224b',\n      '0x15e6be4e990f03ce4ea50b3b42df2eb5cb181d8f84965a3957add4fa95af01b2b665027efec01c7704b456be69c8b604',\n    ],\n    // yDen\n    [\n      '0x16112c4c3a9c98b252181140fad0eae9601a6de578980be6eec3232b5be72e7a07f3688ef60c206d01479253b03663c1',\n      '0x1962d75c2381201e1a0cbd6c43c348b885c84ff731c4d59ca4a10356f453e01f78a4260763529e3532f6102c2e49a03d',\n      '0x58df3306640da276faaae7d6e8eb15778c4855551ae7f310c35a5dd279cd2eca6757cd636f96f891e2538b53dbf67f2',\n      '0x16b7d288798e5395f20d23bf89edb4d1d115c5dbddbcd30e123da489e726af41727364f2c28297ada8d26d98445f5416',\n      '0xbe0e079545f43e4b00cc912f8228ddcc6d19c9f0f69bbb0542eda0fc9dec916a20b15dc0fd2ededda39142311a5001d',\n      '0x8d9e5297186db2d9fb266eaac783182b70152c65550d881c5ecd87b6f0f5a6449f38db9dfa9cce202c6477faaf9b7ac',\n      '0x166007c08a99db2fc3ba8734ace9824b5eecfdfa8d0cf8ef5dd365bc400a0051d5fa9c01a58b1fb93d1a1399126a775c',\n      '0x16a3ef08be3ea7ea03bcddfabba6ff6ee5a4375efa1f4fd7feb34fd206357132b920f5b00801dee460ee415a15812ed9',\n      '0x1866c8ed336c61231a1be54fd1d74cc4f9fb0ce4c6af5920abc5750c4bf39b4852cfe2f7bb9248836b233d9d55535d4a',\n      '0x167a55cda70a6e1cea820597d94a84903216f763e13d87bb5308592e7ea7d4fbc7385ea3d529b35e346ef48bb8913f55',\n      '0x4d2f259eea405bd48f010a01ad2911d9c6dd039bb61a6290e591b36e636a5c871a5c29f4f83060400f8b49cba8f6aa8',\n      '0xaccbb67481d033ff5852c1e48c50c477f94ff8aefce42d28c0f9a88cea7913516f968986f7ebbea9684b529e2561092',\n      '0xad6b9514c767fe3c3613144b45f1496543346d98adf02267d5ceef9a00d9b8693000763e3b90ac11e99b138573345cc',\n      '0x2660400eb2e4f3b628bdd0d53cd76f2bf565b94e72927c1cb748df27942480e420517bd8714cc80d1fadc1326ed06f7',\n      '0xe0fa1d816ddc03e6b24255e0d7819c171c40f65e273b853324efcd6356caa205ca2f570f13497804415473a1d634b8f',\n      '0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n    ],\n  ].map((i) => i.map((j) => BigInt(j))) as [Fp[], Fp[], Fp[], Fp[]]\n);\n\n// Optimized SWU Map - Fp to G1\nconst G1_SWU = mapToCurveSimpleSWU(Fp, {\n  A: Fp.create(\n    BigInt(\n      '0x144698a3b8e9433d693a02c96d4982b0ea985383ee66a8d8e8981aefd881ac98936f8da0e0f97f5cf428082d584c1d'\n    )\n  ),\n  B: Fp.create(\n    BigInt(\n      '0x12e2908d11688030018b12e8753eee3b2016c1f0f24f4070a0b9c14fcef35ef55a23215a316ceaa5d1cc48e98e172be0'\n    )\n  ),\n  Z: Fp.create(BigInt(11)),\n});\n// SWU Map - Fp2 to G2': y² = x³ + 240i * x + 1012 + 1012i\nconst G2_SWU = mapToCurveSimpleSWU(Fp2, {\n  A: Fp2.create({ c0: Fp.create(_0n), c1: Fp.create(BigInt(240)) }), // A' = 240 * I\n  B: Fp2.create({ c0: Fp.create(BigInt(1012)), c1: Fp.create(BigInt(1012)) }), // B' = 1012 * (1 + I)\n  Z: Fp2.create({ c0: Fp.create(BigInt(-2)), c1: Fp.create(BigInt(-1)) }), // Z: -(2 + I)\n});\n\nfunction mapToG1(scalars: bigint[]) {\n  const { x, y } = G1_SWU(Fp.create(scalars[0]));\n  return isogenyMapG1(x, y);\n}\nfunction mapToG2(scalars: bigint[]) {\n  const { x, y } = G2_SWU(Fp2.fromBigTuple(scalars as BigintTuple));\n  return isogenyMapG2(x, y);\n}\n","/**\n * Internal module for NIST P256, P384, P521 curves.\n * Do not use for now.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256, sha384, sha512 } from '@noble/hashes/sha2.js';\nimport { createHasher, type H2CHasher } from './abstract/hash-to-curve.ts';\nimport { Field } from './abstract/modular.ts';\nimport { createORPF, type OPRF } from './abstract/oprf.ts';\nimport {\n  ecdsa,\n  mapToCurveSimpleSWU,\n  weierstrass,\n  type ECDSA,\n  type WeierstrassOpts,\n  type WeierstrassPointCons,\n} from './abstract/weierstrass.ts';\n\n// p = 2n**224n * (2n**32n-1n) + 2n**192n + 2n**96n - 1n\n// a = Fp256.create(BigInt('-3'));\nconst p256_CURVE: WeierstrassOpts<bigint> = /* @__PURE__ */ (() => ({\n  p: BigInt('0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff'),\n  n: BigInt('0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551'),\n  h: BigInt(1),\n  a: BigInt('0xffffffff00000001000000000000000000000000fffffffffffffffffffffffc'),\n  b: BigInt('0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b'),\n  Gx: BigInt('0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296'),\n  Gy: BigInt('0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5'),\n}))();\n\n// p = 2n**384n - 2n**128n - 2n**96n + 2n**32n - 1n\nconst p384_CURVE: WeierstrassOpts<bigint> = /* @__PURE__ */ (() => ({\n  p: BigInt(\n    '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff'\n  ),\n  n: BigInt(\n    '0xffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973'\n  ),\n  h: BigInt(1),\n  a: BigInt(\n    '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc'\n  ),\n  b: BigInt(\n    '0xb3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef'\n  ),\n  Gx: BigInt(\n    '0xaa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7'\n  ),\n  Gy: BigInt(\n    '0x3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f'\n  ),\n}))();\n\n// p = 2n**521n - 1n\nconst p521_CURVE: WeierstrassOpts<bigint> = /* @__PURE__ */ (() => ({\n  p: BigInt(\n    '0x1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'\n  ),\n  n: BigInt(\n    '0x01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409'\n  ),\n  h: BigInt(1),\n  a: BigInt(\n    '0x1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc'\n  ),\n  b: BigInt(\n    '0x0051953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f00'\n  ),\n  Gx: BigInt(\n    '0x00c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66'\n  ),\n  Gy: BigInt(\n    '0x011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650'\n  ),\n}))();\n\ntype SwuOpts = {\n  A: bigint;\n  B: bigint;\n  Z: bigint;\n};\n\nfunction createSWU(Point: WeierstrassPointCons<bigint>, opts: SwuOpts) {\n  const map = mapToCurveSimpleSWU(Point.Fp, opts);\n  return (scalars: bigint[]) => map(scalars[0]);\n}\n\n// NIST P256\nconst p256_Point = /* @__PURE__ */ weierstrass(p256_CURVE);\n/**\n * NIST P256 (aka secp256r1, prime256v1) curve, ECDSA and ECDH methods.\n * Hashes inputs with sha256 by default.\n *\n * @example\n * ```js\n * import { p256 } from '@noble/curves/nist.js';\n * const { secretKey, publicKey } = p256.keygen();\n * // const publicKey = p256.getPublicKey(secretKey);\n * const msg = new TextEncoder().encode('hello noble');\n * const sig = p256.sign(msg, secretKey);\n * const isValid = p256.verify(sig, msg, publicKey);\n * // const sigKeccak = p256.sign(keccak256(msg), secretKey, { prehash: false });\n * ```\n */\nexport const p256: ECDSA = /* @__PURE__ */ ecdsa(p256_Point, sha256);\n/** Hashing / encoding to p256 points / field. RFC 9380 methods. */\nexport const p256_hasher: H2CHasher<WeierstrassPointCons<bigint>> = /* @__PURE__ */ (() => {\n  return createHasher(\n    p256_Point,\n    createSWU(p256_Point, {\n      A: p256_CURVE.a,\n      B: p256_CURVE.b,\n      Z: p256_Point.Fp.create(BigInt('-10')),\n    }),\n    {\n      DST: 'P256_XMD:SHA-256_SSWU_RO_',\n      encodeDST: 'P256_XMD:SHA-256_SSWU_NU_',\n      p: p256_CURVE.p,\n      m: 1,\n      k: 128,\n      expand: 'xmd',\n      hash: sha256,\n    }\n  );\n})();\n/** p256 OPRF, defined in RFC 9497. */\nexport const p256_oprf: OPRF = /* @__PURE__ */ (() =>\n  createORPF({\n    name: 'P256-SHA256',\n    Point: p256_Point,\n    hash: sha256,\n    hashToGroup: p256_hasher.hashToCurve,\n    hashToScalar: p256_hasher.hashToScalar,\n  }))();\n\n// NIST P384\nconst p384_Point = /* @__PURE__ */ weierstrass(p384_CURVE);\n/** NIST P384 (aka secp384r1) curve, ECDSA and ECDH methods. Hashes inputs with sha384 by default. */\nexport const p384: ECDSA = /* @__PURE__ */ ecdsa(p384_Point, sha384);\n/** Hashing / encoding to p384 points / field. RFC 9380 methods. */\nexport const p384_hasher: H2CHasher<WeierstrassPointCons<bigint>> = /* @__PURE__ */ (() => {\n  return createHasher(\n    p384_Point,\n    createSWU(p384_Point, {\n      A: p384_CURVE.a,\n      B: p384_CURVE.b,\n      Z: p384_Point.Fp.create(BigInt('-12')),\n    }),\n    {\n      DST: 'P384_XMD:SHA-384_SSWU_RO_',\n      encodeDST: 'P384_XMD:SHA-384_SSWU_NU_',\n      p: p384_CURVE.p,\n      m: 1,\n      k: 192,\n      expand: 'xmd',\n      hash: sha384,\n    }\n  );\n})();\n/** p384 OPRF, defined in RFC 9497. */\nexport const p384_oprf: OPRF = /* @__PURE__ */ (() =>\n  createORPF({\n    name: 'P384-SHA384',\n    Point: p384_Point,\n    hash: sha384,\n    hashToGroup: p384_hasher.hashToCurve,\n    hashToScalar: p384_hasher.hashToScalar,\n  }))();\n\n// NIST P521\nconst Fn521 = /* @__PURE__ */ (() => Field(p521_CURVE.n, { allowedLengths: [65, 66] }))();\nconst p521_Point = /* @__PURE__ */ weierstrass(p521_CURVE, { Fn: Fn521 });\n/** NIST P521 (aka secp521r1) curve, ECDSA and ECDH methods. Hashes inputs with sha512 by default. */\nexport const p521: ECDSA = /* @__PURE__ */ ecdsa(p521_Point, sha512);\n/** Hashing / encoding to p521 points / field. RFC 9380 methods. */\nexport const p521_hasher: H2CHasher<WeierstrassPointCons<bigint>> = /* @__PURE__ */ (() => {\n  return createHasher(\n    p521_Point,\n    createSWU(p521_Point, {\n      A: p521_CURVE.a,\n      B: p521_CURVE.b,\n      Z: p521_Point.Fp.create(BigInt('-4')),\n    }),\n    {\n      DST: 'P521_XMD:SHA-512_SSWU_RO_',\n      encodeDST: 'P521_XMD:SHA-512_SSWU_NU_',\n      p: p521_CURVE.p,\n      m: 1,\n      k: 256,\n      expand: 'xmd',\n      hash: sha512,\n    }\n  );\n})();\n/** p521 OPRF, defined in RFC 9497. */\nexport const p521_oprf: OPRF = /* @__PURE__ */ (() =>\n  createORPF({\n    name: 'P521-SHA512',\n    Point: p521_Point,\n    hash: sha512,\n    hashToGroup: p521_hasher.hashToCurve,\n    hashToScalar: p521_hasher.hashToScalar, // produces L=98 just like in RFC\n  }))();\n","// viem reimplementation of the BLS packing / G2 serialization logic that\n// currently lives (ethers-based) in\n//   packages/airaccount/src/core/bls/bls.manager.ts\n//\n// This is a NEW, parallel implementation created for the ethers -> viem\n// migration. The original ethers code is intentionally left untouched.\n//\n// Byte-exactness is mandatory here: these byte strings are fed to on-chain\n// signature verification (ERC-4337 UserOp signature field + EIP-2537 G2\n// serialization). Any drift in padding direction, limb size, or byte offset\n// breaks verification. The mapping from the ethers primitives is:\n//\n//   ethers.solidityPacked(types, values)   -> viem.encodePacked(types, values)\n//   ethers.solidityPacked([\"uint256\"],[n]) -> viem.encodePacked([\"uint256\"],[BigInt(n)])\n//   ethers.getBytes(hex)                    -> viem.hexToBytes(hex)\n//   bigint.toString(16).padStart(96,\"0\")    -> viem.numberToHex(v,{size:48}) (48 bytes = 96 hex, left-padded)\n//   \"0x\"+Buffer.from(bytes).toString(\"hex\") -> viem.bytesToHex(bytes)\n//\n// The hash-to-curve step itself is provided by @noble/curves and is identical\n// in both code paths; the only thing that can differ is the surrounding byte\n// manipulation, which is exactly what the parity test pins down.\n\nimport {\n  encodePacked,\n  encodeAbiParameters,\n  concat,\n  size,\n  isHex,\n  numberToHex,\n  hexToBytes,\n  bytesToHex,\n  stringToBytes,\n  type Hex,\n} from \"viem\";\nimport { ALG_ECDSA } from \"../../core/tier/types\";\nimport { sortNodeIdsAscending, encodeCommitteeBLSBlock, type CommitteeSigner } from \"@aastar/core\";\nimport { bls12_381 as bls } from \"@noble/curves/bls12-381.js\";\nimport { p256 } from \"@noble/curves/nist.js\";\n\nimport type {\n  BLSSignatureData,\n  CumulativeT2SignatureData,\n  CumulativeT3SignatureData,\n} from \"../../core/bls/types\";\n\n/** Domain separation tag for the BLS12-381 G2 hash-to-curve (POP scheme). */\nexport const BLS_DST = \"BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_POP_\";\n\n/**\n * Pack the full signature for ERC-4337 UserOp.\n * Format: [nodeIdsLength(32)][nodeIds(N*32)][blsSignature][messagePoint][aaSignature][messagePointSignature]\n *\n * viem equivalent of BLSManager.packSignature (ethers.solidityPacked).\n */\nexport function packSignature(data: BLSSignatureData): Hex {\n  if (!data.nodeIds || !data.aaSignature || !data.messagePointSignature) {\n    throw new Error(\"Missing required signature components\");\n  }\n\n  // #274: the BLS 0x01 wire (transfer-manager's non-tiered path) must carry strictly-ascending nodeIds,\n  // or the v0.27.0 DVT validator rejects it. BLS aggregation is commutative → no re-aggregation needed.\n  const nodeIds = sortNodeIdsAscending(data.nodeIds as Hex[]);\n  const nodeIdsLength = encodePacked([\"uint256\"], [BigInt(nodeIds.length)]);\n  const nodeIdsBytes = encodePacked(\n    Array(nodeIds.length).fill(\"bytes32\"),\n    nodeIds\n  );\n\n  return encodePacked(\n    [\"bytes\", \"bytes\", \"bytes\", \"bytes\", \"bytes\", \"bytes\"],\n    [\n      nodeIdsLength,\n      nodeIdsBytes,\n      data.signature as Hex,\n      data.messagePoint as Hex,\n      data.aaSignature as Hex,\n      data.messagePointSignature as Hex,\n    ]\n  );\n}\n\n/**\n * Build the BLS block for a cumulative packer from whichever framing the caller supplied,\n * enforcing that exactly one is present (CC-103/FU-18 — mirrors `dvtWire.ts`'s `buildBLSBlock`:\n * the account decides legacy-vs-committee from `committeeValidator.committeeActive()`, never\n * from the payload shape, so an ambiguous call here would silently encode for the wrong mode).\n *\n * Legacy   : `[nodeIdsLength(32)][ nodeId(32) × k ][blsSig(256)]` (via {@link packBlsPayload}).\n * Committee: `[nodeIdsLength(32)][ (nodeId‖slot‖proof)(perSigner) × k ][blsSig(256)]` (via\n * `@aastar/core`'s `encodeCommitteeBLSBlock` — the single source of truth for the committee wire,\n * shared with `dvtWire.ts`'s account-level encoders).\n */\nfunction buildCumulativeBlsBlock(\n  fn: string,\n  nodeIds: string[] | undefined,\n  committeeSigners: readonly CommitteeSigner[] | undefined,\n  blsSignature: string,\n  treeDepth: number | undefined\n): Hex {\n  if (nodeIds !== undefined && committeeSigners !== undefined) {\n    throw new Error(\n      `${fn}: pass either nodeIds (legacy) or committeeSigners (committee), not both — the account ` +\n      `picks its framing from committeeActive(), so an ambiguous call would encode for the wrong mode`\n    );\n  }\n  if (committeeSigners !== undefined) {\n    return encodeCommitteeBLSBlock(committeeSigners, blsSignature as Hex, treeDepth);\n  }\n  if (nodeIds === undefined) {\n    throw new Error(`${fn}: must pass nodeIds (legacy framing) or committeeSigners (committee framing)`);\n  }\n  return packBlsPayload(nodeIds as Hex[], blsSignature as Hex);\n}\n\n/**\n * Pack cumulative Tier 2 signature (algId 0x04): P256 + BLS.\n *\n * Format (MUST match `_validateCumulativeTier2` in AAStarAirAccountBase.sol — issue #45 Fix 1\n * removed the embedded messagePoint + messagePointSignature; the account now recomputes the\n * message point on-chain via hash_to_curve(userOpHash) and verifies the pairing against THAT,\n * so the owner messagePointSignature is redundant and the bytes must NOT be present, or the\n * account's strict-length BLS-payload parse rejects the signature):\n *   [algId=0x04 (1)] [P256 r (32)] [P256 s (32)] [blsBlock]\n * where blsBlock is legacy `[nodeIdsLength(32)][nodeIds(N×32)][blsAggregateSig(256)]` or, when\n * `committeeSigners` is supplied (CC-103/FU-18), the committee framing — see\n * {@link buildCumulativeBlsBlock}.\n */\nexport function packCumulativeT2Signature(data: CumulativeT2SignatureData): Hex {\n  const blsBlock = buildCumulativeBlsBlock(\n    \"packCumulativeT2Signature\",\n    data.nodeIds,\n    data.committeeSigners,\n    data.blsSignature,\n    data.treeDepth\n  );\n\n  return encodePacked(\n    [\"bytes1\", \"bytes\", \"bytes\"],\n    [\"0x04\", data.p256Signature as Hex, blsBlock]\n  );\n}\n\n/**\n * Pack cumulative Tier 3 signature (algId 0x05): P256 + BLS + Guardian.\n *\n * Format (MUST match `_validateCumulativeTier3` in AAStarAirAccountBase.sol — see the T2 note: the\n * embedded messagePoint + messagePointSignature were removed by issue #45 Fix 1. The account reads\n * the guardian signature from the LAST 65 bytes and the BLS payload from sigData[64 : len-65], so\n * any extra bytes between the BLS aggregate and the guardian signature break verification):\n *   [algId=0x05 (1)] [P256 r (32)] [P256 s (32)] [blsBlock] [guardianECDSA (65)]\n * where blsBlock is legacy or committee framing — see {@link buildCumulativeBlsBlock} (CC-103/FU-18).\n */\nexport function packCumulativeT3Signature(data: CumulativeT3SignatureData): Hex {\n  const blsBlock = buildCumulativeBlsBlock(\n    \"packCumulativeT3Signature\",\n    data.nodeIds,\n    data.committeeSigners,\n    data.blsSignature,\n    data.treeDepth\n  );\n\n  return encodePacked(\n    [\"bytes1\", \"bytes\", \"bytes\", \"bytes\"],\n    [\"0x05\", data.p256Signature as Hex, blsBlock, data.guardianSignature as Hex]\n  );\n}\n\n// ── WebAuthn cumulative signatures (algId 0x09 / 0x0a) — airaccount-contract #147/#148 ───────────\n//\n// Device passkeys (WebAuthn) CANNOT sign userOpHash raw — the authenticator signs\n// `authenticatorData ‖ sha256(clientDataJSON)` with the op hash as the clientDataJSON `challenge`.\n// So the contract verifies the assertion on-chain (Coinbase webauthn-sol / OZ WebAuthn stance) and\n// these packers carry the WebAuthn assertion blob instead of a bare 64-byte r‖s.\n\n/** algId for a WebAuthn-passkey + BLS cumulative Tier-2 signature. */\nexport const ALG_CUMULATIVE_T2_WA = 0x09;\n/** algId for a WebAuthn-passkey + BLS + Guardian cumulative Tier-3 signature. */\nexport const ALG_CUMULATIVE_T3_WA = 0x0a;\n\n/** The fixed clientDataJSON preamble the contract binds (`type` first, then `challenge`). */\nconst WEBAUTHN_CLIENTDATA_PREFIX = '{\"type\":\"webauthn.get\",\"challenge\":\"';\n\n/** Normalize a Hex | Uint8Array to bytes. */\nfunction asBytes(v: Hex | Uint8Array): Uint8Array {\n  return typeof v === \"string\" ? hexToBytes(v) : v;\n}\n\n/** Base64URL-encode bytes (no padding) — matches the contract's `_base64UrlEncode32`. */\nfunction base64UrlEncode(bytes: Uint8Array): string {\n  let bin = \"\";\n  for (const b of bytes) bin += String.fromCharCode(b);\n  return btoa(bin).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\");\n}\n\n/**\n * Build the WebAuthn assertion blob the contract decodes for the cumulative passkey factor:\n *   abi.encode(bytes authenticatorData, bytes clientDataJSONPrefix, bytes clientDataJSONSuffix,\n *              bytes32 r, bytes32 s)\n *\n * The signature is the raw P-256 DER from `navigator.credentials.get()`; r/s are decoded and the\n * low-S form is enforced (the contract rejects high-S). clientDataJSON is split into the fixed\n * `{\"type\":\"webauthn.get\",\"challenge\":\"` prefix and the suffix AFTER the base64url(challenge), so\n * the contract can reconstruct it around `base64url(userOpHash)`.\n *\n * @param assertion The three `AuthenticatorAssertionResponse` fields (ArrayBuffers decoded to bytes,\n *   or hex; clientDataJSON may also be the raw JSON string).\n * @param userOpHash The op hash that MUST be the assertion's challenge — verified here so a mismatched\n *   assertion fails in the SDK, not as an opaque on-chain revert.\n */\nexport function packWebAuthnBlob(\n  assertion: {\n    authenticatorData: Hex | Uint8Array;\n    clientDataJSON: Hex | Uint8Array | string;\n    signature: Hex | Uint8Array;\n  },\n  userOpHash: Hex\n): Hex {\n  const authData = asBytes(assertion.authenticatorData);\n\n  const clientDataJSON =\n    typeof assertion.clientDataJSON === \"string\"\n      ? assertion.clientDataJSON\n      : new TextDecoder().decode(asBytes(assertion.clientDataJSON));\n\n  if (!clientDataJSON.startsWith(WEBAUTHN_CLIENTDATA_PREFIX)) {\n    throw new Error(\n      `packWebAuthnBlob: clientDataJSON must start with ${WEBAUTHN_CLIENTDATA_PREFIX} (got ${clientDataJSON.slice(0, 40)}…)`\n    );\n  }\n  const rest = clientDataJSON.slice(WEBAUTHN_CLIENTDATA_PREFIX.length);\n  const closeQuote = rest.indexOf('\"');\n  if (closeQuote < 0) throw new Error(\"packWebAuthnBlob: malformed clientDataJSON (no challenge terminator)\");\n  const challengeB64 = rest.slice(0, closeQuote);\n  const suffix = rest.slice(closeQuote); // includes the closing quote\n\n  // The on-chain reconstruction uses base64url(userOpHash) as the challenge, so the assertion MUST\n  // have been signed over exactly that — otherwise the rebuilt clientDataJSON won't match and P256\n  // verify fails on-chain.\n  const expected = base64UrlEncode(hexToBytes(userOpHash));\n  if (challengeB64 !== expected) {\n    throw new Error(\n      `packWebAuthnBlob: assertion challenge != userOpHash (challenge=${challengeB64}, expected=${expected}). ` +\n        \"The passkey must sign the prepared userOpHash as its WebAuthn challenge.\"\n    );\n  }\n\n  // DER → (r, s), enforce low-S (the contract rejects s > n/2; WebAuthn authenticators don't\n  // guarantee low-S, so normalize: @noble/curves v2 — parse DER, flip s when hasHighS()).\n  const parsed = p256.Signature.fromBytes(asBytes(assertion.signature), \"der\");\n  const n = p256.Point.Fn.ORDER;\n  const sNorm = parsed.hasHighS() ? n - parsed.s : parsed.s;\n  const r = numberToHex(parsed.r, { size: 32 });\n  const s = numberToHex(sNorm, { size: 32 });\n\n  return encodeAbiParameters(\n    [{ type: \"bytes\" }, { type: \"bytes\" }, { type: \"bytes\" }, { type: \"bytes32\" }, { type: \"bytes32\" }],\n    [bytesToHex(authData), bytesToHex(stringToBytes(WEBAUTHN_CLIENTDATA_PREFIX)), bytesToHex(stringToBytes(suffix)), r, s]\n  );\n}\n\n/**\n * Owner-authorization tag bytes for the account's `isValidOwnerAuth(userOpHash, ownerAuth)` view\n * (airaccount-contract v0.23.0+, issue #159). The DVT forwards the SDK's `ownerAuth` verbatim to\n * that view via eth_call; the first byte selects the verification branch.\n */\nexport const OWNER_AUTH_TAG_ECDSA = 0x01;\nexport const OWNER_AUTH_TAG_WEBAUTHN = 0x02;\n\n/**\n * Tag an ECDSA/KMS owner authorization: `0x01 ‖ 65-byte EIP-191 personal_sign(userOpHash)`.\n * Mirrors the contract's `OWNER_AUTH_TAG_ECDSA` branch (which applies `toEthSignedMessageHash` then\n * ecrecover == owner()), so `personalSign65` MUST be an EIP-191 personal_sign, NOT a raw sign.\n */\nexport function packOwnerAuthEcdsa(personalSign65: Hex): Hex {\n  if (size(personalSign65) !== 65) {\n    throw new Error(`packOwnerAuthEcdsa: expected a 65-byte EIP-191 signature, got ${size(personalSign65)} bytes`);\n  }\n  return concat([numberToHex(OWNER_AUTH_TAG_ECDSA, { size: 1 }), personalSign65]);\n}\n\n/**\n * Frame a bare secp256k1 owner signature as a single-ECDSA UserOp signature:\n * `[algId 0x02][r(32)][s(32)][v(1)]` = 66 bytes. airaccount-contract v0.25.0 removed the raw-65\n * fallback, so tiered / compositeValidator accounts REQUIRE this algId prefix (#273).\n *\n * `bareSig65` MUST be a bare 65-byte secp256k1 signature (r‖s‖v) — the value an ISignerAdapter\n * (KMS / local wallet) returns. The strict hex + length check rejects an already-framed signature\n * (e.g. the Ledger path returns [0x02]‖r‖s‖v) so it can't be silently double-prefixed into 67 bytes.\n */\nexport function packEcdsaAlgId(bareSig65: Hex): Hex {\n  if (!isHex(bareSig65, { strict: true }) || size(bareSig65) !== 65) {\n    const detail = isHex(bareSig65, { strict: true }) ? `${size(bareSig65)} bytes` : \"a non-hex value\";\n    throw new Error(\n      `packEcdsaAlgId: expected a bare 65-byte secp256k1 signature (r‖s‖v) to prefix with algId 0x02, got ${detail}`\n    );\n  }\n  return concat([numberToHex(ALG_ECDSA, { size: 1 }), bareSig65]);\n}\n\n/**\n * Tag a device-passkey owner authorization: `0x02 ‖ abi.encode(authenticatorData, clientDataJSONPrefix,\n * clientDataJSONSuffix, r, s)`. The device passkey is the account's `p256KeyX/Y` owner factor; the\n * contract's `OWNER_AUTH_TAG_WEBAUTHN` branch P256-verifies this blob against it. The payload is exactly\n * {@link packWebAuthnBlob}'s output (same assertion the composite P256 factor uses), so re-packing it\n * here does NOT re-consume any one-time credential — it is a pure re-encode.\n */\nexport function packOwnerAuthWebAuthn(\n  assertion: Parameters<typeof packWebAuthnBlob>[0],\n  userOpHash: Hex\n): Hex {\n  return concat([numberToHex(OWNER_AUTH_TAG_WEBAUTHN, { size: 1 }), packWebAuthnBlob(assertion, userOpHash)]);\n}\n\n/**\n * Pack a WebAuthn cumulative Tier-2 signature (algId 0x09):\n *   [0x09 (1)] [waBlobLen: uint32 BE (4)] [waBlob] [blsPayload]\n * where blsPayload = `[nodeIdsLength(32)][nodeIds(N×32)][blsSig(256)]` (build via {@link packBlsPayload}).\n */\nexport function packCumulativeT2WA(waBlob: Hex, blsPayload: Hex): Hex {\n  return concat([\n    numberToHex(ALG_CUMULATIVE_T2_WA, { size: 1 }),\n    numberToHex(size(waBlob), { size: 4 }),\n    waBlob,\n    blsPayload,\n  ]);\n}\n\n/**\n * Pack a WebAuthn cumulative Tier-3 signature (algId 0x0a):\n *   [0x0a (1)] [waBlobLen: uint32 BE (4)] [waBlob] [blsPayload] [guardianECDSA (65)]\n */\nexport function packCumulativeT3WA(waBlob: Hex, blsPayload: Hex, guardianSig: Hex): Hex {\n  return concat([\n    numberToHex(ALG_CUMULATIVE_T3_WA, { size: 1 }),\n    numberToHex(size(waBlob), { size: 4 }),\n    waBlob,\n    blsPayload,\n    guardianSig,\n  ]);\n}\n\n// #274 nodeId strict-ascending sort and the CC-103/FU-18 committee block encoder live in @aastar/core\n// (crypto/dvtWire) — the single source shared by the core dvtWire encoders and these airaccount packers.\n// Re-exported so ./bls-packing consumers keep them.\nexport { sortNodeIdsAscending, encodeCommitteeBLSBlock };\nexport type { CommitteeSigner };\n\n/** Build the LEGACY BLS payload block shared by the cumulative formats: `[nodeIdsLength(32)][nodeIds(N×32)][blsSig(256)]`.\n *  nodeIds are sorted strictly ascending + dedup-checked before packing (#274). */\nexport function packBlsPayload(nodeIds: readonly Hex[], blsSignature: Hex): Hex {\n  const sorted = sortNodeIdsAscending(nodeIds);\n  const nodeIdsLength = encodePacked([\"uint256\"], [BigInt(sorted.length)]);\n  const nodeIdsBytes = encodePacked(Array(sorted.length).fill(\"bytes32\"), sorted);\n  return concat([nodeIdsLength, nodeIdsBytes, blsSignature]);\n}\n\n/**\n * Build the COMMITTEE-framed BLS payload block (CC-103/FU-18) — the counterpart to\n * {@link packBlsPayload} for `committeeActive() == true`. Used directly by callers of the WebAuthn\n * cumulative packers ({@link packCumulativeT2WA}/{@link packCumulativeT3WA}, which take a pre-built\n * `blsPayload` and are framing-agnostic), and internally by {@link packCumulativeT2Signature}/\n * {@link packCumulativeT3Signature} when `committeeSigners` is supplied.\n *\n * Thin wrapper over `@aastar/core`'s `encodeCommitteeBLSBlock` — kept here so this module has one\n * place for \"the BLS payload block, either framing\" rather than half living in `@aastar/core`.\n */\nexport function packCommitteeBlsPayload(\n  signers: readonly CommitteeSigner[],\n  blsSignature: Hex,\n  treeDepth?: number\n): Hex {\n  return encodeCommitteeBLSBlock(signers, blsSignature, treeDepth);\n}\n\n/**\n * Encode a BLS12-381 G2 point to EIP-2537 serialization (256 bytes).\n *\n * Layout (each Fp limb is 48 bytes / 96 hex chars, big-endian, left-padded,\n * preceded by a 16-byte zero pad => 64 bytes per coordinate):\n *   bytes  0..16  : zero pad\n *   bytes 16..64  : x.c0   (offset 16)\n *   bytes 64..80  : zero pad\n *   bytes 80..128 : x.c1   (offset 80)\n *   bytes128..144 : zero pad\n *   bytes144..192 : y.c0   (offset 144)\n *   bytes192..208 : zero pad\n *   bytes208..256 : y.c1   (offset 208)\n *\n * viem equivalent of BLSManager.encodeG2Point. numberToHex(v,{size:48}) emits a\n * left-padded big-endian 48-byte hex, exactly matching\n * `bigint.toString(16).padStart(96, \"0\")` followed by hexToBytes.\n */\nexport function encodeG2Point(point: any): Uint8Array {\n  const result = new Uint8Array(256);\n  const affine = point.toAffine();\n\n  const x0Bytes = hexToBytes(numberToHex(affine.x.c0 as bigint, { size: 48 }));\n  const x1Bytes = hexToBytes(numberToHex(affine.x.c1 as bigint, { size: 48 }));\n  const y0Bytes = hexToBytes(numberToHex(affine.y.c0 as bigint, { size: 48 }));\n  const y1Bytes = hexToBytes(numberToHex(affine.y.c1 as bigint, { size: 48 }));\n\n  result.set(x0Bytes, 16);\n  result.set(x1Bytes, 80);\n  result.set(y0Bytes, 144);\n  result.set(y1Bytes, 208);\n  return result;\n}\n\n/**\n * Hash an arbitrary message to a BLS12-381 G2 point using the POP DST.\n * The curve op is delegated to @noble/curves (identical in both code paths);\n * this wrapper exists so the migration has a single typed entry point.\n */\nexport async function hashToCurve(messageBytes: Uint8Array): Promise<any> {\n  return bls.G2.hashToCurve(messageBytes, { DST: BLS_DST });\n}\n\n/**\n * Calculate the MessagePoint G2 point (EIP-2537 serialized hex) for a message\n * (typically a UserOpHash). viem equivalent of BLSManager.generateMessagePoint.\n */\nexport async function generateMessagePoint(\n  message: string | Uint8Array\n): Promise<Hex> {\n  const messageBytes =\n    typeof message === \"string\" ? hexToBytes(message as Hex) : message;\n\n  const messagePointBLS = await hashToCurve(messageBytes);\n  const messageG2EIP = encodeG2Point(messagePointBLS);\n\n  return bytesToHex(messageG2EIP);\n}\n","import axios from \"axios\";\nimport {\n  packSignature as packSignatureViem,\n  packCumulativeT2Signature as packCumulativeT2SignatureViem,\n  packCumulativeT3Signature as packCumulativeT3SignatureViem,\n  generateMessagePoint as generateMessagePointViem,\n} from \"../../migration/viem/bls-packing\";\nimport {\n  BLSConfig,\n  BLSNode,\n  BLSSignatureData,\n  CumulativeT2SignatureData,\n  CumulativeT3SignatureData,\n} from \"./types\";\n\nexport class BLSManager {\n  private config: BLSConfig;\n\n  constructor(config: BLSConfig) {\n    this.config = config;\n  }\n\n  /**\n   * Discover available BLS nodes from seed nodes (Gossip network)\n   */\n  async getAvailableNodes(): Promise<BLSNode[]> {\n    const { seedNodes, discoveryTimeout = 5000 } = this.config;\n\n    // #257/#258: each externally-reachable seed (e.g. https://dvt1.aastar.io) is ONE DVT node whose\n    // registered `apiEndpoint` is its INTERNAL address (http://localhost:400x) — NOT reachable from an SDK\n    // consumer. So we treat each SEED URL as the node's external apiEndpoint and iterate ALL seeds (the\n    // old logic returned only the first seed's peer list → 1 localhost node → Tier-3 (needs >= 2) couldn't\n    // aggregate).\n    //\n    // #258 review H1: dedupe by the EXTERNAL ENDPOINT, NEVER by a peer nodeId. The DVT has no self-identity\n    // endpoint, and /gossip/peers is not guaranteed self-first, so picking a peer's nodeId as \"this seed's\n    // identity\" can be wrong; keying nodes by that nodeId would then blacklist and silently drop a correct\n    // seed. The nodeId here is ADVISORY metadata only — the authoritative per-node nodeId used for BLS\n    // aggregation comes from each /signature/sign RESPONSE (see _coordinateBlsAggregate), so a best-effort\n    // value cannot corrupt aggregation.\n    const nodes: BLSNode[] = [];\n    const seenEndpoints = new Set<string>();\n\n    for (const seedEndpoint of seedNodes) {\n      const endpoint = seedEndpoint.replace(/\\/+$/, \"\");\n      if (seenEndpoints.has(endpoint)) continue;\n      try {\n        const response = await axios.get(`${endpoint}/gossip/peers`, { timeout: discoveryTimeout });\n        const peers: Array<{ status?: string; nodeId?: string; nodeName?: string; publicKey?: string }> =\n          response.data.peers || [];\n        // Require at least one ACTIVE BLS identity (nodeId + publicKey) so we don't add a dead endpoint.\n        // Best-effort self identity: when the node reports a single active peer (the current DVT deployment)\n        // it is unambiguous; otherwise the first active is advisory (authoritative nodeId comes from signing).\n        const active = peers.filter((p) => p.status === \"active\" && p.nodeId && p.publicKey);\n        if (active.length === 0) continue;\n        const self = active[0];\n        seenEndpoints.add(endpoint);\n        nodes.push({\n          index: nodes.length + 1, // 1-based ordering\n          nodeId: self.nodeId,\n          nodeName: self.nodeName,\n          apiEndpoint: endpoint, // EXTERNAL seed URL, NOT the peer's localhost apiEndpoint\n          status: \"active\",\n          publicKey: self.publicKey,\n        } as BLSNode);\n      } catch {\n        continue; // seed unreachable — try the next\n      }\n    }\n\n    return nodes;\n  }\n\n  /**\n   * Helper to pack the full signature for ERC-4337 UserOp\n   * Format: [nodeIdsLength][nodeIds...][blsSignature][messagePoint][aaSignature][messagePointSignature]\n   */\n  packSignature(data: BLSSignatureData): string {\n    // Delegates to the proven byte-exact viem implementation.\n    return packSignatureViem(data);\n  }\n\n  /**\n   * Calculate the MessagePoint G2 point for a given message (UserOpHash)\n   */\n  async generateMessagePoint(message: string | Uint8Array): Promise<string> {\n    // Delegates to the proven byte-exact viem implementation.\n    return generateMessagePointViem(message);\n  }\n\n  /**\n   * Pack cumulative Tier 2 signature (algId 0x04): P256 + BLS.\n   *\n   * Format:\n   *   [algId=0x04 (1)] [P256 r (32)] [P256 s (32)]\n   *   [nodeIdsLength (32)] [nodeIds (N×32)]\n   *   [blsAggregateSig (256)] [messagePoint (256)]\n   *   [messagePointECDSA (65)]\n   */\n  packCumulativeT2Signature(data: CumulativeT2SignatureData): string {\n    // Delegates to the proven byte-exact viem implementation.\n    return packCumulativeT2SignatureViem(data);\n  }\n\n  /**\n   * Pack cumulative Tier 3 signature (algId 0x05): P256 + BLS + Guardian.\n   *\n   * Format:\n   *   [algId=0x05 (1)] [P256 r (32)] [P256 s (32)]\n   *   [nodeIdsLength (32)] [nodeIds (N×32)]\n   *   [blsAggregateSig (256)] [messagePoint (256)]\n   *   [messagePointECDSA (65)] [guardianECDSA (65)]\n   */\n  packCumulativeT3Signature(data: CumulativeT3SignatureData): string {\n    // Delegates to the proven byte-exact viem implementation.\n    return packCumulativeT3SignatureViem(data);\n  }\n\n  /**\n   * @deprecated REMOVED behavior — do not use. This posted an untagged `{ message }` to `/signature/sign`,\n   * which the DVT (YetAnotherAA-Validator v1.7+) no longer accepts: it now requires `{ userOp, ownerAuth }`\n   * where `ownerAuth` is a TAG-prefixed owner authorization (0x01 ECDSA / 0x02 device-passkey) verified via\n   * `account.isValidOwnerAuth` (#257/#261). There is no live caller. Sending `{ message }` to a v1.7+ node\n   * fails owner-authorization, so this throws instead of silently hitting a rejection. Use the\n   * TransferManager path (`_coordinateBlsAggregate` builds the tagged request via `buildDvtRequest`).\n   */\n  async requestNodeSignature(\n    _node: BLSNode,\n    _message: string\n  ): Promise<{ signature: string; publicKey: string }> {\n    throw new Error(\n      \"BLSManager.requestNodeSignature is removed: the DVT (v1.7+) requires a tagged { userOp, ownerAuth } \" +\n        \"request (isValidOwnerAuth, #257/#261), not { message }. Use the TransferManager transfer flow, \" +\n        \"which builds the tagged owner-authorization via buildDvtRequest / _coordinateBlsAggregate.\"\n    );\n  }\n\n  /**\n   * Request aggregation from a node\n   */\n  async aggregateSignatures(node: BLSNode, signatures: string[]): Promise<string> {\n    const response = await axios.post(`${node.apiEndpoint}/signature/aggregate`, {\n      signatures,\n    });\n\n    const sig = response.data.signature;\n    return sig.startsWith(\"0x\") ? sig : `0x${sig}`;\n  }\n}\n","import { PasskeyManager, PasskeyRoutes } from \"./auth/passkey/passkey.manager\";\nimport { BLSManager } from \"./core/bls/bls.manager\";\nimport { BLSConfig } from \"./core/bls/types\";\n\nexport interface AirAccountConfig {\n  /**\n   * Backend RP (relying party) API URL — required, no default.\n   *\n   * AAStar's official hosted RP will be `https://auth.aastar.io` (served by\n   * aNode, see AAStarCommunity/YetAnotherAA-Validator#81). You can also point\n   * this at your own backend implementing the standardized passkey contract\n   * (see `@aastar/passkey-server` / {@link PasskeyRoutes}).\n   */\n  apiURL: string;\n  /** Function to get the current auth token (JWT) */\n  tokenProvider?: () => string | null;\n  /**\n   * Optional overrides for the passkey backend route paths.\n   *\n   * Defaults to the standardized `@aastar/passkey-server` contract\n   * (`/auth/passkey/*`). Override individual paths to point at a backend that\n   * exposes different routes without changing SDK code.\n   */\n  passkeyRoutes?: Partial<PasskeyRoutes>;\n  /** BLS Configuration */\n  bls: BLSConfig;\n}\n\nexport class AirAccountClient {\n  readonly passkey: PasskeyManager;\n  readonly bls: BLSManager;\n\n  constructor(private config: AirAccountConfig) {\n    // Initialize modules\n    this.passkey = new PasskeyManager(\n      config.apiURL,\n      config.tokenProvider,\n      config.passkeyRoutes\n    );\n    this.bls = new BLSManager(config.bls);\n  }\n}\n\n/**\n * @deprecated Renamed to {@link AirAccountConfig}. This alias is kept for\n * backward compatibility and will be removed in a future major version.\n */\nexport type YAAAConfig = AirAccountConfig;\n\n/**\n * @deprecated Renamed to {@link AirAccountClient}. This alias is kept for\n * backward compatibility and will be removed in a future major version.\n */\nexport const YAAAClient = AirAccountClient;\n","import type { PackedUserOperation } from \"../types\";\n\nexport class ERC4337Utils {\n  static packAccountGasLimits(\n    verificationGasLimit: bigint | string,\n    callGasLimit: bigint | string\n  ): string {\n    const vgl = BigInt(verificationGasLimit);\n    const cgl = BigInt(callGasLimit);\n    const packed = (vgl << 128n) | cgl;\n    return \"0x\" + packed.toString(16).padStart(64, \"0\");\n  }\n\n  static unpackAccountGasLimits(accountGasLimits: string): {\n    verificationGasLimit: bigint;\n    callGasLimit: bigint;\n  } {\n    const packed = BigInt(accountGasLimits);\n    return {\n      verificationGasLimit: packed >> 128n,\n      callGasLimit: packed & ((1n << 128n) - 1n),\n    };\n  }\n\n  static packGasFees(maxPriorityFeePerGas: bigint | string, maxFeePerGas: bigint | string): string {\n    const priority = BigInt(maxPriorityFeePerGas);\n    const max = BigInt(maxFeePerGas);\n    const packed = (priority << 128n) | max;\n    return \"0x\" + packed.toString(16).padStart(64, \"0\");\n  }\n\n  static unpackGasFees(gasFees: string): {\n    maxPriorityFeePerGas: bigint;\n    maxFeePerGas: bigint;\n  } {\n    const packed = BigInt(gasFees);\n    return {\n      maxPriorityFeePerGas: packed >> 128n,\n      maxFeePerGas: packed & ((1n << 128n) - 1n),\n    };\n  }\n\n  static packUserOperation(userOp: any): PackedUserOperation {\n    return {\n      sender: userOp.sender,\n      nonce: userOp.nonce,\n      initCode: userOp.initCode || \"0x\",\n      callData: userOp.callData,\n      accountGasLimits: ERC4337Utils.packAccountGasLimits(\n        userOp.verificationGasLimit,\n        userOp.callGasLimit\n      ),\n      preVerificationGas: userOp.preVerificationGas,\n      gasFees: ERC4337Utils.packGasFees(userOp.maxPriorityFeePerGas, userOp.maxFeePerGas),\n      paymasterAndData: userOp.paymasterAndData || \"0x\",\n      signature: userOp.signature || \"0x\",\n    };\n  }\n\n  static unpackUserOperation(packedOp: PackedUserOperation): any {\n    const gasLimits = ERC4337Utils.unpackAccountGasLimits(packedOp.accountGasLimits);\n    const gasFees = ERC4337Utils.unpackGasFees(packedOp.gasFees);\n\n    return {\n      sender: packedOp.sender,\n      nonce: packedOp.nonce,\n      initCode: packedOp.initCode,\n      callData: packedOp.callData,\n      callGasLimit: \"0x\" + gasLimits.callGasLimit.toString(16),\n      verificationGasLimit: \"0x\" + gasLimits.verificationGasLimit.toString(16),\n      preVerificationGas: packedOp.preVerificationGas,\n      maxFeePerGas: \"0x\" + gasFees.maxFeePerGas.toString(16),\n      maxPriorityFeePerGas: \"0x\" + gasFees.maxPriorityFeePerGas.toString(16),\n      paymasterAndData: packedOp.paymasterAndData,\n      signature: packedOp.signature,\n    };\n  }\n}\n","/**\n * viem reimplementation of the ethers ABI-encoding helpers used across\n * @aastar/airaccount.\n *\n * Original ethers call sites (UNTOUCHED):\n *   - core/erc4337/userop.builder.ts  : ethers.AbiCoder.defaultAbiCoder().encode(...)\n *   - server/services/force-exit-service.ts : ...encode([\"uint8\"], [l2Type])\n *   - core/bls/bls.manager.ts         : ethers.solidityPacked(...)\n *   - server/utils/oapd.ts            : ethers.solidityPacked([\"address\",\"string\"], ...)\n *   - server/services/module-manager.ts / account-manager.ts : ethers.solidityPacked(...)\n *\n * This module is a NEW, parallel implementation built on viem. It does not\n * modify any existing file.\n *\n * Mapping:\n *   ethers.AbiCoder.defaultAbiCoder().encode(types, values)\n *     -> encodeAbiParams(types, values)  (viem encodeAbiParameters + parseAbiParameters)\n *   ethers.AbiCoder.defaultAbiCoder().decode(types, data)\n *     -> decodeAbiParams(types, data)    (viem decodeAbiParameters + parseAbiParameters)\n *   ethers.solidityPacked(types, values)\n *     -> solidityPacked(types, values)   (viem encodePacked)\n */\nimport {\n  encodeAbiParameters,\n  decodeAbiParameters,\n  parseAbiParameters,\n  encodePacked,\n  type Hex,\n} from \"viem\";\n\n/**\n * Equivalent of ethers `AbiCoder.defaultAbiCoder().encode(types, values)`.\n *\n * `types` is the ethers-style array of solidity type strings, e.g.\n * `[\"address\", \"uint256\", \"bytes32\"]`. They are joined into a viem\n * `parseAbiParameters` string. viem accepts both `number` and `bigint` for\n * integer types, matching ethers' tolerance.\n */\nexport function encodeAbiParams(types: readonly string[], values: readonly unknown[]): Hex {\n  const params = parseAbiParameters(types.join(\", \"));\n  return encodeAbiParameters(params, values as unknown[]);\n}\n\n/**\n * Equivalent of ethers `AbiCoder.defaultAbiCoder().decode(types, data)`.\n * Returns a plain array of decoded values (ethers returns a Result, which is\n * array-like; element values are equivalent: bigint for ints, checksummed\n * address strings, lowercase hex for bytes).\n */\nexport function decodeAbiParams(types: readonly string[], data: Hex): readonly unknown[] {\n  const params = parseAbiParameters(types.join(\", \"));\n  return decodeAbiParameters(params, data) as readonly unknown[];\n}\n\n/**\n * Equivalent of ethers `solidityPacked(types, values)` (non-standard packed\n * encoding). viem's `encodePacked` takes the same shape: a types array and a\n * matching values array.\n *\n * Note: unlike ethers, viem's integer values for packed encoding are happiest\n * as `bigint`, but `number` is also accepted. Fixed `bytesN` are right-padded\n * within N bytes and `bytes`/`string` are appended raw — identical to ethers.\n */\nexport function solidityPacked(types: readonly string[], values: readonly unknown[]): Hex {\n  return encodePacked(types as string[], values as unknown[]);\n}\n","// Viem reimplementation of the ethers \"Hashing & selectors\" surface used by\n// @aastar/airaccount. This is a NEW, parallel module — the original ethers code\n// is left untouched. Faithful, byte-for-byte equivalents are proven by the\n// companion `hashing.parity.test.ts`.\n//\n// SEMANTIC MAP (ethers -> viem):\n//   ethers.id(str)            === keccak256(stringToBytes(str))   [UTF-8, NOT hex]\n//   ethers.keccak256(hex)     === keccak256(hex)                  [hex bytes in/out]\n//   ethers.toUtf8Bytes(str)   === stringToBytes(str)              [UTF-8 encode]\n//   4-byte function selector  === toFunctionSelector(signature)   == id(sig).slice(0,10)\n//\n// CRITICAL TRAP: ethers.id / ethers.toUtf8Bytes ALWAYS treat their argument as a\n// UTF-8 string. The viem equivalent is `stringToBytes`, NOT `toBytes`: `toBytes`\n// interprets a \"0x...\"-looking string as hex (so toBytes(\"0xdeadbeef\") -> 4 bytes,\n// while toUtf8Bytes(\"0xdeadbeef\") -> the 10 UTF-8 bytes of the literal text).\n// Likewise the selector is keccak256 of the UTF-8 signature bytes — never\n// keccak256(\"0x\" + signature).\n\nimport {\n  keccak256 as viemKeccak256,\n  stringToBytes,\n  toFunctionSelector,\n  type Hex,\n} from \"viem\";\n\n/**\n * Equivalent of `ethers.id(value)`: keccak256 of the UTF-8 bytes of `value`.\n * Returns a 0x-prefixed 32-byte hash. Commonly sliced to 10 chars for a 4-byte\n * function selector or used for event topic hashing.\n */\nexport function id(value: string): Hex {\n  return viemKeccak256(stringToBytes(value));\n}\n\n/**\n * Equivalent of `ethers.keccak256(data)` for hex-string input: keccak256 of the\n * raw bytes encoded by the 0x-prefixed hex string. Accepts a viem `Hex` or a\n * `Uint8Array` (matching ethers' `BytesLike`). Returns a 0x-prefixed 32-byte hash.\n */\nexport function keccak256(data: Hex | Uint8Array): Hex {\n  return viemKeccak256(data);\n}\n\n/**\n * Equivalent of `ethers.toUtf8Bytes(str)`: UTF-8 encode a string to a Uint8Array.\n * Uses viem `stringToBytes` (UTF-8), NOT `toBytes` (which would hex-decode a\n * \"0x...\"-looking string).\n */\nexport function toUtf8Bytes(str: string): Uint8Array {\n  return stringToBytes(str);\n}\n\n/**\n * 4-byte function selector for a Solidity function signature, equivalent to\n * `ethers.id(signature).slice(0, 10)`. Returns the 0x-prefixed 4-byte (10-char) hex.\n *\n * Implemented via viem `toFunctionSelector`, which produces identical output to the\n * id-and-slice form for canonical signatures (verified in the parity test for both\n * simple and tuple-argument signatures).\n */\nexport function functionSelector(signature: string): Hex {\n  return toFunctionSelector(signature);\n}\n\n/**\n * Selector via the literal `ethers.id(sig).slice(0, 10)` pattern, exposed so call\n * sites that currently do `ethers.id(sig).slice(0, 10)` can migrate verbatim\n * without depending on viem's signature normalization.\n */\nexport function selectorFromId(signature: string): Hex {\n  return id(signature).slice(0, 10) as Hex;\n}\n","import type { Hex } from \"viem\";\nimport { encodeAbiParams } from \"../../migration/viem/abi-encoding\";\nimport { keccak256 } from \"../../migration/viem/hashing\";\nimport type { PackedUserOperation, UserOperation } from \"../types\";\n\nexport class UserOpBuilder {\n  // Basic defaults\n  private static DEFAULT_VERIFICATION_GAS_LIMIT = 100000n;\n  private static DEFAULT_PRE_VERIFICATION_GAS = 21000n;\n  private static DEFAULT_MAX_FEE_PER_GAS = 1000000000n; // 1 gwei\n  private static DEFAULT_MAX_PRIORITY_FEE_PER_GAS = 1000000000n; // 1 gwei\n\n  constructor() {}\n\n  /**\n   * Build specific parts of a UserOperation\n   * Note: Full construction often requires chain interaction (nonce, gas price),\n   * which typically happens in the application layer or via a Provider wrapper.\n   * This builder focuses on formatting and structure.\n   */\n  async buildUserOp(params: {\n    sender: string;\n    callData: string;\n    nonce?: bigint;\n    initCode?: string;\n    callGasLimit?: bigint;\n    verificationGasLimit?: bigint;\n    preVerificationGas?: bigint;\n    maxFeePerGas?: bigint;\n    maxPriorityFeePerGas?: bigint;\n    paymasterAndData?: string;\n    signature?: string;\n  }): Promise<UserOperation> {\n    return {\n      sender: params.sender,\n      nonce: params.nonce || 0n,\n      initCode: params.initCode || \"0x\",\n      callData: params.callData,\n      callGasLimit: params.callGasLimit || 0n, // Should be estimated\n      verificationGasLimit:\n        params.verificationGasLimit || UserOpBuilder.DEFAULT_VERIFICATION_GAS_LIMIT,\n      preVerificationGas: params.preVerificationGas || UserOpBuilder.DEFAULT_PRE_VERIFICATION_GAS,\n      maxFeePerGas: params.maxFeePerGas || UserOpBuilder.DEFAULT_MAX_FEE_PER_GAS,\n      maxPriorityFeePerGas:\n        params.maxPriorityFeePerGas || UserOpBuilder.DEFAULT_MAX_PRIORITY_FEE_PER_GAS,\n      paymasterAndData: params.paymasterAndData || \"0x\",\n      signature: params.signature || \"0x\",\n    };\n  }\n\n  /**\n   * Hash the UserOperation for signing (ERC-4337 v0.7)\n   */\n  getUserOpHash(userOp: PackedUserOperation, entryPoint: string, chainId: number): string {\n    const encoded = encodeAbiParams(\n      [\"address\", \"uint256\", \"bytes32\", \"bytes32\", \"bytes32\", \"uint256\", \"bytes32\", \"bytes32\"],\n      [\n        userOp.sender,\n        userOp.nonce,\n        keccak256(userOp.initCode as Hex),\n        keccak256(userOp.callData as Hex),\n        userOp.accountGasLimits,\n        userOp.preVerificationGas,\n        userOp.gasFees,\n        keccak256(userOp.paymasterAndData as Hex),\n      ]\n    );\n\n    return keccak256(\n      encodeAbiParams(\n        [\"bytes32\", \"address\", \"uint256\"],\n        [keccak256(encoded), entryPoint, BigInt(chainId)]\n      )\n    );\n  }\n\n  // Legacy v0.6 hashing support could be added here if needed\n}\n","import {\n  TierLevel,\n  TierConfig,\n  AlgId,\n  ALG_ECDSA,\n  ALG_CUMULATIVE_T2,\n  ALG_CUMULATIVE_T3,\n  ALG_CUMULATIVE_T2_WA,\n  ALG_CUMULATIVE_T3_WA,\n} from \"./types\";\n\n/**\n * Determine the required tier for a given transaction value.\n *\n * - Tier 1: value <= tier1Limit — single ECDSA or P256 passkey\n * - Tier 2: tier1Limit < value <= tier2Limit — P256 + BLS aggregate\n * - Tier 3: value > tier2Limit — P256 + BLS + Guardian ECDSA\n *\n * If both limits are 0 (no enforcement), always returns Tier 1.\n */\nexport function resolveTier(value: bigint, config: TierConfig): TierLevel {\n  if (config.tier1Limit === 0n && config.tier2Limit === 0n) return 1;\n  if (config.tier1Limit > 0n && value <= config.tier1Limit) return 1;\n  if (config.tier2Limit > 0n && value <= config.tier2Limit) return 2;\n  return 3;\n}\n\n/**\n * Determine the required tier for an ERC-20 **token** transfer. This mirrors the on-chain GUARD\n * (`AAStarGlobalGuard.recordTokenSpend`), whose per-token semantics DIFFER from the account's\n * `requiredTier` at `tier2Limit == 0`: the guard treats a zero tier2Limit as an UNCAPPED Tier-2\n * (`cfg.tier2Limit == 0 || cumulative <= cfg.tier2Limit` → T2), whereas the account (and\n * {@link resolveTier}) fall through to Tier-3. A valid token config may set `tier1Limit > 0,\n * tier2Limit == 0` (T1-capped, T2-uncapped; `_validateTokenConfig` only requires `daily >= tier1`).\n * Use this for the token path; use {@link resolveTier} for ETH/account-tier decisions.\n */\nexport function resolveTokenTier(value: bigint, config: TierConfig): TierLevel {\n  if (config.tier1Limit === 0n && config.tier2Limit === 0n) return 1;\n  if (config.tier1Limit > 0n && value <= config.tier1Limit) return 1;\n  if (config.tier2Limit === 0n || value <= config.tier2Limit) return 2;\n  return 3;\n}\n\n/**\n * Get the algorithm ID to use for a given tier.\n *\n * `webAuthn` selects the device-passkey (WebAuthn) cumulative variant for Tier-2/3 — the account\n * approves (and validateUserOp enforces) the EXACT signing algId, and the WebAuthn path signs\n * `0x09`/`0x0a`, NOT the raw-P256 `0x04`/`0x05`. A guard/pre-flight that queries the wrong algId gives a\n * false \"algorithm not approved\" on device-passkey accounts (#256). Tier-1 is always ECDSA `0x02`\n * (`useWebAuthnPasskey` applies to Tier-2/3 only — the device passkey is the composite P256 factor).\n *\n * - Tier 1: ALG_ECDSA (0x02) — single ECDSA, packed [0x02][r][s][v] (66 bytes); v0.25.0 requires the prefix (#273)\n * - Tier 2: raw ALG_CUMULATIVE_T2 (0x04) · WebAuthn ALG_CUMULATIVE_T2_WA (0x09)\n * - Tier 3: raw ALG_CUMULATIVE_T3 (0x05) · WebAuthn ALG_CUMULATIVE_T3_WA (0x0a)\n */\nexport function algIdForTier(tier: TierLevel, webAuthn = false): AlgId {\n  switch (tier) {\n    case 1:\n      return ALG_ECDSA;\n    case 2:\n      return webAuthn ? ALG_CUMULATIVE_T2_WA : ALG_CUMULATIVE_T2;\n    case 3:\n      return webAuthn ? ALG_CUMULATIVE_T3_WA : ALG_CUMULATIVE_T3;\n  }\n}\n","/**\n * resolveTransfer — the unified \"what does THIS transfer need?\" decision API (aastar-sdk#176).\n *\n * A consumer (YAA) must not hand-judge the tier or read raw limits. It calls `resolveTransfer` once\n * and gets the branch: which tier, which signatures to collect (passkey / +BLS / +guardian), the\n * limits behind the decision, and any hard block. Works for ETH AND any ERC-20, because the two\n * INDEPENDENT on-chain mechanisms are combined here:\n *\n *   1. Tier (decides the SIGNATURES; Tier 3 = a guardian co-sign is REQUIRED). ETH uses the ACCOUNT\n *      tier (`AAStarAirAccountV7.requiredTier` → resolveTier); an ERC-20 uses the GUARD's per-token\n *      tier (`AAStarGlobalGuard.recordTokenSpend` → resolveTokenTier), which differs at tier2Limit==0\n *      (uncapped Tier-2, not Tier-3). Both evaluated against cumulative daily spend.\n *   2. Guard daily allowance (`AAStarGlobalGuard`): ETH `dailyLimit`/`remainingDailyAllowance`, or a\n *      token's `tokenConfigs[token]` + `tokenTodaySpent`. This is a SEPARATE, HARD cap —\n *      `Guard.recordSpend` reverts `DailyLimitExceeded` and a guardian does NOT bypass it. So\n *      exceeding it is a `blockReason` (the transfer cannot succeed as-is), NOT a tier promotion.\n *\n * So `tier`/`requiredSigs` come from the account tier; `blockReason` flags a hard daily-limit block.\n * Read-only + browser-safe.\n *\n * NOTE on signatures: this returns what the on-chain `validateUserOp` will REQUIRE. Collecting them\n * (passkey assertion, DVT-BLS from the signer network, guardian ECDSA) + assembling the UserOp is the\n * prepare/submit flow's job; `resolveTransfer` is the planner that drives fail-fast (don't submit\n * until `requiredSigs` are all gathered).\n */\nimport { type Address, type Hex } from 'viem';\nimport { AAStarAirAccountV7ABI, GuardClient, PolicyRegistryABI } from '@aastar/core';\nimport { resolveTier, resolveTokenTier } from './tier-router.js';\nimport type { TierLevel } from './types.js';\n\nconst ZERO = '0x0000000000000000000000000000000000000000';\n\n/** Signatures the chosen tier requires. */\nexport interface RequiredSigs {\n  /** Always true — the device passkey (P-256) signs every tier. */\n  passkey: true;\n  /** Tier ≥ 2 needs the DVT-BLS aggregate signature. */\n  bls: boolean;\n  /** Tier 3 needs this many guardian ECDSA co-signatures (1 for a normal T3 transfer). */\n  guardian: number;\n}\n\n/** The limits behind the decision (for the resolved asset). */\nexport interface TransferLimits {\n  tier1Limit: bigint;\n  tier2Limit: bigint;\n  dailyLimit: bigint;\n  todaySpent: bigint;\n  remaining: bigint;\n}\n\nexport interface TransferResolution {\n  tier: TierLevel;\n  requiredSigs: RequiredSigs;\n  /** `'ETH'` for the native asset, else the ERC-20 token address. */\n  asset: 'ETH' | Address;\n  limits: TransferLimits;\n  /**\n   * Whether AT LEAST ONE limit (tier1/tier2 or daily) is actually enforced for this asset. `false`\n   * means nothing is enforced (no guard, or guard present but all limits 0, or an ERC-20 with no\n   * tokenConfig) — so a `tier:1` result then reflects \"unprotected\", not \"small amount\". Computed the\n   * same way for ETH and ERC-20.\n   */\n  hasGuard: boolean;\n  /** Why this tier was chosen (account-tier vs guard daily overage). */\n  reason: string;\n  /** Set when the transfer is hard-blocked before signing (e.g. strict-mode unconfigured token). */\n  blockReason?: string;\n  /**\n   * Layer-1 on-chain policy preview (only when `policyRegistry` is passed). `willPass=false` means the\n   * DVT signer will reject this transfer at the on-chain gate — warn the user before submitting. The\n   * Layer-2 node gate + out-of-band confirmation are NOT previewed here (signer-side).\n   */\n  policy?: { willPass: boolean; decision: number; limitValue: bigint };\n}\n\n/** Minimal read surface (decouples from viem's PublicClient generic). */\ninterface ReadClient {\n  readContract(args: { address: Address; abi: unknown; functionName: string; args?: readonly unknown[] }): Promise<unknown>;\n}\n\n/** Single source of truth for the tier → required-signatures mapping (weights: passkey≥T1, +BLS≥T2, +guardian≥T3). */\nexport const sigsForTier = (t: TierLevel): RequiredSigs => ({ passkey: true, bls: t >= 2, guardian: t >= 3 ? 1 : 0 });\n\nexport interface ResolveTransferParams {\n  client: ReadClient;\n  /** The AirAccount (smart account) address. */\n  account: Address;\n  /** Transfer amount in the asset's base units (wei for ETH, token decimals for ERC-20). */\n  amount: bigint;\n  /** ERC-20 token address; omit or `'ETH'` for the native asset. */\n  token?: Address | 'ETH';\n  /** Guard address; if omitted it's read from `account.guard()`. */\n  guard?: Address;\n  /**\n   * Layer-1 PolicyRegistry address. If given, the result includes a `policy` PREVIEW of the on-chain\n   * per-account policy the DVT signer checks before signing (`checkPolicy`). NOTE: this previews only\n   * Layer-1 (on-chain). The DVT node's Layer-2 env (operator allowlist / perTxMax) and out-of-band\n   * confirmation are signer-side and surface in the signer's response, not here.\n   */\n  policyRegistry?: Address;\n  /** Transfer target (recipient/contract). REQUIRED for the policy preview — without it the preview\n   *  is skipped (previewing a self-transfer would give a misleading willPass=true). */\n  target?: Address;\n  /** Call selector for the policy preview. Default: ETH `0x00000000`, ERC-20 `0xa9059cbb` (transfer). */\n  selector?: Hex;\n}\n\nexport async function resolveTransfer(params: ResolveTransferParams): Promise<TransferResolution> {\n  const { client, account, amount } = params;\n  const isEth = !params.token || params.token === 'ETH';\n  const token = isEth ? undefined : (params.token as Address);\n\n  const readAccount = (fn: string, args: readonly unknown[] = []) =>\n    client.readContract({ address: account, abi: AAStarAirAccountV7ABI, functionName: fn, args });\n\n  const guardAddr = params.guard ?? ((await readAccount('guard')) as Address);\n  const hasGuard = !!guardAddr && guardAddr.toLowerCase() !== ZERO;\n\n  let tier1Limit = 0n;\n  let tier2Limit = 0n;\n  let dailyLimit = 0n;\n  let todaySpent = 0n;\n  let blockReason: string | undefined;\n\n  if (isEth) {\n    const [t1, t2] = await Promise.all([readAccount('tier1Limit'), readAccount('tier2Limit')]);\n    tier1Limit = BigInt(t1 as bigint);\n    tier2Limit = BigInt(t2 as bigint);\n    if (hasGuard) {\n      const cfg = await new GuardClient(client, guardAddr).getConfig();\n      dailyLimit = cfg.dailyLimit;\n      todaySpent = cfg.todaySpent;\n    }\n  } else if (hasGuard) {\n    const guard = new GuardClient(client, guardAddr);\n    const [tc, spent, cfg] = await Promise.all([\n      guard.getTokenConfig(token!),\n      guard.getTokenTodaySpent(token!),\n      guard.getConfig(),\n    ]);\n    tier1Limit = tc.tier1Limit;\n    tier2Limit = tc.tier2Limit;\n    dailyLimit = tc.dailyLimit;\n    todaySpent = spent;\n    // Strict mode blocks tokens with no config at all.\n    if (cfg.strictMode && tier1Limit === 0n && tier2Limit === 0n && dailyLimit === 0n) {\n      blockReason = 'strict mode is on and this token has no Guard config — add a tokenConfig first';\n    }\n  }\n  // `assetGuarded` = at least one limit (tier OR daily) is actually enforced for THIS asset — same\n  // check for ETH and ERC-20. A guard that exists but has dailyLimit=0 AND no tier limits is NOT\n  // enforcing anything, so this is false (so `tier:1 + hasGuard:false` reads as \"unprotected\").\n  const assetGuarded = tier1Limit !== 0n || tier2Limit !== 0n || dailyLimit !== 0n;\n  // Unified remaining (same formula for ETH and ERC-20; fail-closed — never negative).\n  const remaining = dailyLimit > todaySpent ? dailyLimit - todaySpent : 0n;\n\n  // The required tier (which signatures) comes from the tier limits, evaluated against the CUMULATIVE\n  // daily spend (`todaySpent + amount`), NOT this transfer alone — the account's `_enforceGuard`\n  // computes `requiredTier(guard.todaySpent() + value)` (AAStarAirAccountBase.sol), so judging on\n  // `amount` alone under-estimates the tier and reverts with InsufficientTier. A guardian co-sign is\n  // enabled at Tier 3. NOTE: ETH uses the account's `requiredTier` semantics (resolveTier), but the\n  // ERC-20 path is enforced by the GUARD's `recordTokenSpend`, which differs at `tier2Limit == 0`\n  // (uncapped Tier-2, not Tier-3) — use resolveTokenTier so the SDK matches on-chain enforcement.\n  const cumulative = todaySpent + amount;\n  const tier = isEth\n    ? resolveTier(cumulative, { tier1Limit, tier2Limit })\n    : resolveTokenTier(cumulative, { tier1Limit, tier2Limit });\n\n  // The Guard daily allowance is a SEPARATE, HARD cap — `Guard.recordSpend` reverts\n  // `DailyLimitExceeded` when `todaySpent + amount > dailyLimit`, and a guardian does NOT bypass it\n  // (verified in AAStarGlobalGuard.sol). So exceeding it is a BLOCK, not a tier-3 promotion. The\n  // Guard daily limit is monotonic — it can only be LOWERED — so the only remedy is the daily reset.\n  if (dailyLimit > 0n && amount > remaining && !blockReason) {\n    blockReason =\n      `exceeds the ${isEth ? 'ETH' : 'token'} daily allowance (remaining ${remaining} of ${dailyLimit}); ` +\n      `the Guard hard-reverts over-limit spends (a guardian does not bypass it, and the daily limit ` +\n      `can only be lowered) — wait for the daily window to reset`;\n  }\n\n  const reason =\n    tier === 3\n      ? `cumulative spend (${cumulative}) exceeds tier2Limit (${tier2Limit}) — guardian co-sign required`\n      : tier === 2\n        ? `cumulative spend (${cumulative}) exceeds tier1Limit (${tier1Limit})`\n        : tier1Limit === 0n && tier2Limit === 0n\n          ? 'no tier limits configured — passkey only'\n          : `cumulative spend (${cumulative}) within tier1Limit (${tier1Limit})`;\n\n  // Optional Layer-1 policy preview (what the DVT signer checks on-chain before signing).\n  // REQUIRES an explicit `target`: previewing against the account itself (a self-transfer) would\n  // typically pass and yield a dangerous FALSE-POSITIVE willPass=true (#186 Med-B). Best-effort —\n  // a registry read failure must NOT break the core tier/guard decision (#186 Med-A).\n  let policy: TransferResolution['policy'];\n  if (params.policyRegistry && params.target) {\n    try {\n      // For an ERC-20 transfer the call is `transfer(to,amount)` (selector 0xa9059cbb); a native ETH\n      // transfer carries no selector (0x00000000). Caller can override.\n      const selector = params.selector ?? (isEth ? '0x00000000' : '0xa9059cbb');\n      const r = (await client.readContract({\n        address: params.policyRegistry,\n        abi: PolicyRegistryABI,\n        functionName: 'checkPolicy',\n        args: [account, params.target, isEth ? (ZERO as Address) : token!, amount, selector],\n      })) as any;\n      const [decision, limitValue] = Array.isArray(r) ? r : [r[0], r[1]];\n      policy = { willPass: Number(decision) === 0, decision: Number(decision), limitValue: BigInt(limitValue) };\n    } catch {\n      policy = undefined; // preview unavailable (registry read failed) — never break the core result\n    }\n  }\n\n  return {\n    tier,\n    requiredSigs: sigsForTier(tier),\n    asset: isEth ? 'ETH' : token!,\n    limits: { tier1Limit, tier2Limit, dailyLimit, todaySpent, remaining },\n    hasGuard: assetGuarded,\n    reason,\n    blockReason,\n    policy,\n  };\n}\n","/**\n * Account tier PROFILES + tier-config encoders (aastar-sdk#176 phase 3).\n *\n * Both factory paths (`createAccount`, `createAccountWithDefaults`) leave the account's tier amount\n * thresholds (`tier1Limit`/`tier2Limit`) and weight config at 0 — so `requiredTier` stays 0 and the\n * weighted path reverts `WeightConfigNotInitialized`. The contract has a single `_buildDefaultConfig`,\n * so the per-user \"profile → limits + weights\" choice lives HERE, in the SDK (#176 补2/补3). After\n * `createAccountWithDefaults`, run {@link profileSetupCalls} (setTierLimits + setWeightConfig) to\n * actually arm the tiers — otherwise tiering is silently off (the #176 root cause).\n *\n * The encoders return an {@link AccountCall} (`{ to, value, data }`). IMPORTANT: `setTierLimits`,\n * `setWeightConfig`, `addGuardian` and `modifyTierLimitsWithGuardians` are all STRICT `onlyOwner`\n * (`msg.sender == owner`), NOT `onlyOwnerOrEntryPoint` — so they CANNOT be sent as a 4337 UserOp\n * (routing through the EntryPoint makes `msg.sender` the EntryPoint and reverts `NotOwner`), nor via\n * `account.execute` (that makes `msg.sender` the account). They must be a DIRECT tx FROM the owner key\n * (`{ to: account, data }`, `msg.sender == owner`). For a KMS/TEE-owned account the owner is a TEE-held\n * secp256k1 key, so the KMS signs + broadcasts the owner tx. RAISING limits later additionally needs\n * guardian co-signatures — see {@link encodeModifyTierLimitsWithGuardians}. Browser-safe (viem-only).\n */\nimport { type Address, type Hex, parseEther, encodeFunctionData, encodeAbiParameters, keccak256 } from 'viem';\nimport { AAStarAirAccountV7ABI, GUARDIAN_SIG_VERSION, opDataModifyTierLimits } from '@aastar/core';\n\n/** A call the account OWNER sends as a DIRECT tx (`msg.sender == owner`) — NOT a UserOp/EntryPoint/\n *  `execute` (these targets are strict `onlyOwner` and would revert `NotOwner` otherwise). */\nexport interface AccountCall {\n  to: Address;\n  value: bigint;\n  data: Hex;\n}\n\n/**\n * The on-chain weight model: passkey=2, owner ECDSA=2, DVT-BLS=2, each guardian=1; tier thresholds\n * 3/5/6. Profiles vary the AMOUNT limits, not the weights. Exposed so callers can confirm/override.\n *\n * IMPORTANT (aastar-sdk#227): the contract's `_validateWeightConfig` REQUIRES every individual weight\n * to be STRICTLY LESS THAN tier1Threshold (`passkeyWeight >= tier1Threshold` reverts\n * `InsecureWeightConfig`). This is deliberate — no single factor may unlock any tier alone, so the\n * KMS-held owner ECDSA must always co-sign. So `passkeyWeight` is 2 (NOT 3): the product's \"T1 = one\n * passkey\" is a UX statement — a single WebAuthn gesture causes the KMS TEE to transparently emit BOTH\n * the P256 passkey sig (weight 2) AND the owner ECDSA sig (weight 2), summing to 4 >= tier1Threshold(3).\n * The on-chain account never sees a lone passkey. (The contract's AAStarAgentStorageLayout struct\n * comment still says \"default: 3\" — that is a stale contract-side doc bug, see airaccount-contract#146.)\n */\nexport interface TierWeightConfig {\n  passkeyWeight: number;\n  ecdsaWeight: number;\n  blsWeight: number;\n  guardian0Weight: number;\n  guardian1Weight: number;\n  guardian2Weight: number;\n  tier1Threshold: number;\n  tier2Threshold: number;\n  tier3Threshold: number;\n}\n\n// Frozen so the shared default can't be mutated; each profile below gets its OWN copy so tweaking\n// one profile's weights never pollutes the others (or this default).\nexport const DEFAULT_WEIGHT_CONFIG: TierWeightConfig = Object.freeze({\n  passkeyWeight: 2, // MUST be < tier1Threshold (#227): contract reverts InsecureWeightConfig if >=\n  ecdsaWeight: 2,\n  blsWeight: 2,\n  guardian0Weight: 1,\n  guardian1Weight: 1,\n  guardian2Weight: 1,\n  tier1Threshold: 3,\n  tier2Threshold: 5,\n  tier3Threshold: 6,\n});\n\n// NOTE: this weight type was briefly `WeightConfig` in 0.26.14, but that bare name collides with the\n// weighted-signature-service `WeightConfig` in the kms subpath re-export (breaks the umbrella dts\n// build), and a backward-compat `WeightConfig` alias re-triggers the same collision — so the rename\n// to `TierWeightConfig` is required and there is intentionally no alias. (BREAKING vs 0.26.14.)\n\nexport type ProfileName = 'web3-newbie' | 'trader' | 'conservative';\n\nexport interface AccountTierProfile {\n  name: ProfileName;\n  /** Up to this cumulative daily ETH spend → Tier 1 (passkey only). */\n  tier1Limit: bigint;\n  /** Up to this → Tier 2 (passkey + BLS). Above it → Tier 3 (+ guardian). */\n  tier2Limit: bigint;\n  /** Guard daily ETH allowance (a hard cap; set on the Guard, not the account tier). */\n  dailyLimit: bigint;\n  weights: TierWeightConfig;\n}\n\n/**\n * Starting-point profiles (amounts in wei). These are SDK defaults — the UI shows them, lets the user\n * tweak, then arms the account with the chosen values. Override freely.\n */\nexport const TIER_PROFILES: Record<ProfileName, AccountTierProfile> = {\n  // Frequent small spends sign with just a passkey; bigger ones step up to BLS / guardian.\n  'web3-newbie': { name: 'web3-newbie', tier1Limit: parseEther('0.01'), tier2Limit: parseEther('0.1'), dailyLimit: parseEther('0.2'), weights: { ...DEFAULT_WEIGHT_CONFIG } },\n  // Higher limits → fewer co-sign prompts for an active user.\n  trader: { name: 'trader', tier1Limit: parseEther('0.1'), tier2Limit: parseEther('1'), dailyLimit: parseEther('5'), weights: { ...DEFAULT_WEIGHT_CONFIG } },\n  // Tight limits → guardian co-sign kicks in early; lowest daily cap.\n  conservative: { name: 'conservative', tier1Limit: parseEther('0.005'), tier2Limit: parseEther('0.05'), dailyLimit: parseEther('0.1'), weights: { ...DEFAULT_WEIGHT_CONFIG } },\n};\n\nconst enc = (functionName: string, args: readonly unknown[]): Hex =>\n  encodeFunctionData({ abi: AAStarAirAccountV7ABI as never, functionName, args } as never);\n\n/** `setTierLimits(tier1, tier2)` (onlyOwner) — arms the account tier amount thresholds. */\nexport function encodeSetTierLimits(account: Address, tier1Limit: bigint, tier2Limit: bigint): AccountCall {\n  return { to: account, value: 0n, data: enc('setTierLimits', [tier1Limit, tier2Limit]) };\n}\n\n/** `setWeightConfig(config)` (onlyOwner) — arms the weight thresholds (needed for the weighted path). */\nexport function encodeSetWeightConfig(account: Address, weights: TierWeightConfig = DEFAULT_WEIGHT_CONFIG): AccountCall {\n  return {\n    to: account,\n    value: 0n,\n    data: enc('setWeightConfig', [{\n      passkeyWeight: weights.passkeyWeight,\n      ecdsaWeight: weights.ecdsaWeight,\n      blsWeight: weights.blsWeight,\n      guardian0Weight: weights.guardian0Weight,\n      guardian1Weight: weights.guardian1Weight,\n      guardian2Weight: weights.guardian2Weight,\n      _padding: 0,\n      tier1Threshold: weights.tier1Threshold,\n      tier2Threshold: weights.tier2Threshold,\n      tier3Threshold: weights.tier3Threshold,\n    }]),\n  };\n}\n\n/**\n * The exact hash each guardian must sign to authorize a `modifyTierLimitsWithGuardians` change.\n *\n * Byte-identical to the account's `_guardianOpHash(\"MODIFY_TIER_LIMITS\", abi.encode(nonce,t1,t2,deadline))`\n * (AAStarAirAccountBase.sol) — i.e. `keccak256(abi.encode(uint8 GUARDIAN_SIG_VERSION, chainId, account,\n * \"MODIFY_TIER_LIMITS\", opData))`. The contract recovers against `toEthSignedMessageHash(thisHash)`, so\n * each guardian signs the RETURNED hash as a raw message:\n *   `walletClient.signMessage({ message: { raw: digest } })`  (viem applies the EIP-191 prefix).\n * Collect RECOVERY_THRESHOLD (2) distinct guardian signatures, then pass them to\n * {@link encodeModifyTierLimitsWithGuardians}.\n *\n * `GUARDIAN_SIG_VERSION` is currently 4 (folded in to bind the account version/epoch); `tierLimitNonce`\n * must be the account's current `_tierLimitNonce` (needs a contract getter — see airaccount-contract).\n */\nexport function modifyTierLimitsGuardianDigest(params: {\n  chainId: bigint;\n  account: Address;\n  tierLimitNonce: bigint;\n  tier1Limit: bigint;\n  tier2Limit: bigint;\n  deadline: bigint;\n  /** Override only if the contract's GUARDIAN_SIG_VERSION changes (default 4). */\n  guardianSigVersion?: number;\n}): Hex {\n  // Reuse the shared constant + opData encoder from @aastar/core (no inline drift). NOTE: this is the\n  // ECDSA-guardian inner hash (no \"P256_GUARDIAN\" domain) — distinct from buildP256GuardianChallenge.\n  const opData = opDataModifyTierLimits(params.tierLimitNonce, params.tier1Limit, params.tier2Limit, params.deadline);\n  return keccak256(\n    encodeAbiParameters(\n      [{ type: 'uint8' }, { type: 'uint256' }, { type: 'address' }, { type: 'string' }, { type: 'bytes' }],\n      [params.guardianSigVersion ?? GUARDIAN_SIG_VERSION, params.chainId, params.account, 'MODIFY_TIER_LIMITS', opData],\n    ),\n  );\n}\n\n/** Minimal read surface (decouples from viem's PublicClient generic). */\ninterface ReadClient {\n  readContract(args: { address: Address; abi: unknown; functionName: string; args?: readonly unknown[] }): Promise<unknown>;\n}\n\n/**\n * Read the account's current `tierLimitNonce()` from chain, then build the guardian challenge digest\n * for a `modifyTierLimitsWithGuardians` change — the one-call path that closes the #188 end-to-end gap\n * (the getter shipped in airaccount-contract#132). Equivalent to reading the nonce yourself and calling\n * {@link modifyTierLimitsGuardianDigest}. Guardians then sign the returned hash as a raw message.\n */\nexport async function modifyTierLimitsGuardianDigestFromChain(params: {\n  client: ReadClient;\n  account: Address;\n  chainId: bigint;\n  tier1Limit: bigint;\n  tier2Limit: bigint;\n  deadline: bigint;\n  guardianSigVersion?: number;\n}): Promise<Hex> {\n  const nonce = (await params.client.readContract({\n    address: params.account,\n    abi: AAStarAirAccountV7ABI,\n    functionName: 'tierLimitNonce',\n  })) as bigint;\n  return modifyTierLimitsGuardianDigest({ ...params, tierLimitNonce: BigInt(nonce) });\n}\n\n/**\n * RAISE the tier limits (guardian-gated) — `setTierLimits` only LOWERS without guardians; loosening\n * needs guardian co-signatures over the change (deadline-bound). Compute the per-guardian challenge\n * with {@link modifyTierLimitsGuardianDigest}, collect the signatures, then pass them here.\n */\nexport function encodeModifyTierLimitsWithGuardians(\n  account: Address,\n  tier1Limit: bigint,\n  tier2Limit: bigint,\n  deadline: bigint,\n  guardianSigs: Hex[],\n): AccountCall {\n  return { to: account, value: 0n, data: enc('modifyTierLimitsWithGuardians', [tier1Limit, tier2Limit, deadline, guardianSigs]) };\n}\n\n/**\n * The calls to arm a freshly-created account with a profile: setTierLimits + setWeightConfig. Run\n * these right after `createAccountWithDefaults` (as owner) — WITHOUT them the account's tiers are off\n * (`requiredTier` returns 0) and large transfers revert for a missing tier (the #176 root cause).\n * The Guard `dailyLimit` is set separately at creation (`createAccountWithDefaults`'s dailyLimit arg).\n */\nexport function profileSetupCalls(account: Address, profile: AccountTierProfile): AccountCall[] {\n  return [\n    encodeSetTierLimits(account, profile.tier1Limit, profile.tier2Limit),\n    encodeSetWeightConfig(account, profile.weights),\n  ];\n}\n","/**\n * Out-of-band confirmation polling (aastar-sdk#176 phase 4 / #124).\n *\n * For a high-value op the DVT signer node WITHHOLDS its signature and sends the account's owner a\n * one-time token over an independent channel (Telegram today; email/Nostr later). The SDK's BLS\n * sign call surfaces this as a {@link DvtPendingConfirmationError} (with the node endpoint +\n * userOpHash). The user approves over their channel (NOT through the app — the app/attacker never\n * sees the token); the consumer then POLLS the node here until `approved`, and RE-SUBMITS the sign to\n * release the signature.\n *\n * Poll-only — it never calls `POST /signature/confirm` (that's the user's independent channel, by\n * design). Browser-safe (fetch). Transient errors during the poll do NOT end the (default 10-min)\n * window; the loop keeps trying until a terminal status, the timeout, or an abort.\n */\n\nexport type ConfirmationStatus = 'pending' | 'approved' | 'expired' | 'not_found';\n\nexport interface ConfirmationState {\n  userOpHash: string;\n  status: ConfirmationStatus;\n  /** Epoch ms when the pending confirmation expires (null if not pending). */\n  expiresAt: number | null;\n}\n\n/** A userOpHash is a 32-byte hash — validate before putting it in a public URL path. */\nconst USEROPHASH_RE = /^0x[0-9a-fA-F]{64}$/;\n\nfunction assertUserOpHash(userOpHash: string): void {\n  if (!USEROPHASH_RE.test(userOpHash)) {\n    throw new Error(`getDvtConfirmationStatus: invalid userOpHash ${JSON.stringify(userOpHash)} (expected 0x + 64 hex)`);\n  }\n}\n\nfunction throwIfAborted(signal?: AbortSignal): void {\n  if (signal?.aborted) throw new DOMException('pollDvtConfirmation aborted', 'AbortError');\n}\n\n/** Sleep that rejects with an AbortError if the signal fires (so the poll is promptly cancellable). */\nfunction abortableSleep(ms: number, signal?: AbortSignal): Promise<void> {\n  return new Promise((resolve, reject) => {\n    if (signal?.aborted) return reject(new DOMException('aborted', 'AbortError'));\n    const t = setTimeout(() => {\n      signal?.removeEventListener('abort', onAbort);\n      resolve();\n    }, ms);\n    const onAbort = () => {\n      clearTimeout(t);\n      reject(new DOMException('aborted', 'AbortError'));\n    };\n    signal?.addEventListener('abort', onAbort, { once: true });\n  });\n}\n\nconst isAbortError = (e: unknown): boolean => e instanceof DOMException && e.name === 'AbortError';\n\n/** Read (does NOT consume) a node's out-of-band confirmation status: `GET /signature/confirmation/:userOpHash`. */\n/** Combine an optional caller signal with a per-request timeout (a hung request must not stall). Shared\n *  with the contact-binding client so a hung KMS read can't block the owner ceremony (#203 N3). */\nexport function requestSignal(signal: AbortSignal | undefined, timeoutMs: number): AbortSignal {\n  // Fast path: native AbortSignal.timeout + .any (Node 20+ / modern browsers).\n  if (typeof (AbortSignal as any).timeout === 'function' && typeof (AbortSignal as any).any === 'function') {\n    const timeout = (AbortSignal as any).timeout(timeoutMs);\n    return signal ? (AbortSignal as any).any([signal, timeout]) : timeout;\n  }\n  // Fallback (older Safari <17.4 / Chrome <116): a manual controller that aborts on EITHER the caller\n  // signal OR the timeout — so the per-request timeout is NEVER lost (the #190 fix must not regress).\n  const ctrl = new AbortController();\n  const onCallerAbort = () => ctrl.abort((signal as any)?.reason);\n  if (signal) {\n    if (signal.aborted) ctrl.abort((signal as any).reason);\n    else signal.addEventListener('abort', onCallerAbort, { once: true });\n  }\n  // Pre-aborted caller → no timer (the 'abort' already fired, so the clear-on-abort listener below\n  // would never run → a stray timer would leak for timeoutMs). #195 [Low].\n  if (ctrl.signal.aborted) return ctrl.signal;\n  const timer = setTimeout(() => ctrl.abort(new DOMException('request timeout', 'TimeoutError')), timeoutMs);\n  ctrl.signal.addEventListener('abort', () => {\n    clearTimeout(timer);\n    signal?.removeEventListener('abort', onCallerAbort);\n  }, { once: true });\n  return ctrl.signal;\n}\n\nexport async function getDvtConfirmationStatus(\n  nodeEndpoint: string,\n  userOpHash: string,\n  signal?: AbortSignal,\n  requestTimeoutMs = 15_000,\n): Promise<ConfirmationState> {\n  assertUserOpHash(userOpHash);\n  const base = nodeEndpoint.replace(/\\/$/, '');\n  // Per-request timeout (#190 residual): without it a hung node stalls the whole poll cadence.\n  const res = await fetch(`${base}/signature/confirmation/${encodeURIComponent(userOpHash)}`, {\n    signal: requestSignal(signal, requestTimeoutMs),\n  });\n  if (!res.ok) throw new Error(`DVT confirmation status ${res.status} from ${base} for ${userOpHash}`);\n  const body = (await res.json()) as { userOpHash?: string; status: ConfirmationStatus; expiresAt: number | null };\n  return { userOpHash, status: body.status, expiresAt: body.expiresAt ?? null };\n}\n\nexport interface PollConfirmationOptions {\n  /** Poll interval (ms). Default 3000. */\n  intervalMs?: number;\n  /** Give up after this long (ms). Default 600_000 (the node's 10-min TTL). */\n  timeoutMs?: number;\n  /** Abort the poll (also cancels the in-flight fetch + the sleep). */\n  signal?: AbortSignal;\n  /** Called on each successful status read (for UI progress). */\n  onStatus?: (state: ConfirmationState) => void;\n  /** Called on a transient read error (the poll keeps going until timeout — it does NOT end the window). */\n  onError?: (error: unknown) => void;\n  /** Per-request fetch timeout (ms). A hung node read times out + retries, not stalls. Default 15000. */\n  requestTimeoutMs?: number;\n}\n\n/**\n * Poll a node until the out-of-band confirmation is `approved` (re-submit the sign then) or terminal\n * (`expired`/`not_found`) or the timeout elapses. A transient network/5xx error does NOT abort the\n * window — it's reported via `onError` and retried until the deadline (so a blip doesn't waste the\n * user's 10-min approval window). Aborts via `signal` (rejects with an AbortError).\n */\nexport async function pollDvtConfirmation(\n  nodeEndpoint: string,\n  userOpHash: string,\n  options: PollConfirmationOptions = {},\n): Promise<ConfirmationState> {\n  assertUserOpHash(userOpHash);\n  const intervalMs = options.intervalMs ?? 3000;\n  const timeoutMs = options.timeoutMs ?? 600_000;\n  const deadline = Date.now() + timeoutMs;\n\n  // eslint-disable-next-line no-constant-condition\n  while (true) {\n    throwIfAborted(options.signal);\n    let state: ConfirmationState;\n    try {\n      state = await getDvtConfirmationStatus(nodeEndpoint, userOpHash, options.signal, options.requestTimeoutMs);\n    } catch (err) {\n      // A caller abort ('AbortError') propagates; a per-request TIMEOUT ('TimeoutError') is transient → retry.\n      if (isAbortError(err)) throw err;\n      options.onError?.(err); // transient — keep the window alive\n      if (Date.now() >= deadline) throw err; // out of time: surface the last error\n      await abortableSleep(intervalMs, options.signal);\n      continue;\n    }\n    options.onStatus?.(state);\n    if (state.status === 'approved' || state.status === 'expired' || state.status === 'not_found') return state;\n    if (Date.now() >= deadline) return state; // timed out while still pending\n    await abortableSleep(intervalMs, options.signal);\n  }\n}\n\n// ── Out-of-band APPROVAL (option-2: passkey over userOpHash) — aastar-sdk#193 / Validator#124/#126 ──\n\n/**\n * The WebAuthn assertion exactly as `navigator.credentials.get()` returns it (serialized by e.g.\n * `@simplewebauthn/browser`'s `startAuthentication`). It is POSTed to the DVT node AS-IS — do NOT\n * flatten to `{authenticatorData, clientDataJSON, signature}`: the KMS verifier needs `id`/`rawId`/\n * `type` (the flat shape drops them and verification fails).\n */\nexport interface AuthenticationResponseJSON {\n  id: string;\n  rawId: string;\n  type: 'public-key';\n  response: {\n    authenticatorData: string;\n    clientDataJSON: string;\n    signature: string;\n    userHandle?: string;\n  };\n  authenticatorAttachment?: string;\n  clientExtensionResults?: Record<string, unknown>;\n}\n\n/**\n * Build the `navigator.credentials.get({ publicKey })` request options for an out-of-band approval:\n * the WebAuthn challenge IS the 32-byte `userOpHash` (WYSIWYS — the user signs exactly the op they're\n * confirming). Run this in the browser, then pass the resulting assertion to {@link submitDvtConfirmation}.\n */\nexport function confirmationCredentialRequest(\n  userOpHash: string,\n  opts: { rpId: string; allowCredentials?: { id: BufferSource; type?: 'public-key' }[]; timeoutMs?: number },\n): { challenge: Uint8Array; rpId: string; userVerification: 'required'; timeout?: number; allowCredentials?: { id: BufferSource; type: 'public-key' }[] } {\n  assertUserOpHash(userOpHash);\n  // hexToBytes of the 0x+64hex userOpHash → the exact 32-byte challenge the node binds against.\n  const challenge = Uint8Array.from((userOpHash.slice(2).match(/.{2}/g) ?? []).map((b) => parseInt(b, 16)));\n  return {\n    challenge,\n    rpId: opts.rpId,\n    userVerification: 'required',\n    ...(opts.timeoutMs !== undefined ? { timeout: opts.timeoutMs } : {}),\n    ...(opts.allowCredentials ? { allowCredentials: opts.allowCredentials.map((c) => ({ id: c.id, type: 'public-key' as const })) } : {}),\n  };\n}\n\n/**\n * Submit an out-of-band approval to a DVT node: `POST {node}/signature/confirm { userOpHash, passkey }`.\n * `userOpHash` IS the pendingId; `passkey` is the {@link AuthenticationResponseJSON} passed AS-IS. The\n * node verifies the assertion (challenge==userOpHash + the account's passkey, delegated to the KMS) and\n * releases its withheld signature. Stateless + idempotent — the SAME assertion can be submitted to each\n * quorum node independently.\n */\nexport async function submitDvtConfirmation(\n  nodeEndpoint: string,\n  userOpHash: string,\n  passkey: AuthenticationResponseJSON,\n  signal?: AbortSignal,\n): Promise<{ status: 'confirmed' | 'rejected'; confirmed: boolean }> {\n  assertUserOpHash(userOpHash);\n  const base = nodeEndpoint.replace(/\\/$/, '');\n  const res = await fetch(`${base}/signature/confirm`, {\n    method: 'POST',\n    headers: { 'content-type': 'application/json' },\n    body: JSON.stringify({ userOpHash, passkey }), // passkey AS-IS — never flattened\n    signal,\n  });\n  if (!res.ok) throw new Error(`DVT confirm ${res.status} from ${base} for ${userOpHash}`);\n  const body = (await res.json()) as { status?: 'confirmed' | 'rejected'; confirmed?: boolean };\n  return { status: body.status ?? (body.confirmed ? 'confirmed' : 'rejected'), confirmed: !!body.confirmed };\n}\n","/**\n * Browser-safe KMS contact-binding client (aastar-sdk#193 / AirAccount#129, KMS v0.27.0).\n *\n * Binds a notification channel (Telegram today; email pending KMS `begin_email_binding`) to an\n * AirAccount so the DVT out-of-band confirmation can reach the owner. Every begin/confirm/unbind is\n * gated by an OWNER WebAuthn ceremony (the app proves account ownership): the caller supplies a\n * `ceremony` that runs `POST /BeginAuthentication {KeyId}` → `navigator.credentials.get(challenge)` and\n * returns the assertion in the KMS's capitalized `{ChallengeId, Credential}` shape.\n *\n * Flow (Telegram, user-initiated — Telegram bots cannot DM a user who hasn't /started them):\n *   1. `beginContactBinding({account, channel})` → ceremony → `{bindingCode, expiresAt}`.\n *   2. The user sends `/bind <bindingCode>` to the official @AAStarBot; the bot claims it server-side\n *      (NOT via this SDK) and delivers a `verifyToken` to the chat.\n *   3. The user enters that `verifyToken` in the app → `confirmContactBinding({account, bindingCode,\n *      verifyToken})` → ceremony → `{status:'verified'}`.\n *   4. `getContacts(account)` lists verified channels; `removeContact({account, channel})` unbinds.\n *\n * fetch-based + browser-safe (no node:crypto). The approval side (out-of-band confirm) is a separate\n * passkey-over-userOpHash ceremony submitted to the DVT node — pending the DVT `/signature/confirm`\n * credential format (YetAnotherAA-Validator#124) — and is intentionally not in this module yet.\n */\nimport type { Address } from 'viem';\nimport { requestSignal } from './dvt-confirmation.js';\n\nexport type ContactChannel = 'telegram' | 'email';\n\n/** A WebAuthn assertion in the KMS's capitalized wire shape (matches the existing KMS API). */\nexport interface KmsWebAuthn {\n  ChallengeId: string;\n  Credential: unknown;\n}\n\n/**\n * Runs the owner WebAuthn ceremony and returns the KMS assertion. Provided by the app (browser):\n * `POST /BeginAuthentication {KeyId}` → `navigator.credentials.get(challenge)` → `{ChallengeId, Credential}`.\n * Receives the account so a multi-account app can pick the right passkey/key id.\n */\nexport type OwnerCeremony = (ctx: { account: Address; purpose: 'begin-binding' | 'confirm-binding' | 'unbind' }) => Promise<KmsWebAuthn>;\n\nexport interface ContactBindingClientOptions {\n  /** KMS base URL, e.g. `https://kms.aastar.io`. */\n  kmsEndpoint: string;\n  /** KMS `x-api-key`. */\n  apiKey: string;\n  /** Owner WebAuthn ceremony runner (see {@link OwnerCeremony}). */\n  ceremony: OwnerCeremony;\n  /** Override fetch (tests / non-global-fetch runtimes). */\n  fetchImpl?: typeof fetch;\n  /** Per-request timeout (ms) so a hung KMS request can't block the owner ceremony. Default 15000. (#203 N3) */\n  requestTimeoutMs?: number;\n}\n\nexport interface BeginBindingResult {\n  bindingCode: string;\n  expiresAt: number;\n}\nexport interface ContactRecord {\n  channel: ContactChannel;\n  /** The verified contact reference (e.g. Telegram chat id / email), as the KMS stores it. */\n  contactRef: string;\n  status: 'pending' | 'verified' | 'revoked';\n  verifiedAt: number | null;\n}\n\nexport interface ContactBindingClient {\n  beginContactBinding(p: { account: Address; channel: ContactChannel }): Promise<BeginBindingResult>;\n  confirmContactBinding(p: { account: Address; bindingCode: string; verifyToken: string }): Promise<{ status: 'verified' }>;\n  getContacts(account: Address): Promise<ContactRecord[]>;\n  removeContact(p: { account: Address; channel: ContactChannel }): Promise<{ status: string }>;\n}\n\n/** Create a browser-safe KMS contact-binding client bound to an endpoint + owner ceremony. */\nexport function createContactBindingClient(options: ContactBindingClientOptions): ContactBindingClient {\n  const base = options.kmsEndpoint.replace(/\\/$/, '');\n  const doFetch = options.fetchImpl ?? fetch;\n\n  const timeoutMs = options.requestTimeoutMs ?? 15_000;\n  async function call<T>(method: 'GET' | 'POST', path: string, body?: unknown): Promise<T> {\n    const res = await doFetch(`${base}${path}`, {\n      method,\n      headers: { 'content-type': 'application/json', 'x-api-key': options.apiKey },\n      body: body === undefined ? undefined : JSON.stringify(body),\n      signal: requestSignal(undefined, timeoutMs), // #203 N3 — a hung KMS request times out, not hangs\n    });\n    if (!res.ok) throw new Error(`KMS ${method} ${path} → ${res.status}`);\n    return (await res.json()) as T;\n  }\n\n  function assertTelegram(channel: ContactChannel) {\n    // email endpoints are not open yet (KMS begin_email_binding pending) — fail loudly, not silently.\n    if (channel === 'email') throw new Error('email contact binding is not available yet (pending KMS begin_email_binding) — use telegram');\n  }\n\n  // The KMS keys contacts by a LOWERCASE address (v0.27.2 #129/#203 — a checksummed key would silently\n  // fail-close). Normalize here (defense-in-depth, like the DVT node) so we never depend on the KMS's\n  // own normalization being present.\n  const lc = (a: Address) => a.toLowerCase() as Address;\n\n  return {\n    async beginContactBinding({ account, channel }) {\n      assertTelegram(channel);\n      const acct = lc(account);\n      const WebAuthn = await options.ceremony({ account: acct, purpose: 'begin-binding' });\n      return call<BeginBindingResult>('POST', '/contact/begin-binding', { account: acct, channel, WebAuthn });\n    },\n    async confirmContactBinding({ account, bindingCode, verifyToken }) {\n      const acct = lc(account);\n      const WebAuthn = await options.ceremony({ account: acct, purpose: 'confirm-binding' });\n      return call<{ status: 'verified' }>('POST', '/contact/confirm-binding', { account: acct, bindingCode, verifyToken, WebAuthn });\n    },\n    async getContacts(account) {\n      const r = await call<{ contacts: ContactRecord[] }>('GET', `/contact/${lc(account)}`);\n      return r.contacts ?? [];\n    },\n    async removeContact({ account, channel }) {\n      assertTelegram(channel);\n      const acct = lc(account);\n      const WebAuthn = await options.ceremony({ account: acct, purpose: 'unbind' });\n      return call<{ status: string }>('POST', '/contact/unbind', { account: acct, channel, WebAuthn });\n    },\n  };\n}\n","export * from \"./client\";\nexport * from \"./auth/passkey/types\";\nexport * from \"./auth/passkey/passkey.manager\";\nexport * from \"./core/bls/types\";\nexport * from \"./core/bls/bls.manager\";\n// NOTE: CryptoUtil (node:crypto AES — scrypt/createCipheriv) is intentionally NOT re-exported here.\n// It's an internal Node-only util with no SDK consumer, and re-exporting it dragged node:crypto into\n// every browser bundle that touched the airaccount/kms surface (#189 follow-up — YAA found 3 AES\n// chunks via @aastar/sdk/kms). Import it directly from \"./core/crypto/crypto.util\" in Node code if\n// ever needed. Browser code uses the (axios) KmsHttpClient, not the Node CryptoUtil.\nexport * from \"./core/types\";\nexport * from \"./core/erc4337\";\nexport * from \"./core/tier\";\nexport * from \"./core/dvt-confirmation.js\";\nexport * from \"./core/contact-binding.js\";\n// WebAuthn cumulative signature packers (device-passkey Tier-2/3 — algId 0x09/0x0a, #234).\n// Build the on-chain WebAuthn passkey factor + the cumulative composite an integrator submits.\nexport {\n  packWebAuthnBlob,\n  packCumulativeT2WA,\n  packCumulativeT3WA,\n  packBlsPayload,\n  packCommitteeBlsPayload,\n  ALG_CUMULATIVE_T2_WA,\n  ALG_CUMULATIVE_T3_WA,\n} from \"./migration/viem/bls-packing\";\n"]}