{"version":3,"file":"index.cjs","sources":["../src/core/utils.ts","../src/core/cipher.ts","../src/cipher/blockCipher/aes.ts","../src/cipher/blockCipher/arc5.ts","../src/cipher/blockCipher/aria.ts","../src/cipher/blockCipher/blowfish.ts","../src/cipher/blockCipher/camellia.ts","../src/cipher/blockCipher/des.ts","../src/cipher/blockCipher/sm4.ts","../src/cipher/blockCipher/tea.ts","../src/cipher/blockCipher/twofish.ts","../src/core/ec.ts","../src/core/hash.ts","../src/hash/hmac.ts","../src/hash/sha256.ts","../src/core/kdf.ts","../src/cipher/pkcs/ecc.ts","../src/core/asn1.ts","../src/core/prime.ts","../src/cipher/pkcs/rsa.ts","../src/cipher/pkcs/pkcs1.ts","../src/core/ecParams.ts","../src/hash/sm3.ts","../src/cipher/pkcs/sm2.ts","../src/cipher/pkcs/x25519_448.ts","../src/cipher/streamCipher/arc4.ts","../src/cipher/streamCipher/rabbit.ts","../src/cipher/streamCipher/salsa20.ts","../src/cipher/streamCipher/zuc.ts","../src/core/codec.ts","../src/hash/keccak1600.ts","../src/hash/turboSHAKE.ts","../src/hash/kangaroo12.ts","../src/hash/md5.ts","../src/hash/sha1.ts","../src/hash/sha3.ts","../src/hash/sha3Derived.ts","../src/hash/sha512.ts","../src/hash/totp.ts"],"sourcesContent":["import type { Codec } from './codec'\n\n// * Math utility functions\n\n/** 32-bit 循环左移 */\nexport function rotateL32(x: number, n: number) {\n  return ((x << n) | (x >>> (32 - n))) >>> 0\n}\n\n/** 32-bit 循环右移 */\nexport function rotateR32(x: number, n: number) {\n  return (x >>> n) | (x << (32 - n)) >>> 0\n}\n\n/**\n * 位循环左移 / Rotate Left\n *\n * @param {number} bit - 位数 / bit\n * @param {number | bigint} x - 数值 / value\n * @param {number | bigint} n - 位移 / shift\n * @param {bigint} [mask] - 位掩码 / bit mask\n */\nexport function rotateL(\n  bit: number | bigint,\n  x: number | bigint,\n  n: number | bigint,\n  mask?: bigint,\n) {\n  bit = BigInt(bit)\n  mask ??= genBitMask(bit)\n  x = BigInt(x)\n  n = BigInt(n)\n  x &= mask\n  n %= bit\n  x = (x << n) | (x >> (bit - n))\n  return x & mask\n}\n\n/**\n * 位循环右移 / Rotate Right\n *\n * @param {number} bit - 位数 / bit\n * @param {number | bigint} x - 数值 / value\n * @param {number | bigint} n - 位移 / shift\n * @param {bigint} [mask] - 位掩码 / bit mask\n */\nexport function rotateR(\n  bit: number | bigint,\n  x: number | bigint,\n  n: number | bigint,\n  mask?: bigint,\n) {\n  bit = BigInt(bit)\n  mask ??= genBitMask(bit)\n  x = BigInt(x)\n  n = BigInt(n)\n  x &= mask\n  n %= bit\n  x = (x >> n) | (x << (bit - n))\n  return x & mask\n}\n\n/** 生成随机大整数 / Generate Random BigInt */\nexport function genRandomBI(max: bigint, byte: number) {\n  let result = 0n\n\n  // 生成随机数\n  const buffer = new U8(byte)\n  do {\n    crypto.getRandomValues(buffer)\n    result = buffer.toBI()\n  } while (result >= max)\n\n  return { buffer, result }\n}\n\n/**\n * 获取大整数的比特长度\n *\n * Get the bit length of a BigInt\n */\nexport function getBIBits(n: bigint) {\n  let bit = 0\n  while (n > 0) {\n    bit++\n    n >>= 1n\n  }\n  return bit\n}\n\n/**\n * 生成位掩码 / Generate Bit Mask\n *\n * @param {number} w - 位数 / bit\n *\n * ```ts\n * const mask = genBitMask(8) // 0xFFn\n * ```\n */\nexport function genBitMask(w: number | bigint) {\n  w = BigInt(w)\n  let mask = 0x0n\n  for (let i = 0; i < w; i++) {\n    mask = (mask << 1n) | 1n\n  }\n  return mask\n}\n\n/**\n * 扩展欧几里得算法\n *\n * Extended Euclidean Algorithm\n *\n * - gcd: 最大公约数 / greatest common divisor\n * - a_inv: a 的模逆 / modular inverse of a\n * - b_inv: b 的模逆 / modular inverse of b\n */\nexport function extendedEuclidean(a: bigint, b: bigint) {\n  let [s0, s1, t0, t1, r0, r1] = [1n, 0n, 0n, 1n, a, b]\n\n  if (b === 0n) {\n    return {\n      gcd: a,\n      a_inv: 1n,\n      b_inv: 0n,\n    }\n  }\n\n  while (r1 !== 0n) {\n    const q = r0 / r1;\n    [r0, r1] = [r1, r0 - q * r1];\n    [s0, s1] = [s1, s0 - q * s1];\n    [t0, t1] = [t1, t0 - q * t1]\n  }\n\n  return {\n    gcd: r0,\n    a_inv: s0,\n    b_inv: t0,\n  }\n}\n\n/**\n * 勒让德符号\n *\n * Legendre Symbol\n */\nexport function legendreSymbol(a: bigint, p: bigint): bigint {\n  return modPow(a, (p - 1n) >> 1n, p)\n}\n\n/**\n * 托内利-香克斯算法\n *\n * Tonelli-Shanks Algorithm\n */\nexport function tonelliShanks(a: bigint, p: bigint): bigint {\n  if (legendreSymbol(a, p) !== 1n) {\n    throw new KitError('There is no square root')\n  }\n  if (a === 0n) {\n    return 0n\n  }\n  if (p === 2n) {\n    return a\n  }\n  if (p % 4n === 3n) {\n    return modPow(a, (p + 1n) >> 2n, p)\n  }\n\n  let q = p - 1n\n  let s = 0n\n  while (mod(q, 2n) === 0n) {\n    q >>= 1n\n    s++\n  }\n\n  let z = 2n\n  while (legendreSymbol(z, p) !== p - 1n) {\n    z++\n  }\n\n  let m = s\n  let c = modPow(z, q, p)\n  let t = modPow(a, q, p)\n  let r = modPow(a, (q + 1n) >> 1n, p)\n\n  while (t !== 0n && t !== 1n) {\n    let t2i = t\n    let i = 1n\n    for (; i < m; i++) {\n      t2i = modPow(t2i, 2n, p)\n      if (t2i === 1n) {\n        break\n      }\n    }\n\n    const b = modPow(c, 1n << (m - i - 1n), p)\n    m = i\n    c = modPow(b, 2n, p)\n    t = t * c % p\n    r = r * b % p\n  }\n\n  return r\n}\n\n/**\n * 最大公约数\n *\n * Greatest Common Divisor\n */\nexport function gcd(a: bigint, b: bigint): bigint {\n  return extendedEuclidean(a, b).gcd\n}\n\n/**\n * 最小公倍数\n *\n * Least Common Multiple\n */\nexport function lcm(a: bigint, b: bigint): bigint {\n  return a * b / gcd(a, b)\n}\n\n/**\n * 求模: a mod b\n *\n * Modulo operation: a mod b\n *\n * @param {bigint} a - dividend\n * @param {bigint} b - divisor\n */\nexport function mod(a: bigint, b: bigint): bigint {\n  const r = a % b\n  return r < 0n ? r + b : r\n}\n\n/**\n * 模幂运算: x ^ y mod n\n *\n * Modular exponentiation: x ^ y mod n\n *\n * @param {bigint} x - base\n * @param {bigint} y - exponent\n * @param {bigint} n - modulus\n */\nexport function modPow(x: bigint, y: bigint, n: bigint): bigint {\n  x %= n\n  let r = 1n\n  while (y > 0n) {\n    if (y & 1n)\n      r = r * x % n\n    x = x * x % n\n    y >>= 1n\n  }\n  return r\n}\n\n/**\n * 模逆运算: e ≡ x ^ -1 (mod n)\n *\n * Modular inverse operation: e ≡ x ^ -1 (mod n)\n *\n * @param {bigint} x - base\n * @param {bigint} n - modulus\n */\nexport function modInverse(x: bigint, n: bigint): bigint {\n  const { gcd, a_inv: inv } = extendedEuclidean(x, n)\n  if (gcd !== 1n) {\n    throw new KitError('Modular inverse does not exist')\n  }\n  return mod(inv, n)\n}\n\n/**\n * 模素平方根运算: n ^ 0.5 (mod p)\n *\n * Modular prime square operation: n ^ 0.5 (mod p)\n */\nexport function modPrimeSquare(n: bigint, p: bigint): bigint {\n  n = mod(n, p)\n  return tonelliShanks(n, p)\n}\n\n// * Buffer utility functions\n\n/**\n * @extends Uint8Array\n */\nexport class U8 extends Uint8Array {\n  /**\n   * 从 U8 中获取一个字 / Get a word from U8\n   *\n   * @param {number} word_byte - 字长 / word size\n   * @param {number} index - 字索引 / word index\n   * @param {boolean} [little_endian] - 是否为小端序 / little-endian (default: false)\n   */\n  getWord(word_byte: number, index: number, little_endian = false): bigint {\n    const offset = index * word_byte\n    const buffer = this.subarray(offset, offset + word_byte)\n    return little_endian ? buffer.toBI(true) : buffer.toBI()\n  }\n\n  /**\n   * 将一个字写入 U8 / Set a word to U8\n   *\n   * @param {number} word_byte - 字长 / word size\n   * @param {number} index - 字索引 / word index\n   * @param {bigint | Uint8Array} word - 字 / word\n   * @param {boolean} [little_endian] - 是否为小端序 / little-endian (default: false)\n   */\n  setWord(word_byte: number, index: number, word: bigint | Uint8Array, little_endian = false) {\n    const offset = index * word_byte\n    const buffer = typeof word === 'bigint' ? U8.fromBI(word, word_byte) : word\n    this.set(little_endian ? buffer.toReversed() : buffer, offset)\n  }\n\n  /**\n   * U8 视图 / U8 view\n   *\n   * @param {number} word_byte - 字长 / word size\n   */\n  view(word_byte: number) {\n    const length = Math.floor(this.length / word_byte)\n    const get = (index: number, little_endian = false) => this.getWord(word_byte, index, little_endian)\n    const set = (index: number, word: bigint | Uint8Array, little_endian = false) => this.setWord(word_byte, index, word, little_endian)\n    return { get, set, length }\n  }\n\n  /**\n   * 将 U8 编码为字符串 / stringify U8 to encoded string\n   */\n  to(codec: Codec) {\n    return codec(this)\n  }\n\n  /**\n   * 将 U8 转换为 BigInt / Convert U8 to BigInt\n   *\n   * @param {boolean} [little_endian] - 是否为小端序 / little-endian (default: false)\n   */\n  toBI(little_endian = false) {\n    const buffer = little_endian ? this.toReversed() : this\n    let bigint = 0n\n    buffer.forEach(byte => bigint = (bigint << 8n) | BigInt(byte))\n    return bigint\n  }\n\n  /**\n   * Convert U8 to Uint8Array\n   *\n   * 将 U8 转换为 Uint8Array\n   */\n  toUint8Array() {\n    return new Uint8Array(this)\n  }\n\n  /**\n   * Convert string to U8\n   *\n   * 将 字符串 转换为 U8\n   */\n  static fromString(input: string, codec: Codec): U8 {\n    return codec(input)\n  }\n\n  /**\n   * Convert BigInt to U8\n   *\n   * 将 BigInt 转换为 U8\n   */\n  static fromBI(bigint: bigint, length?: number, little_endian = false): U8 {\n    length = length || (getBIBits(bigint) + 7) >> 3\n    const buffer = new U8(length)\n    if (little_endian) {\n      for (let i = 0; i < buffer.length; i++) {\n        buffer[i] = Number(bigint & 0xFFn)\n        bigint >>= 8n\n      }\n    }\n    else {\n      for (let i = buffer.length - 1; i >= 0; i--) {\n        buffer[i] = Number(bigint & 0xFFn)\n        bigint >>= 8n\n      }\n    }\n    return buffer\n  }\n\n  static from(arrayLike: Iterable<number>): U8\n  static from<T>(arrayLike: Iterable<T>, mapfn: (v: T, k: number) => number, thisArg?: any): U8\n  static from(arrayLike: ArrayLike<number>): U8\n  static from<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): U8\n  static from(arrayLike: any, mapfn?: any, thisArg?: any): U8 {\n    return new U8(super.from(arrayLike, mapfn, thisArg))\n  }\n\n  filter(predicate: (value: number, index: number, array: this) => any, thisArg?: any): U8 {\n    return new U8(super.filter(predicate, thisArg))\n  }\n\n  map(callbackfn: (value: number, index: number, array: this) => number, thisArg?: any): U8 {\n    return new U8(super.map(callbackfn, thisArg))\n  }\n\n  static of(...items: number[]): U8 {\n    return new U8(super.of(...items))\n  }\n\n  toReversed(): this {\n    return super.reverse()\n  }\n\n  toSorted(compareFn?: ((a: number, b: number) => number) | undefined): this {\n    return super.sort(compareFn)\n  }\n\n  reverse(): this {\n    return super.reverse()\n  }\n\n  slice(start?: number, end?: number): U8 {\n    return new U8(super.slice(start, end))\n  }\n\n  subarray(begin?: number, end?: number): U8 {\n    return new U8(super.subarray(begin, end))\n  }\n\n  with(index: number, value: number): U8 {\n    return new U8(super.with(index, value))\n  }\n}\n\ntype TypedArray\n  = Uint8Array  | Int8Array | Uint8ClampedArray\n  | Uint16Array | Int16Array\n  | Uint32Array | Int32Array\n\n/**\n * Convert TypedArray to Uint8Array\n *\n * 将 TypedArray 转换为 Uint8Array\n */\nexport function u8(source: TypedArray): Uint8Array {\n  return new Uint8Array(\n    source.buffer,\n    source.byteOffset,\n    source.byteLength,\n  )\n}\n\n/**\n * Convert TypedArray to Uint16Array\n *\n * 将 TypedArray 转换为 Uint16Array\n */\nexport function u16(source: TypedArray): Uint16Array {\n  return new Uint16Array(\n    source.buffer,\n    source.byteOffset,\n    source.byteLength >> 1,\n  )\n}\n\n/**\n * Convert TypedArray to Uint32Array\n *\n * 将 TypedArray 转换为 Uint32Array\n */\nexport function u32(source: TypedArray): Uint32Array {\n  return new Uint32Array(\n    source.buffer,\n    source.byteOffset,\n    source.byteLength >> 2,\n  )\n}\n\n/**\n * Merging multiple ArrayBuffers\n *\n * 合并多个 ArrayBuffer\n */\nexport function joinBuffer(...buffers: Uint8Array[]) {\n  const byteTotal = buffers.reduce((acc, cur) => acc + cur.byteLength, 0)\n  const result = new U8(byteTotal)\n  let offset = 0\n  for (const buffer of buffers) {\n    result.set(new U8(buffer), offset)\n    offset += buffer.byteLength\n  }\n  return result\n}\n\n/**\n * resize ArrayBuffer\n *\n * 调整 ArrayBuffer 大小\n *\n * @param {ArrayBuffer} buffer\n * @param {number} size - byte\n */\nexport function resizeBuffer(buffer: Uint8Array, size: number) {\n  const B = new U8(size)\n  B.set(new U8(buffer))\n  return B\n}\n\nconst nibbleReverseMap = [0x0n, 0x8n, 0x4n, 0xCn, 0x2n, 0xAn, 0x6n, 0xEn, 0x1n, 0x9n, 0x5n, 0xDn, 0x3n, 0xBn, 0x7n, 0xFn]\n\n/**\n * 快速翻转字节位序 / Fast Reverse Byte's Bit Order\n *\n * @param {number} byte - 字节 / byte\n */\nexport function reverseBit(byte: number) {\n  byte &= 0xFF\n  const b_h = nibbleReverseMap[byte >> 4]\n  const b_l = nibbleReverseMap[byte & 0xF]\n  return (b_l << 4n) | b_h\n}\n\nexport class Counter extends U8 {\n  /**\n   * @param {number} offset - 计数器偏移 / counter offset\n   * @param {number} length - 计数器长度 / counter length\n   */\n  inc(offset?: number, length?: number, little_endian = false) {\n    // 如果不提供偏移，则默认计数器从 0 开始\n    offset = offset || 0\n    if (offset < 0 || offset >= this.length) {\n      throw new KitError('Invalid counter offset')\n    }\n    // 如果不提供长度，则默认计数器长度为剩余长度\n    length = length || this.length - offset\n    if (length < 0 || offset + length > this.length) {\n      throw new KitError('Invalid counter length')\n    }\n    if (little_endian) {\n      for (let i = offset; i < offset + length; i++) {\n        if (this[i] < 0xFF) {\n          this[i] += 1\n          break\n        }\n        this[i] = 0\n      }\n    }\n    else {\n      for (let i = offset + length - 1; i >= offset; i--) {\n        if (this[i] < 0xFF) {\n          this[i] += 1\n          break\n        }\n        this[i] = 0\n      }\n    }\n  }\n}\n\n// * Other utility functions\n\nexport function trying<T>(\n  fn: () => T,\n): [Error, null] | [null, T] {\n  try {\n    const result = fn()\n    return [null, result]\n  }\n  catch (error) {\n    return error instanceof Error\n    ? [error, null]\n    : [new KitError('Unknown error'), null]\n  }\n}\n\nexport function wrap<T = any>(...args: any[]): T {\n  // @ts-expect-error Object assign\n  return Object.assign(...args)\n}\n\nexport class KitError extends Error {\n  constructor(message: string) {\n    super(message)\n    this.name = 'mima-kit Error'\n  }\n}\n","import { Counter, joinBuffer, KitError, U8, wrap } from './utils'\n\n// * 公共接口\n\nexport interface Cipherable {\n  /**\n   * @param {Uint8Array} plaintext - 明文 / plaintext\n   */\n  encrypt: (plaintext: Uint8Array) => U8\n  /**\n   * @param {Uint8Array} ciphertext - 密文 / ciphertext\n   */\n  decrypt: (ciphertext: Uint8Array) => U8\n}\n\nexport interface CipherInfo {\n  ALGORITHM: string\n  /** 推荐的密钥大小 / Recommended key size (byte) */\n  KEY_SIZE: number\n  /** 最小密钥大小 / Minimum key size (byte) */\n  MIN_KEY_SIZE: number\n  /** 最大密钥大小 / Maximum key size (byte) */\n  MAX_KEY_SIZE: number\n}\nexport interface IVCipherInfo extends CipherInfo {\n  /** 推荐的 IV 大小 / Recommended IV size (byte) */\n  IV_SIZE: number\n  /** 最小 IV 大小 / Minimum IV size (byte) */\n  MIN_IV_SIZE: number\n  /** 最大 IV 大小 / Maximum IV size (byte) */\n  MAX_IV_SIZE: number\n}\nexport interface Cipher {\n  /**\n   * @param {Uint8Array} key - 密钥 / Key\n   */\n  (key: Uint8Array): Cipherable\n}\nexport interface IVCipher {\n  /**\n   * @param {Uint8Array} key - 密钥 / Key\n   * @param {Uint8Array} iv - 初始化向量 / Initialization Vector\n   */\n  (key: Uint8Array, iv: Uint8Array): Cipherable\n}\n\n// * 对称密钥算法包装器\n\nexport interface BlockCipherInfo extends CipherInfo {\n  /** 分组大小 / Block size (byte) */\n  BLOCK_SIZE: number\n}\nexport interface BlockCipher extends BlockCipherInfo {\n  /**\n   * @param {Uint8Array} key - 密钥 / Key\n   */\n  (key: Uint8Array): Cipherable & BlockCipherInfo\n}\nexport interface StreamCipherInfo extends CipherInfo {\n}\nexport interface StreamCipher extends StreamCipherInfo {\n  /**\n   * @param {Uint8Array} key - 密钥 / Key\n   */\n  (key: Uint8Array): Cipherable & StreamCipherInfo\n}\nexport interface IVStreamCipherInfo extends IVCipherInfo {\n}\nexport interface IVStreamCipher extends IVStreamCipherInfo {\n  /**\n   * @param {Uint8Array} key - 密钥 / Key\n   * @param {Uint8Array} iv - 初始化向量 / Initialization Vector\n   */\n  (key: Uint8Array, iv: Uint8Array): Cipherable & IVStreamCipherInfo\n}\n\nexport function createCipher(algorithm: Cipher, description: BlockCipherInfo): BlockCipher\nexport function createCipher(algorithm: Cipher, description: StreamCipherInfo): StreamCipher\nexport function createCipher(algorithm: IVCipher, description: IVStreamCipherInfo): IVStreamCipher\nexport function createCipher(\n  algorithm: Cipher | IVCipher,\n  description: BlockCipherInfo | StreamCipherInfo | IVStreamCipherInfo,\n) {\n  return wrap(\n    (key: Uint8Array, iv: Uint8Array) => wrap(algorithm(key, iv), description),\n    description,\n  )\n}\n\n// * 填充方案包装器\n\nexport interface DoPad {\n  /**\n   * 添加填充 / add padding\n   * @param {Uint8Array} M - 消息 / Message\n   * @param {number} BLOCK_SIZE - 分组大小 / Block size\n   */\n  (M: Uint8Array, BLOCK_SIZE: number): U8\n}\nexport interface UnPad {\n  /**\n   * 移除填充 / remove padding\n   * @param {Uint8Array} P - 填充消息 / Padded message\n   */\n  (P: Uint8Array): U8\n}\nexport interface PaddingInfo {\n  ALGORITHM: string\n}\nexport interface Padding extends DoPad, UnPad, PaddingInfo {\n}\nexport function createPadding(\n  doPad: DoPad,\n  unPad: UnPad,\n  description: PaddingInfo,\n): Padding {\n  return wrap(\n    (M: Uint8Array, BLOCK_SIZE?: number) => (\n      typeof BLOCK_SIZE === 'number'\n        ? doPad(M, BLOCK_SIZE)\n        : unPad(M)\n    ),\n    description,\n  )\n}\n\n// * 填充方案\n\n/** PKCS7 填充方案 / Padding Scheme */\nexport const PKCS7_PAD = createPadding(\n  (M: Uint8Array, BLOCK_SIZE: number) => {\n    const pad = BLOCK_SIZE - M.length % BLOCK_SIZE\n    return joinBuffer(M, new Uint8Array(pad).fill(pad))\n  },\n  (P: Uint8Array) => {\n    const pad = P[P.length - 1]\n    return new U8(P.slice(0, P.length - pad))\n  },\n  { ALGORITHM: 'PKCS#7' },\n)\n\n/** ISO/IEC 7816 填充方案 / Padding Scheme */\nexport const ISO7816_PAD = createPadding(\n  (M: Uint8Array, BLOCK_SIZE: number) => {\n    const BLOCK_TOTAL = Math.ceil((M.length + 1) / BLOCK_SIZE)\n    const P = new U8(BLOCK_TOTAL * BLOCK_SIZE)\n    P.set(M)\n    P[M.length] = 0x80\n    return P\n  },\n  (P: Uint8Array) => {\n    let i = P.length - 1\n    while (P[i] === 0x80) {\n      i = i - 1\n      if (i < 0) {\n        console.warn('This message may not be ISO/IEC 7816-4 padded')\n        return new U8()\n      }\n    }\n    return new U8(P.slice(0, i + 1))\n  },\n  { ALGORITHM: 'ISO/IEC 7816-4' },\n)\n\n/** ANSI X9.23 填充方案 / Padding Scheme */\nexport const X923_PAD = createPadding(\n  (M: Uint8Array, BLOCK_SIZE: number) => {\n    const BLOCK_TOTAL = Math.ceil((M.length + 1) / BLOCK_SIZE)\n    const P = new U8(BLOCK_TOTAL * BLOCK_SIZE)\n    P.set(M)\n    P[P.length - 1] = P.length - M.length\n    return P\n  },\n  (P: Uint8Array) => {\n    const pad = P[P.length - 1]\n    return new U8(P.slice(0, P.length - pad))\n  },\n  { ALGORITHM: 'ANSI X9.23' },\n)\n\n/** Zero 零填充方案 / Padding Scheme */\nexport const ZERO_PAD = createPadding(\n  (M: Uint8Array, BLOCK_SIZE: number) => {\n    const pad = BLOCK_SIZE - M.length % BLOCK_SIZE\n    return joinBuffer(M, new Uint8Array(pad))\n  },\n  (P: Uint8Array) => {\n    let i = P.length - 1\n    while (P[i] === 0) {\n      i = i - 1\n      if (i < 0) {\n        return new U8()\n      }\n    }\n    return new U8(P.slice(0, i + 1))\n  },\n  { ALGORITHM: 'Zero Padding' },\n)\n\n/** 无填充 / No Padding */\nexport const NO_PAD = createPadding(\n  (M: Uint8Array) => new U8(M.slice(0)),\n  (P: Uint8Array) => new U8(P.slice(0)),\n  { ALGORITHM: 'No Padding' },\n)\n\n// * 工作模式\n\nexport interface ModeBaseInfo {\n  ALGORITHM: string\n}\nexport interface ModeInfo extends BlockCipherInfo {\n  /** 填充方案 / Padding Scheme */\n  PADDING: Padding\n  /** 推荐的 IV 大小 / Recommended IV size (byte) */\n  IV_SIZE: number\n  /** 最小 IV 大小 / Minimum IV size (byte) */\n  MIN_IV_SIZE: number\n  /** 最大 IV 大小 / Maximum IV size (byte) */\n  MAX_IV_SIZE: number\n}\nexport interface Mode extends ModeBaseInfo {\n  /**\n   * @param {BlockCipher} cipher - 分组加密算法 / Block cipher\n   * @param {Padding} padding - 填充方案 / Padding Scheme (default: PKCS7)\n   */\n  (cipher: BlockCipher, padding?: Padding): {\n    /**\n     * @param {Uint8Array} key - 密钥 / Key\n     * @param {Uint8Array} iv - 初始化向量 / Initialization Vector\n     */\n    (key: Uint8Array, iv: Uint8Array): Cipherable & ModeInfo\n  } & ModeInfo\n}\n\nexport interface ECBMode extends ModeBaseInfo {\n  /**\n   * @param {BlockCipher} cipher - 分组加密算法 / Block cipher\n   * @param {Padding} padding - 填充方案 / Padding Scheme (default: PKCS7)\n   */\n  (cipher: BlockCipher, padding?: Padding): {\n    /**\n     * ECB 不使用 IV, 如果提供 IV, 将被忽略. 仅为与其他模式兼容\n     *\n     * ECB do not use IV, if you provide IV, it will be ignored. It is only for compatibility with other Modes\n     *\n     * @param {Uint8Array} key - 密钥 / Key\n     * @param {Uint8Array} [iv] - 初始化向量 / Initialization Vector\n     */\n    (key: Uint8Array, iv?: Uint8Array): Cipherable & ModeInfo\n  } & ModeInfo\n}\n/** 电子密码本模式 / Electronic Code Book Mode */\nexport const ecb = wrap<ECBMode>(\n  (cipher: BlockCipher, padding: Padding = PKCS7_PAD) => {\n    const info: ModeInfo = {\n      ALGORITHM: `ECB-${cipher.ALGORITHM}`,\n      PADDING: padding,\n      BLOCK_SIZE: cipher.BLOCK_SIZE,\n      KEY_SIZE: cipher.KEY_SIZE,\n      MIN_KEY_SIZE: cipher.MIN_KEY_SIZE,\n      MAX_KEY_SIZE: cipher.MAX_KEY_SIZE,\n      IV_SIZE: 0,\n      MIN_IV_SIZE: 0,\n      MAX_IV_SIZE: 0,\n    }\n    const suite = (K: Uint8Array) => {\n      const { BLOCK_SIZE } = cipher\n      const c = cipher(K)\n      const encrypt = (M: Uint8Array) => {\n        const P = padding(M, BLOCK_SIZE)\n        const C = new U8(P.length)\n        for (let i = 0; i < P.length;) {\n          const offset = i\n          const B = P.subarray(i, i += BLOCK_SIZE)\n          C.set(c.encrypt(B), offset)\n        }\n        return C\n      }\n      const decrypt = (C: Uint8Array) => {\n        if (C.length % BLOCK_SIZE !== 0) {\n          throw new KitError('Decryption error')\n        }\n        const P = new U8(C.length)\n        for (let i = 0; i < C.length;) {\n          const offset = i\n          const B = C.subarray(i, i += BLOCK_SIZE)\n          P.set(c.decrypt(B), offset)\n        }\n        return padding(P)\n      }\n      return wrap({ encrypt, decrypt }, info)\n    }\n    return wrap(suite, info)\n  },\n  { ALGORITHM: 'ECB' },\n)\n\nexport interface CBCMode extends Mode {\n}\n/** 密码块链接模式 / Cipher Block Chaining Mode */\nexport const cbc = wrap<CBCMode>(\n  (cipher: BlockCipher, padding: Padding = PKCS7_PAD) => {\n    const info: ModeInfo = {\n      ALGORITHM: `CBC-${cipher.ALGORITHM}`,\n      PADDING: padding,\n      BLOCK_SIZE: cipher.BLOCK_SIZE,\n      KEY_SIZE: cipher.KEY_SIZE,\n      MIN_KEY_SIZE: cipher.MIN_KEY_SIZE,\n      MAX_KEY_SIZE: cipher.MAX_KEY_SIZE,\n      IV_SIZE: cipher.BLOCK_SIZE,\n      MIN_IV_SIZE: cipher.BLOCK_SIZE,\n      MAX_IV_SIZE: cipher.BLOCK_SIZE,\n    }\n    const suite = (K: Uint8Array, iv: Uint8Array) => {\n      // iv 检查\n      const { BLOCK_SIZE } = cipher\n      if (iv.length !== BLOCK_SIZE) {\n        throw new KitError(`${info.ALGORITHM} iv must be ${BLOCK_SIZE} byte`)\n      }\n      const c = cipher(K)\n      const encrypt = (M: Uint8Array) => {\n        const P = padding(M, BLOCK_SIZE)\n        const C = new U8(P.length)\n        let prev = iv.slice(0)\n        for (let i = 0; i < P.length;) {\n          const offset = i\n          const B = P.subarray(i, i += BLOCK_SIZE)\n          prev.forEach((_, i) => prev[i] ^= B[i])\n          prev = c.encrypt(prev)\n          C.set(prev, offset)\n        }\n        return C\n      }\n      const decrypt = (C: Uint8Array) => {\n        if (C.length % BLOCK_SIZE !== 0) {\n          throw new KitError('Decryption error')\n        }\n        const P = new U8(C.length)\n        let prev = iv\n        for (let i = 0; i < C.length;) {\n          const offset = i\n          const B = C.slice(i, i += BLOCK_SIZE)\n          c.decrypt(B).forEach((_, i) => prev[i] ^= _)\n          P.set(prev, offset)\n          prev = B\n        }\n        return padding(P)\n      }\n      return wrap({ encrypt, decrypt }, info)\n    }\n\n    return wrap(suite, info)\n  },\n  { ALGORITHM: 'CBC' },\n)\n\nexport interface PCBCMode extends Mode {\n}\n/** 传播密码块链接模式 / Propagating Cipher Block Chaining Mode */\nexport const pcbc = wrap<PCBCMode>(\n  (cipher: BlockCipher, padding: Padding = PKCS7_PAD) => {\n    const info: ModeInfo = {\n      ALGORITHM: `PCBC-${cipher.ALGORITHM}`,\n      PADDING: padding,\n      BLOCK_SIZE: cipher.BLOCK_SIZE,\n      KEY_SIZE: cipher.KEY_SIZE,\n      MIN_KEY_SIZE: cipher.MIN_KEY_SIZE,\n      MAX_KEY_SIZE: cipher.MAX_KEY_SIZE,\n      IV_SIZE: cipher.BLOCK_SIZE,\n      MIN_IV_SIZE: cipher.BLOCK_SIZE,\n      MAX_IV_SIZE: cipher.BLOCK_SIZE,\n    }\n    const suite = (K: Uint8Array, IV: Uint8Array) => {\n      // iv 检查\n      const { BLOCK_SIZE } = cipher\n      if (IV.length !== BLOCK_SIZE) {\n        throw new KitError(`${info.ALGORITHM} iv must be ${BLOCK_SIZE} byte`)\n      }\n      const c = cipher(K)\n      const encrypt = (M: Uint8Array) => {\n        const P = padding(M, BLOCK_SIZE)\n        const C = new U8(P.length)\n        const prev = IV.slice(0)\n        for (let i = 0; i < P.length;) {\n          const offset = i\n          const B = P.subarray(i, i += BLOCK_SIZE)\n          prev.forEach((_, i) => prev[i] ^= B[i])\n          const _C = c.encrypt(prev)\n          C.set(_C, offset)\n          prev.forEach((_, i) => prev[i] = _C[i] ^ B[i])\n        }\n        return C\n      }\n      const decrypt = (C: Uint8Array) => {\n        if (C.length % BLOCK_SIZE !== 0) {\n          throw new KitError('Decryption error')\n        }\n        const P = new U8(C.length)\n        const prev = IV.slice(0)\n        for (let i = 0; i < C.length;) {\n          const offset = i\n          const B = C.slice(i, i += BLOCK_SIZE)\n          const _P = c.decrypt(B)\n          _P.forEach((_, i) => _P[i] ^= prev[i])\n          P.set(_P, offset)\n          B.forEach((_, i) => prev[i] = B[i] ^ _P[i])\n        }\n        return padding(P)\n      }\n      return wrap({ encrypt, decrypt }, info)\n    }\n    return wrap(suite, info)\n  },\n  { ALGORITHM: 'PCBC' },\n)\n\nexport interface CFBMode extends Mode {\n}\n/** 密码反馈模式 / Cipher Feedback Mode */\nexport const cfb = wrap<CFBMode>(\n  (cipher: BlockCipher, padding: Padding = PKCS7_PAD) => {\n    const info: ModeInfo = {\n      ALGORITHM: `CFB-${cipher.ALGORITHM}`,\n      PADDING: padding,\n      BLOCK_SIZE: cipher.BLOCK_SIZE,\n      KEY_SIZE: cipher.KEY_SIZE,\n      MIN_KEY_SIZE: cipher.MIN_KEY_SIZE,\n      MAX_KEY_SIZE: cipher.MAX_KEY_SIZE,\n      IV_SIZE: cipher.BLOCK_SIZE,\n      MIN_IV_SIZE: cipher.BLOCK_SIZE,\n      MAX_IV_SIZE: cipher.BLOCK_SIZE,\n    }\n    const suite = (K: Uint8Array, iv: Uint8Array) => {\n      // iv 检查\n      const { BLOCK_SIZE } = cipher\n      if (iv.length !== BLOCK_SIZE) {\n        throw new KitError(`${info.ALGORITHM} iv must be ${BLOCK_SIZE} byte`)\n      }\n      const c = cipher(K)\n      const encrypt = (M: Uint8Array) => {\n        const P = padding(M, BLOCK_SIZE)\n        const C = new U8(P.length)\n        let prev = iv\n        for (let i = 0; i < P.length;) {\n          const offset = i\n          const B = P.subarray(i, i += BLOCK_SIZE)\n          prev = c.encrypt(prev)\n          prev.forEach((_, i) => prev[i] ^= B[i])\n          C.set(prev.subarray(0, B.length), offset)\n        }\n        return C\n      }\n      const decrypt = (C: Uint8Array) => {\n        const P = new U8(C.length)\n        let prev = iv\n        for (let i = 0; i < C.length;) {\n          const offset = i\n          const B = C.subarray(i, i += BLOCK_SIZE)\n          prev = c.encrypt(prev)\n          B.forEach((_, i) => prev[i] ^= B[i])\n          P.set(prev.subarray(0, B.length), offset)\n          prev = B\n        }\n        return padding(P)\n      }\n      return wrap({ encrypt, decrypt }, info)\n    }\n    return wrap(suite, info)\n  },\n  { ALGORITHM: 'CFB' },\n)\n\nexport interface OFBMode extends Mode {\n}\n/** 输出反馈模式 / Output Feedback Mode */\nexport const ofb = wrap<OFBMode>(\n  (cipher: BlockCipher, padding: Padding = PKCS7_PAD) => {\n    const info: ModeInfo = {\n      ALGORITHM: `OFB-${cipher.ALGORITHM}`,\n      PADDING: padding,\n      BLOCK_SIZE: cipher.BLOCK_SIZE,\n      KEY_SIZE: cipher.KEY_SIZE,\n      MIN_KEY_SIZE: cipher.MIN_KEY_SIZE,\n      MAX_KEY_SIZE: cipher.MAX_KEY_SIZE,\n      IV_SIZE: cipher.BLOCK_SIZE,\n      MIN_IV_SIZE: cipher.BLOCK_SIZE,\n      MAX_IV_SIZE: cipher.BLOCK_SIZE,\n    }\n    const suite = (K: Uint8Array, iv: Uint8Array) => {\n      // iv 检查\n      const { BLOCK_SIZE } = cipher\n      if (iv.length !== BLOCK_SIZE) {\n        throw new KitError(`${info.ALGORITHM} iv must be ${BLOCK_SIZE} byte`)\n      }\n      const c = cipher(K)\n      let prev = c.encrypt(iv)\n      let S = prev\n      let SByte = BLOCK_SIZE\n      const squeeze = (TByte: number) => {\n        if (SByte > TByte) {\n          return S\n        }\n        const buffer = [S]\n        while (SByte < TByte) {\n          prev = c.encrypt(prev)\n          buffer.push(prev)\n          SByte += BLOCK_SIZE\n        }\n        S = joinBuffer(...buffer)\n        return S\n      }\n      const encrypt = (M: Uint8Array) => {\n        const P = padding(M, BLOCK_SIZE)\n        S = squeeze(P.length)\n        return P.map((_, i) => _ ^ S[i])\n      }\n      const decrypt = (C: Uint8Array) => {\n        S = squeeze(C.length)\n        return padding(C.map((_, i) => _ ^ S[i]))\n      }\n      return wrap({ encrypt, decrypt }, info)\n    }\n    return wrap(suite, info)\n  },\n  { ALGORITHM: 'OFB' },\n)\n\nexport interface CTRMode extends Mode {\n}\n/** 计数器模式 / Counter Mode */\nexport const ctr = wrap<CTRMode>(\n  (cipher: BlockCipher, padding: Padding = PKCS7_PAD) => {\n    const info: ModeInfo = {\n      ALGORITHM: `CTR-${cipher.ALGORITHM}`,\n      PADDING: padding,\n      BLOCK_SIZE: cipher.BLOCK_SIZE,\n      KEY_SIZE: cipher.KEY_SIZE,\n      MIN_KEY_SIZE: cipher.MIN_KEY_SIZE,\n      MAX_KEY_SIZE: cipher.MAX_KEY_SIZE,\n      IV_SIZE: cipher.BLOCK_SIZE,\n      MIN_IV_SIZE: cipher.BLOCK_SIZE,\n      MAX_IV_SIZE: cipher.BLOCK_SIZE,\n    }\n    const suite = (K: Uint8Array, iv: Uint8Array) => {\n      // iv 检查\n      const { BLOCK_SIZE } = cipher\n      if (iv.length !== BLOCK_SIZE) {\n        throw new KitError(`{info.ALGORITHM} iv must be ${BLOCK_SIZE} byte`)\n      }\n      const c = cipher(K)\n      const counter = new Counter(iv.slice())\n      let S = new U8()\n      let SByte = 0\n      const squeeze = (TByte: number) => {\n        if (SByte > TByte) {\n          return S\n        }\n        const buffer = [S]\n        while (SByte < TByte) {\n          buffer.push(c.encrypt(counter))\n          counter.inc()\n          SByte += BLOCK_SIZE\n        }\n        S = joinBuffer(...buffer)\n        return S\n      }\n      const encrypt = (M: Uint8Array) => {\n        const P = padding(M, BLOCK_SIZE)\n        S = squeeze(P.length)\n        return P.map((_, i) => _ ^ S[i])\n      }\n      const decrypt = (C: Uint8Array) => {\n        S = squeeze(C.length)\n        return padding(C.map((_, i) => _ ^ S[i]))\n      }\n      return wrap({ encrypt, decrypt }, info)\n    }\n    return wrap(suite, info)\n  },\n  { ALGORITHM: 'CTR' },\n)\n\nexport interface GCMVerifiable {\n  /**\n   * @param {Uint8Array} cipherText - 密文 / ciphertext\n   * @param {Uint8Array} additional_data - 附加数据 / Additional data\n   * @returns {Uint8Array} - 认证标签 / Authentication tag\n   */\n  sign: (cipherText: Uint8Array, additional_data?: Uint8Array) => U8\n  /**\n   * @param {Uint8Array} auth_tag - 认证标签 / Authentication tag\n   * @param {Uint8Array} ciphertext - 密文 / ciphertext\n   * @param {Uint8Array} additional_data - 附加数据 / Additional data\n   */\n  verify: (auth_tag: Uint8Array, ciphertext: Uint8Array, additional_data?: Uint8Array) => boolean\n}\nexport interface GCMModeInfo extends ModeInfo {\n  /**\n   * 认证标签大小 / Authentication tag size (byte)\n   *\n   * @default 16\n   */\n  AUTH_TAG_SIZE: number\n}\nexport interface GCMMode extends ModeBaseInfo {\n  /**\n   * @param {BlockCipher} cipher - 分组加密算法 / Block cipher\n   * @param {Padding} padding - 填充方案 / Padding Scheme (default: PKCS7)\n   * @param {number} tag_size - 标签大小 / Authentication tag size (default: 16)\n   */\n  (cipher: BlockCipher, padding?: Padding, tag_size?: number): {\n    /**\n     * @param {Uint8Array} key - 密钥 / Key\n     * @param {Uint8Array} iv - 初始化向量 / Initialization Vector\n     */\n    (key: Uint8Array, iv: Uint8Array): Cipherable & GCMVerifiable & GCMModeInfo\n  } & GCMModeInfo\n}\nfunction GF128Mul(X: Uint8Array, Y: Uint8Array) {\n  // R: E1000000000000000000000000000000\n  const RH = 0xE1n << 56n\n\n  const YView = new DataView(Y.buffer)\n  let VH = YView.getBigUint64(0, false)\n  let VL = YView.getBigUint64(8, false)\n  let ZH = 0n\n  let ZL = 0n\n\n  for (let i = 0; i < 16; i++) {\n    const x = X[i]\n    for (let j = 7; j >= 0; j--) {\n      if ((x >> j) & 1) {\n        ZH ^= VH\n        ZL ^= VL\n      }\n      const carry = VL & 1n\n      VL = (VH << 63n) | (VL >> 1n)\n      VL = VL & 0xFFFFFFFFFFFFFFFFn\n      VH = (VH >> 1n)\n      if (carry) {\n        VH ^= RH\n      }\n    }\n  }\n\n  const Z = new U8(16)\n  const ZView = new DataView(Z.buffer)\n  ZView.setBigUint64(0, ZH, false)\n  ZView.setBigUint64(8, ZL, false)\n  return Z\n}\nfunction GHASH(H: Uint8Array, A: Uint8Array, C: Uint8Array) {\n  const A_BLOCK_TOTAL = Math.ceil(A.length / 16)\n  const C_BLOCK_TOTAL = Math.ceil(C.length / 16)\n  const D = new Uint8Array((A_BLOCK_TOTAL + C_BLOCK_TOTAL + 1) * 16)\n  const view = new DataView(D.buffer)\n  D.set(A)\n  D.set(C, A_BLOCK_TOTAL * 16)\n  view.setBigUint64(D.length - 16, BigInt(A.length << 3), false)\n  view.setBigUint64(D.length - 8, BigInt(C.length << 3), false)\n  let X = new U8(16)\n  for (let i = 0; i < D.length; i += 16) {\n    const B = D.subarray(i, i + 16)\n    X.forEach((_, i) => X[i] ^= B[i])\n    X = GF128Mul(H, X)\n  }\n  return X\n}\n/** 伽罗瓦计数器模式 / Galois Counter Mode */\nexport const gcm = wrap<GCMMode>(\n  (\n    cipher: BlockCipher,\n    padding: Padding = PKCS7_PAD,\n    tag_size: number = 16,\n  ) => {\n    const { BLOCK_SIZE } = cipher\n    if (BLOCK_SIZE !== 16) {\n      throw new KitError('GCM cipher block must be 128 bit')\n    }\n    const info: GCMModeInfo = {\n      ALGORITHM: `GCM-${cipher.ALGORITHM}`,\n      PADDING: padding,\n      BLOCK_SIZE: cipher.BLOCK_SIZE,\n      KEY_SIZE: cipher.KEY_SIZE,\n      MIN_KEY_SIZE: cipher.MIN_KEY_SIZE,\n      MAX_KEY_SIZE: cipher.MAX_KEY_SIZE,\n      IV_SIZE: 12,\n      MIN_IV_SIZE: 0,\n      MAX_IV_SIZE: Infinity,\n      AUTH_TAG_SIZE: tag_size,\n    }\n    const suite = (K: Uint8Array, iv: Uint8Array) => {\n      const c = cipher(K)\n      const H = c.encrypt(new Uint8Array(BLOCK_SIZE))\n      let IV = new Counter(16)\n      if (iv.length === 12) {\n        IV.set(iv)\n        IV[15] = 1\n      }\n      else {\n        IV = new Counter(GHASH(H, new Uint8Array(), iv.slice(0)))\n      }\n      let S = c.encrypt(IV)\n      let SByte = 0\n      const squeeze = (TByte: number) => {\n        if (SByte > TByte) {\n          return S\n        }\n        const buffer = [S]\n        while (SByte < TByte) {\n          IV.inc()\n          buffer.push(c.encrypt(IV))\n          SByte += BLOCK_SIZE\n        }\n        S = joinBuffer(...buffer)\n        return S\n      }\n      const encrypt = (M: Uint8Array) => {\n        const P = padding(M, BLOCK_SIZE)\n        S = squeeze(P.length)\n        return P.map((_, i) => _ ^ S[i + BLOCK_SIZE])\n      }\n      const decrypt = (C: Uint8Array) => {\n        S = squeeze(C.length)\n        return padding(C.map((_, i) => _ ^ S[i + BLOCK_SIZE]))\n      }\n      const sign = (C: Uint8Array, A: Uint8Array = new Uint8Array()) => {\n        const T = GHASH(H, A, C)\n        T.forEach((_, i) => T[i] ^= S[i])\n        return T.slice(0, tag_size)\n      }\n      const verify = (T: Uint8Array, C: Uint8Array, A?: Uint8Array) => {\n        if (T.length !== tag_size) {\n          return false\n        }\n        const T1 = sign(C, A)\n        return T.every((_, i) => _ === T1[i])\n      }\n      return wrap({ encrypt, decrypt, sign, verify }, info)\n    }\n    return wrap(suite, info)\n  },\n  {\n    ALGORITHM: 'GCM',\n    IV_SIZE: 12,\n  },\n)\n","import { createCipher } from '../../core/cipher'\nimport { KitError, U8 } from '../../core/utils'\n\n// * Constants\n\nconst SBox = new Uint8Array([0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75, 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8, 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73, 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB, 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79, 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08, 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A, 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF, 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16])\nconst InvSBox = new Uint8Array([0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB, 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB, 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E, 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25, 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92, 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84, 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06, 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B, 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73, 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E, 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B, 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4, 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F, 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF, 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D])\nconst ROUND = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1B, 0x36]\n\n// * Functions\n\nfunction GFMultiply(a: number, b: number): number {\n  let p = 0\n  if (b === 1) {\n    return a\n  }\n  for (let i = 0; i < 8; i++) {\n    if (b & 1) {\n      p ^= a\n    }\n    const carry = a & 0x80\n    a <<= 1\n    if (carry) {\n      a ^= 0x1B // 0x1B 是不可约多项式 x^8 + x^4 + x^3 + x + 1 的低 8 位\n    }\n    b >>= 1\n  }\n  return p & 0xFF\n}\n\nfunction KeyExpansion(K: Uint8Array, Nr: 10 | 12 | 14) {\n  const Nk = K.byteLength >> 2\n  const W = new Uint8Array((Nr + 1) << 4)\n  W.set(K)\n  let current = 0\n  for (let i = Nk; i < (Nr + 1) << 2; i++) {\n    const i_1 = (i - 1) << 2\n    const temp = W.slice(i_1, i_1 + 4)\n    if (i % Nk === 0) {\n      const t0 = temp[0]\n      temp[0] = SBox[temp[1]] ^ ROUND[current]\n      temp[1] = SBox[temp[2]]\n      temp[2] = SBox[temp[3]]\n      temp[3] = SBox[t0]\n\n      current++\n    }\n    else if (Nk > 6 && i % Nk === 4) {\n      temp[0] = SBox[temp[0]]\n      temp[1] = SBox[temp[1]]\n      temp[2] = SBox[temp[2]]\n      temp[3] = SBox[temp[3]]\n    }\n    const i_Nk = (i - Nk) << 2\n    const Wi_NK = W.subarray(i_Nk, i_Nk + 4)\n    for (let j = 0; j < 4; j++) {\n      temp[j] ^= Wi_NK[j]\n    }\n    W.set(temp, i << 2)\n  }\n  return W\n}\n\n// * AES Algorithm\n\nfunction Cipher(M: Uint8Array, W: Uint8Array, Nr: 10 | 12 | 14) {\n  if (M.byteLength !== 16) {\n    throw new KitError(`AES block must be 16 byte`)\n  }\n  const S = new U8(M.slice(0))\n\n  const AddRoundKey = (W: Uint8Array) => {\n    for (let i = 0; i < S.byteLength; i++) {\n      S[i] ^= W[i]\n    }\n  }\n  const SubBytes = () => {\n    for (let i = 0; i < S.byteLength; i++) {\n      S[i] = SBox[S[i]]\n    }\n  }\n  const ShiftRows = () => {\n    const S1 = S[1]\n    S[1] = S[5]\n    S[5] = S[9]\n    S[9] = S[13]\n    S[13] = S1\n\n    const S2 = S[2]\n    const S6 = S[6]\n    S[2] = S[10]\n    S[6] = S[14]\n    S[10] = S2\n    S[14] = S6\n\n    const S15 = S[15]\n    S[15] = S[11]\n    S[11] = S[7]\n    S[7] = S[3]\n    S[3] = S15\n  }\n  const MixColumn = () => {\n    for (let i = 0; i < 4; i++) {\n      const s0 = S[(i << 2)]\n      const s1 = S[(i << 2) + 1]\n      const s2 = S[(i << 2) + 2]\n      const s3 = S[(i << 2) + 3]\n\n      const t0 = GFMultiply(s0, 0x02) ^ GFMultiply(s1, 0x03) ^ GFMultiply(s2, 0x01) ^ GFMultiply(s3, 0x01)\n      const t1 = GFMultiply(s0, 0x01) ^ GFMultiply(s1, 0x02) ^ GFMultiply(s2, 0x03) ^ GFMultiply(s3, 0x01)\n      const t2 = GFMultiply(s0, 0x01) ^ GFMultiply(s1, 0x01) ^ GFMultiply(s2, 0x02) ^ GFMultiply(s3, 0x03)\n      const t3 = GFMultiply(s0, 0x03) ^ GFMultiply(s1, 0x01) ^ GFMultiply(s2, 0x01) ^ GFMultiply(s3, 0x02)\n\n      S[(i << 2)] = t0\n      S[(i << 2) + 1] = t1\n      S[(i << 2) + 2] = t2\n      S[(i << 2) + 3] = t3\n    }\n  }\n\n  AddRoundKey(W.subarray(0, 16))\n  for (let i = 1; i < Nr; i++) {\n    SubBytes()\n    ShiftRows()\n    MixColumn()\n    AddRoundKey(W.subarray(i << 4, (i + 1) << 4))\n  }\n  SubBytes()\n  ShiftRows()\n  AddRoundKey(W.subarray(W.length - 16, W.length))\n\n  return S\n}\n\nfunction InvCipher(M: Uint8Array, W: Uint8Array, Nr: 10 | 12 | 14) {\n  if (M.byteLength !== 16) {\n    throw new KitError(`AES block must be 16 byte`)\n  }\n  const S = new U8(M.slice(0))\n\n  const AddRoundKey = (W: Uint8Array) => {\n    for (let i = 0; i < S.byteLength; i++) {\n      S[i] ^= W[i]\n    }\n  }\n  const InvSubBytes = () => {\n    for (let i = 0; i < S.byteLength; i++) {\n      S[i] = InvSBox[S[i]]\n    }\n  }\n  const InvShiftRows = () => {\n    const S13 = S[13]\n    S[13] = S[9]\n    S[9] = S[5]\n    S[5] = S[1]\n    S[1] = S13\n\n    const S2 = S[2]\n    const S6 = S[6]\n    S[2] = S[10]\n    S[6] = S[14]\n    S[10] = S2\n    S[14] = S6\n\n    const S3 = S[3]\n    S[3] = S[7]\n    S[7] = S[11]\n    S[11] = S[15]\n    S[15] = S3\n  }\n  const InvMixColumn = () => {\n    for (let i = 0; i < 4; i++) {\n      const s0 = S[(i << 2)]\n      const s1 = S[(i << 2) + 1]\n      const s2 = S[(i << 2) + 2]\n      const s3 = S[(i << 2) + 3]\n\n      const t0 = GFMultiply(s0, 0x0E) ^ GFMultiply(s1, 0x0B) ^ GFMultiply(s2, 0x0D) ^ GFMultiply(s3, 0x09)\n      const t1 = GFMultiply(s0, 0x09) ^ GFMultiply(s1, 0x0E) ^ GFMultiply(s2, 0x0B) ^ GFMultiply(s3, 0x0D)\n      const t2 = GFMultiply(s0, 0x0D) ^ GFMultiply(s1, 0x09) ^ GFMultiply(s2, 0x0E) ^ GFMultiply(s3, 0x0B)\n      const t3 = GFMultiply(s0, 0x0B) ^ GFMultiply(s1, 0x0D) ^ GFMultiply(s2, 0x09) ^ GFMultiply(s3, 0x0E)\n\n      S[(i << 2)] = t0\n      S[(i << 2) + 1] = t1\n      S[(i << 2) + 2] = t2\n      S[(i << 2) + 3] = t3\n    }\n  }\n\n  AddRoundKey(W.subarray(W.length - 16, W.length))\n  for (let i = Nr - 1; i > 0; i--) {\n    InvShiftRows()\n    InvSubBytes()\n    AddRoundKey(W.subarray(i << 4, (i + 1) << 4))\n    InvMixColumn()\n  }\n  InvShiftRows()\n  InvSubBytes()\n  AddRoundKey(W.subarray(0, 16))\n\n  return S\n}\n\nfunction _aes(K: Uint8Array, b: 128 | 192 | 256) {\n  if (K.byteLength !== b >> 3) {\n    throw new KitError(`AES key must be ${b >> 3} byte`)\n  }\n  const Nr = b === 128 ? 10 : (b === 192 ? 12 : 14)\n  const W = KeyExpansion(K, Nr)\n\n  return {\n    encrypt: (M: Uint8Array) => Cipher(M, W, Nr),\n    decrypt: (C: Uint8Array) => InvCipher(C, W, Nr),\n  }\n}\n\n/**\n * 高级加密标准 (AES) 分组密码算法\n *\n * Advanced Encryption Standard (AES) block cipher algorithm\n *\n * @param {128 | 192 | 256} b - 密钥长度 / Key size (bit)\n */\nexport function aes(b: 128 | 192 | 256) {\n  return createCipher(\n    (K: Uint8Array) => _aes(K, b),\n    {\n      ALGORITHM: `AES-${b}`,\n      BLOCK_SIZE: 16,\n      KEY_SIZE: b >> 3,\n      MIN_KEY_SIZE: b >> 3,\n      MAX_KEY_SIZE: b >> 3,\n    },\n  )\n}\n","import { createCipher } from '../../core/cipher'\nimport { genBitMask, KitError, resizeBuffer, rotateL, rotateR, U8 } from '../../core/utils'\n\n// const Eul = [0xB7, 0xE1, 0x51, 0x62, 0x8A, 0xED, 0x2A, 0x6A, 0xBF, 0x71, 0x58, 0x80, 0x9C, 0xF4, 0xF3, 0xC7, 0x62, 0xE7, 0x16, 0x0F, 0x38, 0xB4, 0xDA, 0x56, 0xA7, 0x84, 0xD9, 0x04, 0x51, 0x90, 0xCF, 0xEF]\n// const Phi = [0x9E, 0x37, 0x79, 0xB9, 0x7F, 0x4A, 0x7C, 0x15, 0xF3, 0x9C, 0xC0, 0x60, 0x5C, 0xED, 0xC8, 0x34, 0x10, 0x82, 0x27, 0x6B, 0xF3, 0xA2, 0x72, 0x51, 0xF8, 0x6C, 0x6A, 0x11, 0xD0, 0xC1, 0x8E, 0x95]\n// const P = Eul{0,...,w-1} - 2) | 1\n// const Q = Phi{0,...,w-1} - 2) | 1\n\n// * Functions\n\nfunction _setup(key: Uint8Array, word_size: number, round: number, mask: bigint) {\n  const word_bit = BigInt(word_size)\n  const word_byte = word_size >> 3\n  const P = (0xB7E151628AED2A6ABF7158809CF4F3C7n >> (128n - word_bit)) | 1n\n  const Q = (0x9E3779B97F4A7C15F39CC0605CEDC835n >> (128n - word_bit)) | 1n\n  // Break the key into w-bit words\n  const c = Math.ceil((key.length || 1) / word_byte)\n  const L = resizeBuffer(key, c * word_byte)\n  const LV = L.view(word_byte)\n  // Initialize key-independent pseudorandom S array\n  const t = (round + 1) << 1\n  const S = new U8(t * word_byte)\n  const SV = S.view(word_byte)\n  // S[0] = P\n  let prv = P\n  SV.set(0, prv, true)\n  for (let i = 1; i < t; i++) {\n    // S[i] = S[i-1] + Q\n    prv = (prv + Q) & mask\n    SV.set(i, prv, true)\n  }\n  // The main key scheduling loop\n  let i = 0\n  let j = 0\n  let A = 0n\n  let B = 0n\n  const v = 3 * Math.max(c, t)\n  for (let k = 0; k < v; k++) {\n    // A = S[i] = (S[i] + A + B) <<< 3\n    const S = SV.get(i, true)\n    A = rotateL(word_bit, S + A + B, 3n, mask)\n    SV.set(i, A, true)\n    // B = L[j] = (L[j] + A + B) <<< (A + B)\n    const L = LV.get(j, true)\n    B = rotateL(word_bit, L + A + B, A + B, mask)\n    LV.set(j, B, true)\n    // i = (i + 1) mod t\n    i = (i + 1) % t\n    // j = (j + 1) mod c\n    j = (j + 1) % c\n  }\n  return S\n}\nfunction _encrypt(M: Uint8Array, S: Uint8Array, word_size: number, round: number, mask: bigint) {\n  if (M.byteLength !== word_size >> 2) {\n    throw new KitError(`ARC5-${word_size}/${round} block must be ${word_size >> 3} byte`)\n  }\n  const word_bit = BigInt(word_size)\n  const word_byte = word_size >> 3\n  const MV = U8.from(M).view(word_byte)\n  const SV = U8.from(S).view(word_byte)\n  // A = M[0] + S[0], B = M[1] + S[1]\n  let A = MV.get(0, true) + SV.get(0, true)\n  let B = MV.get(1, true) + SV.get(1, true)\n  A &= mask\n  B &= mask\n  for (let i = 1; i <= round; i++) {\n    // A = ((A ^ B) <<< B) + S[2 * i]\n    A = rotateL(word_bit, A ^ B, B, mask)\n    A += SV.get(i << 1, true)\n    A &= mask\n    // B = ((B ^ A) <<< A) + S[2 * i + 1]\n    B = rotateL(word_bit, B ^ A, A, mask)\n    B += SV.get((i << 1) + 1, true)\n    B &= mask\n  }\n  return U8.fromBI(B << word_bit | A, word_byte << 1, true)\n}\nfunction _decrypt(C: Uint8Array, S: Uint8Array, word_size: number, round: number, mask: bigint) {\n  if (C.byteLength !== word_size >> 2) {\n    throw new KitError(`ARC5-${word_size}/${round} block must be ${word_size >> 3} byte`)\n  }\n  const word_bit = BigInt(word_size)\n  const word_byte = word_size >> 3\n  const CV = U8.from(C).view(word_byte)\n  const SV = U8.from(S).view(word_byte)\n  // A = C[0], B = C[1]\n  let A = CV.get(0, true)\n  let B = CV.get(1, true)\n  for (let i = round; i > 0; i--) {\n    // B = ((B - S[2 * i + 1]) >>> A) ^ A\n    const S1 = SV.get((i << 1) + 1, true)\n    B = rotateR(word_bit, B - S1, A, mask)\n    B = B ^ A\n    B &= mask\n    // A = ((A - S[2 * i]) >>> B) ^ B\n    const S0 = SV.get(i << 1, true)\n    A = rotateR(word_bit, A - S0, B, mask)\n    A = A ^ B\n    A &= mask\n  }\n  // A = A - S[0], B = B - S[1]\n  A = A - SV.get(0, true)\n  A &= mask\n  B = B - SV.get(1, true)\n  B &= mask\n  return U8.fromBI(B << word_bit | A, word_byte << 1, true)\n}\n\n// * ARC5 Algorithm\n\nfunction _arc5(K: Uint8Array, WORD_SIZE: 8 | 16 | 32 | 64 | 128, round: number) {\n  const mask = genBitMask(WORD_SIZE)\n  const S = _setup(K, WORD_SIZE, round, mask)\n  const encrypt = (M: Uint8Array) => _encrypt(M, S, WORD_SIZE, round, mask)\n  const decrypt = (C: Uint8Array) => _decrypt(C, S, WORD_SIZE, round, mask)\n  return { encrypt, decrypt }\n}\n\n/**\n * ARC5 分组加密算法 / block cipher algorithm\n *\n * ```ts\n * const spec8 = arc5(8, 8) // ARC5-8/8\n * const spec16 = arc5(16, 12) // ARC5-16/12\n * const spec32 = arc5(32, 16) // ARC5-32/16 (default)\n * const spec64 = arc5(64, 20) // ARC5-64/20\n * const spec128 = arc5(128, 24) // ARC5-128/24\n * ```\n *\n * @param {16 | 32 | 64} WORD_SIZE - 工作字长 / Word size (default: 32 bit)\n * @param {number} round - 轮数 / Rounds (default: 16)\n */\nexport function arc5(WORD_SIZE: 8 | 16 | 32 | 64 | 128 = 32, round: number = 16) {\n  if (round <= 0 || round > 255) {\n    throw new KitError('ARC5 round must be between 1 and 255')\n  }\n  return createCipher(\n    (K: Uint8Array) => _arc5(K, WORD_SIZE, round),\n    {\n      ALGORITHM: `ARC5-${WORD_SIZE}/${round}`,\n      BLOCK_SIZE: WORD_SIZE >> 2,\n      KEY_SIZE: 16,\n      MIN_KEY_SIZE: 1,\n      MAX_KEY_SIZE: 255,\n    },\n  )\n}\n","import { createCipher } from '../../core/cipher'\nimport { KitError, U8 } from '../../core/utils'\n\n// * Constants\n\nconst SBox1 = new Uint8Array([0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75, 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8, 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73, 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB, 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79, 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08, 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A, 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF, 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16])\nconst SBox2 = new Uint8Array([0xE2, 0x4E, 0x54, 0xFC, 0x94, 0xC2, 0x4A, 0xCC, 0x62, 0x0D, 0x6A, 0x46, 0x3C, 0x4D, 0x8B, 0xD1, 0x5E, 0xFA, 0x64, 0xCB, 0xB4, 0x97, 0xBE, 0x2B, 0xBC, 0x77, 0x2E, 0x03, 0xD3, 0x19, 0x59, 0xC1, 0x1D, 0x06, 0x41, 0x6B, 0x55, 0xF0, 0x99, 0x69, 0xEA, 0x9C, 0x18, 0xAE, 0x63, 0xDF, 0xE7, 0xBB, 0x00, 0x73, 0x66, 0xFB, 0x96, 0x4C, 0x85, 0xE4, 0x3A, 0x09, 0x45, 0xAA, 0x0F, 0xEE, 0x10, 0xEB, 0x2D, 0x7F, 0xF4, 0x29, 0xAC, 0xCF, 0xAD, 0x91, 0x8D, 0x78, 0xC8, 0x95, 0xF9, 0x2F, 0xCE, 0xCD, 0x08, 0x7A, 0x88, 0x38, 0x5C, 0x83, 0x2A, 0x28, 0x47, 0xDB, 0xB8, 0xC7, 0x93, 0xA4, 0x12, 0x53, 0xFF, 0x87, 0x0E, 0x31, 0x36, 0x21, 0x58, 0x48, 0x01, 0x8E, 0x37, 0x74, 0x32, 0xCA, 0xE9, 0xB1, 0xB7, 0xAB, 0x0C, 0xD7, 0xC4, 0x56, 0x42, 0x26, 0x07, 0x98, 0x60, 0xD9, 0xB6, 0xB9, 0x11, 0x40, 0xEC, 0x20, 0x8C, 0xBD, 0xA0, 0xC9, 0x84, 0x04, 0x49, 0x23, 0xF1, 0x4F, 0x50, 0x1F, 0x13, 0xDC, 0xD8, 0xC0, 0x9E, 0x57, 0xE3, 0xC3, 0x7B, 0x65, 0x3B, 0x02, 0x8F, 0x3E, 0xE8, 0x25, 0x92, 0xE5, 0x15, 0xDD, 0xFD, 0x17, 0xA9, 0xBF, 0xD4, 0x9A, 0x7E, 0xC5, 0x39, 0x67, 0xFE, 0x76, 0x9D, 0x43, 0xA7, 0xE1, 0xD0, 0xF5, 0x68, 0xF2, 0x1B, 0x34, 0x70, 0x05, 0xA3, 0x8A, 0xD5, 0x79, 0x86, 0xA8, 0x30, 0xC6, 0x51, 0x4B, 0x1E, 0xA6, 0x27, 0xF6, 0x35, 0xD2, 0x6E, 0x24, 0x16, 0x82, 0x5F, 0xDA, 0xE6, 0x75, 0xA2, 0xEF, 0x2C, 0xB2, 0x1C, 0x9F, 0x5D, 0x6F, 0x80, 0x0A, 0x72, 0x44, 0x9B, 0x6C, 0x90, 0x0B, 0x5B, 0x33, 0x7D, 0x5A, 0x52, 0xF3, 0x61, 0xA1, 0xF7, 0xB0, 0xD6, 0x3F, 0x7C, 0x6D, 0xED, 0x14, 0xE0, 0xA5, 0x3D, 0x22, 0xB3, 0xF8, 0x89, 0xDE, 0x71, 0x1A, 0xAF, 0xBA, 0xB5, 0x81])\nconst SBox3 = new Uint8Array([0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB, 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB, 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E, 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25, 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92, 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84, 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06, 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B, 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73, 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E, 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B, 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4, 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F, 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF, 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D])\nconst SBox4 = new Uint8Array([0x30, 0x68, 0x99, 0x1B, 0x87, 0xB9, 0x21, 0x78, 0x50, 0x39, 0xDB, 0xE1, 0x72, 0x09, 0x62, 0x3C, 0x3E, 0x7E, 0x5E, 0x8E, 0xF1, 0xA0, 0xCC, 0xA3, 0x2A, 0x1D, 0xFB, 0xB6, 0xD6, 0x20, 0xC4, 0x8D, 0x81, 0x65, 0xF5, 0x89, 0xCB, 0x9D, 0x77, 0xC6, 0x57, 0x43, 0x56, 0x17, 0xD4, 0x40, 0x1A, 0x4D, 0xC0, 0x63, 0x6C, 0xE3, 0xB7, 0xC8, 0x64, 0x6A, 0x53, 0xAA, 0x38, 0x98, 0x0C, 0xF4, 0x9B, 0xED, 0x7F, 0x22, 0x76, 0xAF, 0xDD, 0x3A, 0x0B, 0x58, 0x67, 0x88, 0x06, 0xC3, 0x35, 0x0D, 0x01, 0x8B, 0x8C, 0xC2, 0xE6, 0x5F, 0x02, 0x24, 0x75, 0x93, 0x66, 0x1E, 0xE5, 0xE2, 0x54, 0xD8, 0x10, 0xCE, 0x7A, 0xE8, 0x08, 0x2C, 0x12, 0x97, 0x32, 0xAB, 0xB4, 0x27, 0x0A, 0x23, 0xDF, 0xEF, 0xCA, 0xD9, 0xB8, 0xFA, 0xDC, 0x31, 0x6B, 0xD1, 0xAD, 0x19, 0x49, 0xBD, 0x51, 0x96, 0xEE, 0xE4, 0xA8, 0x41, 0xDA, 0xFF, 0xCD, 0x55, 0x86, 0x36, 0xBE, 0x61, 0x52, 0xF8, 0xBB, 0x0E, 0x82, 0x48, 0x69, 0x9A, 0xE0, 0x47, 0x9E, 0x5C, 0x04, 0x4B, 0x34, 0x15, 0x79, 0x26, 0xA7, 0xDE, 0x29, 0xAE, 0x92, 0xD7, 0x84, 0xE9, 0xD2, 0xBA, 0x5D, 0xF3, 0xC5, 0xB0, 0xBF, 0xA4, 0x3B, 0x71, 0x44, 0x46, 0x2B, 0xFC, 0xEB, 0x6F, 0xD5, 0xF6, 0x14, 0xFE, 0x7C, 0x70, 0x5A, 0x7D, 0xFD, 0x2F, 0x18, 0x83, 0x16, 0xA5, 0x91, 0x1F, 0x05, 0x95, 0x74, 0xA9, 0xC1, 0x5B, 0x4A, 0x85, 0x6D, 0x13, 0x07, 0x4F, 0x4E, 0x45, 0xB2, 0x0F, 0xC9, 0x1C, 0xA6, 0xBC, 0xEC, 0x73, 0x90, 0x7B, 0xCF, 0x59, 0x8F, 0xA1, 0xF9, 0x2D, 0xF2, 0xB1, 0x00, 0x94, 0x37, 0x9F, 0xD0, 0x2E, 0x9C, 0x6E, 0x28, 0x3F, 0x80, 0xF0, 0x3D, 0xD3, 0x25, 0x8A, 0xB5, 0xE7, 0x42, 0xB3, 0xC7, 0xEA, 0xF7, 0x4C, 0x11, 0x33, 0x03, 0xA2, 0xAC, 0x60])\n\nconst C1 = new Uint8Array([0x51, 0x7C, 0xC1, 0xB7, 0x27, 0x22, 0x0A, 0x94, 0xFE, 0x13, 0xAB, 0xE8, 0xFA, 0x9A, 0x6E, 0xE0])\nconst C2 = new Uint8Array([0x6D, 0xB1, 0x4A, 0xCC, 0x9E, 0x21, 0xC8, 0x20, 0xFF, 0x28, 0xB1, 0xD5, 0xEF, 0x5D, 0xE2, 0xB0])\nconst C3 = new Uint8Array([0xDB, 0x92, 0x37, 0x1D, 0x21, 0x26, 0xE9, 0x70, 0x03, 0x24, 0x97, 0x75, 0x04, 0xE8, 0xC9, 0x0E])\n\n// * Functions\n\nfunction RL128(x: Uint8Array, n: number) {\n  const x_byte = x.length\n  const x_bit = x_byte << 3\n\n  // 规范化移位数\n  const shift = n % x_bit\n  if (shift === 0) {\n    return x.slice(0)\n  }\n\n  // 计算字节和位移\n  const byte_shift = shift >> 3\n  const bit_shift = shift % 8\n\n  const result = new U8(x.length)\n  for (let i = 0; i < x_byte; i++) {\n    const current = x[i]\n    const next = x[(i + 1) % x_byte]\n\n    result[i] = (current << bit_shift) | (next >> (8 - bit_shift))\n  }\n\n  // 处理字节移位\n  if (byte_shift > 0) {\n    const temp = new Uint8Array(result)\n    for (let i = 0; i < x_byte; i++) {\n      result[i] = temp[(i + byte_shift) % x_byte]\n    }\n  }\n\n  return result\n}\nfunction RR128(x: Uint8Array, n: number) {\n  const x_byte = x.length\n  const x_bit = x_byte << 3\n\n  // 规范化移位数\n  const shift = n % x_bit\n  if (shift === 0) {\n    return x.slice(0)\n  }\n\n  // 计算字节和位移\n  const byte_shift = shift >> 3\n  const bit_shift = shift % 8\n\n  const result = new U8(x.length)\n  for (let i = 0; i < x_byte; i++) {\n    const current = x[i]\n    const next = x[(i - 1 + x_byte) % x_byte]\n\n    result[i] = (current >> bit_shift) | (next << (8 - bit_shift))\n  }\n\n  // 处理字节移位\n  if (byte_shift > 0) {\n    const temp = new Uint8Array(result)\n    for (let i = 0; i < x_byte; i++) {\n      result[i] = temp[(i - byte_shift + x_byte) % x_byte]\n    }\n  }\n\n  return result\n}\nfunction XOR(x: Uint8Array, y: Uint8Array) {\n  return x.map((_, i) => x[i] ^ y[i])\n}\n\nfunction FO(D: Uint8Array, RK: Uint8Array) {\n  return A(SL1(XOR(D, RK)))\n}\nfunction FE(D: Uint8Array, RK: Uint8Array) {\n  return A(SL2(XOR(D, RK)))\n}\nfunction SL1(x: Uint8Array) {\n  const y = new Uint8Array(16)\n  // y0  = SB1(x0),  y1  = SB2(x1),  y2  = SB3(x2),  y3  = SB4(x3),\n  // y4  = SB1(x4),  y5  = SB2(x5),  y6  = SB3(x6),  y7  = SB4(x7),\n  // y8  = SB1(x8),  y9  = SB2(x9),  y10 = SB3(x10), y11 = SB4(x11),\n  // y12 = SB1(x12), y13 = SB2(x13), y14 = SB3(x14), y15 = SB4(x15).\n  y[0] = SBox1[x[0]]\n  y[1] = SBox2[x[1]]\n  y[2] = SBox3[x[2]]\n  y[3] = SBox4[x[3]]\n  y[4] = SBox1[x[4]]\n  y[5] = SBox2[x[5]]\n  y[6] = SBox3[x[6]]\n  y[7] = SBox4[x[7]]\n  y[8] = SBox1[x[8]]\n  y[9] = SBox2[x[9]]\n  y[10] = SBox3[x[10]]\n  y[11] = SBox4[x[11]]\n  y[12] = SBox1[x[12]]\n  y[13] = SBox2[x[13]]\n  y[14] = SBox3[x[14]]\n  y[15] = SBox4[x[15]]\n  return y\n}\nfunction SL2(x: Uint8Array) {\n  const y = new Uint8Array(16)\n  // y0  = SB3(x0),  y1  = SB4(x1),  y2  = SB1(x2),  y3  = SB2(x3),\n  // y4  = SB3(x4),  y5  = SB4(x5),  y6  = SB1(x6),  y7  = SB2(x7),\n  // y8  = SB3(x8),  y9  = SB4(x9),  y10 = SB1(x10), y11 = SB2(x11),\n  // y12 = SB3(x12), y13 = SB4(x13), y14 = SB1(x14), y15 = SB2(x15).\n  y[0] = SBox3[x[0]]\n  y[1] = SBox4[x[1]]\n  y[2] = SBox1[x[2]]\n  y[3] = SBox2[x[3]]\n  y[4] = SBox3[x[4]]\n  y[5] = SBox4[x[5]]\n  y[6] = SBox1[x[6]]\n  y[7] = SBox2[x[7]]\n  y[8] = SBox3[x[8]]\n  y[9] = SBox4[x[9]]\n  y[10] = SBox1[x[10]]\n  y[11] = SBox2[x[11]]\n  y[12] = SBox3[x[12]]\n  y[13] = SBox4[x[13]]\n  y[14] = SBox1[x[14]]\n  y[15] = SBox2[x[15]]\n  return y\n}\nfunction A(x: Uint8Array) {\n  const y = new Uint8Array(16)\n  // y0  = x3 ^ x4 ^ x6 ^ x8  ^ x9  ^ x13 ^ x14\n  // y1  = x2 ^ x5 ^ x7 ^ x8  ^ x9  ^ x12 ^ x15\n  // y2  = x1 ^ x4 ^ x6 ^ x10 ^ x11 ^ x12 ^ x15\n  // y3  = x0 ^ x5 ^ x7 ^ x10 ^ x11 ^ x13 ^ x14\n  // y4  = x0 ^ x2 ^ x5 ^ x8  ^ x11 ^ x14 ^ x15\n  // y5  = x1 ^ x3 ^ x4 ^ x9  ^ x10 ^ x14 ^ x15\n  // y6  = x0 ^ x2 ^ x7 ^ x9  ^ x10 ^ x12 ^ x13\n  // y7  = x1 ^ x3 ^ x6 ^ x8  ^ x11 ^ x12 ^ x13\n  // y8  = x0 ^ x1 ^ x4 ^ x7  ^ x10 ^ x13 ^ x15\n  // y9  = x0 ^ x1 ^ x5 ^ x6  ^ x11 ^ x12 ^ x14\n  // y10 = x2 ^ x3 ^ x5 ^ x6  ^ x8  ^ x13 ^ x15\n  // y11 = x2 ^ x3 ^ x4 ^ x7  ^ x9  ^ x12 ^ x14\n  // y12 = x1 ^ x2 ^ x6 ^ x7  ^ x9  ^ x11 ^ x12\n  // y13 = x0 ^ x3 ^ x6 ^ x7  ^ x8  ^ x10 ^ x13\n  // y14 = x0 ^ x3 ^ x4 ^ x5  ^ x9  ^ x11 ^ x14\n  // y15 = x1 ^ x2 ^ x4 ^ x5  ^ x8  ^ x10 ^ x15\n  y[0] = x[3] ^ x[4] ^ x[6] ^ x[8] ^ x[9] ^ x[13] ^ x[14]\n  y[1] = x[2] ^ x[5] ^ x[7] ^ x[8] ^ x[9] ^ x[12] ^ x[15]\n  y[2] = x[1] ^ x[4] ^ x[6] ^ x[10] ^ x[11] ^ x[12] ^ x[15]\n  y[3] = x[0] ^ x[5] ^ x[7] ^ x[10] ^ x[11] ^ x[13] ^ x[14]\n  y[4] = x[0] ^ x[2] ^ x[5] ^ x[8] ^ x[11] ^ x[14] ^ x[15]\n  y[5] = x[1] ^ x[3] ^ x[4] ^ x[9] ^ x[10] ^ x[14] ^ x[15]\n  y[6] = x[0] ^ x[2] ^ x[7] ^ x[9] ^ x[10] ^ x[12] ^ x[13]\n  y[7] = x[1] ^ x[3] ^ x[6] ^ x[8] ^ x[11] ^ x[12] ^ x[13]\n  y[8] = x[0] ^ x[1] ^ x[4] ^ x[7] ^ x[10] ^ x[13] ^ x[15]\n  y[9] = x[0] ^ x[1] ^ x[5] ^ x[6] ^ x[11] ^ x[12] ^ x[14]\n  y[10] = x[2] ^ x[3] ^ x[5] ^ x[6] ^ x[8] ^ x[13] ^ x[15]\n  y[11] = x[2] ^ x[3] ^ x[4] ^ x[7] ^ x[9] ^ x[12] ^ x[14]\n  y[12] = x[1] ^ x[2] ^ x[6] ^ x[7] ^ x[9] ^ x[11] ^ x[12]\n  y[13] = x[0] ^ x[3] ^ x[6] ^ x[7] ^ x[8] ^ x[10] ^ x[13]\n  y[14] = x[0] ^ x[3] ^ x[4] ^ x[5] ^ x[9] ^ x[11] ^ x[14]\n  y[15] = x[1] ^ x[2] ^ x[4] ^ x[5] ^ x[8] ^ x[10] ^ x[15]\n  return y\n}\n\nfunction KeyScheduling(K: Uint8Array, round: 12 | 14 | 16) {\n  const _K = new Uint8Array(32)\n  _K.set(K)\n  K = _K\n  const KL = new Uint8Array(16)\n  const KR = new Uint8Array(16)\n  KL.set(K.subarray(0, 16))\n  KR.set(K.subarray(16, 32))\n\n  let CK1: Uint8Array, CK2: Uint8Array, CK3: Uint8Array\n  switch (round) {\n    case 12:\n      CK1 = C1\n      CK2 = C2\n      CK3 = C3\n      break\n    case 14:\n      CK1 = C2\n      CK2 = C3\n      CK3 = C1\n      break\n    case 16:\n      CK1 = C3\n      CK2 = C1\n      CK3 = C2\n      break\n  }\n\n  const W0 = new Uint8Array(16)\n  const W1 = new Uint8Array(16)\n  const W2 = new Uint8Array(16)\n  const W3 = new Uint8Array(16)\n  W0.set(KL)\n  W1.set(FO(W0, CK1))\n  W1.forEach((_, i) => W1[i] ^= KR[i])\n  W2.set(FE(W1, CK2))\n  W2.forEach((_, i) => W2[i] ^= W0[i])\n  W3.set(FO(W2, CK3))\n  W3.forEach((_, i) => W3[i] ^= W1[i])\n\n  const EK = computeEK([W0, W1, W2, W3], round)\n  const DK = computeDK(EK, round)\n\n  return { EK, DK }\n}\nfunction computeEK(W: Uint8Array[], round: 12 | 14 | 16) {\n  const [W0, W1, W2, W3] = W\n  // ek1  = W0 ^ (W1 >>> 19)\n  // ek2  = W1 ^ (W2 >>> 19)\n  // ek3  = W2 ^ (W3 >>> 19)\n  // ek4  = W3 ^ (W0 >>> 19)\n  // ek5  = W0 ^ (W1 >>> 31)\n  // ek6  = W1 ^ (W2 >>> 31)\n  // ek7  = W2 ^ (W3 >>> 31)\n  // ek8  = W3 ^ (W0 >>> 31)\n  // ek9  = W0 ^ (W1 <<< 61)\n  // ek10 = W1 ^ (W2 <<< 61)\n  // ek11 = W2 ^ (W3 <<< 61)\n  // ek12 = W3 ^ (W0 <<< 61)\n  // ek13 = W0 ^ (W1 <<< 31)\n  // ek14 = W1 ^ (W2 <<< 31)\n  // ek15 = W2 ^ (W3 <<< 31)\n  // ek16 = W3 ^ (W0 <<< 31)\n  // ek17 = W0 ^ (W1 <<< 19)\n  const ek01 = XOR(RR128(W1, 19), W0)\n  const ek02 = XOR(RR128(W2, 19), W1)\n  const ek03 = XOR(RR128(W3, 19), W2)\n  const ek04 = XOR(RR128(W0, 19), W3)\n  const ek05 = XOR(RR128(W1, 31), W0)\n  const ek06 = XOR(RR128(W2, 31), W1)\n  const ek07 = XOR(RR128(W3, 31), W2)\n  const ek08 = XOR(RR128(W0, 31), W3)\n  const ek09 = XOR(RL128(W1, 61), W0)\n  const ek10 = XOR(RL128(W2, 61), W1)\n  const ek11 = XOR(RL128(W3, 61), W2)\n  const ek12 = XOR(RL128(W0, 61), W3)\n  const ek13 = XOR(RL128(W1, 31), W0)\n  if (round === 12) {\n    return [ek01, ek02, ek03, ek04, ek05, ek06, ek07, ek08, ek09, ek10, ek11, ek12, ek13]\n  }\n  const ek14 = XOR(RL128(W2, 31), W1)\n  const ek15 = XOR(RL128(W3, 31), W2)\n  if (round === 14) {\n    return [ek01, ek02, ek03, ek04, ek05, ek06, ek07, ek08, ek09, ek10, ek11, ek12, ek13, ek14, ek15]\n  }\n  const ek16 = XOR(RL128(W0, 31), W3)\n  const ek17 = XOR(RL128(W1, 19), W0)\n  return [ek01, ek02, ek03, ek04, ek05, ek06, ek07, ek08, ek09, ek10, ek11, ek12, ek13, ek14, ek15, ek16, ek17]\n}\nfunction computeDK(EK: Uint8Array[], round: 12 | 14 | 16) {\n  const DK = Array.from<Uint8Array>({ length: EK.length })\n  // dk1 = ek{ n + 1 },\n  // dk2 = A(ek{ n }),\n  // dk3 = A(ek{ n- 1}),\n  // ...,\n  // dk{ n }= A(ek2),\n  // dk{ n + 1 }= ek1.\n  DK[0] = EK[round]\n  let j = round - 1\n  for (let i = 1; i < round; i++) {\n    DK[i] = A(EK[j--])\n  }\n  DK[round] = EK[0]\n  return DK\n}\n\n// * ARIA Algorithm\n\nfunction _aria(K: Uint8Array, b: 128 | 192 | 256) {\n  if (K.byteLength !== b >> 3) {\n    throw new KitError(`Aria-${b} key must be ${b >> 3} byte`)\n  }\n  /**\n   * - 128-bit key: 12 rounds\n   * - 192-bit key: 14 rounds\n   * - 256-bit key: 16 rounds\n   */\n  const round = b === 128 ? 12 : (b === 192 ? 14 : 16)\n  const { EK, DK } = KeyScheduling(K, round)\n  const cipher = (M: Uint8Array, RK: Uint8Array[]) => {\n    if (M.byteLength !== 16) {\n      throw new KitError('ARIA block must be 16 byte')\n    }\n    let P = M\n    let i = 0\n    while (i < round - 2) {\n      P = FO(P, RK[i++])\n      P = FE(P, RK[i++])\n    }\n    P = FO(P, RK[i++])\n    P = SL2(XOR(P, RK[i++]))\n    P = XOR(P, RK[i++])\n    return new U8(P)\n  }\n  return {\n    encrypt: (M: Uint8Array) => cipher(M, EK),\n    decrypt: (C: Uint8Array) => cipher(C, DK),\n  }\n}\n\n/**\n * ARIA 分组密码算法 / block cipher algorithm\n *\n * @param {128 | 192 | 256} b - 密钥长度 / Key size (bit)\n */\nexport function aria(b: 128 | 192 | 256) {\n  return createCipher(\n    (K: Uint8Array) => _aria(K, b),\n    {\n      ALGORITHM: `ARIA-${b}`,\n      BLOCK_SIZE: 16,\n      KEY_SIZE: b >> 3,\n      MIN_KEY_SIZE: 16,\n      MAX_KEY_SIZE: 32,\n    },\n  )\n}\n","import { createCipher } from '../../core/cipher'\nimport { KitError, U8 } from '../../core/utils'\n\n// * Blowfish Algorithm\n\nfunction _blowfish(key: Uint8Array) {\n  if (key.length < 4 || key.length > 56) {\n    throw new KitError(`Blowfish key must be between 4 and 56 byte`)\n  }\n  const P = new Uint32Array([0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344, 0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89, 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C, 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917, 0x9216D5D9, 0x8979FB1B])\n  const S = [\n    new Uint32Array([0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7, 0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99, 0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16, 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E, 0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE, 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013, 0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF, 0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E, 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60, 0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440, 0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE, 0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A, 0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E, 0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677, 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193, 0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032, 0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88, 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239, 0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E, 0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0, 0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3, 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98, 0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88, 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE, 0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6, 0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D, 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B, 0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7, 0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA, 0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463, 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F, 0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09, 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3, 0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB, 0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279, 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8, 0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB, 0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82, 0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB, 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573, 0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0, 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B, 0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790, 0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8, 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4, 0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0, 0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7, 0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C, 0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD, 0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1, 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299, 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9, 0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477, 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF, 0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49, 0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF, 0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA, 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5, 0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41, 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915, 0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400, 0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915, 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664, 0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A]),\n    new Uint32Array([0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623, 0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266, 0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1, 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E, 0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6, 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1, 0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E, 0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1, 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737, 0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8, 0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF, 0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD, 0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701, 0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7, 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41, 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331, 0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF, 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF, 0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E, 0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87, 0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C, 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2, 0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16, 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD, 0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B, 0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509, 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E, 0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3, 0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F, 0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A, 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4, 0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960, 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66, 0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28, 0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802, 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84, 0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510, 0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF, 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14, 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E, 0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50, 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7, 0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8, 0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281, 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99, 0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696, 0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128, 0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73, 0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0, 0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0, 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105, 0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250, 0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3, 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285, 0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00, 0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061, 0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB, 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E, 0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735, 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC, 0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9, 0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340, 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20, 0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7]),\n    new Uint32Array([0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934, 0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068, 0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF, 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840, 0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45, 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504, 0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A, 0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB, 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE, 0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6, 0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42, 0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B, 0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2, 0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB, 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527, 0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B, 0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33, 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C, 0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3, 0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC, 0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17, 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564, 0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B, 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115, 0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922, 0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728, 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0, 0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E, 0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37, 0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D, 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804, 0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B, 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3, 0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB, 0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D, 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C, 0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350, 0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9, 0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A, 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE, 0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D, 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC, 0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F, 0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61, 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2, 0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9, 0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2, 0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C, 0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E, 0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633, 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10, 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169, 0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52, 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027, 0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5, 0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62, 0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634, 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76, 0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24, 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC, 0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4, 0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C, 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837, 0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0]),\n    new Uint32Array([0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B, 0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE, 0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B, 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4, 0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8, 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6, 0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304, 0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22, 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4, 0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6, 0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9, 0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59, 0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593, 0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51, 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28, 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C, 0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B, 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28, 0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C, 0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD, 0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A, 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319, 0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB, 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F, 0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991, 0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32, 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680, 0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166, 0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE, 0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB, 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5, 0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47, 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370, 0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D, 0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84, 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048, 0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8, 0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD, 0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9, 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7, 0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38, 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F, 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C, 0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525, 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1, 0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442, 0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964, 0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E, 0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8, 0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D, 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F, 0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299, 0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02, 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC, 0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614, 0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A, 0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6, 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B, 0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0, 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060, 0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E, 0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9, 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F, 0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6]),\n  ]\n  function F(x: number) {\n    let r = 0\n    r += S[0][(x >>> 24) & 0xFF]\n    r += S[1][(x >>> 16) & 0xFF]\n    r ^= S[2][(x >>> 8) & 0xFF]\n    r += S[3][(x >>> 0) & 0xFF]\n    return r\n  }\n  const _encrypt = (l: number, r: number) => {\n    for (let i = 0; i < 16; i++) {\n      l ^= P[i]\n      r ^= F(l);\n      [l, r] = [r, l]\n    }\n    l ^= P[16]\n    r ^= P[17]\n    return [r, l]\n  }\n  const _decrypt = (l: number, r: number) => {\n    for (let i = 17; i > 1; i--) {\n      l ^= P[i]\n      r ^= F(l);\n      [l, r] = [r, l]\n    }\n    l ^= P[1]\n    r ^= P[0]\n    return [r, l]\n  }\n\n  // init\n  (() => {\n    let p = 0\n    for (let i = 0; i < 18; i++) {\n      let k = 0\n      for (let j = 0; j < 4; j++) {\n        k = (k << 8) | key[p]\n        p = (p + 1) % key.length\n      }\n      P[i] ^= k\n    }\n    let l = 0\n    let r = 0\n    for (let i = 0; i < 18; i += 2) {\n      [l, r] = _encrypt(l, r)\n      P[i] = l\n      P[i + 1] = r\n    }\n    for (let i = 0; i < 4; i++) {\n      for (let j = 0; j < 256; j += 2) {\n        [l, r] = _encrypt(l, r)\n        S[i][j] = l\n        S[i][j + 1] = r\n      }\n    }\n  })()\n\n  return {\n    encrypt: (plaintext: Uint8Array) => {\n      if (plaintext.length !== 8) {\n        throw new KitError(`Blowfish block must be 8 byte`)\n      }\n      const c = U8.from(plaintext.slice(0))\n      const c_view = new DataView(c.buffer)\n      let c0 = c_view.getUint32(0, false)\n      let c1 = c_view.getUint32(4, false);\n      [c0, c1] = _encrypt(c0, c1)\n      c_view.setUint32(0, c0, false)\n      c_view.setUint32(4, c1, false)\n      return c\n    },\n    decrypt: (ciphertext: Uint8Array) => {\n      if (ciphertext.length !== 8) {\n        throw new KitError(`Blowfish block must be 8 byte`)\n      }\n      const p = U8.from(ciphertext.slice(0))\n      const p_view = new DataView(p.buffer)\n      let p0 = p_view.getUint32(0, false)\n      let p1 = p_view.getUint32(4, false);\n      [p0, p1] = _decrypt(p0, p1)\n      p_view.setUint32(0, p0, false)\n      p_view.setUint32(4, p1, false)\n      return p\n    },\n  }\n}\n\n/**\n * Blowfish 分组密码算法 / block cipher algorithm\n */\nexport const blowfish = createCipher(\n  _blowfish,\n  {\n    ALGORITHM: 'Blowfish',\n    BLOCK_SIZE: 8,\n    KEY_SIZE: 16,\n    MIN_KEY_SIZE: 4,\n    MAX_KEY_SIZE: 56,\n  },\n)\n","import { createCipher } from '../../core/cipher'\nimport { KitError, rotateL32, rotateR32, U8 } from '../../core/utils'\n\n// * Constants\n\nconst SBox1_1110 = new Uint32Array([0x70707000, 0x82828200, 0x2C2C2C00, 0xECECEC00, 0xB3B3B300, 0x27272700, 0xC0C0C000, 0xE5E5E500, 0xE4E4E400, 0x85858500, 0x57575700, 0x35353500, 0xEAEAEA00, 0x0C0C0C00, 0xAEAEAE00, 0x41414100, 0x23232300, 0xEFEFEF00, 0x6B6B6B00, 0x93939300, 0x45454500, 0x19191900, 0xA5A5A500, 0x21212100, 0xEDEDED00, 0x0E0E0E00, 0x4F4F4F00, 0x4E4E4E00, 0x1D1D1D00, 0x65656500, 0x92929200, 0xBDBDBD00, 0x86868600, 0xB8B8B800, 0xAFAFAF00, 0x8F8F8F00, 0x7C7C7C00, 0xEBEBEB00, 0x1F1F1F00, 0xCECECE00, 0x3E3E3E00, 0x30303000, 0xDCDCDC00, 0x5F5F5F00, 0x5E5E5E00, 0xC5C5C500, 0x0B0B0B00, 0x1A1A1A00, 0xA6A6A600, 0xE1E1E100, 0x39393900, 0xCACACA00, 0xD5D5D500, 0x47474700, 0x5D5D5D00, 0x3D3D3D00, 0xD9D9D900, 0x01010100, 0x5A5A5A00, 0xD6D6D600, 0x51515100, 0x56565600, 0x6C6C6C00, 0x4D4D4D00, 0x8B8B8B00, 0x0D0D0D00, 0x9A9A9A00, 0x66666600, 0xFBFBFB00, 0xCCCCCC00, 0xB0B0B000, 0x2D2D2D00, 0x74747400, 0x12121200, 0x2B2B2B00, 0x20202000, 0xF0F0F000, 0xB1B1B100, 0x84848400, 0x99999900, 0xDFDFDF00, 0x4C4C4C00, 0xCBCBCB00, 0xC2C2C200, 0x34343400, 0x7E7E7E00, 0x76767600, 0x05050500, 0x6D6D6D00, 0xB7B7B700, 0xA9A9A900, 0x31313100, 0xD1D1D100, 0x17171700, 0x04040400, 0xD7D7D700, 0x14141400, 0x58585800, 0x3A3A3A00, 0x61616100, 0xDEDEDE00, 0x1B1B1B00, 0x11111100, 0x1C1C1C00, 0x32323200, 0x0F0F0F00, 0x9C9C9C00, 0x16161600, 0x53535300, 0x18181800, 0xF2F2F200, 0x22222200, 0xFEFEFE00, 0x44444400, 0xCFCFCF00, 0xB2B2B200, 0xC3C3C300, 0xB5B5B500, 0x7A7A7A00, 0x91919100, 0x24242400, 0x08080800, 0xE8E8E800, 0xA8A8A800, 0x60606000, 0xFCFCFC00, 0x69696900, 0x50505000, 0xAAAAAA00, 0xD0D0D000, 0xA0A0A000, 0x7D7D7D00, 0xA1A1A100, 0x89898900, 0x62626200, 0x97979700, 0x54545400, 0x5B5B5B00, 0x1E1E1E00, 0x95959500, 0xE0E0E000, 0xFFFFFF00, 0x64646400, 0xD2D2D200, 0x10101000, 0xC4C4C400, 0x00000000, 0x48484800, 0xA3A3A300, 0xF7F7F700, 0x75757500, 0xDBDBDB00, 0x8A8A8A00, 0x03030300, 0xE6E6E600, 0xDADADA00, 0x09090900, 0x3F3F3F00, 0xDDDDDD00, 0x94949400, 0x87878700, 0x5C5C5C00, 0x83838300, 0x02020200, 0xCDCDCD00, 0x4A4A4A00, 0x90909000, 0x33333300, 0x73737300, 0x67676700, 0xF6F6F600, 0xF3F3F300, 0x9D9D9D00, 0x7F7F7F00, 0xBFBFBF00, 0xE2E2E200, 0x52525200, 0x9B9B9B00, 0xD8D8D800, 0x26262600, 0xC8C8C800, 0x37373700, 0xC6C6C600, 0x3B3B3B00, 0x81818100, 0x96969600, 0x6F6F6F00, 0x4B4B4B00, 0x13131300, 0xBEBEBE00, 0x63636300, 0x2E2E2E00, 0xE9E9E900, 0x79797900, 0xA7A7A700, 0x8C8C8C00, 0x9F9F9F00, 0x6E6E6E00, 0xBCBCBC00, 0x8E8E8E00, 0x29292900, 0xF5F5F500, 0xF9F9F900, 0xB6B6B600, 0x2F2F2F00, 0xFDFDFD00, 0xB4B4B400, 0x59595900, 0x78787800, 0x98989800, 0x06060600, 0x6A6A6A00, 0xE7E7E700, 0x46464600, 0x71717100, 0xBABABA00, 0xD4D4D400, 0x25252500, 0xABABAB00, 0x42424200, 0x88888800, 0xA2A2A200, 0x8D8D8D00, 0xFAFAFA00, 0x72727200, 0x07070700, 0xB9B9B900, 0x55555500, 0xF8F8F800, 0xEEEEEE00, 0xACACAC00, 0x0A0A0A00, 0x36363600, 0x49494900, 0x2A2A2A00, 0x68686800, 0x3C3C3C00, 0x38383800, 0xF1F1F100, 0xA4A4A400, 0x40404000, 0x28282800, 0xD3D3D300, 0x7B7B7B00, 0xBBBBBB00, 0xC9C9C900, 0x43434300, 0xC1C1C100, 0x15151500, 0xE3E3E300, 0xADADAD00, 0xF4F4F400, 0x77777700, 0xC7C7C700, 0x80808000, 0x9E9E9E00])\nconst SBox4_4404 = new Uint32Array([0x70700070, 0x2C2C002C, 0xB3B300B3, 0xC0C000C0, 0xE4E400E4, 0x57570057, 0xEAEA00EA, 0xAEAE00AE, 0x23230023, 0x6B6B006B, 0x45450045, 0xA5A500A5, 0xEDED00ED, 0x4F4F004F, 0x1D1D001D, 0x92920092, 0x86860086, 0xAFAF00AF, 0x7C7C007C, 0x1F1F001F, 0x3E3E003E, 0xDCDC00DC, 0x5E5E005E, 0x0B0B000B, 0xA6A600A6, 0x39390039, 0xD5D500D5, 0x5D5D005D, 0xD9D900D9, 0x5A5A005A, 0x51510051, 0x6C6C006C, 0x8B8B008B, 0x9A9A009A, 0xFBFB00FB, 0xB0B000B0, 0x74740074, 0x2B2B002B, 0xF0F000F0, 0x84840084, 0xDFDF00DF, 0xCBCB00CB, 0x34340034, 0x76760076, 0x6D6D006D, 0xA9A900A9, 0xD1D100D1, 0x04040004, 0x14140014, 0x3A3A003A, 0xDEDE00DE, 0x11110011, 0x32320032, 0x9C9C009C, 0x53530053, 0xF2F200F2, 0xFEFE00FE, 0xCFCF00CF, 0xC3C300C3, 0x7A7A007A, 0x24240024, 0xE8E800E8, 0x60600060, 0x69690069, 0xAAAA00AA, 0xA0A000A0, 0xA1A100A1, 0x62620062, 0x54540054, 0x1E1E001E, 0xE0E000E0, 0x64640064, 0x10100010, 0x00000000, 0xA3A300A3, 0x75750075, 0x8A8A008A, 0xE6E600E6, 0x09090009, 0xDDDD00DD, 0x87870087, 0x83830083, 0xCDCD00CD, 0x90900090, 0x73730073, 0xF6F600F6, 0x9D9D009D, 0xBFBF00BF, 0x52520052, 0xD8D800D8, 0xC8C800C8, 0xC6C600C6, 0x81810081, 0x6F6F006F, 0x13130013, 0x63630063, 0xE9E900E9, 0xA7A700A7, 0x9F9F009F, 0xBCBC00BC, 0x29290029, 0xF9F900F9, 0x2F2F002F, 0xB4B400B4, 0x78780078, 0x06060006, 0xE7E700E7, 0x71710071, 0xD4D400D4, 0xABAB00AB, 0x88880088, 0x8D8D008D, 0x72720072, 0xB9B900B9, 0xF8F800F8, 0xACAC00AC, 0x36360036, 0x2A2A002A, 0x3C3C003C, 0xF1F100F1, 0x40400040, 0xD3D300D3, 0xBBBB00BB, 0x43430043, 0x15150015, 0xADAD00AD, 0x77770077, 0x80800080, 0x82820082, 0xECEC00EC, 0x27270027, 0xE5E500E5, 0x85850085, 0x35350035, 0x0C0C000C, 0x41410041, 0xEFEF00EF, 0x93930093, 0x19190019, 0x21210021, 0x0E0E000E, 0x4E4E004E, 0x65650065, 0xBDBD00BD, 0xB8B800B8, 0x8F8F008F, 0xEBEB00EB, 0xCECE00CE, 0x30300030, 0x5F5F005F, 0xC5C500C5, 0x1A1A001A, 0xE1E100E1, 0xCACA00CA, 0x47470047, 0x3D3D003D, 0x01010001, 0xD6D600D6, 0x56560056, 0x4D4D004D, 0x0D0D000D, 0x66660066, 0xCCCC00CC, 0x2D2D002D, 0x12120012, 0x20200020, 0xB1B100B1, 0x99990099, 0x4C4C004C, 0xC2C200C2, 0x7E7E007E, 0x05050005, 0xB7B700B7, 0x31310031, 0x17170017, 0xD7D700D7, 0x58580058, 0x61610061, 0x1B1B001B, 0x1C1C001C, 0x0F0F000F, 0x16160016, 0x18180018, 0x22220022, 0x44440044, 0xB2B200B2, 0xB5B500B5, 0x91910091, 0x08080008, 0xA8A800A8, 0xFCFC00FC, 0x50500050, 0xD0D000D0, 0x7D7D007D, 0x89890089, 0x97970097, 0x5B5B005B, 0x95950095, 0xFFFF00FF, 0xD2D200D2, 0xC4C400C4, 0x48480048, 0xF7F700F7, 0xDBDB00DB, 0x03030003, 0xDADA00DA, 0x3F3F003F, 0x94940094, 0x5C5C005C, 0x02020002, 0x4A4A004A, 0x33330033, 0x67670067, 0xF3F300F3, 0x7F7F007F, 0xE2E200E2, 0x9B9B009B, 0x26260026, 0x37370037, 0x3B3B003B, 0x96960096, 0x4B4B004B, 0xBEBE00BE, 0x2E2E002E, 0x79790079, 0x8C8C008C, 0x6E6E006E, 0x8E8E008E, 0xF5F500F5, 0xB6B600B6, 0xFDFD00FD, 0x59590059, 0x98980098, 0x6A6A006A, 0x46460046, 0xBABA00BA, 0x25250025, 0x42420042, 0xA2A200A2, 0xFAFA00FA, 0x07070007, 0x55550055, 0xEEEE00EE, 0x0A0A000A, 0x49490049, 0x68680068, 0x38380038, 0xA4A400A4, 0x28280028, 0x7B7B007B, 0xC9C900C9, 0xC1C100C1, 0xE3E300E3, 0xF4F400F4, 0xC7C700C7, 0x9E9E009E])\nconst SBox2_0222 = new Uint32Array([0x00E0E0E0, 0x00050505, 0x00585858, 0x00D9D9D9, 0x00676767, 0x004E4E4E, 0x00818181, 0x00CBCBCB, 0x00C9C9C9, 0x000B0B0B, 0x00AEAEAE, 0x006A6A6A, 0x00D5D5D5, 0x00181818, 0x005D5D5D, 0x00828282, 0x00464646, 0x00DFDFDF, 0x00D6D6D6, 0x00272727, 0x008A8A8A, 0x00323232, 0x004B4B4B, 0x00424242, 0x00DBDBDB, 0x001C1C1C, 0x009E9E9E, 0x009C9C9C, 0x003A3A3A, 0x00CACACA, 0x00252525, 0x007B7B7B, 0x000D0D0D, 0x00717171, 0x005F5F5F, 0x001F1F1F, 0x00F8F8F8, 0x00D7D7D7, 0x003E3E3E, 0x009D9D9D, 0x007C7C7C, 0x00606060, 0x00B9B9B9, 0x00BEBEBE, 0x00BCBCBC, 0x008B8B8B, 0x00161616, 0x00343434, 0x004D4D4D, 0x00C3C3C3, 0x00727272, 0x00959595, 0x00ABABAB, 0x008E8E8E, 0x00BABABA, 0x007A7A7A, 0x00B3B3B3, 0x00020202, 0x00B4B4B4, 0x00ADADAD, 0x00A2A2A2, 0x00ACACAC, 0x00D8D8D8, 0x009A9A9A, 0x00171717, 0x001A1A1A, 0x00353535, 0x00CCCCCC, 0x00F7F7F7, 0x00999999, 0x00616161, 0x005A5A5A, 0x00E8E8E8, 0x00242424, 0x00565656, 0x00404040, 0x00E1E1E1, 0x00636363, 0x00090909, 0x00333333, 0x00BFBFBF, 0x00989898, 0x00979797, 0x00858585, 0x00686868, 0x00FCFCFC, 0x00ECECEC, 0x000A0A0A, 0x00DADADA, 0x006F6F6F, 0x00535353, 0x00626262, 0x00A3A3A3, 0x002E2E2E, 0x00080808, 0x00AFAFAF, 0x00282828, 0x00B0B0B0, 0x00747474, 0x00C2C2C2, 0x00BDBDBD, 0x00363636, 0x00222222, 0x00383838, 0x00646464, 0x001E1E1E, 0x00393939, 0x002C2C2C, 0x00A6A6A6, 0x00303030, 0x00E5E5E5, 0x00444444, 0x00FDFDFD, 0x00888888, 0x009F9F9F, 0x00656565, 0x00878787, 0x006B6B6B, 0x00F4F4F4, 0x00232323, 0x00484848, 0x00101010, 0x00D1D1D1, 0x00515151, 0x00C0C0C0, 0x00F9F9F9, 0x00D2D2D2, 0x00A0A0A0, 0x00555555, 0x00A1A1A1, 0x00414141, 0x00FAFAFA, 0x00434343, 0x00131313, 0x00C4C4C4, 0x002F2F2F, 0x00A8A8A8, 0x00B6B6B6, 0x003C3C3C, 0x002B2B2B, 0x00C1C1C1, 0x00FFFFFF, 0x00C8C8C8, 0x00A5A5A5, 0x00202020, 0x00898989, 0x00000000, 0x00909090, 0x00474747, 0x00EFEFEF, 0x00EAEAEA, 0x00B7B7B7, 0x00151515, 0x00060606, 0x00CDCDCD, 0x00B5B5B5, 0x00121212, 0x007E7E7E, 0x00BBBBBB, 0x00292929, 0x000F0F0F, 0x00B8B8B8, 0x00070707, 0x00040404, 0x009B9B9B, 0x00949494, 0x00212121, 0x00666666, 0x00E6E6E6, 0x00CECECE, 0x00EDEDED, 0x00E7E7E7, 0x003B3B3B, 0x00FEFEFE, 0x007F7F7F, 0x00C5C5C5, 0x00A4A4A4, 0x00373737, 0x00B1B1B1, 0x004C4C4C, 0x00919191, 0x006E6E6E, 0x008D8D8D, 0x00767676, 0x00030303, 0x002D2D2D, 0x00DEDEDE, 0x00969696, 0x00262626, 0x007D7D7D, 0x00C6C6C6, 0x005C5C5C, 0x00D3D3D3, 0x00F2F2F2, 0x004F4F4F, 0x00191919, 0x003F3F3F, 0x00DCDCDC, 0x00797979, 0x001D1D1D, 0x00525252, 0x00EBEBEB, 0x00F3F3F3, 0x006D6D6D, 0x005E5E5E, 0x00FBFBFB, 0x00696969, 0x00B2B2B2, 0x00F0F0F0, 0x00313131, 0x000C0C0C, 0x00D4D4D4, 0x00CFCFCF, 0x008C8C8C, 0x00E2E2E2, 0x00757575, 0x00A9A9A9, 0x004A4A4A, 0x00575757, 0x00848484, 0x00111111, 0x00454545, 0x001B1B1B, 0x00F5F5F5, 0x00E4E4E4, 0x000E0E0E, 0x00737373, 0x00AAAAAA, 0x00F1F1F1, 0x00DDDDDD, 0x00595959, 0x00141414, 0x006C6C6C, 0x00929292, 0x00545454, 0x00D0D0D0, 0x00787878, 0x00707070, 0x00E3E3E3, 0x00494949, 0x00808080, 0x00505050, 0x00A7A7A7, 0x00F6F6F6, 0x00777777, 0x00939393, 0x00868686, 0x00838383, 0x002A2A2A, 0x00C7C7C7, 0x005B5B5B, 0x00E9E9E9, 0x00EEEEEE, 0x008F8F8F, 0x00010101, 0x003D3D3D])\nconst SBox3_3033 = new Uint32Array([0x38003838, 0x41004141, 0x16001616, 0x76007676, 0xD900D9D9, 0x93009393, 0x60006060, 0xF200F2F2, 0x72007272, 0xC200C2C2, 0xAB00ABAB, 0x9A009A9A, 0x75007575, 0x06000606, 0x57005757, 0xA000A0A0, 0x91009191, 0xF700F7F7, 0xB500B5B5, 0xC900C9C9, 0xA200A2A2, 0x8C008C8C, 0xD200D2D2, 0x90009090, 0xF600F6F6, 0x07000707, 0xA700A7A7, 0x27002727, 0x8E008E8E, 0xB200B2B2, 0x49004949, 0xDE00DEDE, 0x43004343, 0x5C005C5C, 0xD700D7D7, 0xC700C7C7, 0x3E003E3E, 0xF500F5F5, 0x8F008F8F, 0x67006767, 0x1F001F1F, 0x18001818, 0x6E006E6E, 0xAF00AFAF, 0x2F002F2F, 0xE200E2E2, 0x85008585, 0x0D000D0D, 0x53005353, 0xF000F0F0, 0x9C009C9C, 0x65006565, 0xEA00EAEA, 0xA300A3A3, 0xAE00AEAE, 0x9E009E9E, 0xEC00ECEC, 0x80008080, 0x2D002D2D, 0x6B006B6B, 0xA800A8A8, 0x2B002B2B, 0x36003636, 0xA600A6A6, 0xC500C5C5, 0x86008686, 0x4D004D4D, 0x33003333, 0xFD00FDFD, 0x66006666, 0x58005858, 0x96009696, 0x3A003A3A, 0x09000909, 0x95009595, 0x10001010, 0x78007878, 0xD800D8D8, 0x42004242, 0xCC00CCCC, 0xEF00EFEF, 0x26002626, 0xE500E5E5, 0x61006161, 0x1A001A1A, 0x3F003F3F, 0x3B003B3B, 0x82008282, 0xB600B6B6, 0xDB00DBDB, 0xD400D4D4, 0x98009898, 0xE800E8E8, 0x8B008B8B, 0x02000202, 0xEB00EBEB, 0x0A000A0A, 0x2C002C2C, 0x1D001D1D, 0xB000B0B0, 0x6F006F6F, 0x8D008D8D, 0x88008888, 0x0E000E0E, 0x19001919, 0x87008787, 0x4E004E4E, 0x0B000B0B, 0xA900A9A9, 0x0C000C0C, 0x79007979, 0x11001111, 0x7F007F7F, 0x22002222, 0xE700E7E7, 0x59005959, 0xE100E1E1, 0xDA00DADA, 0x3D003D3D, 0xC800C8C8, 0x12001212, 0x04000404, 0x74007474, 0x54005454, 0x30003030, 0x7E007E7E, 0xB400B4B4, 0x28002828, 0x55005555, 0x68006868, 0x50005050, 0xBE00BEBE, 0xD000D0D0, 0xC400C4C4, 0x31003131, 0xCB00CBCB, 0x2A002A2A, 0xAD00ADAD, 0x0F000F0F, 0xCA00CACA, 0x70007070, 0xFF00FFFF, 0x32003232, 0x69006969, 0x08000808, 0x62006262, 0x00000000, 0x24002424, 0xD100D1D1, 0xFB00FBFB, 0xBA00BABA, 0xED00EDED, 0x45004545, 0x81008181, 0x73007373, 0x6D006D6D, 0x84008484, 0x9F009F9F, 0xEE00EEEE, 0x4A004A4A, 0xC300C3C3, 0x2E002E2E, 0xC100C1C1, 0x01000101, 0xE600E6E6, 0x25002525, 0x48004848, 0x99009999, 0xB900B9B9, 0xB300B3B3, 0x7B007B7B, 0xF900F9F9, 0xCE00CECE, 0xBF00BFBF, 0xDF00DFDF, 0x71007171, 0x29002929, 0xCD00CDCD, 0x6C006C6C, 0x13001313, 0x64006464, 0x9B009B9B, 0x63006363, 0x9D009D9D, 0xC000C0C0, 0x4B004B4B, 0xB700B7B7, 0xA500A5A5, 0x89008989, 0x5F005F5F, 0xB100B1B1, 0x17001717, 0xF400F4F4, 0xBC00BCBC, 0xD300D3D3, 0x46004646, 0xCF00CFCF, 0x37003737, 0x5E005E5E, 0x47004747, 0x94009494, 0xFA00FAFA, 0xFC00FCFC, 0x5B005B5B, 0x97009797, 0xFE00FEFE, 0x5A005A5A, 0xAC00ACAC, 0x3C003C3C, 0x4C004C4C, 0x03000303, 0x35003535, 0xF300F3F3, 0x23002323, 0xB800B8B8, 0x5D005D5D, 0x6A006A6A, 0x92009292, 0xD500D5D5, 0x21002121, 0x44004444, 0x51005151, 0xC600C6C6, 0x7D007D7D, 0x39003939, 0x83008383, 0xDC00DCDC, 0xAA00AAAA, 0x7C007C7C, 0x77007777, 0x56005656, 0x05000505, 0x1B001B1B, 0xA400A4A4, 0x15001515, 0x34003434, 0x1E001E1E, 0x1C001C1C, 0xF800F8F8, 0x52005252, 0x20002020, 0x14001414, 0xE900E9E9, 0xBD00BDBD, 0xDD00DDDD, 0xE400E4E4, 0xA100A1A1, 0xE000E0E0, 0x8A008A8A, 0xF100F1F1, 0xD600D6D6, 0x7A007A7A, 0xBB00BBBB, 0xE300E3E3, 0x40004040, 0x4F004F4F])\n\nconst SIGMA = new Uint32Array([0xA09E667F, 0x3BCC908B, 0xB67AE858, 0x4CAA73B2, 0xC6EF372F, 0xE94F82BE, 0x54FF53A5, 0xF1D36F1C, 0x10E527FA, 0xDE682D1D, 0xB05688C2, 0xB3E6C1FD])\n\n// * Functions\n\nfunction ROTL128(s: Uint32Array, bit: number) {\n  const n = 32 - bit\n  const t = s[3] << bit | s[0] >>> n\n  s[0] = s[0] << bit | s[1] >>> n\n  s[1] = s[1] << bit | s[2] >>> n\n  s[2] = s[2] << bit | s[3] >>> n\n  s[3] = t\n}\n\nfunction Camellia_Feistel(sh: Uint32Array, sl: Uint32Array, kh: number, kl: number) {\n  const t0 = sh[0] ^ kh\n  const t1 = sh[1] ^ kl\n  const t3\n    = SBox1_1110[0xFF & (t0 >> 24)]\n    ^ SBox2_0222[0xFF & (t0 >> 16)]\n    ^ SBox3_3033[0xFF & (t0 >> 8)]\n    ^ SBox4_4404[0xFF & (t0)]\n  const t2\n    = t3\n    ^ SBox1_1110[0xFF & (t1)]\n    ^ SBox4_4404[0xFF & (t1 >> 8)]\n    ^ SBox3_3033[0xFF & (t1 >> 16)]\n    ^ SBox2_0222[0xFF & (t1 >> 24)]\n  sl[0] ^= t2\n  sl[1] ^= t2 ^ rotateR32(t3, 8)\n}\n\n// * Camellia Algorithm\n\nfunction KeySchedule(K: Uint8Array) {\n  const KView = new DataView(K.buffer)\n  const k = K.length === 16 ? new Uint32Array(52) : new Uint32Array(68)\n  const s = new Uint32Array(4)\n  const sh = s.subarray(0, 2)\n  const sl = s.subarray(2, 4)\n\n  /* Map the key to the keyTable */\n  switch (K.length) {\n    case 16:\n      mapKey128(KView, s, k)\n      break\n    case 24:\n      mapKey192(KView, s, k)\n      break\n    case 32:\n      mapKey256(KView, s, k)\n      break\n  }\n\n  /* Use the Feistel routine to scramble the key material */\n  Camellia_Feistel(sh, sl, SIGMA[0], SIGMA[1])\n  Camellia_Feistel(sl, sh, SIGMA[2], SIGMA[3])\n\n  s[0] ^= k[0]; s[1] ^= k[1]; s[2] ^= k[2]; s[3] ^= k[3]\n  Camellia_Feistel(sh, sl, SIGMA[4], SIGMA[5])\n  Camellia_Feistel(sl, sh, SIGMA[6], SIGMA[7])\n\n  /* Fill the keyTable. Requires many block rotations. */\n  switch (K.length) {\n    case 16:\n      setup128(s, k)\n      break\n    case 24:\n    case 32:\n      setup256(s, k)\n      break\n  }\n\n  return k\n}\nfunction mapKey128(KView: DataView, s: Uint32Array, k: Uint32Array) {\n  s[0] = k[0] = KView.getUint32(0, false)\n  s[1] = k[1] = KView.getUint32(4, false)\n  s[2] = k[2] = KView.getUint32(8, false)\n  s[3] = k[3] = KView.getUint32(12, false)\n}\nfunction mapKey192(KView: DataView, s: Uint32Array, k: Uint32Array) {\n  mapKey128(KView, s, k)\n  s[0] = k[8] = KView.getUint32(16, false)\n  s[1] = k[9] = KView.getUint32(20, false)\n  s[2] = k[10] = ~s[0]\n  s[3] = k[11] = ~s[1]\n  s[0] ^= k[0]; s[1] ^= k[1]; s[2] ^= k[2]; s[3] ^= k[3]\n}\nfunction mapKey256(KView: DataView, s: Uint32Array, k: Uint32Array) {\n  mapKey192(KView, s, k)\n  s[0] = k[8] = KView.getUint32(16, false)\n  s[1] = k[9] = KView.getUint32(20, false)\n  s[2] = k[10] = KView.getUint32(24, false)\n  s[3] = k[11] = KView.getUint32(28, false)\n  s[0] ^= k[0]; s[1] ^= k[1]; s[2] ^= k[2]; s[3] ^= k[3]\n}\nfunction setup128(s: Uint32Array, k: Uint32Array) {\n  k[4] = s[0]; k[5] = s[1]; k[6] = s[2]; k[7] = s[3]\n  ROTL128(s, 15) /* KA <<< 15 */\n  k[12] = s[0]; k[13] = s[1]; k[14] = s[2]; k[15] = s[3]\n  ROTL128(s, 15) /* KA <<< 30 */\n  k[16] = s[0]; k[17] = s[1]; k[18] = s[2]; k[19] = s[3]\n  ROTL128(s, 15) /* KA <<< 45 */\n  k[24] = s[0]; k[25] = s[1]\n  ROTL128(s, 15) /* KA <<< 60 */\n  k[28] = s[0]; k[29] = s[1]; k[30] = s[2]; k[31] = s[3];\n  [s[0], s[1], s[2], s[3]] = [s[1], s[2], s[3], s[0]]\n  ROTL128(s, 2) /* KA <<< 94 */\n  k[40] = s[0]; k[41] = s[1]; k[42] = s[2]; k[43] = s[3]\n  ROTL128(s, 17) /* KA <<<111 */\n  k[48] = s[0]; k[49] = s[1]; k[50] = s[2]; k[51] = s[3]\n\n  s[0] = k[0]; s[1] = k[1]; s[2] = k[2]; s[3] = k[3]\n  ROTL128(s, 15) /* KL <<< 15 */\n  k[8] = s[0]; k[9] = s[1]; k[10] = s[2]; k[11] = s[3]\n  ROTL128(s, 30) /* KL <<< 45 */\n  k[20] = s[0]; k[21] = s[1]; k[22] = s[2]; k[23] = s[3]\n  ROTL128(s, 15) /* KL <<< 60 */\n  k[26] = s[2]; k[27] = s[3]\n  ROTL128(s, 17) /* KL <<< 77 */\n  k[32] = s[0]; k[33] = s[1]; k[34] = s[2]; k[35] = s[3]\n  ROTL128(s, 17) /* KL <<< 94 */\n  k[36] = s[0]; k[37] = s[1]; k[38] = s[2]; k[39] = s[3]\n  ROTL128(s, 17) /* KL <<<111 */\n  k[44] = s[0]; k[45] = s[1]; k[46] = s[2]; k[47] = s[3]\n}\nfunction setup256(s: Uint32Array, k: Uint32Array) {\n  const sh = s.subarray(0, 2)\n  const sl = s.subarray(2, 4)\n  k[12] = s[0]; k[13] = s[1]; k[14] = s[2]; k[15] = s[3]\n  s[0] ^= k[8]; s[1] ^= k[9]; s[2] ^= k[10]; s[3] ^= k[11]\n  Camellia_Feistel(sh, sl, SIGMA[8], SIGMA[9])\n  Camellia_Feistel(sl, sh, SIGMA[10], SIGMA[11])\n\n  k[4] = s[0]; k[5] = s[1]; k[6] = s[2]; k[7] = s[3]\n  ROTL128(s, 30) /* KB <<< 30 */\n  k[20] = s[0]; k[21] = s[1]; k[22] = s[2]; k[23] = s[3]\n  ROTL128(s, 30) /* KB <<< 60 */\n  k[40] = s[0]; k[41] = s[1]; k[42] = s[2]; k[43] = s[3];\n  [s[0], s[1], s[2], s[3]] = [s[1], s[2], s[3], s[0]]\n  ROTL128(s, 19) /* KB <<<111 */\n  k[64] = s[0]; k[65] = s[1]; k[66] = s[2]; k[67] = s[3]\n\n  s[0] = k[8]; s[1] = k[9]; s[2] = k[10]; s[3] = k[11]\n  ROTL128(s, 15) /* KR <<< 15 */\n  k[8] = s[0]; k[9] = s[1]; k[10] = s[2]; k[11] = s[3]\n  ROTL128(s, 15) /* KR <<< 30 */\n  k[16] = s[0]; k[17] = s[1]; k[18] = s[2]; k[19] = s[3]\n  ROTL128(s, 30) /* KR <<< 60 */\n  k[36] = s[0]; k[37] = s[1]; k[38] = s[2]; k[39] = s[3];\n  [s[0], s[1], s[2], s[3]] = [s[1], s[2], s[3], s[0]]\n  ROTL128(s, 2) /* KR <<< 94 */\n  k[52] = s[0]; k[53] = s[1]; k[54] = s[2]; k[55] = s[3]\n\n  s[0] = k[12]; s[1] = k[13]; s[2] = k[14]; s[3] = k[15]\n  ROTL128(s, 15) /* KA <<< 15 */\n  k[12] = s[0]; k[13] = s[1]; k[14] = s[2]; k[15] = s[3]\n  ROTL128(s, 30) /* KA <<< 45 */\n  k[28] = s[0]; k[29] = s[1]; k[30] = s[2]; k[31] = s[3]\n  /* KA <<< 77 */\n  k[48] = s[1]; k[49] = s[2]; k[50] = s[3]; k[51] = s[0];\n  [s[0], s[1], s[2], s[3]] = [s[1], s[2], s[3], s[0]]\n  ROTL128(s, 17) /* KA <<< 94 */\n  k[56] = s[0]; k[57] = s[1]; k[58] = s[2]; k[59] = s[3]\n\n  s[0] = k[0]; s[1] = k[1]; s[2] = k[2]; s[3] = k[3];\n  [s[0], s[1], s[2], s[3]] = [s[1], s[2], s[3], s[0]]\n  ROTL128(s, 13) /* KL <<< 45 */\n  k[24] = s[0]; k[25] = s[1]; k[26] = s[2]; k[27] = s[3]\n  ROTL128(s, 15) /* KL <<< 60 */\n  k[32] = s[0]; k[33] = s[1]; k[34] = s[2]; k[35] = s[3]\n  ROTL128(s, 17) /* KL <<< 77 */\n  k[44] = s[0]; k[45] = s[1]; k[46] = s[2]; k[47] = s[3];\n  [s[0], s[1], s[2], s[3]] = [s[1], s[2], s[3], s[0]]\n  ROTL128(s, 2) /* KL <<<111 */\n  k[60] = s[0]; k[61] = s[1]; k[62] = s[2]; k[63] = s[3]\n}\n\nfunction _encrypt128(M: Uint8Array, k: Uint32Array) {\n  const C = M.slice(0)\n  const CView = new DataView(C.buffer)\n  const s = new Uint32Array(4)\n  const sh = s.subarray(0, 2)\n  const sl = s.subarray(2, 4)\n  s[0] = k[0] ^ CView.getUint32(0, false)\n  s[1] = k[1] ^ CView.getUint32(4, false)\n  s[2] = k[2] ^ CView.getUint32(8, false)\n  s[3] = k[3] ^ CView.getUint32(12, false)\n\n  // GR 1\n  Camellia_Feistel(sh, sl, k[4], k[5])\n  Camellia_Feistel(sl, sh, k[6], k[7])\n  Camellia_Feistel(sh, sl, k[8], k[9])\n  Camellia_Feistel(sl, sh, k[10], k[11])\n  Camellia_Feistel(sh, sl, k[12], k[13])\n  Camellia_Feistel(sl, sh, k[14], k[15])\n  s[1] ^= rotateL32(s[0] & k[16], 1)\n  s[2] ^= s[3] | k[19]\n  s[0] ^= s[1] | k[17]\n  s[3] ^= rotateL32(s[2] & k[18], 1)\n  // GR 2\n  Camellia_Feistel(sh, sl, k[20], k[21])\n  Camellia_Feistel(sl, sh, k[22], k[23])\n  Camellia_Feistel(sh, sl, k[24], k[25])\n  Camellia_Feistel(sl, sh, k[26], k[27])\n  Camellia_Feistel(sh, sl, k[28], k[29])\n  Camellia_Feistel(sl, sh, k[30], k[31])\n  s[1] ^= rotateL32(s[0] & k[32], 1)\n  s[2] ^= s[3] | k[35]\n  s[0] ^= s[1] | k[33]\n  s[3] ^= rotateL32(s[2] & k[34], 1)\n  // GR 3\n  Camellia_Feistel(sh, sl, k[36], k[37])\n  Camellia_Feistel(sl, sh, k[38], k[39])\n  Camellia_Feistel(sh, sl, k[40], k[41])\n  Camellia_Feistel(sl, sh, k[42], k[43])\n  Camellia_Feistel(sh, sl, k[44], k[45])\n  Camellia_Feistel(sl, sh, k[46], k[47])\n  s[2] ^= k[48]\n  s[3] ^= k[49]\n  s[0] ^= k[50]\n  s[1] ^= k[51]\n\n  CView.setUint32(0, s[2], false)\n  CView.setUint32(4, s[3], false)\n  CView.setUint32(8, s[0], false)\n  CView.setUint32(12, s[1], false)\n  return C\n}\nfunction _encrypt256(M: Uint8Array, k: Uint32Array) {\n  const C = M.slice(0)\n  const CView = new DataView(C.buffer)\n  const s = new Uint32Array(4)\n  const sh = s.subarray(0, 2)\n  const sl = s.subarray(2, 4)\n  s[0] = k[0] ^ CView.getUint32(0, false)\n  s[1] = k[1] ^ CView.getUint32(4, false)\n  s[2] = k[2] ^ CView.getUint32(8, false)\n  s[3] = k[3] ^ CView.getUint32(12, false)\n\n  // GR 1\n  Camellia_Feistel(sh, sl, k[4], k[5])\n  Camellia_Feistel(sl, sh, k[6], k[7])\n  Camellia_Feistel(sh, sl, k[8], k[9])\n  Camellia_Feistel(sl, sh, k[10], k[11])\n  Camellia_Feistel(sh, sl, k[12], k[13])\n  Camellia_Feistel(sl, sh, k[14], k[15])\n  s[1] ^= rotateL32(s[0] & k[16], 1)\n  s[2] ^= s[3] | k[19]\n  s[0] ^= s[1] | k[17]\n  s[3] ^= rotateL32(s[2] & k[18], 1)\n  // GR 2\n  Camellia_Feistel(sh, sl, k[20], k[21])\n  Camellia_Feistel(sl, sh, k[22], k[23])\n  Camellia_Feistel(sh, sl, k[24], k[25])\n  Camellia_Feistel(sl, sh, k[26], k[27])\n  Camellia_Feistel(sh, sl, k[28], k[29])\n  Camellia_Feistel(sl, sh, k[30], k[31])\n  s[1] ^= rotateL32(s[0] & k[32], 1)\n  s[2] ^= s[3] | k[35]\n  s[0] ^= s[1] | k[33]\n  s[3] ^= rotateL32(s[2] & k[34], 1)\n  // GR 3\n  Camellia_Feistel(sh, sl, k[36], k[37])\n  Camellia_Feistel(sl, sh, k[38], k[39])\n  Camellia_Feistel(sh, sl, k[40], k[41])\n  Camellia_Feistel(sl, sh, k[42], k[43])\n  Camellia_Feistel(sh, sl, k[44], k[45])\n  Camellia_Feistel(sl, sh, k[46], k[47])\n  s[1] ^= rotateL32(s[0] & k[48], 1)\n  s[2] ^= s[3] | k[51]\n  s[0] ^= s[1] | k[49]\n  s[3] ^= rotateL32(s[2] & k[50], 1)\n  // GR 4\n  Camellia_Feistel(sh, sl, k[52], k[53])\n  Camellia_Feistel(sl, sh, k[54], k[55])\n  Camellia_Feistel(sh, sl, k[56], k[57])\n  Camellia_Feistel(sl, sh, k[58], k[59])\n  Camellia_Feistel(sh, sl, k[60], k[61])\n  Camellia_Feistel(sl, sh, k[62], k[63])\n  s[2] ^= k[64]\n  s[3] ^= k[65]\n  s[0] ^= k[66]\n  s[1] ^= k[67]\n\n  CView.setUint32(0, s[2], false)\n  CView.setUint32(4, s[3], false)\n  CView.setUint32(8, s[0], false)\n  CView.setUint32(12, s[1], false)\n  return C\n}\n\nfunction _decrypt128(C: Uint8Array, k: Uint32Array) {\n  const M = C.slice(0)\n  const MView = new DataView(M.buffer)\n  const s = new Uint32Array(4)\n  const sh = s.subarray(0, 2)\n  const sl = s.subarray(2, 4)\n\n  s[0] = k[48] ^ MView.getUint32(0, false)\n  s[1] = k[49] ^ MView.getUint32(4, false)\n  s[2] = k[50] ^ MView.getUint32(8, false)\n  s[3] = k[51] ^ MView.getUint32(12, false)\n\n  // GR1\n  Camellia_Feistel(sh, sl, k[46], k[47])\n  Camellia_Feistel(sl, sh, k[44], k[45])\n  Camellia_Feistel(sh, sl, k[42], k[43])\n  Camellia_Feistel(sl, sh, k[40], k[41])\n  Camellia_Feistel(sh, sl, k[38], k[39])\n  Camellia_Feistel(sl, sh, k[36], k[37])\n  s[1] ^= rotateL32(s[0] & k[34], 1)\n  s[2] ^= s[3] | k[33]\n  s[0] ^= s[1] | k[35]\n  s[3] ^= rotateL32(s[2] & k[32], 1)\n\n  // GR2\n  Camellia_Feistel(sh, sl, k[30], k[31])\n  Camellia_Feistel(sl, sh, k[28], k[29])\n  Camellia_Feistel(sh, sl, k[26], k[27])\n  Camellia_Feistel(sl, sh, k[24], k[25])\n  Camellia_Feistel(sh, sl, k[22], k[23])\n  Camellia_Feistel(sl, sh, k[20], k[21])\n  s[1] ^= rotateL32(s[0] & k[18], 1)\n  s[2] ^= s[3] | k[17]\n  s[0] ^= s[1] | k[19]\n  s[3] ^= rotateL32(s[2] & k[16], 1)\n\n  // GR3\n  Camellia_Feistel(sh, sl, k[14], k[15])\n  Camellia_Feistel(sl, sh, k[12], k[13])\n  Camellia_Feistel(sh, sl, k[10], k[11])\n  Camellia_Feistel(sl, sh, k[8], k[9])\n  Camellia_Feistel(sh, sl, k[6], k[7])\n  Camellia_Feistel(sl, sh, k[4], k[5])\n  s[2] ^= k[0]\n  s[3] ^= k[1]\n  s[0] ^= k[2]\n  s[1] ^= k[3]\n\n  MView.setUint32(0, s[2], false)\n  MView.setUint32(4, s[3], false)\n  MView.setUint32(8, s[0], false)\n  MView.setUint32(12, s[1], false)\n  return M\n}\nfunction _decrypt256(C: Uint8Array, k: Uint32Array) {\n  const M = C.slice(0)\n  const MView = new DataView(M.buffer)\n  const s = new Uint32Array(4)\n  const sh = s.subarray(0, 2)\n  const sl = s.subarray(2, 4)\n\n  s[0] = k[64] ^ MView.getUint32(0, false)\n  s[1] = k[65] ^ MView.getUint32(4, false)\n  s[2] = k[66] ^ MView.getUint32(8, false)\n  s[3] = k[67] ^ MView.getUint32(12, false)\n\n  // GR1\n  Camellia_Feistel(sh, sl, k[62], k[63])\n  Camellia_Feistel(sl, sh, k[60], k[61])\n  Camellia_Feistel(sh, sl, k[58], k[59])\n  Camellia_Feistel(sl, sh, k[56], k[57])\n  Camellia_Feistel(sh, sl, k[54], k[55])\n  Camellia_Feistel(sl, sh, k[52], k[53])\n  s[1] ^= rotateL32(s[0] & k[50], 1)\n  s[2] ^= s[3] | k[49]\n  s[0] ^= s[1] | k[51]\n  s[3] ^= rotateL32(s[2] & k[48], 1)\n\n  // GR2\n  Camellia_Feistel(sh, sl, k[46], k[47])\n  Camellia_Feistel(sl, sh, k[44], k[45])\n  Camellia_Feistel(sh, sl, k[42], k[43])\n  Camellia_Feistel(sl, sh, k[40], k[41])\n  Camellia_Feistel(sh, sl, k[38], k[39])\n  Camellia_Feistel(sl, sh, k[36], k[37])\n  s[1] ^= rotateL32(s[0] & k[34], 1)\n  s[2] ^= s[3] | k[33]\n  s[0] ^= s[1] | k[35]\n  s[3] ^= rotateL32(s[2] & k[32], 1)\n\n  // GR3\n  Camellia_Feistel(sh, sl, k[30], k[31])\n  Camellia_Feistel(sl, sh, k[28], k[29])\n  Camellia_Feistel(sh, sl, k[26], k[27])\n  Camellia_Feistel(sl, sh, k[24], k[25])\n  Camellia_Feistel(sh, sl, k[22], k[23])\n  Camellia_Feistel(sl, sh, k[20], k[21])\n  s[1] ^= rotateL32(s[0] & k[18], 1)\n  s[2] ^= s[3] | k[17]\n  s[0] ^= s[1] | k[19]\n  s[3] ^= rotateL32(s[2] & k[16], 1)\n\n  // GR4\n  Camellia_Feistel(sh, sl, k[14], k[15])\n  Camellia_Feistel(sl, sh, k[12], k[13])\n  Camellia_Feistel(sh, sl, k[10], k[11])\n  Camellia_Feistel(sl, sh, k[8], k[9])\n  Camellia_Feistel(sh, sl, k[6], k[7])\n  Camellia_Feistel(sl, sh, k[4], k[5])\n  s[2] ^= k[0]\n  s[3] ^= k[1]\n  s[0] ^= k[2]\n  s[1] ^= k[3]\n\n  MView.setUint32(0, s[2], false)\n  MView.setUint32(4, s[3], false)\n  MView.setUint32(8, s[0], false)\n  MView.setUint32(12, s[1], false)\n  return M\n}\n\nfunction cipher(M: Uint8Array, k: Uint32Array, _cipher: typeof _encrypt128) {\n  if (M.length !== 16) {\n    throw new KitError('Camellia block must be 16 byte')\n  }\n  return new U8(_cipher(M, k))\n}\n\nfunction _camellia(key: Uint8Array, b: 128 | 192 | 256) {\n  if (key.length !== b >>> 3) {\n    throw new KitError(`Camellia-${b} key must be ${b >>> 3} byte`)\n  }\n  const K = KeySchedule(key)\n  const encrypt = b === 128\n    ? (M: Uint8Array) => cipher(M, K, _encrypt128)\n    : (M: Uint8Array) => cipher(M, K, _encrypt256)\n  const decrypt = b === 128\n    ? (C: Uint8Array) => cipher(C, K, _decrypt128)\n    : (C: Uint8Array) => cipher(C, K, _decrypt256)\n  return { encrypt, decrypt }\n}\n\n/**\n * Camellia 分组密码算法 / block cipher algorithm\n *\n * @param {128 | 192 | 256} b - 密钥长度 / Key size (bit)\n */\nexport function camellia(b: 128 | 192 | 256) {\n  return createCipher(\n    (K: Uint8Array) => _camellia(K, b),\n    {\n      ALGORITHM: `Camellia-${b}`,\n      BLOCK_SIZE: 16,\n      KEY_SIZE: b >>> 3,\n      MIN_KEY_SIZE: b >>> 3,\n      MAX_KEY_SIZE: b >>> 3,\n    },\n  )\n}\n","import { createCipher } from '../../core/cipher'\nimport { KitError, U8 } from '../../core/utils'\n\n// * Constants\n\nconst IP = [58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8, 57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3, 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7].map(value => 64 - value)\nconst FP = [40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31, 38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, 61, 29, 36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51, 19, 59, 27, 34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25].map(value => 64 - value)\nconst E = [32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10, 11, 12, 13, 12, 13, 14, 15, 16, 17, 16, 17, 18, 19, 20, 21, 20, 21, 22, 23, 24, 25, 24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32, 1].map(value => 32 - value)\nconst PC1 = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4].map(value => 64 - value)\nconst PC2 = [14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32].map(value => 56 - value)\nconst P = [16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, 26, 5, 18, 31, 10, 2, 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4, 25].map(value => 32 - value)\nconst KEY_SHIFT = [1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1]\n\nconst S1 = [14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7, 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8, 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0, 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13]\nconst S2 = [15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10, 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5, 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15, 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9]\nconst S3 = [10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8, 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1, 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7, 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12]\nconst S4 = [7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15, 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9, 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4, 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14]\nconst S5 = [2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9, 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6, 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14, 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3]\nconst S6 = [12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11, 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8, 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6, 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13]\nconst S7 = [4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1, 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6, 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2, 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12]\nconst S8 = [13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7, 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2, 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8, 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11]\n\n// * Functions\n\nfunction permute(input: bigint, table: number[]) {\n  let output = 0n\n  for (let i = 0; i < table.length; i++) {\n    output = output << 1n\n    output |= ((input >> BigInt(table[i])) & 0x1n)\n  }\n\n  return output\n}\n\nfunction substitute(input: bigint) {\n  const s = [S1, S2, S3, S4, S5, S6, S7, S8]\n\n  let output = 0n\n  for (let i = 0; i < 8; i++) {\n    const word = Number((input >> BigInt(6 * (7 - i))) & 0x3Fn)\n    const x = (word >> 1) & 0xF\n    const y = (word >> 4) & 0b10 | (word & 0b1)\n    const offset = x + (y << 4)\n    output = (output << 4n) | BigInt(s[i][offset])\n  }\n\n  return output\n}\n\nfunction generateKeys(key: Uint8Array) {\n  const k = permute(key.reduce((acc, cur) => (acc << 8n) | BigInt(cur), 0n), PC1)\n  const key_set = new Uint8Array(16 * 6)\n\n  let l = 0xFFFFFFFn & (k >> 28n)\n  let r = 0xFFFFFFFn & (k)\n  for (let i = 0; i < 16; i++) {\n    l = ((l << BigInt(KEY_SHIFT[i])) | (l >> 28n - BigInt(KEY_SHIFT[i]))) & 0xFFFFFFFn\n    r = ((r << BigInt(KEY_SHIFT[i])) | (r >> 28n - BigInt(KEY_SHIFT[i]))) & 0xFFFFFFFn\n    const kr = permute((l << 28n) | r, PC2)\n    const offset = i * 6\n    key_set[offset + 0] = Number(0xFFn & (kr >> 40n))\n    key_set[offset + 1] = Number(0xFFn & (kr >> 32n))\n    key_set[offset + 2] = Number(0xFFn & (kr >> 24n))\n    key_set[offset + 3] = Number(0xFFn & (kr >> 16n))\n    key_set[offset + 4] = Number(0xFFn & (kr >> 8n))\n    key_set[offset + 5] = Number(0xFFn & (kr))\n  }\n\n  return key_set\n}\n\nfunction reverseKeys(keys: Uint8Array) {\n  const key_set = new Uint8Array(keys.byteLength)\n  for (let i = 0; i < 16; i++) {\n    const offset = keys.byteLength - i * 6\n    key_set.set(keys.subarray(offset - 6, offset), i * 6)\n  }\n  return key_set\n}\n\nfunction isEqual(a: Uint8Array, b: Uint8Array) {\n  if (a.byteLength !== b.byteLength) {\n    return false\n  }\n\n  for (let i = 0; i < a.byteLength; i++) {\n    if (a[i] !== b[i]) {\n      return false\n    }\n  }\n\n  return true\n}\n\n// * DES\n\nfunction Cipher(M: Uint8Array, K: Uint8Array) {\n  const m = permute(M.reduce((acc, cur) => acc << 8n | BigInt(cur), 0n), IP)\n  let l = 0xFFFFFFFFn & (m >> 32n)\n  let r = 0xFFFFFFFFn & (m)\n\n  for (let i = 0; i < 16; i++) {\n    const offset = i * 6\n    const k = K.subarray(offset, offset + 6).reduce((acc, cur) => (acc << 8n) | BigInt(cur), 0n)\n    const l_next = r\n    r = permute(r, E) ^ k\n    r = substitute(r)\n    r = permute(r, P) ^ l\n    l = l_next\n  }\n\n  return permute((r << 32n) | l, FP)\n}\n\nfunction _des(K: Uint8Array) {\n  const key_set = generateKeys(K)\n  const inv_key_set = reverseKeys(key_set)\n  return {\n    encrypt: (M: Uint8Array) => {\n      const C = new U8(8)\n      const view = new DataView(C.buffer)\n      view.setBigUint64(0, Cipher(M, key_set), false)\n      return C\n    },\n    decrypt: (C: Uint8Array) => {\n      const M = new U8(8)\n      const view = new DataView(M.buffer)\n      view.setBigUint64(0, Cipher(C, inv_key_set), false)\n      return M\n    },\n  }\n}\n\nfunction _t_des(K: Uint8Array, l: number) {\n  if (K.byteLength !== l >> 3) {\n    throw new KitError(`3DES key must be ${l >> 3} byte`)\n  }\n  const K1 = K.subarray(0, 8)\n  const K2 = K.subarray(8, 16)\n  const K3 = l === 128 ? K1 : K.subarray(16, 24)\n  if (isEqual(K1, K2) || (l === 192 && (isEqual(K1, K3) || isEqual(K2, K3)))) {\n    console.warn('mima-kit: Weak key detected in 3DES')\n  }\n\n  const d1 = _des(K1)\n  const d2 = _des(K2)\n  const d3 = _des(K3)\n  return {\n    encrypt: (M: Uint8Array) => d3.encrypt(d2.decrypt(d1.encrypt(M))),\n    decrypt: (C: Uint8Array) => d1.decrypt(d2.encrypt(d3.decrypt(C))),\n  }\n}\n\n/**\n * Data Encryption Standard (DES) block cipher algorithm\n *\n * 数据加密标准（DES）分组密码算法\n */\nexport const des = createCipher(\n  _des,\n  {\n    ALGORITHM: 'DES',\n    BLOCK_SIZE: 8,\n    KEY_SIZE: 8,\n    MIN_KEY_SIZE: 8,\n    MAX_KEY_SIZE: 8,\n  },\n)\n\n/**\n * Triple Data Encryption Standard (3DES) block cipher algorithm\n *\n * 三重数据加密标准（3DES）分组密码算法\n *\n * @param {128 | 192} l - 密钥长度 / Key Size (bit)\n */\nexport function t_des(l: 128 | 192) {\n  return createCipher(\n    (K: Uint8Array) => _t_des(K, l),\n    {\n      ALGORITHM: '3DES',\n      BLOCK_SIZE: 8,\n      KEY_SIZE: l >> 3,\n      MIN_KEY_SIZE: l >> 3,\n      MAX_KEY_SIZE: l >> 3,\n    },\n  )\n}\n","import { createCipher } from '../../core/cipher'\nimport { KitError, rotateL32, U8 } from '../../core/utils'\n\n// * Constants\n\nconst SBox = new Uint8Array([0xD6, 0x90, 0xE9, 0xFE, 0xCC, 0xE1, 0x3D, 0xB7, 0x16, 0xB6, 0x14, 0xC2, 0x28, 0xFB, 0x2C, 0x05, 0x2B, 0x67, 0x9A, 0x76, 0x2A, 0xBE, 0x04, 0xC3, 0xAA, 0x44, 0x13, 0x26, 0x49, 0x86, 0x06, 0x99, 0x9C, 0x42, 0x50, 0xF4, 0x91, 0xEF, 0x98, 0x7A, 0x33, 0x54, 0x0B, 0x43, 0xED, 0xCF, 0xAC, 0x62, 0xE4, 0xB3, 0x1C, 0xA9, 0xC9, 0x08, 0xE8, 0x95, 0x80, 0xDF, 0x94, 0xFA, 0x75, 0x8F, 0x3F, 0xA6, 0x47, 0x07, 0xA7, 0xFC, 0xF3, 0x73, 0x17, 0xBA, 0x83, 0x59, 0x3C, 0x19, 0xE6, 0x85, 0x4F, 0xA8, 0x68, 0x6B, 0x81, 0xB2, 0x71, 0x64, 0xDA, 0x8B, 0xF8, 0xEB, 0x0F, 0x4B, 0x70, 0x56, 0x9D, 0x35, 0x1E, 0x24, 0x0E, 0x5E, 0x63, 0x58, 0xD1, 0xA2, 0x25, 0x22, 0x7C, 0x3B, 0x01, 0x21, 0x78, 0x87, 0xD4, 0x00, 0x46, 0x57, 0x9F, 0xD3, 0x27, 0x52, 0x4C, 0x36, 0x02, 0xE7, 0xA0, 0xC4, 0xC8, 0x9E, 0xEA, 0xBF, 0x8A, 0xD2, 0x40, 0xC7, 0x38, 0xB5, 0xA3, 0xF7, 0xF2, 0xCE, 0xF9, 0x61, 0x15, 0xA1, 0xE0, 0xAE, 0x5D, 0xA4, 0x9B, 0x34, 0x1A, 0x55, 0xAD, 0x93, 0x32, 0x30, 0xF5, 0x8C, 0xB1, 0xE3, 0x1D, 0xF6, 0xE2, 0x2E, 0x82, 0x66, 0xCA, 0x60, 0xC0, 0x29, 0x23, 0xAB, 0x0D, 0x53, 0x4E, 0x6F, 0xD5, 0xDB, 0x37, 0x45, 0xDE, 0xFD, 0x8E, 0x2F, 0x03, 0xFF, 0x6A, 0x72, 0x6D, 0x6C, 0x5B, 0x51, 0x8D, 0x1B, 0xAF, 0x92, 0xBB, 0xDD, 0xBC, 0x7F, 0x11, 0xD9, 0x5C, 0x41, 0x1F, 0x10, 0x5A, 0xD8, 0x0A, 0xC1, 0x31, 0x88, 0xA5, 0xCD, 0x7B, 0xBD, 0x2D, 0x74, 0xD0, 0x12, 0xB8, 0xE5, 0xB4, 0xB0, 0x89, 0x69, 0x97, 0x4A, 0x0C, 0x96, 0x77, 0x7E, 0x65, 0xB9, 0xF1, 0x09, 0xC5, 0x6E, 0xC6, 0x84, 0x18, 0xF0, 0x7D, 0xEC, 0x3A, 0xDC, 0x4D, 0x20, 0x79, 0xEE, 0x5F, 0x3E, 0xD7, 0xCB, 0x39, 0x48])\n\nconst CK = new Uint32Array([0x00070E15, 0x1C232A31, 0x383F464D, 0x545B6269, 0x70777E85, 0x8C939AA1, 0xA8AFB6BD, 0xC4CBD2D9, 0xE0E7EEF5, 0xFC030A11, 0x181F262D, 0x343B4249, 0x50575E65, 0x6C737A81, 0x888F969D, 0xA4ABB2B9, 0xC0C7CED5, 0xDCE3EAF1, 0xF8FF060D, 0x141B2229, 0x30373E45, 0x4C535A61, 0x686F767D, 0x848B9299, 0xA0A7AEB5, 0xBCC3CAD1, 0xD8DFE6ED, 0xF4FB0209, 0x10171E25, 0x2C333A41, 0x484F565D, 0x646B7279])\n\n// * Functions\n\n/**\n * 非线性变换函数 `τ`.\n *\n * Nonlinear transformation function `τ`.\n *\n * @param {number} A - 工作字 / word\n */\nfunction tau(A: number): number {\n  return SBox[A >> 24 & 0xFF] << 24 | SBox[A >> 16 & 0xFF] << 16 | SBox[A >> 8 & 0xFF] << 8 | SBox[A & 0xFF]\n}\n\n/**\n * 合成置换函数 `T`, 由非线性变换函数 `τ` 和线性变换函数 `L` 组成.\n *\n * Synthetic permutation function `T`, composed of function `τ` and function `L`.\n *\n * @param {number} A - 工作字 / word\n */\nfunction T(A: number) {\n  const B = tau(A)\n  return B ^ rotateL32(B, 2) ^ rotateL32(B, 10) ^ rotateL32(B, 18) ^ rotateL32(B, 24)\n}\n\n/**\n * 合成置换函数 `T1`, 由非线性变换函数 `τ` 和线性变换函数 `L1` 组成.\n *\n * Synthetic permutation function `T1`, composed of function `τ` and function `L1`.\n *\n * @param {number} A - 工作字 / word\n */\nfunction T1(A: number) {\n  const B = tau(A)\n  return B ^ rotateL32(B, 13) ^ rotateL32(B, 23)\n}\n\n/**\n * 密钥扩展函数 / Key expansion function\n */\nfunction expandKey(key: Uint8Array) {\n  if (key.length !== 16) {\n    throw new KitError('SM4 key must be 16 byte')\n  }\n\n  const KView = new DataView(key.buffer)\n  let K0 = 0xA3B1BAC6 ^ KView.getUint32(0, false)\n  let K1 = 0x56AA3350 ^ KView.getUint32(4, false)\n  let K2 = 0x677D9197 ^ KView.getUint32(8, false)\n  let K3 = 0xB27022DC ^ KView.getUint32(12, false)\n\n  const rk = new Uint32Array(32)\n  for (let i = 0; i < 32; i++) {\n    rk[i] = K0 ^ T1(K1 ^ K2 ^ K3 ^ CK[i])\n    K0 = K1\n    K1 = K2\n    K2 = K3\n    K3 = rk[i]\n  }\n\n  return rk\n}\n\n/**\n * 轮函数 `F` / Round function `F`\n *\n * @param {number} X0 - 工作字 / word\n * @param {number} X1 - 工作字 / word\n * @param {number} X2 - 工作字 / word\n * @param {number} X3 - 工作字 / word\n * @param {number} rk - 轮密钥 / round key\n */\nfunction F(X0: number, X1: number, X2: number, X3: number, rk: number) {\n  return X0 ^ T(X1 ^ X2 ^ X3 ^ rk)\n}\n\n// * SM4 Algorithm\n\n/**\n * @param {Uint8Array} M - 输入块 / input block\n * @param {Uint32Array} rk - 轮密钥 / round keys\n */\nfunction cipher(M: Uint8Array, rk: Uint32Array) {\n  if (M.length !== 16) {\n    throw new KitError('SM4 block must be 16 byte')\n  }\n\n  const MView = new DataView(M.buffer, M.byteOffset)\n  let X0 = MView.getUint32(0, false)\n  let X1 = MView.getUint32(4, false)\n  let X2 = MView.getUint32(8, false)\n  let X3 = MView.getUint32(12, false)\n\n  let X_: number\n  for (let i = 0; i < 32; i++) {\n    X_ = F(X0, X1, X2, X3, rk[i])\n    X0 = X1\n    X1 = X2\n    X2 = X3\n    X3 = X_\n  }\n\n  const R = new U8(16)\n  const RView = new DataView(R.buffer)\n  RView.setUint32(0, X3, false)\n  RView.setUint32(4, X2, false)\n  RView.setUint32(8, X1, false)\n  RView.setUint32(12, X0, false)\n  return R\n}\n\nfunction _sm4(K: Uint8Array) {\n  const rk = expandKey(K)\n  const rkReversed = rk.toReversed()\n  return {\n    encrypt: (M: Uint8Array) => cipher(M, rk),\n    decrypt: (M: Uint8Array) => cipher(M, rkReversed),\n  }\n}\n\n/**\n * SM4 分组密码算法 / block cipher algorithm\n */\nexport const sm4 = createCipher(\n  _sm4,\n  {\n    ALGORITHM: 'SM4',\n    BLOCK_SIZE: 16,\n    KEY_SIZE: 16,\n    MIN_KEY_SIZE: 16,\n    MAX_KEY_SIZE: 16,\n  },\n)\n","import type { Padding } from '../../core/cipher'\nimport { createCipher, PKCS7_PAD } from '../../core/cipher'\nimport { KitError, U8 } from '../../core/utils'\n\n// * Constants\n\nconst DELTA = 0x9E3779B9\n\n// * Tiny Encryption Algorithm (TEA)\n\nfunction _tea(K: Uint8Array, round: number) {\n  if (K.length !== 16) {\n    throw new KitError('TEA key must be 16 byte')\n  }\n  const K32 = new Uint32Array(K.buffer)\n  const sum_delta = (DELTA * round) & 0xFFFFFFFF\n\n  const encrypt = (M: Uint8Array) => {\n    if (M.length !== 8) {\n      throw new KitError('TEA block must be 8 byte')\n    }\n    const C = U8.from(M.slice(0))\n    const C32 = new Uint32Array(C.buffer)\n    let sum = 0\n    for (let i = 0; i < round; i++) {\n      sum += DELTA\n      C32[0] += ((C32[1] << 4) + K32[0]) ^ (C32[1] + sum) ^ ((C32[1] >>> 5) + K32[1])\n      C32[1] += ((C32[0] << 4) + K32[2]) ^ (C32[0] + sum) ^ ((C32[0] >>> 5) + K32[3])\n    }\n    return C\n  }\n  const decrypt = (C: Uint8Array) => {\n    if (C.length !== 8) {\n      throw new KitError('TEA block must be 8 byte')\n    }\n    const M = U8.from(C.slice(0))\n    const M32 = new Uint32Array(M.buffer)\n    let sum = sum_delta\n    for (let i = 0; i < round; i++) {\n      M32[1] -= ((M32[0] << 4) + K32[2]) ^ (M32[0] + sum) ^ ((M32[0] >>> 5) + K32[3])\n      M32[0] -= ((M32[1] << 4) + K32[0]) ^ (M32[1] + sum) ^ ((M32[1] >>> 5) + K32[1])\n      sum -= DELTA\n    }\n    return M\n  }\n  return { encrypt, decrypt }\n}\n\nfunction _xtea(K: Uint8Array, round: number) {\n  if (K.length !== 16) {\n    throw new KitError('XTEA key must be 16 byte')\n  }\n  const K32 = new Uint32Array(K.buffer)\n  const sum_delta = (DELTA * round) & 0xFFFFFFFF\n\n  const encrypt = (M: Uint8Array) => {\n    if (M.length !== 8) {\n      throw new KitError('XTEA block must be 8 byte')\n    }\n    const C = U8.from(M.slice(0))\n    const C32 = new Uint32Array(C.buffer)\n    let sum = 0\n    for (let i = 0; i < round; i++) {\n      C32[0] += (C32[1] << 4 ^ C32[1] >>> 5) + C32[1] ^ sum + K32[sum & 3]\n      sum += DELTA\n      C32[1] += (C32[0] << 4 ^ C32[0] >>> 5) + C32[0] ^ sum + K32[(sum >>> 11) & 3]\n    }\n    return C\n  }\n  const decrypt = (C: Uint8Array) => {\n    if (C.length !== 8) {\n      throw new KitError('XTEA block must be 8 byte')\n    }\n    const M = U8.from(C.slice(0))\n    const M32 = new Uint32Array(M.buffer)\n    let sum = sum_delta\n    for (let i = 0; i < round; i++) {\n      M32[1] -= ((M32[0] << 4 ^ M32[0] >>> 5) + M32[0]) ^ (sum + K32[(sum >>> 11) & 3])\n      sum -= DELTA\n      M32[0] -= ((M32[1] << 4 ^ M32[1] >>> 5) + M32[1]) ^ (sum + K32[sum & 3])\n    }\n    return M\n  }\n  return { encrypt, decrypt }\n}\n\nfunction _xxtea(K: Uint8Array, padding: Padding, round?: number) {\n  if (K.length !== 16) {\n    throw new KitError('XXTEA key must be 16 byte')\n  }\n  const K32 = new Uint32Array(K.buffer)\n\n  const encrypt = (M: Uint8Array) => {\n    const C = U8.from(padding(M, 4))\n    if (C.length < 8 || C.length % 4 !== 0) {\n      throw new KitError('XXTEA block must be a multiple of 4 byte (at least 8 byte)')\n    }\n    const C32 = new Uint32Array(C.buffer)\n    const n = C32.length\n    let _round = round || (6 + 52 / n) >>> 0\n    let sum = 0\n    let y: number\n    let z = C32[n - 1]\n    let p: number\n\n    while (_round-- > 0) {\n      sum += DELTA\n      const e = (sum >>> 2) & 3\n      for (p = 0; p < n - 1; p++) {\n        y = C32[p + 1]\n        z = C32[p] += (((z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4)) ^ ((sum ^ y) + (K32[(p & 3) ^ e] ^ z)))\n      }\n      y = C32[0]\n      z = C32[n - 1] += (((z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4)) ^ ((sum ^ y) + (K32[(p & 3) ^ e] ^ z)))\n    }\n    return C\n  }\n  const decrypt = (C: Uint8Array) => {\n    if (C.length % 4 !== 0) {\n      throw new KitError('Decryption error')\n    }\n    const M = U8.from(C.slice(0))\n    const M32 = new Uint32Array(M.buffer)\n    const n = M32.length\n    let _round = round || (6 + 52 / n) >>> 0\n    let sum = (DELTA * _round) & 0xFFFFFFFF\n    let y = M32[0]\n    let z: number\n    let p: number\n    while (_round-- > 0) {\n      const e = (sum >>> 2) & 3\n      for (p = n - 1; p > 0; p--) {\n        z = M32[p - 1]\n        y = M32[p] -= (((z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4)) ^ ((sum ^ y) + (K32[(p & 3) ^ e] ^ z)))\n      }\n      z = M32[n - 1]\n      y = M32[0] -= (((z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4)) ^ ((sum ^ y) + (K32[(p & 3) ^ e] ^ z)))\n      sum -= DELTA\n    }\n    return padding(M)\n  }\n  return { encrypt, decrypt }\n}\n\n/**\n * 微型加密算法 (TEA) 分组密码算法\n *\n * Tiny Encryption Algorithm (TEA) block cipher algorithm\n *\n * @param {number} round - 轮数 / Rounds (default: 32)\n */\nexport function tea(round: number = 32) {\n  if (round <= 0) {\n    throw new KitError('TEA round must be a positive number')\n  }\n  return createCipher(\n    (K: Uint8Array) => _tea(K, round),\n    {\n      ALGORITHM: 'TEA',\n      BLOCK_SIZE: 8,\n      KEY_SIZE: 16,\n      MIN_KEY_SIZE: 16,\n      MAX_KEY_SIZE: 16,\n    },\n  )\n}\n\n/**\n * 扩展微型加密算法 (XTEA) 分组密码算法\n *\n * eXtended Tiny Encryption Algorithm (XTEA) block cipher algorithm\n *\n * @param {number} round - 轮数 / Rounds (default: 32)\n */\nexport function xtea(round: number = 32) {\n  if (round <= 0) {\n    throw new KitError('XTEA round must be a positive number')\n  }\n  return createCipher(\n    (K: Uint8Array) => _xtea(K, round),\n    {\n      ALGORITHM: 'XTEA',\n      BLOCK_SIZE: 8,\n      KEY_SIZE: 16,\n      MIN_KEY_SIZE: 16,\n      MAX_KEY_SIZE: 16,\n    },\n  )\n}\n\nexport interface XXTEAConfig {\n  /**\n   * 分组大小 / Block size (default: 16)\n   *\n   * `XXTEA` 本身设计用于加密任意数量的数据块。单独使用 `XXTEA` 时，该选项不起作用。\n   * 但是，如果需要将 `XXTEA` 用作分组密码和 `工作模式` 一起使用，则可以通过此选项设置分组大小。\n   *\n   * 注意: 这不是 `XXTEA` 的标准用法且缺乏相关的安全分析。\n   *\n   * `XXTEA` is natively designed to encrypt arbitrary amounts of data blocks.\n   * When used alone, this option does not take effect.\n   * However, if you need to use `XXTEA` as a block cipher and use it with `Operation Mode`,\n   * you can set the `BLOCK_SIZE` through this option.\n   *\n   * Note: This is not the standard usage of `XXTEA` and lacks relevant security analysis.\n   */\n  BLOCK_SIZE?: number\n  /**\n   * 填充方式 / Padding method (default: PKCS7)\n   *\n   * 如果要像其他分组密码一样使用 `XXTEA`，例如使用 `CBC` 模式，\n   * 应该将 `padding` 设置为 `NO_PAD` 并让 `工作模式` 处理填充。\n   *\n   * If you want to use `XXTEA` like other block ciphers, such as with `CBC` mode,\n   * you should set the `padding` to `NO_PAD` and let the `Operation Mode` handle the padding.\n   */\n  padding?: Padding\n  /**\n   * 轮数 / Rounds (default: undefined)\n   *\n   * `XXTEA` 的轮数可以通过这个选项设置，如果不设置则使用默认的轮数计算方式。\n   *\n   * The rounds of `XXTEA` can be set through this option,\n   * if not set, the default round calculation method will be used.\n   */\n  round?: number\n}\n\n/**\n * 纠正块 TEA (XXTEA) 分组密码算法\n *\n * Corrected Block TEA (XXTEA) block cipher algorithm\n */\nexport function xxtea(config?: XXTEAConfig) {\n  const {\n    BLOCK_SIZE = 16,\n    padding = PKCS7_PAD,\n    round,\n  } = config ?? {}\n  if (BLOCK_SIZE < 8 || BLOCK_SIZE % 4 !== 0) {\n    throw new KitError('XXTEA block size must be a multiple of 4 byte (at least 8 byte)')\n  }\n  return createCipher(\n    (K: Uint8Array) => _xxtea(K, padding, round),\n    {\n      ALGORITHM: 'XXTEA',\n      BLOCK_SIZE,\n      KEY_SIZE: 16,\n      MIN_KEY_SIZE: 16,\n      MAX_KEY_SIZE: 16,\n    },\n  )\n}\n","import { createCipher } from '../../core/cipher'\nimport { KitError, rotateL32, rotateR32, U8 } from '../../core/utils'\n\n// * Constants\n\nconst P0 = new Uint8Array([0xA9, 0x67, 0xB3, 0xE8, 0x04, 0xFD, 0xA3, 0x76, 0x9A, 0x92, 0x80, 0x78, 0xE4, 0xDD, 0xD1, 0x38, 0x0D, 0xC6, 0x35, 0x98, 0x18, 0xF7, 0xEC, 0x6C, 0x43, 0x75, 0x37, 0x26, 0xFA, 0x13, 0x94, 0x48, 0xF2, 0xD0, 0x8B, 0x30, 0x84, 0x54, 0xDF, 0x23, 0x19, 0x5B, 0x3D, 0x59, 0xF3, 0xAE, 0xA2, 0x82, 0x63, 0x01, 0x83, 0x2E, 0xD9, 0x51, 0x9B, 0x7C, 0xA6, 0xEB, 0xA5, 0xBE, 0x16, 0x0C, 0xE3, 0x61, 0xC0, 0x8C, 0x3A, 0xF5, 0x73, 0x2C, 0x25, 0x0B, 0xBB, 0x4E, 0x89, 0x6B, 0x53, 0x6A, 0xB4, 0xF1, 0xE1, 0xE6, 0xBD, 0x45, 0xE2, 0xF4, 0xB6, 0x66, 0xCC, 0x95, 0x03, 0x56, 0xD4, 0x1C, 0x1E, 0xD7, 0xFB, 0xC3, 0x8E, 0xB5, 0xE9, 0xCF, 0xBF, 0xBA, 0xEA, 0x77, 0x39, 0xAF, 0x33, 0xC9, 0x62, 0x71, 0x81, 0x79, 0x09, 0xAD, 0x24, 0xCD, 0xF9, 0xD8, 0xE5, 0xC5, 0xB9, 0x4D, 0x44, 0x08, 0x86, 0xE7, 0xA1, 0x1D, 0xAA, 0xED, 0x06, 0x70, 0xB2, 0xD2, 0x41, 0x7B, 0xA0, 0x11, 0x31, 0xC2, 0x27, 0x90, 0x20, 0xF6, 0x60, 0xFF, 0x96, 0x5C, 0xB1, 0xAB, 0x9E, 0x9C, 0x52, 0x1B, 0x5F, 0x93, 0x0A, 0xEF, 0x91, 0x85, 0x49, 0xEE, 0x2D, 0x4F, 0x8F, 0x3B, 0x47, 0x87, 0x6D, 0x46, 0xD6, 0x3E, 0x69, 0x64, 0x2A, 0xCE, 0xCB, 0x2F, 0xFC, 0x97, 0x05, 0x7A, 0xAC, 0x7F, 0xD5, 0x1A, 0x4B, 0x0E, 0xA7, 0x5A, 0x28, 0x14, 0x3F, 0x29, 0x88, 0x3C, 0x4C, 0x02, 0xB8, 0xDA, 0xB0, 0x17, 0x55, 0x1F, 0x8A, 0x7D, 0x57, 0xC7, 0x8D, 0x74, 0xB7, 0xC4, 0x9F, 0x72, 0x7E, 0x15, 0x22, 0x12, 0x58, 0x07, 0x99, 0x34, 0x6E, 0x50, 0xDE, 0x68, 0x65, 0xBC, 0xDB, 0xF8, 0xC8, 0xA8, 0x2B, 0x40, 0xDC, 0xFE, 0x32, 0xA4, 0xCA, 0x10, 0x21, 0xF0, 0xD3, 0x5D, 0x0F, 0x00, 0x6F, 0x9D, 0x36, 0x42, 0x4A, 0x5E, 0xC1, 0xE0])\nconst P1 = new Uint8Array([0x75, 0xF3, 0xC6, 0xF4, 0xDB, 0x7B, 0xFB, 0xC8, 0x4A, 0xD3, 0xE6, 0x6B, 0x45, 0x7D, 0xE8, 0x4B, 0xD6, 0x32, 0xD8, 0xFD, 0x37, 0x71, 0xF1, 0xE1, 0x30, 0x0F, 0xF8, 0x1B, 0x87, 0xFA, 0x06, 0x3F, 0x5E, 0xBA, 0xAE, 0x5B, 0x8A, 0x00, 0xBC, 0x9D, 0x6D, 0xC1, 0xB1, 0x0E, 0x80, 0x5D, 0xD2, 0xD5, 0xA0, 0x84, 0x07, 0x14, 0xB5, 0x90, 0x2C, 0xA3, 0xB2, 0x73, 0x4C, 0x54, 0x92, 0x74, 0x36, 0x51, 0x38, 0xB0, 0xBD, 0x5A, 0xFC, 0x60, 0x62, 0x96, 0x6C, 0x42, 0xF7, 0x10, 0x7C, 0x28, 0x27, 0x8C, 0x13, 0x95, 0x9C, 0xC7, 0x24, 0x46, 0x3B, 0x70, 0xCA, 0xE3, 0x85, 0xCB, 0x11, 0xD0, 0x93, 0xB8, 0xA6, 0x83, 0x20, 0xFF, 0x9F, 0x77, 0xC3, 0xCC, 0x03, 0x6F, 0x08, 0xBF, 0x40, 0xE7, 0x2B, 0xE2, 0x79, 0x0C, 0xAA, 0x82, 0x41, 0x3A, 0xEA, 0xB9, 0xE4, 0x9A, 0xA4, 0x97, 0x7E, 0xDA, 0x7A, 0x17, 0x66, 0x94, 0xA1, 0x1D, 0x3D, 0xF0, 0xDE, 0xB3, 0x0B, 0x72, 0xA7, 0x1C, 0xEF, 0xD1, 0x53, 0x3E, 0x8F, 0x33, 0x26, 0x5F, 0xEC, 0x76, 0x2A, 0x49, 0x81, 0x88, 0xEE, 0x21, 0xC4, 0x1A, 0xEB, 0xD9, 0xC5, 0x39, 0x99, 0xCD, 0xAD, 0x31, 0x8B, 0x01, 0x18, 0x23, 0xDD, 0x1F, 0x4E, 0x2D, 0xF9, 0x48, 0x4F, 0xF2, 0x65, 0x8E, 0x78, 0x5C, 0x58, 0x19, 0x8D, 0xE5, 0x98, 0x57, 0x67, 0x7F, 0x05, 0x64, 0xAF, 0x63, 0xB6, 0xFE, 0xF5, 0xB7, 0x3C, 0xA5, 0xCE, 0xE9, 0x68, 0x44, 0xE0, 0x4D, 0x43, 0x69, 0x29, 0x2E, 0xAC, 0x15, 0x59, 0xA8, 0x0A, 0x9E, 0x6E, 0x47, 0xDF, 0x34, 0x35, 0x6A, 0xCF, 0xDC, 0x22, 0xC9, 0xC0, 0x9B, 0x89, 0xD4, 0xED, 0xAB, 0x12, 0xA2, 0x0D, 0x52, 0xBB, 0x02, 0x2F, 0xA9, 0xD7, 0x61, 0x1E, 0xB4, 0x50, 0x04, 0xF6, 0xC2, 0x16, 0x25, 0x86, 0x56, 0x55, 0x09, 0xBE, 0x91])\nconst P = [P0, P1]\nconst P_00 = 1\nconst P_01 = 0\nconst P_02 = 0\nconst P_03 = P_01 ^ 1\nconst P_04 = 1\nconst P_10 = 0\nconst P_11 = 0\nconst P_12 = 1\nconst P_13 = P_11 ^ 1\nconst P_14 = 0\nconst P_20 = 1\nconst P_21 = 1\nconst P_22 = 0\nconst P_23 = P_21 ^ 1\nconst P_24 = 0\nconst P_30 = 0\nconst P_31 = 1\nconst P_32 = 1\nconst P_33 = P_31 ^ 1\nconst P_34 = 1\nconst GF256_FDBK_2 = 0x169 >> 1\nconst GF256_FDBK_4 = 0x169 >> 2\nconst RS_GF_FDBK = 0x14D\nconst MDS = [\n  new Uint32Array(256),\n  new Uint32Array(256),\n  new Uint32Array(256),\n  new Uint32Array(256),\n]\n\n// * Functions\n\nconst LFSR1 = (x: number) => (x >> 1) ^ ((x & 0x01) !== 0 ? GF256_FDBK_2 : 0)\nconst LFSR2 = (x: number) => (x >> 2) ^ ((x & 0x02) !== 0 ? GF256_FDBK_2 : 0) ^ ((x & 0x01) !== 0 ? GF256_FDBK_4 : 0)\nconst Mx_X = (x: number) => x ^ LFSR2(x)\nconst Mx_Y = (x: number) => x ^ LFSR1(x) ^ LFSR2(x);\n(function initMDS() {\n  // precompute the MDS matrix\n  const m1 = new Uint32Array(2)\n  const mX = new Uint32Array(2)\n  const mY = new Uint32Array(2)\n  for (let i = 0; i < 256; i++) {\n    const j0 = P[0][i] & 0xFF\n    m1[0] = j0\n    mX[0] = Mx_X(j0) & 0xFF\n    mY[0] = Mx_Y(j0) & 0xFF\n\n    const j1 = P[1][i] & 0xFF\n    m1[1] = j1\n    mX[1] = Mx_X(j1) & 0xFF\n    mY[1] = Mx_Y(j1) & 0xFF\n\n    MDS[0][i]\n      = (m1[P_00] << 0)\n      | (mX[P_00] << 8)\n      | (mY[P_00] << 16)\n      | (mY[P_00] << 24)\n    MDS[1][i]\n      = (mY[P_10] << 0)\n      | (mY[P_10] << 8)\n      | (mX[P_10] << 16)\n      | (m1[P_10] << 24)\n    MDS[2][i]\n      = (mX[P_20] << 0)\n      | (mY[P_20] << 8)\n      | (m1[P_20] << 16)\n      | (mY[P_20] << 24)\n    MDS[3][i]\n      = (mX[P_30] << 0)\n      | (m1[P_30] << 8)\n      | (mY[P_30] << 16)\n      | (mX[P_30] << 24)\n  }\n})()\n\nconst b0 = (x: number) => x & 0xFF\nconst b1 = (x: number) => (x >>> 8) & 0xFF\nconst b2 = (x: number) => (x >>> 16) & 0xFF\nconst b3 = (x: number) => (x >>> 24) & 0xFF\nfunction chooseB(x: number, N: number) {\n  switch (N & 3) {\n    case 0: return b0(x)\n    case 1: return b1(x)\n    case 2: return b2(x)\n    case 3: return b3(x)\n    default: return 0\n  }\n}\nfunction RS_REM(x: number) {\n  const b = (x >>> 24) & 0xFF\n  const g2 = ((b << 1) ^ ((b & 0x80) !== 0 ? RS_GF_FDBK : 0)) & 0xFF\n  const g3 = (b >>> 1) ^ ((b & 0x01) !== 0 ? (RS_GF_FDBK >>> 1) : 0) ^ g2\n  return (x << 8) ^ (g3 << 24) ^ (g2 << 16) ^ (g3 << 8) ^ b\n}\nfunction RS_MDS_Encode(k0: number, k1: number) {\n  for (let i = 0; i < 4; i++) {\n    k1 = RS_REM(k1)\n  }\n  k1 ^= k0\n  for (let i = 0; i < 4; i++) {\n    k1 = RS_REM(k1)\n  }\n  return k1\n}\nfunction F32(K64SigByte: number, x: number, k32: Uint32Array) {\n  let lB0 = b0(x)\n  let lB1 = b1(x)\n  let lB2 = b2(x)\n  let lB3 = b3(x)\n  const k0 = k32[0] || 0\n  const k1 = k32[1] || 0\n  const k2 = k32[2] || 0\n  const k3 = k32[3] || 0\n\n  let result = 0\n  let K64LSB = K64SigByte & 0x3\n  if (K64LSB === 1) {\n    result\n      = MDS[0][P[P_01][lB0] & 0xFF ^ b0(k0)]\n      ^ MDS[1][P[P_11][lB1] & 0xFF ^ b1(k0)]\n      ^ MDS[2][P[P_21][lB2] & 0xFF ^ b2(k0)]\n      ^ MDS[3][P[P_31][lB3] & 0xFF ^ b3(k0)]\n    return result\n  }\n\n  if (K64LSB === 0) {\n    lB0 = P[P_04][lB0] & 0xFF ^ b0(k3)\n    lB1 = P[P_14][lB1] & 0xFF ^ b1(k3)\n    lB2 = P[P_24][lB2] & 0xFF ^ b2(k3)\n    lB3 = P[P_34][lB3] & 0xFF ^ b3(k3)\n    K64LSB = 3\n  }\n\n  if (K64LSB === 3) {\n    lB0 = P[P_03][lB0] & 0xFF ^ b0(k2)\n    lB1 = P[P_13][lB1] & 0xFF ^ b1(k2)\n    lB2 = P[P_23][lB2] & 0xFF ^ b2(k2)\n    lB3 = P[P_33][lB3] & 0xFF ^ b3(k2)\n    K64LSB = 2\n  }\n\n  if (K64LSB === 2) {\n    result\n      = MDS[0][P[P_01][P[P_02][lB0] & 0xFF ^ b0(k1)] & 0xFF ^ b0(k0)]\n      ^ MDS[1][P[P_11][P[P_12][lB1] & 0xFF ^ b1(k1)] & 0xFF ^ b1(k0)]\n      ^ MDS[2][P[P_21][P[P_22][lB2] & 0xFF ^ b2(k1)] & 0xFF ^ b2(k0)]\n      ^ MDS[3][P[P_31][P[P_32][lB3] & 0xFF ^ b3(k1)] & 0xFF ^ b3(k0)]\n    return result\n  }\n\n  return 0\n}\nfunction Fe32(SBox: Uint32Array, x: number, R: number) {\n  const result\n    = SBox[0x000 + 2 * chooseB(x, R + 0) + 0]\n    ^ SBox[0x000 + 2 * chooseB(x, R + 1) + 1]\n    ^ SBox[0x200 + 2 * chooseB(x, R + 2) + 0]\n    ^ SBox[0x200 + 2 * chooseB(x, R + 3) + 1]\n  return result\n}\n\n// * Blowfish Algorithm\n\nfunction initKeySchedule(K: Uint8Array) {\n  const K32 = new Uint32Array(K.buffer, K.byteOffset)\n  const K32e = new Uint32Array([K32[0], K32[2], K32[4], K32[6]])\n  const K32o = new Uint32Array([K32[1], K32[3], K32[5], K32[7]])\n  const K64Count = K32.length >> 1\n\n  // compute S-box keys using (12, 8) Reed-Solomon code over GF(256)\n  const SBoxKeys = new Uint32Array(4)\n  for (let i = 0; i < 4; i++) {\n    const j = K64Count - 1 - i\n    SBoxKeys[j] = RS_MDS_Encode(K32e[i], K32o[i])\n  }\n\n  // compute the round decryption subkeys for PHT. these same subkeys\n  // will be used in encryption but will be applied in reverse order.\n  let q = 0\n  const Subkeys = new Uint32Array(40)\n  for (let i = 0; i < 20; i++) {\n    let A = F32(K64Count, q, K32e)\n    let B = F32(K64Count, q + 0x01010101, K32o)\n    B = rotateL32(B, 8)\n    A += B\n    Subkeys[2 * i] = A\n    A += B\n    Subkeys[2 * i + 1] = rotateL32(A, 9)\n    q += 0x02020202\n  }\n\n  // fully expand the table for speed\n  const k0 = SBoxKeys[0]\n  const k1 = SBoxKeys[1]\n  const k2 = SBoxKeys[2]\n  const k3 = SBoxKeys[3]\n  const SBox = new Uint32Array(4 * 256)\n  for (let i = 0; i < 256; i++) {\n    let lb0 = i\n    let lb1 = i\n    let lb2 = i\n    let lb3 = i\n    let K64CountLSB = K64Count & 3\n\n    if (K64CountLSB === 1) {\n      SBox[0x000 + 2 * i + 0] = MDS[0][P[P_01][lb0] & 0xFF ^ b0(k0)]\n      SBox[0x000 + 2 * i + 1] = MDS[1][P[P_11][lb1] & 0xFF ^ b1(k0)]\n      SBox[0x200 + 2 * i + 0] = MDS[2][P[P_21][lb2] & 0xFF ^ b2(k0)]\n      SBox[0x200 + 2 * i + 1] = MDS[3][P[P_31][lb3] & 0xFF ^ b3(k0)]\n      continue\n    }\n\n    if (K64CountLSB === 0) {\n      lb0 = P[P_04][lb0] & 0xFF ^ b0(k3)\n      lb1 = P[P_14][lb1] & 0xFF ^ b1(k3)\n      lb2 = P[P_24][lb2] & 0xFF ^ b2(k3)\n      lb3 = P[P_34][lb3] & 0xFF ^ b3(k3)\n      K64CountLSB = 3\n    }\n\n    if (K64CountLSB === 3) {\n      lb0 = P[P_03][lb0] & 0xFF ^ b0(k2)\n      lb1 = P[P_13][lb1] & 0xFF ^ b1(k2)\n      lb2 = P[P_23][lb2] & 0xFF ^ b2(k2)\n      lb3 = P[P_33][lb3] & 0xFF ^ b3(k2)\n      K64CountLSB = 2\n    }\n\n    if (K64CountLSB === 2) {\n      SBox[0x000 + 2 * i + 0]\n        = MDS[0][P[P_01][P[P_02][lb0] & 0xFF ^ b0(k1)] & 0xFF ^ b0(k0)]\n      SBox[0x000 + 2 * i + 1]\n        = MDS[1][P[P_11][P[P_12][lb1] & 0xFF ^ b1(k1)] & 0xFF ^ b1(k0)]\n      SBox[0x200 + 2 * i + 0]\n        = MDS[2][P[P_21][P[P_22][lb2] & 0xFF ^ b2(k1)] & 0xFF ^ b2(k0)]\n      SBox[0x200 + 2 * i + 1]\n        = MDS[3][P[P_31][P[P_32][lb3] & 0xFF ^ b3(k1)] & 0xFF ^ b3(k0)]\n    }\n  }\n\n  return { Subkeys, SBox }\n}\n\nfunction _twofish(K: Uint8Array, b: 128 | 192 | 256) {\n  if (K.byteLength !== b >> 3) {\n    throw new KitError(`Twofish key must be ${b >> 3} byte`)\n  }\n  const { Subkeys, SBox } = initKeySchedule(K)\n\n  const encrypt = (M: Uint8Array) => {\n    if (M.byteLength !== 16) {\n      throw new KitError('Twofish block must be 16 byte')\n    }\n    const M32 = new Uint32Array(M.buffer, M.byteOffset)\n    // input whitening\n    let x0 = M32[0] ^ Subkeys[0]\n    let x1 = M32[1] ^ Subkeys[1]\n    let x2 = M32[2] ^ Subkeys[2]\n    let x3 = M32[3] ^ Subkeys[3]\n\n    let k = 8\n    // 16 rounds of encryption\n    for (let i = 0; i < 16; i += 2) {\n      let t0 = Fe32(SBox, x0, 0)\n      let t1 = Fe32(SBox, x1, 3)\n      x2 ^= t0 + t1 + Subkeys[k++]\n      x2 = rotateR32(x2, 1)\n      x3 = rotateL32(x3, 1)\n      x3 ^= t0 + 2 * t1 + Subkeys[k++]\n\n      t0 = Fe32(SBox, x2, 0)\n      t1 = Fe32(SBox, x3, 3)\n      x0 ^= t0 + t1 + Subkeys[k++]\n      x0 = rotateR32(x0, 1)\n      x1 = rotateL32(x1, 1)\n      x1 ^= t0 + 2 * t1 + Subkeys[k++]\n    }\n\n    // output whitening\n    x2 ^= Subkeys[4]\n    x3 ^= Subkeys[5]\n    x0 ^= Subkeys[6]\n    x1 ^= Subkeys[7]\n\n    return new U8(new Uint32Array([x2, x3, x0, x1]).buffer)\n  }\n  const decrypt = (C: Uint8Array) => {\n    if (C.byteLength !== 16) {\n      throw new KitError('Twofish block must be 16 byte')\n    }\n    const M32 = new Uint32Array(C.buffer, C.byteOffset)\n    // input whitening\n    let x2 = M32[0] ^ Subkeys[4]\n    let x3 = M32[1] ^ Subkeys[5]\n    let x0 = M32[2] ^ Subkeys[6]\n    let x1 = M32[3] ^ Subkeys[7]\n\n    let k = 39\n    // 16 rounds of decryption\n    for (let i = 0; i < 16; i += 2) {\n      let t0 = Fe32(SBox, x2, 0)\n      let t1 = Fe32(SBox, x3, 3)\n      x1 ^= t0 + 2 * t1 + Subkeys[k--]\n      x1 = rotateR32(x1, 1)\n      x0 = rotateL32(x0, 1)\n      x0 ^= t0 + t1 + Subkeys[k--]\n\n      t0 = Fe32(SBox, x0, 0)\n      t1 = Fe32(SBox, x1, 3)\n      x3 ^= t0 + 2 * t1 + Subkeys[k--]\n      x3 = rotateR32(x3, 1)\n      x2 = rotateL32(x2, 1)\n      x2 ^= t0 + t1 + Subkeys[k--]\n    }\n\n    // output whitening\n    x0 ^= Subkeys[0]\n    x1 ^= Subkeys[1]\n    x2 ^= Subkeys[2]\n    x3 ^= Subkeys[3]\n\n    return new U8(new Uint32Array([x0, x1, x2, x3]).buffer)\n  }\n  return { encrypt, decrypt }\n}\n\n/**\n * Twofish 分组密码算法 / block cipher algorithm\n *\n * @param {128 | 192 | 256} b - 密钥长度 / Key size (bit)\n */\nexport function twofish(b: 128 | 192 | 256) {\n  return createCipher(\n    (K: Uint8Array) => _twofish(K, b),\n    {\n      ALGORITHM: 'Twofish',\n      BLOCK_SIZE: 16,\n      KEY_SIZE: b >> 3,\n      MIN_KEY_SIZE: b >> 3,\n      MAX_KEY_SIZE: b >> 3,\n    },\n  )\n}\n","import type { FpECPoint, FpMECParams, FpTECParams, FpWECParams } from './ecParams'\nimport { mod, modInverse, modPow, modPrimeSquare, U8 } from './utils'\n\n// * Interfaces\n\nexport interface FpUtils {\n  /** 素域加法 / Prime Field Addition */\n  plus: (...args: bigint[]) => bigint\n  /** 素域乘法 / Prime Field Multiplication */\n  multiply: (...args: bigint[]) => bigint\n  /** 素域减法 / Prime Field Subtraction */\n  subtract: (a: bigint, ...args: bigint[]) => bigint\n  /** 素域除法 / Prime Field Division */\n  divide: (a: bigint, b: bigint) => bigint\n  /** 素域取模 / Prime Field Modulus */\n  mod: (a: bigint) => bigint\n  /** 素域幂运算 / Prime Field Power */\n  pow: (a: bigint, b: bigint) => bigint\n  /** 素域逆元 / Prime Field Modular Inverse */\n  inverse: (a: bigint) => bigint\n  /** 素域平方根 / Prime Field Square Root */\n  root: (a: bigint) => bigint\n}\n\nexport interface FpECUtils {\n  /**\n   * 素域椭圆曲线点加法\n   *\n   * Prime Field Elliptic Curve Point Addition\n   */\n  addPoint: (A: FpECPoint, B: FpECPoint) => FpECPoint<bigint>\n  /**\n   * 素域椭圆曲线点乘法\n   *\n   * Prime Field Elliptic Curve Point Multiplication\n   */\n  mulPoint: (P: FpECPoint, k: bigint | Uint8Array) => FpECPoint<bigint>\n}\n\n// * FpEC Components\n\n/**\n * 将椭圆曲线点转换为 U8 格式\n *\n * Convert EC Point to U8 Format\n */\nexport function U8Point(point?: FpECPoint, byte?: number): FpECPoint<U8> {\n  if (!point) {\n    return { isInfinity: true, x: new U8(), y: new U8() }\n  }\n  const isInfinity = point.isInfinity\n  const x = typeof point.x === 'bigint'\n    ? U8.fromBI(point.x, byte)\n    : U8.from(point.x)\n  const y = typeof point.y === 'bigint'\n    ? U8.fromBI(point.y, byte)\n    : U8.from(point.y)\n  return { isInfinity, x, y }\n}\n\n/**\n * 将椭圆曲线点转换为 bigint 格式\n *\n * Convert EC Point to bigint Format\n */\nexport function BIPoint(point?: FpECPoint): FpECPoint<bigint> {\n  if (!point) {\n    return { isInfinity: true, x: 0n, y: 0n }\n  }\n  const isInfinity = point.isInfinity\n  const x = typeof point.x === 'bigint'\n    ? point.x\n    : U8.from(point.x).toBI()\n  const y = typeof point.y === 'bigint'\n    ? point.y\n    : U8.from(point.y).toBI()\n  return { isInfinity, x, y }\n}\n\n/**\n * 蒙哥马利梯子点乘法\n *\n * Montgomery Ladder Point Multiplication\n *\n * @param addPoint 素域椭圆曲线点加法函数 / Prime Field EC Point Addition Function\n * @param {FpECPoint} P 椭圆曲线点 / EC Point\n * @param {bigint | Uint8Array} k 标量 / Scalar\n */\nfunction LadderMultiply(addPoint: FpECUtils['addPoint'], P: FpECPoint, k: bigint | Uint8Array): FpECPoint<bigint> {\n  k = typeof k === 'bigint' ? k : U8.from(k).toBI()\n\n  let R0 = BIPoint()\n  let R1 = BIPoint(P)\n  // MSb -> LSb\n  const bit_array = k.toString(2).split('')\n  for (const bit of bit_array) {\n    if (bit === '1') {\n      R0 = addPoint(R0, R1)\n      R1 = addPoint(R1, R1)\n    }\n    else {\n      R1 = addPoint(R0, R1)\n      R0 = addPoint(R0, R0)\n    }\n  }\n  return R0\n}\n\n/** 素域运算 / Prime Field Operations */\nexport function Fp(p: bigint): FpUtils {\n  const _mod = (a: bigint) => mod(a, p)\n  const inverse = (a: bigint) => modInverse(a, p)\n  const root = (a: bigint) => modPrimeSquare(a, p)\n  const pow = (a: bigint, b: bigint) => modPow(a, b, p)\n\n  const plus = (...args: bigint[]) => args.reduce((acc, cur) => _mod(acc + cur))\n  const multiply = (...args: bigint[]) => args.reduce((acc, cur) => _mod(acc * cur))\n  const subtract = (a: bigint, ...args: bigint[]) => {\n    const b: bigint[] = args.map(v => _mod(p - v))\n    return plus(a, ...b)\n  }\n  const divide = (a: bigint, b: bigint) => multiply(a, inverse(b))\n  return {\n    plus,\n    multiply,\n    subtract,\n    divide,\n    mod: _mod,\n    pow,\n    inverse,\n    root,\n  }\n}\n\n/**\n * 素域椭圆曲线运算\n *\n * Prime Field Elliptic Curve Operations\n */\nexport function FpEC(curve: FpWECParams | FpMECParams | FpTECParams): FpECUtils {\n  switch (curve.type) {\n    case 'Weierstrass':\n      return FpWEC(curve)\n    case 'Montgomery':\n      return FpMEC(curve)\n    case 'TwistedEdwards':\n      return FpTEC(curve)\n  }\n}\n\n/**\n * 素域 Weierstrass 椭圆曲线运算\n *\n * Prime Field Weierstrass Elliptic Curve Operations\n */\nexport function FpWEC(curve: FpWECParams): FpECUtils {\n  const { p, a } = curve\n  const { plus, multiply, subtract, divide } = Fp(p)\n\n  const addPoint = (A: FpECPoint, B: FpECPoint): FpECPoint<bigint> => {\n    // O + P = P\n    if (A.isInfinity) {\n      return BIPoint(B)\n    }\n    if (B.isInfinity) {\n      return BIPoint(A)\n    }\n\n    let [x1, y1] = [A.x, A.y]\n    let [x2, y2] = [B.x, B.y]\n\n    x1 = typeof x1 === 'bigint' ? x1 : U8.from(x1).toBI()\n    y1 = typeof y1 === 'bigint' ? y1 : U8.from(y1).toBI()\n    x2 = typeof x2 === 'bigint' ? x2 : U8.from(x2).toBI()\n    y2 = typeof y2 === 'bigint' ? y2 : U8.from(y2).toBI()\n\n    // P + (-P) = O\n    if (x1 === x2 && y1 !== y2) {\n      return BIPoint()\n    }\n\n    let λ = 0n\n    // P1 + P2\n    if (x1 !== x2) {\n      // λ = (y2 - y1) / (x2 - x1)\n      const numerator = subtract(y2, y1)\n      const denominator = subtract(x2, x1)\n      λ = divide(numerator, denominator)\n    }\n    // P1 + P1\n    else {\n      // λ = (3 * x1 * x1 + a) / 2 * y1\n      const numerator = plus(multiply(3n, x1, x1), a)\n      const denominator = multiply(2n, y1)\n      λ = divide(numerator, denominator)\n    }\n\n    // x3 = λ * λ - x1 - x2\n    const x3 = subtract(multiply(λ, λ), x1, x2)\n    // y3 = λ * (x1 - x3) - y1\n    const y3 = subtract(multiply(λ, subtract(x1, x3)), y1)\n\n    return { isInfinity: false, x: x3, y: y3 }\n  }\n  const mulPoint = (P: FpECPoint, k: bigint | Uint8Array): FpECPoint<bigint> => LadderMultiply(addPoint, P, k)\n  return { addPoint, mulPoint }\n}\n\n/**\n * 素域 Montgomery 椭圆曲线运算\n *\n * Prime Field Montgomery Elliptic Curve Operations\n */\nexport function FpMEC(curve: FpMECParams): FpECUtils {\n  const { p, a, b } = curve\n  const { plus, multiply, subtract, divide } = Fp(p)\n\n  const addPoint = (A: FpECPoint, B: FpECPoint): FpECPoint<bigint> => {\n    // O + P = P\n    if (A.isInfinity) {\n      return BIPoint(B)\n    }\n    if (B.isInfinity) {\n      return BIPoint(A)\n    }\n\n    let [x1, y1] = [A.x, A.y]\n    let [x2, y2] = [B.x, B.y]\n\n    x1 = typeof x1 === 'bigint' ? x1 : U8.from(x1).toBI()\n    y1 = typeof y1 === 'bigint' ? y1 : U8.from(y1).toBI()\n    x2 = typeof x2 === 'bigint' ? x2 : U8.from(x2).toBI()\n    y2 = typeof y2 === 'bigint' ? y2 : U8.from(y2).toBI()\n\n    // P + (-P) = O\n    if (x1 === x2 && y1 !== y2) {\n      return BIPoint()\n    }\n\n    let λ = 0n\n    // P1 + P2\n    if (x1 !== x2) {\n      // λ = (y2 - y1) / (x2 - x1)\n      const numerator = subtract(y2, y1)\n      const denominator = subtract(x2, x1)\n      λ = divide(numerator, denominator)\n    }\n    // P1 + P1\n    else {\n      // λ = (3 * x1 * x1 + 2 * a * x1 + 1) / 2 * b * y1\n      const numerator = plus(multiply(3n, x1, x1), multiply(2n, a, x1), 1n)\n      const denominator = multiply(2n, b, y1)\n      λ = divide(numerator, denominator)\n    }\n\n    // x3 = b * λ * λ - a - x1 - x2\n    const x3 = subtract(multiply(λ, λ, b), a, x1, x2)\n    // y3 = (2 x1 + x2 + a) * λ - b * λ * λ * λ - y1\n    const y3 = subtract(multiply(2n * x1 + x2 + a, λ), multiply(λ, λ, λ, b), y1)\n    return { isInfinity: false, x: x3, y: y3 }\n  }\n  const mulPoint = (P: FpECPoint, k: bigint | Uint8Array): FpECPoint<bigint> => LadderMultiply(addPoint, P, k)\n  return { addPoint, mulPoint }\n}\n\n/**\n * 素域 Twisted Edwards 椭圆曲线运算\n *\n * Prime Field Twisted Edwards Elliptic Curve Operations\n */\n// eslint-disable-next-line unused-imports/no-unused-vars\nexport function FpTEC(curve: FpTECParams): FpECUtils {\n  // TODO\n  return {} as any\n}\n","import type { U8 } from './utils'\nimport { wrap } from './utils'\n\n// * 散列函数包装器\n\nexport interface Digest {\n  /**\n   * @param {Uint8Array} M - 消息 / message\n   */\n  (M: Uint8Array): U8\n}\nexport interface HashDescription {\n  /** 算法名称 / Algorithm name */\n  ALGORITHM: string\n  /** 分块大小 / Block size (byte) */\n  BLOCK_SIZE: number\n  /** 摘要大小 / Digest size (byte) */\n  DIGEST_SIZE: number\n  OID?: string\n}\nexport interface Hash extends Digest, HashDescription {\n}\n/**\n * 散列算法包装器,\n * 提供散列算法描述, 以实现 `HMAC` 等拓展算法.\n *\n * Hash algorithm wrapper,\n * provide hash algorithm description to implement extended algorithms such as `HMAC`.\n *\n * @param {Digest} digest - 摘要函数 / digest function\n * @param {HashDescription} description - 算法描述 / algorithm description\n *\n * ```ts\n * const digest: Digest = (M: Uint8Array): U8 => { ... }\n * const description: HashDescription = { ... }\n * const hash = createHash(digest, description)\n * ```\n */\nexport const createHash = (digest: Digest, description: HashDescription): Hash => wrap(digest, description)\n\n// * 元组散列函数包装器\n\nexport interface TupleDigest {\n  /**\n   * @param {Uint8Array[]} M - 消息 / message\n   */\n  (M: Uint8Array[]): U8\n}\nexport interface TupleHashDescription extends HashDescription {\n}\nexport interface TupleHash extends TupleDigest, TupleHashDescription {\n}\n/**\n * 元组散列算法包装器\n *\n * Tuple hash algorithm wrapper\n *\n * @param {TupleDigest} digest - 元组摘要函数 / tuple digest function\n * @param {TupleHashDescription} description - 算法描述 / algorithm description\n *\n * ```ts\n * const digest: TupleDigest = (M: Uint8Array[]): U8 => { ... }\n * const description: TupleHashDescription = { ... }\n * const hash = createTupleHash(digest, description)\n * ```\n */\nexport const createTupleHash = (digest: TupleDigest, description: TupleHashDescription): TupleHash => wrap(digest, description)\n\n// * 密钥散列函数\n\nexport interface KeyDigest {\n  /**\n   * @param {Uint8Array} K - 密钥 / key\n   * @param {Uint8Array} M - 消息 / message\n   */\n  (K: Uint8Array, M: Uint8Array): U8\n}\nexport interface KeyHashDescription extends HashDescription {\n  /** 推荐的密钥大小 / Recommended key size (byte) */\n  KEY_SIZE: number\n}\n/** 密钥散列函数 / Keyed hash function */\nexport interface KeyHash extends KeyDigest, KeyHashDescription {\n}\nexport const createKeyHash = (digest: KeyDigest, description: KeyHashDescription): KeyHash => wrap(digest, description)\n","import type { Hash, KeyHash, KeyHashDescription } from '../core/hash'\nimport { createKeyHash } from '../core/hash'\nimport { joinBuffer } from '../core/utils'\n\nfunction _hmac(hash: Hash, K: Uint8Array, M: Uint8Array) {\n  const { BLOCK_SIZE } = hash\n\n  const K0 = new Uint8Array(BLOCK_SIZE)\n  K0.set(K.length > BLOCK_SIZE ? hash(K) : K)\n  const iPad = K0.map(byte => (byte ^ 0x36))\n  const oPad = K0.map(byte => (byte ^ 0x5C))\n\n  const innerBuffer = hash(joinBuffer(iPad, M))\n  const outerBuffer = hash(joinBuffer(oPad, innerBuffer))\n\n  return outerBuffer\n}\n\n/**\n * FIPS.198-1: 散列消息认证码 (HMAC).\n * 如果 `d_size` 大于散列算法的摘要大小, 则回退到散列算法的摘要大小.\n *\n * FIPS.198-1: The Keyed-Hash Message Authentication Code (HMAC).\n * If `d_size` is larger than the hash algorithm's digest size, fallback to the hash algorithm's digest size.\n *\n * @param {Hash} hash - 散列算法 / hash algorithm\n * @param {number} [d_size] - 摘要大小 (bit) / digest size (bit)\n * @param {number} [k_size] - 推荐密钥大小 (bit) / recommended key size (bit)\n */\nexport function hmac(hash: Hash, d_size?: number, k_size?: number): KeyHash {\n  const { ALGORITHM, BLOCK_SIZE, DIGEST_SIZE } = hash\n  d_size = d_size ? Math.min(d_size >> 3, DIGEST_SIZE) : DIGEST_SIZE\n  k_size = k_size ? k_size >> 3 : DIGEST_SIZE\n  const description: KeyHashDescription = {\n    ALGORITHM: `HMAC-${ALGORITHM}-${d_size << 3}`,\n    BLOCK_SIZE,\n    DIGEST_SIZE: d_size,\n    KEY_SIZE: k_size,\n  }\n  return createKeyHash(\n    (K: Uint8Array, M: Uint8Array) => _hmac(hash, K, M).slice(0, d_size),\n    description,\n  )\n}\n","import { createHash } from '../core/hash'\nimport { U8, rotateR32 } from '../core/utils'\n\n// * Constants\n\nconst K = new Uint32Array([0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2])\n\n// * Function\n\nconst Ch = (x: number, y: number, z: number) => (x & y) ^ ((~x) & z)\nconst Maj = (x: number, y: number, z: number) => (x & y) ^ (x & z) ^ (y & z)\nconst Sigma0 = (x: number) => rotateR32(x, 2) ^ rotateR32(x, 13) ^ rotateR32(x, 22)\nconst Sigma1 = (x: number) => rotateR32(x, 6) ^ rotateR32(x, 11) ^ rotateR32(x, 25)\nconst sigma0 = (x: number) => rotateR32(x, 7) ^ rotateR32(x, 18) ^ (x >>> 3)\nconst sigma1 = (x: number) => rotateR32(x, 17) ^ rotateR32(x, 19) ^ (x >>> 10)\n\n// * Algorithm\n\nfunction digest(state: U8, message: Uint8Array) {\n  // * 初始化\n  state = state.slice(0)\n  const state_view = state.view(4)\n\n  const m_byte = message.length\n  const m_bit = BigInt(m_byte) << 3n\n  const block_size = 64\n  // ceil((m_byte + 9) / 64)\n  const block_total = (m_byte + 9 + 63) >> 6\n\n  // * 填充\n  const p = new U8(block_total * block_size)\n  p.set(message)\n\n  // appending the bit '1' to the message\n  p[m_byte] = 0x80\n\n  // appending length\n  const p_view = new DataView(p.buffer)\n  p_view.setBigUint64(p.length - 8, m_bit)\n\n  // * 分块处理\n  for (let offset = 0; offset < p.length; offset += block_size) {\n    /** B(n) = p[offset:offset + block_size] */\n\n    // 准备状态字\n    const h0 = Number(state_view.get(0))\n    const h1 = Number(state_view.get(1))\n    const h2 = Number(state_view.get(2))\n    const h3 = Number(state_view.get(3))\n    const h4 = Number(state_view.get(4))\n    const h5 = Number(state_view.get(5))\n    const h6 = Number(state_view.get(6))\n    const h7 = Number(state_view.get(7))\n    let a = h0\n    let b = h1\n    let c = h2\n    let d = h3\n    let e = h4\n    let f = h5\n    let g = h6\n    let h = h7\n\n    // 合并执行 扩展 & 压缩\n    const W = new Uint32Array(64)\n    for (let i = 0; i < W.length; i++) {\n      // 扩展\n      if (i < 16)\n        // W[i] = B(n)[i]\n        W[i] = p_view.getUint32(offset + (i << 2))\n      else\n        W[i] = sigma1(W[i - 2]) + W[i - 7] + sigma0(W[i - 15]) + W[i - 16]\n\n      // 压缩\n      const T1 = h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i]\n      const T2 = Sigma0(a) + Maj(a, b, c)\n      h = g\n      g = f\n      f = e\n      e = d + T1\n      d = c\n      c = b\n      b = a\n      a = T1 + T2\n    }\n\n    // 更新状态字\n    state_view.set(0, BigInt(h0 + a))\n    state_view.set(1, BigInt(h1 + b))\n    state_view.set(2, BigInt(h2 + c))\n    state_view.set(3, BigInt(h3 + d))\n    state_view.set(4, BigInt(h4 + e))\n    state_view.set(5, BigInt(h5 + f))\n    state_view.set(6, BigInt(h6 + g))\n    state_view.set(7, BigInt(h7 + h))\n  }\n\n  // * 返回状态\n  return state\n}\n\nfunction sha224Digest(M: Uint8Array) {\n  // * 初始化 SHA-224 状态\n  const state = new U8(32)\n  const state_view = state.view(4)\n  state_view.set(0, 0xC1059ED8n)\n  state_view.set(1, 0x367CD507n)\n  state_view.set(2, 0x3070DD17n)\n  state_view.set(3, 0xF70E5939n)\n  state_view.set(4, 0xFFC00B31n)\n  state_view.set(5, 0x68581511n)\n  state_view.set(6, 0x64F98FA7n)\n  state_view.set(7, 0xBEFA4FA4n)\n\n  return digest(state, M).slice(0, 28)\n}\n\nfunction sha256Digest(M: Uint8Array) {\n  // * 初始化 SHA-256 状态\n  const state = new U8(32)\n  const state_view = state.view(4)\n  state_view.set(0, 0x6A09E667n)\n  state_view.set(1, 0xBB67AE85n)\n  state_view.set(2, 0x3C6EF372n)\n  state_view.set(3, 0xA54FF53An)\n  state_view.set(4, 0x510E527Fn)\n  state_view.set(5, 0x9B05688Cn)\n  state_view.set(6, 0x1F83D9ABn)\n  state_view.set(7, 0x5BE0CD19n)\n\n  return digest(state, M)\n}\n\nexport const sha224 = createHash(\n  sha224Digest,\n  {\n    ALGORITHM: 'SHA-224',\n    BLOCK_SIZE: 64,\n    DIGEST_SIZE: 28,\n    OID: '2.16.840.1.101.3.4.2.4',\n  },\n)\n\nexport const sha256 = createHash(\n  sha256Digest,\n  {\n    ALGORITHM: 'SHA-256',\n    BLOCK_SIZE: 64,\n    DIGEST_SIZE: 32,\n    OID: '2.16.840.1.101.3.4.2.1',\n  },\n)\n","import type { Hash, KeyHash } from './hash'\nimport { hmac } from '../hash/hmac'\nimport { sha256 } from '../hash/sha256'\nimport { Counter, joinBuffer, KitError, rotateL32, U8, u32 } from './utils'\n\nexport interface KDF {\n  /**\n   * @param {number} k_byte - 期望的密钥长度 / output keying material length\n   * @param {Uint8Array} ikm - 输入密钥材料 / input keying material\n   * @param {Uint8Array} salt - 盐 / salt value\n   */\n  (k_byte: number, ikm: Uint8Array, salt?: Uint8Array): U8\n}\n\n/**\n * ANSI-X9.63 Key Derivation Function\n *\n * ANSI-X9.63 密钥派生函数\n */\nexport function x963kdf(hash: Hash, info = new Uint8Array(0)): KDF {\n  const d_byte = hash.DIGEST_SIZE\n  return (k_byte: number, ikm: Uint8Array) => {\n    /** Output Keying Material */\n    const okm: Uint8Array[] = []\n\n    const counter = new Counter([0, 0, 0, 1])\n    for (let okm_byte = 0; okm_byte < k_byte; okm_byte += d_byte) {\n      const data = joinBuffer(ikm, counter, info)\n      okm.push(hash(data))\n      counter.inc()\n    }\n\n    return joinBuffer(...okm).slice(0, k_byte)\n  }\n}\n\n/**\n * HMAC-based Key Derivation Function (HKDF), please combine `hmac` and `hash` externally to control the behavior of calling `hmac` inside the function.\n *\n * 基于 HMAC 的密钥派生函数 (HKDF), 请在外部组合 `hmac` 和 `hash` 函数, 以控制在函数内部调用 `hmac` 时的行为.\n */\nexport function hkdf(k_hash: KeyHash, info = new Uint8Array(0)): KDF {\n  const d_byte = k_hash.DIGEST_SIZE\n  return (k_byte: number, ikm: Uint8Array, salt = new Uint8Array(0)) => {\n    /** Pseudo-Random Key */\n    const prk = k_hash(salt, ikm)\n    /** Output Keying Material */\n    const okm: Uint8Array[] = []\n\n    const counter = new Uint8Array([1])\n    let prv = new Uint8Array(0)\n    for (let okm_byte = 0; okm_byte < k_byte; okm_byte += d_byte) {\n      prv = k_hash(prk, joinBuffer(prv, info, counter))\n      okm.push(prv)\n      counter[0]++\n    }\n\n    return joinBuffer(...okm).slice(0, k_byte)\n  }\n}\n\n/**\n * Password-Based Key Derivation Function 2 (PBKDF2), please combine `hmac` and `hash` externally to control the behavior of calling `hmac` inside the function.\n *\n * PBKDF2 密码基础密钥派生函数 (PBKDF2), 请在外部组合 `hmac` 和 `hash` 函数, 以控制在函数内部调用 `hmac` 时的行为.\n */\nexport function pbkdf2(k_hash: KeyHash, iterations = 1000): KDF {\n  const d_byte = k_hash.DIGEST_SIZE\n  return (k_byte: number, ikm: Uint8Array, salt = new Uint8Array(0)) => {\n    ikm = U8.from(ikm)\n\n    /** Output Keying Material */\n    const okm: Uint8Array[] = []\n\n    let T: Uint8Array\n    let U: Uint8Array\n    const counter = new Counter([0, 0, 0, 1])\n    for (let okm_byte = 0; okm_byte < k_byte; okm_byte += d_byte) {\n      T = new Uint8Array(k_hash.DIGEST_SIZE)\n      U = joinBuffer(salt, counter)\n      for (let i = 0; i < iterations; i++) {\n        U = k_hash(ikm, U)\n        T.forEach((_, j) => T[j] ^= U[j])\n      }\n      okm.push(T)\n      counter.inc()\n    }\n\n    return joinBuffer(...okm).slice(0, k_byte)\n  }\n}\n\ninterface ScryptConfig {\n  /**\n   * 开销因子 / Cost factor (default: 16384)\n   *\n   * 必须是 2 的幂\n   *\n   * Must be a power of 2\n   */\n  N?: number\n  /**\n   * 块数 / Block count (default: 8)\n   */\n  r?: number\n  /**\n   * 并行因子 / Parallelization factor (default: 1)\n   */\n  p?: number\n  /**\n   * 最大内存使用量 / Maximum memory usage\n   *\n   * 如果设置为 0，则不限制内存使用量\n   *\n   * If set to 0, there is no limit on memory usage\n   *\n   * (default: 0x40000400 bytes, 1GB + 1KB)\n   */\n  maxmem?: number\n  /**\n   * 密钥派生函数 / Key Derivation Function\n   *\n   * scrypt 标准使用了 `PBKDF2-HMAC-SHA256` 作为 KDF。\n   * 该参数允许用户指定其他 KDF，改变 scrypt 的内部行为。\n   *\n   * 注意: 这不是 `scrypt` 的标准用法且缺乏相关的安全分析。\n   *\n   * The scrypt standard uses `PBKDF2-HMAC-SHA256` as the KDF.\n   * This parameter allows users to specify a different KDF, changing the internal behavior of scrypt.\n   *\n   * Note: This is not the standard usage of `scrypt` and lacks relevant security analysis.\n   *\n   * (default: pbkdf2(hmac(sha256), 1))\n   */\n  kdf?: KDF\n}\n\n/**\n * Scrypt Key Derivation Function\n *\n * Scrypt 密钥派生函数\n *\n * Based on https://github.com/paulmillr/noble-hashes\n */\nexport function scrypt(config?: ScryptConfig): KDF {\n  const {\n    N = 16384,\n    r = 8,\n    p = 1,\n    maxmem = 0x40000400,\n    kdf = pbkdf2(hmac(sha256), 1),\n  } = config ?? {}\n\n  const BLOCK_SIZE = r << 7\n  const BLOCK_SIZE_32 = r << 5\n  const MAX_p = (0x1FFFFFFFE0 / BLOCK_SIZE) >>> 0\n  const MEM_COST = BLOCK_SIZE * (N + p)\n  const N_1 = N - 1\n\n  if (N === 0 || (N & N_1) !== 0)\n    throw new KitError(`N must be a power of 2`)\n  if (p < 1 || p > MAX_p)\n    throw new KitError(`p must be in range [1, ${MAX_p}]`)\n  if (MEM_COST > maxmem)\n    throw new KitError(`Memory cost exceeds maxmem: ${MEM_COST} > ${maxmem}`)\n\n  // 内联 rotateL32 (神秘的黑魔法)\n  const rotl = rotateL32\n\n  function fast_xor_salsa_hash(\n    prev: Uint32Array,\n    pi: number,\n    input: Uint32Array,\n    ii: number,\n    output: Uint32Array,\n    oi: number,\n  ) {\n    const y00 = prev[pi++] ^ input[ii++]; const y01 = prev[pi++] ^ input[ii++]\n    const y02 = prev[pi++] ^ input[ii++]; const y03 = prev[pi++] ^ input[ii++]\n    const y04 = prev[pi++] ^ input[ii++]; const y05 = prev[pi++] ^ input[ii++]\n    const y06 = prev[pi++] ^ input[ii++]; const y07 = prev[pi++] ^ input[ii++]\n    const y08 = prev[pi++] ^ input[ii++]; const y09 = prev[pi++] ^ input[ii++]\n    const y10 = prev[pi++] ^ input[ii++]; const y11 = prev[pi++] ^ input[ii++]\n    const y12 = prev[pi++] ^ input[ii++]; const y13 = prev[pi++] ^ input[ii++]\n    const y14 = prev[pi++] ^ input[ii++]; const y15 = prev[pi++] ^ input[ii++]\n    // Save state to temporary variables (salsa)\n    let x00 = y00; let x01 = y01; let x02 = y02; let x03 = y03\n    let x04 = y04; let x05 = y05; let x06 = y06; let x07 = y07\n    let x08 = y08; let x09 = y09; let x10 = y10; let x11 = y11\n    let x12 = y12; let x13 = y13; let x14 = y14; let x15 = y15\n    // Main loop (salsa)\n    for (let i = 0; i < 8; i += 2) {\n      x04 ^= rotl(x00 + x12 | 0,  7); x08 ^= rotl(x04 + x00 | 0,  9)\n      x12 ^= rotl(x08 + x04 | 0, 13); x00 ^= rotl(x12 + x08 | 0, 18)\n      x09 ^= rotl(x05 + x01 | 0,  7); x13 ^= rotl(x09 + x05 | 0,  9)\n      x01 ^= rotl(x13 + x09 | 0, 13); x05 ^= rotl(x01 + x13 | 0, 18)\n      x14 ^= rotl(x10 + x06 | 0,  7); x02 ^= rotl(x14 + x10 | 0,  9)\n      x06 ^= rotl(x02 + x14 | 0, 13); x10 ^= rotl(x06 + x02 | 0, 18)\n      x03 ^= rotl(x15 + x11 | 0,  7); x07 ^= rotl(x03 + x15 | 0,  9)\n      x11 ^= rotl(x07 + x03 | 0, 13); x15 ^= rotl(x11 + x07 | 0, 18)\n      x01 ^= rotl(x00 + x03 | 0,  7); x02 ^= rotl(x01 + x00 | 0,  9)\n      x03 ^= rotl(x02 + x01 | 0, 13); x00 ^= rotl(x03 + x02 | 0, 18)\n      x06 ^= rotl(x05 + x04 | 0,  7); x07 ^= rotl(x06 + x05 | 0,  9)\n      x04 ^= rotl(x07 + x06 | 0, 13); x05 ^= rotl(x04 + x07 | 0, 18)\n      x11 ^= rotl(x10 + x09 | 0,  7); x08 ^= rotl(x11 + x10 | 0,  9)\n      x09 ^= rotl(x08 + x11 | 0, 13); x10 ^= rotl(x09 + x08 | 0, 18)\n      x12 ^= rotl(x15 + x14 | 0,  7); x13 ^= rotl(x12 + x15 | 0,  9)\n      x14 ^= rotl(x13 + x12 | 0, 13); x15 ^= rotl(x14 + x13 | 0, 18)\n    }\n    // Write output (salsa)\n    output[oi++] = (y00 + x00) | 0; output[oi++] = (y01 + x01) | 0\n    output[oi++] = (y02 + x02) | 0; output[oi++] = (y03 + x03) | 0\n    output[oi++] = (y04 + x04) | 0; output[oi++] = (y05 + x05) | 0\n    output[oi++] = (y06 + x06) | 0; output[oi++] = (y07 + x07) | 0\n    output[oi++] = (y08 + x08) | 0; output[oi++] = (y09 + x09) | 0\n    output[oi++] = (y10 + x10) | 0; output[oi++] = (y11 + x11) | 0\n    output[oi++] = (y12 + x12) | 0; output[oi++] = (y13 + x13) | 0\n    output[oi++] = (y14 + x14) | 0; output[oi++] = (y15 + x15) | 0\n  }\n  function block_mix(\n    input: Uint32Array,\n    input_index: number,\n    output: Uint32Array,\n    output_index: number,\n    r: number,\n  ) {\n    let head = output_index\n    let tail = output_index + (r << 4)\n    const t = ((r << 1) - 1) << 4\n    for (let i = 0; i < 16; i++) output[tail + i] = input[input_index + i + t]\n    for (let i = 0; i < r; i++) {\n      fast_xor_salsa_hash(output, tail, input, input_index, output, head)\n      if (i > 0) { tail += 16 }\n      input_index += 16\n      fast_xor_salsa_hash(output, head, input, input_index, output, tail)\n      head += 16\n      input_index += 16\n    }\n  }\n\n  return (k_byte: number, ikm: Uint8Array, salt = new Uint8Array(0)) => {\n    const B = kdf(BLOCK_SIZE * p, ikm, salt)\n    const B32 = u32(B)\n\n    const V32 = u32(new Uint8Array(BLOCK_SIZE * N))\n    const tmp = u32(new Uint8Array(BLOCK_SIZE))\n\n    for (let pi = 0; pi < p; pi++) {\n      const PI = BLOCK_SIZE_32 * pi\n      V32.set(B32.subarray(PI, PI + BLOCK_SIZE_32), 0)\n      let pos = 0\n      for (let i = 0; i < N_1; i++) {\n        block_mix(V32, pos, V32, pos + BLOCK_SIZE_32, r)\n        pos += BLOCK_SIZE_32\n      }\n      block_mix(V32, N_1 * BLOCK_SIZE_32, B32, PI, r)\n\n      for (let i = 0; i < N; i++) {\n        const j = B32[PI + BLOCK_SIZE_32 - 16] % N\n        for (let k = 0; k < BLOCK_SIZE_32; k++) {\n          tmp[k] = B32[PI + k] ^ V32[j * BLOCK_SIZE_32 + k]\n        }\n        block_mix(tmp, 0, B32, PI, r)\n      }\n    }\n\n    return kdf(k_byte, ikm, B)\n  }\n}\n","import type { BlockCipher, BlockCipherInfo } from '../../core/cipher'\nimport type { FpECUtils } from '../../core/ec'\nimport type { FpECPoint, FpMECParams, FpWECParams } from '../../core/ecParams'\nimport type { Digest, KeyHash } from '../../core/hash'\nimport type { KDF } from '../../core/kdf'\nimport { cbc, createCipher } from '../../core/cipher'\nimport { BIPoint, Fp, FpEC, U8Point } from '../../core/ec'\nimport { x963kdf } from '../../core/kdf'\nimport { genBitMask, genRandomBI, getBIBits, joinBuffer, KitError, mod, modInverse, U8 } from '../../core/utils'\nimport { hmac } from '../../hash/hmac'\nimport { sha256 } from '../../hash/sha256'\nimport { aes } from '../blockCipher/aes'\n\n// * Interfaces\n\nexport interface ECPublicKey<T = bigint | Uint8Array> {\n  /** 椭圆曲线公钥 / Elliptic Curve Public Key */\n  readonly Q: Readonly<FpECPoint<T>>\n}\nexport interface ECPrivateKey<T = bigint | Uint8Array> {\n  /** 椭圆曲线私钥 / Elliptic Curve Private Key */\n  readonly d: T\n}\n/** 椭圆曲线密钥对 / Elliptic Curve Key Pair */\nexport interface ECKeyPair<T = bigint | Uint8Array> extends ECPrivateKey<T>, ECPublicKey<T> {\n}\n\nexport interface ECDH {\n  /**\n   * @param {ECPrivateKey} s_key - 己方私钥 / Self Private Key\n   * @param {ECPublicKey} p_key - 对方公钥 / Counterparty Public Key\n   */\n  (s_key: ECPrivateKey, p_key: ECPublicKey): FpECPoint<U8>\n}\n\nexport interface ECMQV {\n  /**\n   * @param {ECKeyPair} u1 - 己方密钥对 / Self Key Pair\n   * @param {ECKeyPair} u2 - 己方临时密钥对 / Self Temporary Key Pair\n   * @param {ECPublicKey} v1 - 对方公钥 / Counterparty Public Key\n   * @param {ECPublicKey} v2 - 对方临时公钥 / Counterparty Temporary Public Key\n   */\n  (u1: ECKeyPair, u2: ECKeyPair, v1: ECPublicKey, v2: ECPublicKey): FpECPoint<U8>\n}\n\nexport interface ECDSASignature<T = bigint | Uint8Array> {\n  /** 临时公钥 / Temporary Public Key */\n  r: T\n  /** 签名值 / Signature Value */\n  s: T\n}\nexport interface ECDSA {\n  /**\n   * @param {Digest} [hash=sha256] - 摘要函数 / Digest Function\n   */\n  (hash?: Digest): {\n    /**\n     * @param {ECPrivateKey} s_key - 签名方私钥 / Signer's Private Key\n     * @param {Uint8Array} M - 消息 / Message\n     */\n    sign: (s_key: ECPrivateKey, M: Uint8Array) => ECDSASignature<U8>\n    /**\n     * @param {ECPublicKey} p_key - 签名方公钥 / Signer's Public Key\n     * @param {Uint8Array} M - 消息 / Message\n     */\n    verify: (p_key: ECPublicKey, M: Uint8Array, signature: ECDSASignature) => boolean\n  }\n}\n\nexport interface IVBlockCipher extends BlockCipherInfo {\n  (K: Uint8Array, iv: Uint8Array): ReturnType<BlockCipher>\n}\nexport interface ECIESConfig {\n  /** 分组密码算法 / Block Cipher Algorithm (default: AES-256-GCM) */\n  cipher?: IVBlockCipher\n  /** 密钥哈希函数 / Key Hash Function (default: HMAC-SHA-256) */\n  mac?: KeyHash\n  /** 密钥派生函数 / Key Derivation Function (default: ANSI-X9.63-KDF with SHA-256) */\n  kdf?: KDF\n  /** 附加数据1 / Additional Data 1 (default: empty) */\n  S1?: Uint8Array\n  /** 附加数据2 / Additional Data 2 (default: empty) */\n  S2?: Uint8Array\n  /** 初始化向量 / Initialization Vector (default: Uint8Array(cipher.BLOCK_SIZE)) */\n  iv?: Uint8Array\n}\nexport interface ECIESCiphertext {\n  /** 临时公钥 / Temporary Public Key */\n  R: ECPublicKey\n  /** 密文 / Ciphertext */\n  C: Uint8Array\n  /** 校验值 / Check Value */\n  D: Uint8Array\n}\nexport interface ECIESEncrypt {\n  /**\n   * 椭圆曲线集成加密算法\n   *\n   * Elliptic Curve Integrated Encryption Scheme\n   *\n   * @param {ECPublicKey} p_key - 接收方公钥 / Recipient's Public Key\n   * @param {Uint8Array} M - 明文 / Plaintext\n   */\n  (p_key: ECPublicKey, M: Uint8Array): ECIESCiphertext\n}\nexport interface ECIESDecrypt {\n  /**\n   * 椭圆曲线集成解密算法\n   *\n   * Elliptic Curve Integrated Decryption Scheme\n   *\n   * @param {ECPrivateKey} s_key - 接收方私钥 / Recipient's Private Key\n   * @param {ECIESCiphertext} C - 密文 / Ciphertext\n   */\n  (s_key: ECPrivateKey, C: ECIESCiphertext): U8\n}\nexport interface ECIES {\n  /**\n   * @param {IVBlockCipher} [config.cipher] - 分组密码算法 / Block Cipher Algorithm (default: AES-256-GCM)\n   * @param {KeyHash} [config.mac] - 密钥哈希函数 / Key Hash Function (default: HMAC-SHA-256)\n   * @param {KDF} [config.kdf] - 密钥派生函数 / Key Derivation Function (default: ANSI-X9.63-KDF with SHA-256)\n   * @param {Uint8Array} [config.S1] - 附加数据1 / Additional Data 1 (default: empty)\n   * @param {Uint8Array} [config.S2] - 附加数据2 / Additional Data 2 (default: empty)\n   * @param {Uint8Array} [config.iv] - 初始化向量 / Initialization Vector (default: Uint8Array(cipher.BLOCK_SIZE))\n   */\n  (config?: ECIESConfig): {\n    encrypt: ECIESEncrypt\n    decrypt: ECIESDecrypt\n  }\n}\n\nexport interface FpECCrypto {\n  utils: {\n    /**\n     * 判断公钥是否合法\n     *\n     * Determine if the public key is legal\n     */\n    isLegalPK: (p_key: ECPublicKey) => boolean\n    /**\n     * 判断私钥是否合法\n     *\n     * Determine if the private key is legal\n     */\n    isLegalSK: (s_key: ECPrivateKey) => boolean\n    /**\n     * 点转换为字节串，默认不压缩\n     *\n     * Convert Point to Byte String, not compressed by default\n     */\n    PointToU8: (point: FpECPoint, compress?: boolean) => U8\n    /**\n     * 字节串转换为点\n     *\n     * Convert Byte String to Point\n     */\n    U8ToPoint: (buffer: Uint8Array) => FpECPoint<U8>\n  } & FpECUtils\n  /**\n   * 生成椭圆曲线密钥\n   *\n   * Generate Elliptic Curve Key\n   */\n  gen: {\n    /** 生成密钥对 / Generate Key Pair */\n    (type?: 'key_pair'): ECKeyPair<U8>\n    /** 生成私钥 / Generate Private Key */\n    (type: 'private_key'): ECPrivateKey<U8>\n    /** 生成公钥 / Generate Public Key */\n    (type: 'public_key', s_key: ECPrivateKey): ECKeyPair<U8>\n  }\n  /**\n   * 椭圆曲线迪菲-赫尔曼, 密钥协商算法\n   *\n   * Elliptic Curve Diffie-Hellman Key Agreement Algorithm\n   */\n  dh: ECDH\n  /**\n   * 椭圆曲线余因子迪菲-赫尔曼, 密钥协商算法\n   *\n   * Elliptic Curve Co-factor Diffie-Hellman Key Agreement Algorithm\n   */\n  cdh: ECDH\n  /**\n   * 椭圆曲线梅内泽斯-奎-范斯通密钥协商算法\n   *\n   * Elliptic Curve Menezes-Qu-Vanstone Key Agreement Algorithm\n   */\n  mqv: ECMQV\n  /**\n   * 椭圆曲线数字签名\n   *\n   * Elliptic Curve Digital Signature Algorithm\n   */\n  dsa: ECDSA\n  /**\n   * 椭圆曲线集成加密算法\n   *\n   * Elliptic Curve Integrated Encryption Scheme\n   */\n  ies: ECIES\n}\n\n// * Functions\n\n/**\n * 定义 ECIES 配置\n *\n * Define ECIES Configuration\n */\nexport function defineECIES(config?: ECIESConfig) {\n  config = config ?? {}\n  const {\n    cipher = cbc(aes(256)),\n    mac = hmac(sha256),\n    kdf = x963kdf(sha256),\n    S1 = new Uint8Array(0),\n    S2 = new Uint8Array(0),\n    iv = new Uint8Array(cipher.BLOCK_SIZE),\n  } = config\n  return { cipher, mac, kdf, S1, S2, iv }\n}\n\n// * EC Algorithms\n\n/**\n * 素域椭圆曲线密码学组件\n *\n * Prime Field Elliptic Curve Cryptography Components\n */\nexport function FpECC(curve: FpWECParams | FpMECParams): FpECCrypto {\n  const { p, a, b, G, n, h } = curve\n  const p_bit = getBIBits(p)\n  const p_byte = (p_bit + 7) >> 3\n  const n_bit = getBIBits(n)\n  const n_mask = genBitMask(n_bit)\n  const { addPoint, mulPoint } = FpEC(curve)\n  const { plus, multiply, root } = Fp(p)\n\n  const isLegalPK: FpECCrypto['utils']['isLegalPK'] = (p_key: ECPublicKey): boolean => {\n    const { Q } = p_key\n    // P != O\n    if (Q.isInfinity) {\n      return false\n    }\n    // P(x, y) ∈ E\n    const P = BIPoint(Q)\n    const { x, y } = P\n    if (x < 0n || x >= p || y < 0n || y >= p) {\n      return false\n    }\n\n    if (curve.type === 'Weierstrass') {\n      // y^2 = x^3 + ax + b\n      const l = multiply(y, y)\n      const r = plus(multiply(x, x, x), multiply(a, x), b)\n      if (l !== r) {\n        return false\n      }\n      // nP = O\n      const nP = mulPoint(P, n)\n      return nP.isInfinity\n    }\n    if (curve.type === 'Montgomery') {\n      // By^2 = x^3 + Ax^2 + x\n      const l = multiply(b, y, y)\n      const r = plus(multiply(x, x, x), multiply(a, x, x), x)\n      if (l !== r) {\n        return false\n      }\n      // nP = O\n      const nP = mulPoint(P, n)\n      return nP.isInfinity\n    }\n    // unknown curve type\n    else {\n      return false\n    }\n  }\n  const isLegalSK: FpECCrypto['utils']['isLegalSK'] = (s_key: ECPrivateKey): boolean => {\n    const d = typeof s_key.d === 'bigint' ? s_key.d : U8.from(s_key.d).toBI()\n    if (d < 0n || d >= p) {\n      return false\n    }\n    return !mulPoint(G, d).isInfinity\n  }\n  const PointToU8: FpECCrypto['utils']['PointToU8'] = (point: FpECPoint, compress = false): U8 => {\n    if (point.isInfinity) {\n      return new U8([0x00])\n    }\n    const { x, y } = U8Point(point, p_byte)\n    const sign_y = y[y.length - 1] & 1\n    const PC = new U8([compress ? 0x02 | sign_y : 0x04])\n    const X1 = x\n    const Y1 = compress ? new U8() : y\n    return joinBuffer(PC, X1, Y1)\n  }\n  const U8ToPoint: FpECCrypto['utils']['U8ToPoint'] = (buffer: Uint8Array): FpECPoint<U8> => {\n    const point_buffer = U8.from(buffer)\n    const PC = point_buffer[0]\n    if (PC === 0x00) {\n      if (point_buffer.length !== 1) {\n        throw new KitError('Invalid Point')\n      }\n      return U8Point()\n    }\n    if (PC !== 0x02 && PC !== 0x03 && PC !== 0x04) {\n      throw new KitError('Invalid Point')\n    }\n    // 无压缩\n    if (PC === 0x04) {\n      if (point_buffer.length !== (p_byte << 1) + 1) {\n        throw new KitError('Invalid Point')\n      }\n      const x = point_buffer.slice(1, p_byte + 1)\n      const y = point_buffer.slice(p_byte + 1)\n      return { isInfinity: false, x, y }\n    }\n    // 解压缩\n    else {\n      if (point_buffer.length !== p_byte + 1) {\n        throw new KitError('Invalid Point')\n      }\n      const x_buffer = point_buffer.slice(1)\n      const x = x_buffer.toBI()\n      const sign_y = BigInt(PC & 1)\n      if (curve.type === 'Weierstrass') {\n        let y = 0n\n        y = plus(multiply(x, x, x), multiply(a, x), b)\n        y = root(y)\n        y = (y & 1n) === sign_y ? y : p - y\n        return U8Point({ isInfinity: false, x: x_buffer, y }, p_byte)\n      }\n      else if (curve.type === 'Montgomery') {\n        let y = 0n\n        y = plus(multiply(x, x, x), multiply(a, x, x), x)\n        y = root(y / b)\n        y = (y & 1n) === sign_y ? y : p - y\n        return U8Point({ isInfinity: false, x: x_buffer, y }, p_byte)\n      }\n      else {\n        throw new KitError('Unknown curve type')\n      }\n    }\n  }\n  // Key generation\n  function gen(type?: 'key_pair'): ECKeyPair<U8>\n  function gen(type: 'private_key'): ECPrivateKey<U8>\n  function gen(type: 'public_key', s_key: ECPrivateKey): ECKeyPair<U8>\n  function gen(\n    type: 'key_pair' | 'private_key' | 'public_key' = 'key_pair',\n    s_key?: ECPrivateKey,\n  ) {\n    if (type === 'key_pair') {\n      // private key\n      const { buffer, result: d } = genRandomBI(n, p_byte)\n      // public key\n      const _ = mulPoint(G, d)\n      const Q = U8Point(_, p_byte)\n      return { Q, d: buffer }\n    }\n    else if (type === 'private_key') {\n      return { d: genRandomBI(n, p_byte).buffer }\n    }\n    else if (type === 'public_key') {\n      const d_buffer = typeof s_key!.d === 'bigint' ? U8.fromBI(s_key!.d) : U8.from(s_key!.d)\n      const d = typeof s_key!.d === 'bigint' ? s_key!.d : d_buffer.toBI()\n      if (d === 0n) {\n        throw new KitError('Invalid private key')\n      }\n      const _ = mulPoint(G, d)\n      const Q = U8Point(_, p_byte)\n      return { Q, d: d_buffer }\n    }\n  }\n  // Key agreement\n  const ecdh: ECDH = (s_key: ECPrivateKey, p_key: ECPublicKey) => {\n    if (!isLegalPK(p_key)) {\n      throw new KitError('Invalid public key')\n    }\n    if (!isLegalSK(s_key)) {\n      throw new KitError('Invalid private key')\n    }\n    const Q = p_key.Q\n    const d = s_key.d\n    const S = mulPoint(Q, d)\n    if (S.isInfinity) {\n      throw new KitError('the result of ECDH is the point at infinity')\n    }\n    return U8Point(S, p_byte)\n  }\n  const eccdh: ECDH = (s_key: ECPrivateKey, p_key: ECPublicKey) => {\n    if (!isLegalPK(p_key)) {\n      throw new KitError('Invalid public key')\n    }\n    if (!isLegalSK(s_key)) {\n      throw new KitError('Invalid private key')\n    }\n    const Q = p_key.Q\n    const d = typeof s_key.d === 'bigint' ? s_key.d : U8.from(s_key.d).toBI()\n    const S = mulPoint(Q, d * h)\n    if (S.isInfinity) {\n      throw new KitError('the result of ECCDH is the point at infinity')\n    }\n    return U8Point(S, p_byte)\n  }\n  const ecmqv: ECMQV = (u1: ECKeyPair, u2: ECKeyPair, v1: ECPublicKey, v2: ECPublicKey) => {\n    if (!isLegalPK(v1) || !isLegalPK(v2)) {\n      throw new KitError('Invalid public key')\n    }\n    const ceilLog2n = n_bit\n    const L = 1n << BigInt(Math.ceil(ceilLog2n / 2))\n    const u1d = typeof u1.d === 'bigint' ? u1.d : U8.from(u1.d).toBI()\n    const u2d = typeof u2.d === 'bigint' ? u2.d : U8.from(u2.d).toBI()\n    const u2Qx = typeof u2.Q.x === 'bigint' ? u2.Q.x : U8.from(u2.Q.x).toBI()\n    const v2Qx = typeof v2.Q.x === 'bigint' ? v2.Q.x : U8.from(v2.Q.x).toBI()\n    const Q2u = mod(u2Qx, L) + L\n    const Q2v = mod(v2Qx, L) + L\n    const s = mod(u2d + Q2u * u1d, n)\n    const P = mulPoint(addPoint(v2.Q, mulPoint(v1.Q, Q2v)), s * h)\n    if (P.isInfinity) {\n      throw new KitError('Public key not available')\n    }\n    return U8Point(P, p_byte)\n  }\n  // Digital signature\n  const ecdsa: ECDSA = (hash: Digest = sha256) => {\n    const sign = (s_key: ECPrivateKey, M: Uint8Array) => {\n      const d = typeof s_key.d === 'bigint' ? s_key.d : U8.from(s_key.d).toBI()\n      let r = 0n\n      let s = 0n\n      let z = hash(M).toBI()\n      while (z > n_mask) {\n        z = z >> 1n\n      }\n      do {\n        const K = gen()\n        const k = K.d.toBI()\n        const x1 = K.Q.x.toBI()\n        r = mod(x1, n)\n        if (r === 0n)\n          continue\n\n        s = modInverse(k, n) * mod(z + r * d, n)\n        s = mod(s, n)\n      } while (s === 0n)\n      const r_buffer = U8.fromBI(r)\n      const s_buffer = U8.fromBI(s)\n      return { r: r_buffer, s: s_buffer }\n    }\n    const verify = (p_key: ECPublicKey, M: Uint8Array, signature: ECDSASignature) => {\n      const { Q } = p_key\n      const r = typeof signature.r === 'bigint' ? signature.r : U8.from(signature.r).toBI()\n      const s = typeof signature.s === 'bigint' ? signature.s : U8.from(signature.s).toBI()\n      if (r <= 0n || r >= n || s <= 0n || s >= n) {\n        return false\n      }\n      let z = hash(M).toBI()\n      while (z > n_mask) {\n        z = z >> 1n\n      }\n      const w = modInverse(s, n)\n      const u1 = mod(z * w, n)\n      const u2 = mod(r * w, n)\n      const P = addPoint(mulPoint(G, u1), mulPoint(Q, u2))\n      const v = mod(P.x, n)\n      return v === r\n    }\n    return { sign, verify }\n  }\n  // Integrated encryption scheme\n  const ecies: ECIES = (config?: ECIESConfig) => {\n    const { cipher, mac, kdf, S1, S2, iv } = defineECIES(config)\n    const encrypt = (p_key: ECPublicKey, M: Uint8Array) => {\n      if (!isLegalPK(p_key)) {\n        throw new KitError('Invalid public key')\n      }\n      let s_key: ECKeyPair\n      let deriveShare: FpECPoint<U8>\n      do {\n        s_key = gen()\n        deriveShare = ecdh(s_key, p_key)\n      } while (deriveShare.isInfinity)\n      const Z = deriveShare.x\n      const K = kdf((cipher.KEY_SIZE + mac.KEY_SIZE), joinBuffer(Z, S1))\n      const KE = K.slice(0, cipher.KEY_SIZE)\n      const KM = K.slice(cipher.KEY_SIZE, cipher.KEY_SIZE + mac.KEY_SIZE)\n      const _cipher = cipher(KE, iv)\n      const R: ECPublicKey = { Q: s_key.Q }\n      const C = _cipher.encrypt(M)\n      const D = mac(KM, joinBuffer(C, S2))\n      return { R, C, D }\n    }\n    const decrypt = (s_key: ECPrivateKey, CT: ECIESCiphertext) => {\n      const { R, C, D } = CT\n      // 密钥派生\n      const deriveShare = ecdh(s_key, R)\n      if (deriveShare.isInfinity) {\n        throw new KitError('ECIES Decryption failed')\n      }\n      const Z = deriveShare.x\n      const K = kdf((cipher.KEY_SIZE + mac.KEY_SIZE), joinBuffer(Z, S1))\n      const KE = K.slice(0, cipher.KEY_SIZE)\n      const KM = K.slice(cipher.KEY_SIZE, cipher.KEY_SIZE + mac.KEY_SIZE)\n      const _cipher = cipher(KE, iv)\n      // 校验\n      if (mac(KM, joinBuffer(C, S2)).some((v, i) => v !== D[i])) {\n        throw new KitError('ECIES Decryption failed')\n      }\n      const M = _cipher.decrypt(C)\n      // 解密\n      return new U8(M)\n    }\n    return { encrypt, decrypt }\n  }\n\n  return {\n    utils: {\n      addPoint,\n      mulPoint,\n      isLegalPK,\n      isLegalSK,\n      PointToU8,\n      U8ToPoint,\n    },\n    gen,\n    dh: ecdh,\n    cdh: eccdh,\n    mqv: ecmqv,\n    dsa: ecdsa,\n    ies: ecies,\n  }\n}\n\n// * Algorithms for Test\n\n/**\n * ! 此加密算法仅用于测试 ECIES\n * ! This encryption algorithm is only used for testing ECIES\n */\nexport const es_xor = createCipher(\n  (K: Uint8Array) => {\n    const encrypt = (M: Uint8Array) => new U8(M.map((v, i) => v ^ K[i]))\n    const decrypt = (C: Uint8Array) => new U8(C.map((v, i) => v ^ K[i]))\n    return { encrypt, decrypt }\n  },\n  {\n    ALGORITHM: 'ES-XOR',\n    BLOCK_SIZE: 20,\n    KEY_SIZE: 20,\n    MIN_KEY_SIZE: 20,\n    MAX_KEY_SIZE: 20,\n  },\n)\n","import { U8 } from './utils'\n\nexport const ASN1 = {\n  // 0x04\n  OCTET_STRING: (value: Uint8Array) => {\n    const buffer = new U8(value.length + 2)\n    buffer.set([0x04, value.length], 0)\n    buffer.set(value, 2)\n    return buffer\n  },\n  // 0x05\n  NULL: () => new U8([0x05, 0x00]),\n  // 0x06\n  OBJECT_IDENTIFIER: (id: string = '') => {\n    const node = id.split('.').map(Number)\n    const buffer: number[] = []\n    buffer.push(node[0] * 40 + node[1])\n    for (let i = 2; i < node.length; i++) {\n      let n = node[i]\n      if (n < 128) {\n        buffer.push(n)\n      }\n      else {\n        const bytes: number[] = [n & 0x7F]\n        n >>= 7\n        while (n > 0) {\n          bytes.unshift((n & 0x7F) | 0x80)\n          n >>= 7\n        }\n        buffer.push(...bytes)\n      }\n    }\n    return new U8([0x06, buffer.length, ...buffer])\n  },\n  // 0x30\n  SEQUENCE: (value: Uint8Array[]) => {\n    const length = value.reduce((sum, v) => sum + v.length, 0)\n    const buffer = new U8(length + 2)\n    buffer.set([0x30, length], 0)\n    let offset = 2\n    for (const v of value) {\n      buffer.set(v, offset)\n      offset += v.length\n    }\n    return buffer\n  },\n}\n","import { modPow, U8 } from './utils'\n\n// * Interfaces\n\n/** 随机素数生成器 / Random Prime Generator */\nexport interface RandomPrimeGenerator {\n  /**\n   * @param {bigint} b - 位数 / Bits\n   */\n  (b: number): bigint\n}\n\n// * Constants\n\n/** deterministic >= 1 - 0.5^t */\nconst T = 40\nconst LOW_PRIMES = [2n, 3n, 5n, 7n, 11n, 13n, 17n, 19n, 23n, 29n, 31n, 37n, 41n, 43n, 47n, 53n, 59n, 61n, 67n, 71n, 73n, 79n, 83n, 89n, 97n, 101n, 103n, 107n, 109n, 113n, 127n, 131n, 137n, 139n, 149n, 151n, 157n, 163n, 167n, 173n, 179n, 181n, 191n, 193n, 197n, 199n, 211n, 223n, 227n, 229n, 233n, 239n, 241n, 251n, 257n, 263n, 269n, 271n, 277n, 281n, 283n, 293n, 307n, 311n, 313n, 317n, 331n, 337n, 347n, 349n, 353n, 359n, 367n, 373n, 379n, 383n, 389n, 397n, 401n, 409n, 419n, 421n, 431n, 433n, 439n, 443n, 449n, 457n, 461n, 463n, 467n, 479n, 487n, 491n, 499n, 503n, 509n, 521n, 523n, 541n, 547n, 557n, 563n, 569n, 571n, 577n, 587n, 593n, 599n, 601n, 607n, 613n, 617n, 619n, 631n, 641n, 643n, 647n, 653n, 659n, 661n, 673n, 677n, 683n, 691n, 701n, 709n, 719n, 727n, 733n, 739n, 743n, 751n, 757n, 761n, 769n, 773n, 787n, 797n, 809n, 811n, 821n, 823n, 827n, 829n, 839n, 853n, 857n, 859n, 863n, 877n, 881n, 883n, 887n, 907n, 911n, 919n, 929n, 937n, 941n, 947n, 953n, 967n, 971n, 977n, 983n, 991n, 997n]\nconst LOW_PRIMES_LIMIT = (1n << 26n) / LOW_PRIMES[LOW_PRIMES.length - 1]\n\n// * Functions\n\n/** Miller-Rabin 素性测试 / Primality Test */\nfunction MillerRabin(n: bigint, t: number): boolean {\n  const n_1 = n - 1n\n  let s = 0n\n  let d = n_1\n  while ((d & 1n) === 0n) {\n    d >>= 1n\n    s++\n  }\n\n  t = (t + 1) >> 1\n  if (t > LOW_PRIMES.length)\n    t = LOW_PRIMES.length\n\n  const tested: bigint[] = [2n]\n  for (let i = 0; i < t; ++i) {\n    // Pick bases at random\n    let base: bigint\n    do {\n      base = LOW_PRIMES[Math.floor(Math.random() * LOW_PRIMES.length)]\n    } while (tested.includes(base))\n    tested.push(base)\n    if (StrongPseudoPrime(n, n_1, s, d, base) === false) {\n      return false\n    }\n  }\n  return true\n}\n\n/**\n * 根据费马小定理: `base^(n-1) ≡ 1 (mod n)` 时 `n` 可能是素数,\n * 通过将 `n-1` 分解为 `2^s * d` 优化计算\n *\n * According to Fermat's Little Theorem: `base^(n-1) ≡ 1 (mod n)` when `n` may be a prime,\n * optimize the calculation by decomposing `n-1` into `2^s * d`\n *\n * @param {bigint} n - 待测试的数\n * @param {bigint} n_1 - n - 1\n * @param {bigint} s - n - 1 = 2^s * d\n * @param {bigint} d - n - 1 = 2^s * d\n * @param {bigint} base - 测试基数\n */\nfunction StrongPseudoPrime(n: bigint, n_1: bigint, s: bigint, d: bigint, base: bigint): boolean {\n  let x = modPow(base, d, n)\n  if (x === 1n || x === n_1)\n    return true\n\n  let y = 0n\n  for (let i = 1; i < s; i++) {\n    y = modPow(x, 2n, n)\n    if (y === 1n && x !== 1n && x !== n_1)\n      return false\n    x = y\n  }\n  return y === 1n\n}\n\n/**\n * 高级素性测试: 确定性 >= 1-.5^t\n *\n * Advanced primality test: deterministic >= 1-.5^t\n */\nfunction _isProbablePrime(n: bigint, t: number = T): boolean {\n  // 低素数倍数\n  for (let i = 1; i < LOW_PRIMES.length;) {\n    let m = LOW_PRIMES[i]\n    let j = i + 1\n    while (j < LOW_PRIMES.length && m < LOW_PRIMES_LIMIT) {\n      m *= LOW_PRIMES[j++]\n    }\n    m = n % m\n    while (i < j) {\n      if (m % LOW_PRIMES[i++] === 0n)\n        return false\n    }\n  }\n\n  return MillerRabin(n, t)\n}\n\nfunction genPrimeCandidate(buffer: U8) {\n  crypto.getRandomValues(buffer)\n  buffer[0] |= 0x80\n  let n = buffer.toBI() | 1n\n  const n_mod_6 = n % 6n\n  if (n_mod_6 !== 1n && n_mod_6 !== 5n)\n    n += 4n\n\n  return n\n}\n\n/** 随机素数生成器 / Random Prime Generator */\nexport const genPrime: RandomPrimeGenerator = (b: number): bigint => {\n  const buffer = new U8(b >> 3)\n  let n: bigint\n  do {\n    n = genPrimeCandidate(buffer)\n  } while (!_isProbablePrime(n))\n  return n\n}\n\n/**\n * 素性测试: 确定性 >= 1-.5^t\n *\n * Primality test: deterministic >= 1-.5^t\n *\n * @param {bigint} n - 待测试的数 / Number to be tested\n * @param {number} t - 测试轮数 / Number of tests\n */\nexport function isProbablePrime(n: bigint, t: number = T): boolean {\n  if (t <= 0)\n    return false\n  // 偶数\n  if ((n & 1n) === 0n)\n    return false\n  // 六倍原理\n  const n_mod_6 = n % 6n\n  if (n_mod_6 !== 1n && n_mod_6 !== 5n)\n    return false\n  // 小素数\n  if (n <= LOW_PRIMES[LOW_PRIMES.length - 1])\n    return LOW_PRIMES.includes(n)\n\n  return _isProbablePrime(n, t)\n}\n","import type { RandomPrimeGenerator } from '../../core/prime'\nimport { genPrime } from '../../core/prime'\nimport { gcd, KitError, lcm, mod, modInverse, modPow, U8 } from '../../core/utils'\n\n// * Interfaces\n\nexport interface RSAPublicKey {\n  /** 模数 / Modulus */\n  n: bigint\n  /** 公钥指数 / Public Exponent */\n  e: bigint\n}\nexport interface RSAPrivateKey extends RSAPublicKey {\n  /** 模数 / Modulus */\n  n: bigint\n  /** 公钥指数 / Public Exponent */\n  e: bigint\n  /** 私钥指数 / Private Exponent */\n  d: bigint\n  p: bigint\n  q: bigint\n  dP: bigint\n  dQ: bigint\n  qInv: bigint\n}\n\nexport interface RSACipherable {\n  /**\n   * 使用 RSA 加密原语加密消息\n   *\n   * Encrypt message using RSA encryption primitive\n   */\n  encrypt: (M: Uint8Array) => bigint\n  /**\n   * 使用 RSA 解密原语解密密文\n   *\n   * Decrypt ciphertext using RSA decryption primitive\n   */\n  decrypt: (C: Uint8Array) => bigint\n}\nexport interface RSAVerifiable {\n  /**\n   * 使用 RSA 签名原语对消息签名\n   *\n   * Sign message using RSA signature primitive\n   */\n  sign: (M: Uint8Array) => bigint\n  /**\n   * 使用 RSA 验证原语验证签名\n   *\n   * Verify signature using RSA verification primitive\n   */\n  verify: (S: Uint8Array) => bigint\n}\n\n// * RSA Algorithm\n\n/**\n * RSA 加密原语\n *\n * RSA encryption primitive\n */\nfunction encryptionPrimitive(key: Partial<RSAPublicKey>, M: bigint | Uint8Array) {\n  const { n, e } = key\n  if (e === undefined || n === undefined) {\n    throw new KitError('Invalid public key')\n  }\n  M = typeof M === 'bigint' ? M : U8.from(M).toBI()\n  if (M >= n) {\n    throw new KitError('Message representative out of range')\n  }\n  return modPow(M, e, n)\n}\n\n/**\n * RSA 解密原语\n *\n * RSA decryption primitive\n */\nfunction decryptionPrimitive(key: Partial<RSAPrivateKey>, C: bigint | Uint8Array) {\n  const { n, d } = key\n  if (d === undefined || n === undefined) {\n    throw new KitError('Invalid private key')\n  }\n  C = typeof C === 'bigint' ? C : U8.from(C).toBI()\n  if (C >= n) {\n    throw new KitError('Ciphertext representative out of range')\n  }\n  return modPow(C, d, n)\n}\n\n/**\n * RSA 签名原语\n *\n * RSA signature primitive\n */\nfunction signaturePrimitive(key: Partial<RSAPrivateKey>, M: bigint | Uint8Array) {\n  const { n, d } = key\n  if (d === undefined || n === undefined) {\n    throw new KitError('Invalid private key')\n  }\n  M = typeof M === 'bigint' ? M : U8.from(M).toBI()\n  if (M >= n) {\n    throw new KitError('Message representative out of range')\n  }\n  return modPow(M, d, n)\n}\n\n/**\n * RSA 验证原语\n *\n * RSA verification primitive\n */\nfunction verificationPrimitive(key: Partial<RSAPublicKey>, S: bigint | Uint8Array) {\n  const { n, e } = key\n  if (e === undefined || n === undefined) {\n    throw new KitError('Invalid public key')\n  }\n  S = typeof S === 'bigint' ? S : U8.from(S).toBI()\n  if (S >= n) {\n    throw new KitError('Signature is too long')\n  }\n  return modPow(S, e, n)\n}\n\n/**\n * RSA 密钥生成\n *\n * RSA key generation\n *\n * @param {number} b - RSA 私钥长度 / RSA private key length (bit)\n * @param {RandomPrimeGenerator} rpg - 随机素数生成器 / Random prime generator\n */\nfunction genKey(b: number, rpg = genPrime): RSAPrivateKey {\n  const p = rpg(b >> 1)\n  const q = rpg(b >> 1)\n  const n = p * q\n  const λ = lcm(p - 1n, q - 1n)\n\n  // public key\n  const e = 65537n\n  if (gcd(e, λ) !== 1n) {\n    throw new KitError('Invalid public exponent')\n  }\n\n  // private key\n  const d = modInverse(e, λ)\n\n  const dP = mod(d, p - 1n)\n  const dQ = mod(d, q - 1n)\n  const qInv = modInverse(q, p)\n\n  const privateKey: RSAPrivateKey = { n, e, d, p, q, dP, dQ, qInv }\n\n  return privateKey\n}\n\nfunction fromKey(key: Partial<RSAPrivateKey>): RSACipherable & RSAVerifiable {\n  const encrypt = (M: Uint8Array) => encryptionPrimitive(key, M)\n  const decrypt = (C: Uint8Array) => decryptionPrimitive(key, C)\n  const sign = (M: Uint8Array) => signaturePrimitive(key, M)\n  const verify = (S: Uint8Array) => verificationPrimitive(key, S)\n  return {\n    ...key,\n    encrypt,\n    decrypt,\n    sign,\n    verify,\n  }\n}\n\n/**\n * 根据 RSA 私钥长度生成 RSA 密钥对, 并返回 RSA 加密原语和签名原语\n *\n * Generate RSA key pair according to RSA private key length, and return RSA encryption primitive and signature primitive\n *\n * @param {number} b - RSA 私钥长度 / RSA private key length\n * @param {RandomPrimeGenerator} rpg - 随机素数生成器 / Random prime generator\n */\nexport function rsa(b: number, rpg?: RandomPrimeGenerator): RSACipherable & RSAVerifiable & RSAPrivateKey\n/**\n * 根据 RSA 公钥或私钥生成 RSA 加密原语和验证原语\n *\n * Generate RSA encryption primitive and verification primitive according to RSA public or private key\n *\n * @param {RSAPrivateKey | RSAPublicKey} key - RSA 公钥或私钥 / RSA public or private key\n */\nexport function rsa<T extends RSAPrivateKey | RSAPublicKey>(key: T): RSACipherable & RSAVerifiable & T\nexport function rsa(b: number | RSAPrivateKey | RSAPublicKey, rpg = genPrime) {\n  if (typeof b === 'number') {\n    return fromKey(genKey(b, rpg))\n  }\n  return fromKey(b)\n}\n","import type { Hash } from '../../core/hash'\nimport type { RSAPrivateKey, RSAPublicKey } from './rsa'\nimport { ASN1 } from '../../core/asn1'\nimport { Counter, getBIBits, joinBuffer, KitError, U8 } from '../../core/utils'\nimport { sha256 } from '../../hash/sha256'\nimport { rsa } from './rsa'\n\n// * MGF1\n\nexport interface MGF {\n  (mdfSeed: Uint8Array, maskLen: number): Uint8Array\n}\n/**\n * PKCS#1 v2.2 的 掩码生成函数 MGF1\n *\n * Mask Generation Function MGF1 of PKCS#1 v2.2\n */\nexport function mgf1(hash: Hash): MGF {\n  return (mdfSeed: Uint8Array, maskLen: number) => {\n    const T: Uint8Array[] = []\n    const C = new Counter(joinBuffer(mdfSeed, new Uint8Array(4)))\n    for (let i = 0; i < maskLen; i += hash.DIGEST_SIZE) {\n      T.push(hash(C))\n      C.inc(mdfSeed.length)\n    }\n    return joinBuffer(...T).slice(0, maskLen)\n  }\n}\n\n// * Encryption Scheme\n\n/**\n * 最优非对称加密填充的 RSA 加密方案 (OAEP)\n *\n * RSA Encryption Scheme with Optimal Asymmetric Encryption Padding (OAEP)\n *\n * @param {RSAPublicKey | RSAPrivateKey} key - RSA 公钥或私钥 / RSA public or private key\n * @param {Hash} [hash] - 散列函数 / Hash function (default: SHA-256)\n * @param {MGF} [mgf] - 掩码生成函数 / Mask generation function (default: MGF1)\n * @param {Uint8Array} [label] - 标签 / Label (default: empty)\n */\nexport function pkcs1_es_oaep(\n  key: RSAPublicKey | RSAPrivateKey,\n  hash: Hash = sha256,\n  mgf = mgf1(hash),\n  label = new Uint8Array(),\n) {\n  const k = (getBIBits(key.n) + 7) >> 3\n  const hLen = hash.DIGEST_SIZE\n  const MAX_MESSAGE_LENGTH = k - 2 * hLen - 2\n  if (MAX_MESSAGE_LENGTH <= 0) {\n    throw new KitError('Invalid key or hash function')\n  }\n  const _rsa = rsa(key)\n  const lHash = hash(label)\n  const encrypt = (M: Uint8Array) => {\n    const mLen = M.length\n    if (mLen > MAX_MESSAGE_LENGTH) {\n      throw new KitError('Message too long')\n    }\n    // DB = lHash || PS || 0x01 || M\n    const PS = new U8(MAX_MESSAGE_LENGTH - mLen)\n    const DB = joinBuffer(lHash, PS, new U8([0x01]), M)\n    // EM = 0x00 || maskedSeed || maskedDB\n    const seed = new U8(hLen)\n    crypto.getRandomValues(seed)\n    const dbMask = mgf(seed, DB.length)\n    const maskedDB = DB.map((v, i) => v ^ dbMask[i])\n    const seedMask = mgf(maskedDB, hLen)\n    const maskedSeed = seed.map((v, i) => v ^ seedMask[i])\n    const EM = joinBuffer(new U8([0x00]), maskedSeed, maskedDB)\n    return U8.fromBI(_rsa.encrypt(EM), k)\n  }\n  const decrypt = (C: Uint8Array) => {\n    if (k !== C.length) {\n      throw new KitError('Decryption error')\n    }\n    const EM = U8.fromBI(_rsa.decrypt(C), k)\n    if (EM[0] !== 0x00) {\n      throw new KitError('Decryption error')\n    }\n    const maskedSeed = EM.subarray(1, hLen + 1)\n    const maskedDB = EM.subarray(hLen + 1)\n    const seedMask = mgf(maskedDB, hLen)\n    const seed = maskedSeed.map((v, i) => v ^ seedMask[i])\n    const dbMask = mgf(seed, maskedDB.length)\n    const DB = maskedDB.map((v, i) => v ^ dbMask[i])\n    const lHash_ = DB.subarray(0, hLen)\n    if (lHash.some((v, i) => v !== lHash_[i])) {\n      throw new KitError('Decryption error')\n    }\n    const PS = DB.subarray(hLen)\n    const mOffset = PS.findIndex(v => v === 0x01)\n    if (mOffset === -1) {\n      throw new KitError('Decryption error')\n    }\n    if (PS.subarray(0, mOffset).some(v => v !== 0x00)) {\n      throw new KitError('Decryption error')\n    }\n    const M = PS.slice(mOffset + 1)\n    return M\n  }\n  return { encrypt, decrypt }\n}\n\n/**\n * RSA 加密方案 (PKCS#1 v1.5)\n *\n * RSA Encryption Scheme (PKCS#1 v1.5)\n *\n * @param {RSAPublicKey | RSAPrivateKey} key - RSA 公钥或私钥 / RSA public or private key\n */\nexport function pkcs1_es_1_5(\n  key: RSAPublicKey | RSAPrivateKey,\n) {\n  const k = (getBIBits(key.n) + 7) >> 3\n  const MAX_MESSAGE_LENGTH = k - 11\n  if (MAX_MESSAGE_LENGTH <= 0) {\n    throw new KitError('Invalid key')\n  }\n  const _rsa = rsa(key)\n  const encrypt = (M: Uint8Array) => {\n    if (M.length > MAX_MESSAGE_LENGTH) {\n      throw new KitError('Message is too long')\n    }\n    const PS = new Uint8Array(k - M.length - 3)\n    do {\n      crypto.getRandomValues(PS)\n    } while (PS.includes(0x00))\n    const EM = joinBuffer(new U8([0x00, 0x02]), PS, new U8([0x00]), M)\n    return U8.fromBI(_rsa.encrypt(EM), k)\n  }\n  const decrypt = (C: Uint8Array) => {\n    if (C.length !== k) {\n      throw new KitError('Decryption error')\n    }\n    const EM = U8.fromBI(_rsa.decrypt(C), k)\n    if (EM[0] !== 0x00 || EM[1] !== 0x02) {\n      throw new KitError('Decryption error')\n    }\n    const SeparatorIndex = EM.subarray(2).findIndex(v => v === 0x00)\n    if (SeparatorIndex === -1) {\n      throw new KitError('Decryption error')\n    }\n    const M = EM.slice(SeparatorIndex + 3)\n    return M\n  }\n  return { encrypt, decrypt }\n}\n\n// * Signature Scheme with Appendix\n\n/**\n * 基于 概率签名方案 的 RSA 附录签名方案 (PSS)\n *\n * RSA Signature Scheme with Appendix - Probabilistic Signature Scheme (PSS)\n *\n * @param {RSAPublicKey | RSAPrivateKey} key - RSA 公钥或私钥 / RSA public or private key\n * @param {Hash} [hash] - 散列函数 / Hash function (default: SHA-256)\n * @param {MGF} [mgf] - 掩码生成函数 / Mask generation function (default: MGF1)\n * @param {number} [sLen] - 盐长度 / Salt length (default: hash.DIGEST_SIZE)\n */\nexport function pkcs1_ssa_pss(\n  key: RSAPublicKey | RSAPrivateKey,\n  hash: Hash = sha256,\n  mgf = mgf1(hash),\n  sLen = hash.DIGEST_SIZE,\n) {\n  const modBits = getBIBits(key.n)\n  const k = (modBits + 7) >> 3\n  const emLen = (modBits + 6) >> 3\n  const emsa = emsa_pss(hash, mgf, sLen)\n  const _rsa = rsa(key)\n  const sign = (M: Uint8Array) => {\n    const EM = emsa.encode(M, modBits - 1)\n    const S = _rsa.sign(EM)\n    return U8.fromBI(S, k)\n  }\n  const verify = (M: Uint8Array, S: Uint8Array) => {\n    if (S.length !== k) {\n      return false\n    }\n    const EM = U8.fromBI(_rsa.verify(S), emLen)\n    return emsa.verify(M, EM, modBits - 1)\n  }\n  return { sign, verify }\n}\n\n/**\n * RSA 附录签名方案 (PKCS#1 v1.5)\n *\n * RSA Signature Scheme with Appendix (PKCS#1 v1.5)\n *\n * @param {RSAPublicKey | RSAPrivateKey} key - RSA 公钥或私钥 / RSA public or private key\n * @param {Hash} [hash] - 散列函数 / Hash function (default: SHA-256)\n */\nexport function pkcs1_ssa_1_5(\n  key: RSAPublicKey | RSAPrivateKey,\n  hash: Hash = sha256,\n) {\n  const modBits = getBIBits(key.n)\n  const k = (modBits + 7) >> 3\n  const _rsa = rsa(key)\n  const sign = (M: Uint8Array) => {\n    const EM = emsa_1_5(M, k, hash)\n    const S = _rsa.sign(EM)\n    return U8.fromBI(S, k)\n  }\n  const verify = (M: Uint8Array, S: Uint8Array) => {\n    if (S.length !== k) {\n      return false\n    }\n    const EM = U8.fromBI(_rsa.verify(S), k)\n    const EM2 = emsa_1_5(M, k, hash)\n    return EM.every((v, i) => v === EM2[i])\n  }\n  return { sign, verify }\n}\n\n// * Encoding Method for Signatures with Appendix\n\nfunction emsa_pss(\n  hash: Hash = sha256,\n  mgf = mgf1(hash),\n  sLen = hash.DIGEST_SIZE,\n) {\n  const hLen = hash.DIGEST_SIZE\n  const encode = (M: Uint8Array, emBits: number) => {\n    const mHash = hash(M)\n    const emLen = (emBits + 7) >> 3\n    if (emLen < hLen + sLen + 2) {\n      throw new KitError('Encoding error')\n    }\n    const salt = new U8(sLen)\n    crypto.getRandomValues(salt)\n    const M2 = joinBuffer(new U8(8), mHash, salt)\n    const H = hash(M2)\n    const PS = new U8(emLen - sLen - hLen - 2)\n    const DB = joinBuffer(PS, new U8([0x01]), salt)\n    const dbMask = mgf(H, DB.length)\n    const maskedDB = DB.map((v, i) => v ^ dbMask[i])\n    const bitMask = 0xFF >> (emLen << 3) - emBits\n    maskedDB[0] &= bitMask\n    const EM = joinBuffer(maskedDB, H, new U8([0xBC]))\n    return EM\n  }\n  const verify = (M: Uint8Array, EM: Uint8Array, emBits: number) => {\n    const mHash = hash(M)\n    const emLen = (emBits + 7) >> 3\n    if (emLen !== EM.length || emLen < hLen + sLen + 2) {\n      return false\n    }\n    if (EM[emLen - 1] !== 0xBC) {\n      return false\n    }\n    const maskedDB = EM.subarray(0, emLen - hLen - 1)\n    const H = EM.subarray(maskedDB.length, emLen - 1)\n    const bitMask = 0xFF >> (emLen << 3) - emBits\n    if (maskedDB[0] > bitMask) {\n      return false\n    }\n    const dbMask = mgf(H, maskedDB.length)\n    const DB = maskedDB.map((v, i) => v ^ dbMask[i])\n    DB[0] &= bitMask\n    const PS = DB.subarray(0, DB.length - sLen - 1)\n    if (PS.some(v => v !== 0x00)) {\n      return false\n    }\n    if (DB[PS.length] !== 0x01) {\n      return false\n    }\n    const salt = DB.subarray(PS.length + 1)\n    const M2 = joinBuffer(new U8(8), mHash, salt)\n    const H2 = hash(M2)\n    return H2.every((v, i) => v === H[i])\n  }\n  return { encode, verify }\n}\n\nfunction emsa_1_5(\n  M: Uint8Array,\n  emLen: number,\n  hash: Hash = sha256,\n) {\n  const H = hash(M)\n  const digestAlgorithm = ASN1.SEQUENCE([\n    ASN1.OBJECT_IDENTIFIER(hash.OID),\n    ASN1.NULL(),\n  ])\n  const digest = ASN1.OCTET_STRING(H)\n  const DigestInfo = ASN1.SEQUENCE([\n    digestAlgorithm,\n    digest,\n  ])\n  const T = DigestInfo\n  const psLen = emLen - T.length - 3\n  if (psLen < 8) {\n    throw new KitError('intended encoded message length too short')\n  }\n  const PS = new U8(psLen).fill(0xFF)\n  const EM = joinBuffer(new U8([0x00, 0x01]), PS, new U8([0x00]), T)\n  return EM\n}\n","// * Prime Filed Elliptic Curve Interfaces\n\n/**\n * 伪射坐标表示的椭圆曲线的点\n *\n * Affine Coordinates of Elliptic Curve Point\n */\nexport interface FpECPoint<T = bigint | Uint8Array> {\n  isInfinity: boolean\n  x: T\n  y: T\n}\n\n/**\n * 素域 Weierstrass 椭圆曲线参数\n *\n * Prime Field Weierstrass Elliptic Curve Parameters\n */\nexport interface FpWECParams {\n  type: 'Weierstrass'\n  /** Prime */\n  readonly p: bigint\n  /** Coefficient a */\n  readonly a: bigint\n  /** Coefficient b */\n  readonly b: bigint\n  /** Base point */\n  readonly G: Readonly<FpECPoint<bigint>>\n  /** Order */\n  readonly n: bigint\n  /** co-factor */\n  readonly h: bigint\n}\n\n/**\n * 素域 Montgomery 椭圆曲线参数\n *\n * Prime Field Montgomery Elliptic Curve Parameters\n */\nexport interface FpMECParams {\n  type: 'Montgomery'\n  /** Prime */\n  readonly p: bigint\n  /** Coefficient a */\n  readonly a: bigint\n  /** Coefficient b */\n  readonly b: 1n\n  /** Base point */\n  readonly G: Readonly<FpECPoint<bigint>>\n  /** Order */\n  readonly n: bigint\n  /** co-factor */\n  readonly h: bigint\n}\n\n/**\n * 素域 Twisted Edwards 椭圆曲线参数\n *\n * Prime Field Twisted Edwards Elliptic Curve Parameters\n */\nexport interface FpTECParams {\n  type: 'TwistedEdwards'\n  /** Prime */\n  readonly p: bigint\n  /** Coefficient a */\n  readonly a: bigint\n  /** Coefficient b */\n  readonly d: bigint\n  /** Base point */\n  readonly G: Readonly<FpECPoint<bigint>>\n  /** Order */\n  readonly n: bigint\n  /** co-factor */\n  readonly h: bigint\n}\n\n// * Binary Field Elliptic Curve Interfaces\n\nexport interface F2mECPoint extends FpECPoint {\n}\n\n/**\n * 二元域椭圆曲线参数\n *\n * Binary Field Elliptic Curve Parameters\n */\nexport interface FbECParams {\n  readonly m: number\n  readonly f: (x: bigint) => bigint\n  readonly a: bigint\n  readonly b: bigint\n  readonly G: Readonly<F2mECPoint>\n  readonly n: bigint\n  readonly h: bigint\n}\n\n// * SM2 Prime Curve\n\n/**\n * 256 位素域上的 SM2 曲线\n *\n * SM2 curve over a 256 bit prime field\n */\nexport const sm2p256v1: FpWECParams = Object.freeze({\n  type: 'Weierstrass',\n  p: 0xFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFn,\n  a: 0xFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFCn,\n  b: 0x28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93n,\n  G: {\n    isInfinity: false,\n    x: 0x32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7n,\n    y: 0xBC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0n,\n  },\n  n: 0xFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123n,\n  h: 1n,\n})\n\n// * SEC-1 Prime Curves\n\n/**\n * 112 位素域上的 SECG/WTLS 曲线\n *\n * SECG/WTLS curve over a 112 bit prime field\n *\n * @alias secp112r1\n * @alias wtls6\n */\nexport const secp112r1: FpWECParams = Object.freeze({\n  type: 'Weierstrass',\n  p: 0xDB7C2ABF62E35E668076BEAD208Bn,\n  a: 0xDB7C2ABF62E35E668076BEAD2088n,\n  b: 0x659EF8BA043916EEDE8911702B22n,\n  G: {\n    isInfinity: false,\n    x: 0x09487239995A5EE76B55F9C2F098n,\n    y: 0xA89CE5AF8724C0A23E0E0FF77500n,\n  },\n  n: 0xDB7C2ABF62E35E7628DFAC6561C5n,\n  h: 1n,\n})\n\n/**\n * 112 位素域上的 SECG 曲线\n *\n * SECG curve over a 112 bit prime field\n */\nexport const secp112r2: FpWECParams = Object.freeze({\n  type: 'Weierstrass',\n  p: 0xDB7C2ABF62E35E668076BEAD208Bn,\n  a: 0x6127C24C05F38A0AAAF65C0EF02Cn,\n  b: 0x51DEF1815DB5ED74FCC34C85D709n,\n  G: {\n    isInfinity: false,\n    x: 0x4BA30AB5E892B4E1649DD0928643n,\n    y: 0xADCD46F5882E3747DEF36E956E97n,\n  },\n  n: 0x36DF0AAFD8B8D7597CA10520D04Bn,\n  h: 4n,\n})\n\n/**\n * 128 位素域上的 SECG 曲线\n *\n * SECG curve over a 128 bit prime field\n */\nexport const secp128r1: FpWECParams = Object.freeze({\n  type: 'Weierstrass',\n  p: 0xFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFn,\n  a: 0xFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFCn,\n  b: 0xE87579C11079F43DD824993C2CEE5ED3n,\n  G: {\n    isInfinity: false,\n    x: 0x161FF7528B899B2D0C28607CA52C5B86n,\n    y: 0xCF5AC8395BAFEB13C02DA292DDED7A83n,\n  },\n  n: 0xFFFFFFFE0000000075A30D1B9038A115n,\n  h: 1n,\n})\n\n/**\n * 128 位素域上的 SECG 曲线\n *\n * SECG curve over a 128 bit prime field\n */\nexport const secp128r2: FpWECParams = Object.freeze({\n  type: 'Weierstrass',\n  p: 0xFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFn,\n  a: 0xD6031998D1B3BBFEBF59CC9BBFF9AEE1n,\n  b: 0x5EEEFCA380D02919DC2C6558BB6D8A5Dn,\n  G: {\n    isInfinity: false,\n    x: 0x7B6AA5D85E572983E6FB32A7CDEBC140n,\n    y: 0x27B6916A894D3AEE7106FE805FC34B44n,\n  },\n  n: 0x3FFFFFFF7FFFFFFFBE0024720613B5A3n,\n  h: 4n,\n})\n\n/**\n * 160 位素域上的 SECG 曲线\n *\n * SECG curve over a 160 bit prime field\n */\nexport const secp160k1: FpWECParams = Object.freeze({\n  type: 'Weierstrass',\n  p: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73n,\n  a: 0n,\n  b: 7n,\n  G: {\n    isInfinity: false,\n    x: 0x3B4C382CE37AA192A4019E763036F4F5DD4D7EBBn,\n    y: 0x938CF935318FDCED6BC28286531733C3F03C4FEEn,\n  },\n  n: 0x0100000000000000000001B8FA16DFAB9ACA16B6B3n,\n  h: 1n,\n})\n\n/**\n * 160 位素域上的 SECG/WTLS 曲线\n *\n * SECG/WTLS curve over a 160 bit prime field\n *\n * @alias secp160r1\n * @alias wtls7\n */\nexport const secp160r1: FpWECParams = Object.freeze({\n  type: 'Weierstrass',\n  p: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFn,\n  a: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFCn,\n  b: 0x1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45n,\n  G: {\n    isInfinity: false,\n    x: 0x4A96B5688EF573284664698968C38BB913CBFC82n,\n    y: 0x23A628553168947D59DCC912042351377AC5FB32n,\n  },\n  n: 0x0100000000000000000001F4C8F927AED3CA752257n,\n  h: 1n,\n})\n\n/**\n * 160 位素域上的 SECG 曲线\n *\n * SECG curve over a 160 bit prime field\n */\nexport const secp160r2: FpWECParams = Object.freeze({\n  type: 'Weierstrass',\n  p: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFn,\n  a: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFCn,\n  b: 0xB4E134D3FB59EB8BAB57274904664D5AF50388BAn,\n  G: {\n    isInfinity: false,\n    x: 0x52DCB034293A117E1F4FF11B30F7199D3144CE6Dn,\n    y: 0xFEAFFEF2E331F296E071FA0DF9982CFEA7D43F2En,\n  },\n  n: 0x0100000000000000000000351EE786A818F3A1A16Bn,\n  h: 1n,\n})\n\n/**\n * 192 位素域上的 SECG 曲线\n *\n * SECG curve over a 192 bit prime field\n */\nexport const secp192k1: FpWECParams = Object.freeze({\n  type: 'Weierstrass',\n  p: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37n,\n  a: 0x000000000000000000000000000000000000000000000000n,\n  b: 0x000000000000000000000000000000000000000000000003n,\n  G: {\n    isInfinity: false,\n    x: 0xDB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7Dn,\n    y: 0x9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9Dn,\n  },\n  n: 0xFFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8Dn,\n  h: 1n,\n})\n\n/**\n * 192 位素域上的 NIST/X9.62/SECG 曲线\n *\n * NIST/X9.62/SECG curve over a 192 bit prime field\n *\n * @alias p192\n * @alias prime192v1\n * @alias secp192r1\n */\nexport const secp192r1: FpWECParams = Object.freeze({\n  type: 'Weierstrass',\n  p: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFn,\n  a: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFCn,\n  b: 0x64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1n,\n  G: {\n    isInfinity: false,\n    x: 0x188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012n,\n    y: 0x07192B95FFC8DA78631011ED6B24CDD573F977A11E794811n,\n  },\n  n: 0xFFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831n,\n  h: 1n,\n})\n\n/**\n * 224 位素域上的 SECG 曲线\n *\n * SECG curve over a 224 bit prime field\n */\nexport const secp224k1: FpWECParams = Object.freeze({\n  type: 'Weierstrass',\n  p: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFE56Dn,\n  a: 0x00000000000000000000000000000000000000000000000000000000n,\n  b: 0x00000000000000000000000000000000000000000000000000000005n,\n  G: {\n    isInfinity: false,\n    x: 0xA1455B334DF099DF30FC28A169A467E9E47075A90F7E650EB6B7A45Cn,\n    y: 0x7E089FED7FBA344282CAFBD6F7E319F7C0B0BD59E2CA4BDB556D61A5n,\n  },\n  n: 0x010000000000000000000000000001DCE8D2EC6184CAF0A971769FB1F7n,\n  h: 1n,\n})\n\n/**\n * 224 位素域上的 NIST/SECG 曲线\n *\n * NIST/SECG curve over a 224 bit prime field\n *\n * @alias p224\n * @alias secp224r1\n */\nexport const secp224r1: FpWECParams = Object.freeze({\n  type: 'Weierstrass',\n  p: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001n,\n  a: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFEn,\n  b: 0xB4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4n,\n  G: {\n    isInfinity: false,\n    x: 0xB70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21n,\n    y: 0xBD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34n,\n  },\n  n: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3Dn,\n  h: 1n,\n\n})\n\n/**\n * 256 位素域上的 SECG 曲线\n *\n * SECG curve over a 256 bit prime field\n */\nexport const secp256k1: FpWECParams = Object.freeze({\n  type: 'Weierstrass',\n  p: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2Fn,\n  a: 0x0000000000000000000000000000000000000000000000000000000000000000n,\n  b: 0x0000000000000000000000000000000000000000000000000000000000000007n,\n  G: {\n    isInfinity: false,\n    x: 0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798n,\n    y: 0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8n,\n  },\n  n: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141n,\n  h: 1n,\n})\n\n/**\n * 256 位素域上的 NIST/X9.62/SECG 曲线\n *\n * NIST/X9.62/SECG curve over a 256 bit prime field\n *\n * @alias p256\n * @alias prime256v1\n * @alias secp256r1\n */\nexport const secp256r1: FpWECParams = Object.freeze({\n  type: 'Weierstrass',\n  p: 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFn,\n  a: 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFCn,\n  b: 0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604Bn,\n  G: {\n    isInfinity: false,\n    x: 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296n,\n    y: 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5n,\n  },\n  n: 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551n,\n  h: 1n,\n})\n\n/**\n * 384 位素域上的 NIST/SECG 曲线\n *\n * NIST/SECG curve over a 384 bit prime field\n *\n * @alias p384\n * @alias secp384r1\n */\nexport const secp384r1: FpWECParams = Object.freeze({\n  type: 'Weierstrass',\n  p: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFFn,\n  a: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFCn,\n  b: 0xB3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEFn,\n  G: {\n    isInfinity: false,\n    x: 0xAA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7n,\n    y: 0x3617DE4A96262C6F5D9E98BF9292DC29F8F41DBD289A147CE9DA3113B5F0B8C00A60B1CE1D7E819D7A431D7C90EA0E5Fn,\n  },\n  n: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973n,\n  h: 1n,\n\n})\n\n/**\n * 521 位素域上的 NIST/SECG 曲线\n *\n * NIST/SECG curve over a 521 bit prime field\n *\n * @alias p521\n * @alias secp521r1\n */\nexport const secp521r1: FpWECParams = Object.freeze({\n  type: 'Weierstrass',\n  p: 0x01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFn,\n  a: 0x01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCn,\n  b: 0x0051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00n,\n  G: {\n    isInfinity: false,\n    x: 0x00C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66n,\n    y: 0x011839296A789A3BC0045C8A5FB42C7D1BD998F54449579B446817AFBD17273E662C97EE72995EF42640C550B9013FAD0761353C7086A272C24088BE94769FD16650n,\n  },\n  n: 0x01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409n,\n  h: 1n,\n})\n\n// * SEC-1 Binary Curves\n\nexport const sect163k1: FbECParams = Object.freeze({\n  m: 163,\n  f: (x: bigint) => x ** 163n + x ** 7n + x ** 6n + x ** 3n + 1n,\n  a: 0x1n,\n  b: 0x1n,\n  G: {\n    isInfinity: false,\n    x: 0x02FE13C0537BBC11ACAA07D793DE4E6D5E5C94EEE8n,\n    y: 0x0289070FB05D38FF58321F2E800536D538CCDAA3D9n,\n  },\n  n: 0x04000000000000000000020108A2E0CC0D99F8A5EFn,\n  h: 2n,\n})\n\n// * X9.63 Prime Curves\n\n/**\n * 192 位素域上的 NIST/X9.62/SECG 曲线\n *\n * NIST/X9.62/SECG curve over a 192 bit prime field\n *\n * @alias p192\n * @alias prime192v1\n * @alias secp192r1\n */\nexport const prime192v1 = secp192r1\n\n/**\n * 256 位素域上的 NIST/X9.62/SECG 曲线\n *\n * NIST/X9.62/SECG curve over a 256 bit prime field\n *\n * @alias p256\n * @alias prime256v1\n * @alias secp256r1\n */\nexport const prime256v1 = secp256r1\n\n// * NIST Prime Curves\n\n/**\n * 192 位素域上的 NIST/X9.62/SECG 曲线\n *\n * NIST/X9.62/SECG curve over a 192 bit prime field\n *\n * @alias p192\n * @alias prime192v1\n * @alias secp192r1\n */\nexport const p192 = secp192r1\n\n/**\n * 224 位素域上的 NIST/SECG 曲线\n *\n * NIST/SECG curve over a 224 bit prime field\n *\n * @alias p224\n * @alias secp224r1\n */\nexport const p224 = secp224r1\n\n/**\n * 256 位素域上的 SECG 曲线\n *\n * SECG curve over a 256 bit prime field\n *\n * @alias p256\n * @alias prime256v1\n * @alias secp256r1\n */\nexport const p256 = secp256r1\n\n/**\n * 384 位素域上的 NIST/SECG 曲线\n *\n * NIST/SECG curve over a 384 bit prime field\n *\n * @alias p384\n * @alias secp384r1\n */\nexport const p384 = secp384r1\n\n/**\n * 521 位素域上的 NIST/SECG 曲线\n *\n * NIST/SECG curve over a 521 bit prime field\n *\n * @alias p521\n * @alias secp521r1\n */\nexport const p521 = secp521r1\n\n/**\n * NIST W-25519 是与 Curve25519 同构的 Weierstrass 曲线\n *\n * NIST W-25519 is a Weierstrass curve isomorphic to Curve25519\n */\nexport const w25519: FpWECParams = Object.freeze({\n  type: 'Weierstrass',\n  p: 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDn,\n  a: 0x2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA984914A144n,\n  b: 0x7B425ED097B425ED097B425ED097B425ED097B425ED097B4260B5E9C7710C864n,\n  G: {\n    isInfinity: false,\n    x: 0x2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD245An,\n    y: 0x5F51E65E475F794B1FE122D388B72EB36DC2B28192839E4DD6163A5D81312C14n,\n  },\n  n: 0x1000000000000000000000000000000014DEF9DEA2F79CD65812631A5CF5D3EDn,\n  h: 8n,\n})\n\n/**\n * NIST W-448 是与 Curve448 同构的 Weierstrass 曲线\n *\n * NISt W-448 is a Weierstrass curve isomorphic to Curve448\n */\nexport const w448: FpWECParams = Object.freeze({\n  type: 'Weierstrass',\n  p: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFn,\n  a: 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1A76D41Fn,\n  b: 0x5ED097B425ED097B425ED097B425ED097B425ED097B425ED097B425E71C71C71C71C71C71C71C71C71C71C71C71C71C71C72C87B7CC69F70n,\n  G: {\n    isInfinity: false,\n    x: 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0000000000000000000000000000000000000000000000000000CB91n,\n    y: 0x7D235D1295F5B1F66C98AB6E58326FCECBAE5D34F55545D060F75DC28DF3F6EDB8027E2346430D211312C4B150677AF76FD7223D457B5B1An,\n  },\n  n: 0x3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7CCA23E9C44EDB49AED63690216CC2728DC58F552378C292AB5844F3n,\n  h: 4n,\n})\n\n/**\n * 素域 p^255 - 19 上的 NIST Montgomery 曲线\n *\n * NIST Montgomery curve over a prime field p^255 - 19\n */\nexport const curve25519: FpMECParams = Object.freeze({\n  type: 'Montgomery',\n  p: 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDn,\n  a: 486662n,\n  b: 1n,\n  G: {\n    isInfinity: false,\n    x: 9n,\n    y: 0x5F51E65E475F794B1FE122D388B72EB36DC2B28192839E4DD6163A5D81312C14n,\n  },\n  n: 0x1000000000000000000000000000000014DEF9DEA2F79CD65812631A5CF5D3EDn,\n  h: 8n,\n})\n\n/**\n * 素域 p^448 - 2^224 - 1 上的 NIST Montgomery 曲线\n *\n * NIST Montgomery curve over a prime field p^448 - 2^224 - 1\n */\nexport const curve448: FpMECParams = Object.freeze({\n  type: 'Montgomery',\n  p: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFn,\n  a: 156326n,\n  b: 1n,\n  G: {\n    isInfinity: false,\n    x: 5n,\n    y: 0x7D235D1295F5B1F66C98AB6E58326FCECBAE5D34F55545D060F75DC28DF3F6EDB8027E2346430D211312C4B150677AF76FD7223D457B5B1An,\n  },\n  n: 0x3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7CCA23E9C44EDB49AED63690216CC2728DC58F552378C292AB5844F3n,\n  h: 4n,\n})\n\n/**\n * ed25519 是与 Curve25519 同构的 Twisted Edwards 曲线\n *\n * ed25519 is a Twisted Edwards curve isomorphic to Curve25519\n */\nexport const ed25519: FpTECParams = Object.freeze({\n  type: 'TwistedEdwards',\n  p: 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDn,\n  a: -1n,\n  d: 0x52036CEE2B6FFE738CC740797779E89800700A4D4141D8AB75EB4DCA135978A3n,\n  G: {\n    isInfinity: false,\n    x: 0x216936D3CD6E53FEC0A4E231FDD6DC5C692CC7609525A7B2C9562D608F25D51An,\n    y: 0x6666666666666666666666666666666666666666666666666666666666666658n,\n  },\n  n: 0x1000000000000000000000000000000014DEF9DEA2F79CD65812631A5CF5D3EDn,\n  h: 8n,\n})\n\n/**\n * ed448 是与 Curve448 同构的 Twisted Edwards 曲线\n *\n * ed448 is a Twisted Edwards curve isomorphic to Curve448\n */\nexport const ed448: FpTECParams = Object.freeze({\n  type: 'TwistedEdwards',\n  p: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFn,\n  a: 1n,\n  d: -39081n,\n  G: {\n    isInfinity: false,\n    x: 0x4F1970C66BED0DED221D15A622BF36DA9E146570470F1767EA6DE324A3D3A46412AE1AF72AB66511433B80E18B00938E2626A82BC70CC05En,\n    y: 0x693F46716EB6BC248876203756C9C7624BEA73736CA3984087789C1E05A0C2D73AD3FF1CE67C39C4FDBD132C4ED7C8AD9808795BF230FA14n,\n  },\n  n: 0x3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7CCA23E9C44EDB49AED63690216CC2728DC58F552378C292AB5844F3n,\n  h: 4n,\n})\n\n// * Brainpool Prime Curves\n\n/**\n * 160 位素域上的 RFC 5639 曲线\n *\n * RFC 5639 curve over a 160 bit prime field\n */\nexport const bp160r1: FpWECParams = Object.freeze({\n  type: 'Weierstrass',\n  p: 0xE95E4A5F737059DC60DFC7AD95B3D8139515620Fn,\n  a: 0x340E7BE2A280EB74E2BE61BADA745D97E8F7C300n,\n  b: 0x1E589A8595423412134FAA2DBDEC95C8D8675E58n,\n  G: {\n    isInfinity: false,\n    x: 0xBED5AF16EA3F6A4F62938C4631EB5AF7BDBCDBC3n,\n    y: 0x1667CB477A1A8EC338F94741669C976316DA6321n,\n  },\n  n: 0xE95E4A5F737059DC60DF5991D45029409E60FC09n,\n  h: 1n,\n})\n\n/**\n * 192 位素域上的 RFC 5639 曲线\n *\n * RFC 5639 curve over a 192 bit prime field\n */\nexport const bp192r1: FpWECParams = Object.freeze({\n  type: 'Weierstrass',\n  p: 0xC302F41D932A36CDA7A3463093D18DB78FCE476DE1A86297n,\n  a: 0x6A91174076B1E0E19C39C031FE8685C1CAE040E5C69A28EFn,\n  b: 0x469A28EF7C28CCA3DC721D044F4496BCCA7EF4146FBF25C9n,\n  G: {\n    isInfinity: false,\n    x: 0xC0A0647EAAB6A48753B033C56CB0F0900A2F5C4853375FD6n,\n    y: 0x14B690866ABD5BB88B5F4828C1490002E6773FA2FA299B8Fn,\n  },\n  n: 0xC302F41D932A36CDA7A3462F9E9E916B5BE8F1029AC4ACC1n,\n  h: 1n,\n})\n\n/**\n * 224 位素域上的 RFC 5639 曲线\n *\n * RFC 5639 curve over a 224 bit prime field\n */\nexport const bp224r1: FpWECParams = Object.freeze({\n  type: 'Weierstrass',\n  p: 0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FFn,\n  a: 0x68A5E62CA9CE6C1C299803A6C1530B514E182AD8B0042A59CAD29F43n,\n  b: 0x2580F63CCFE44138870713B1A92369E33E2135D266DBB372386C400Bn,\n  G: {\n    isInfinity: false,\n    x: 0x0D9029AD2C7E5CF4340823B2A87DC68C9E4CE3174C1E6EFDEE12C07Dn,\n    y: 0x58AA56F772C0726F24C6B89E4ECDAC24354B9E99CAA3F6D3761402CDn,\n  },\n  n: 0xD7C134AA264366862A18302575D0FB98D116BC4B6DDEBCA3A5A7939Fn,\n  h: 1n,\n})\n\n/**\n * 256 位素域上的 RFC 5639 曲线\n *\n * RFC 5639 curve over a 256 bit prime field\n */\nexport const bp256r1: FpWECParams = Object.freeze({\n  type: 'Weierstrass',\n  p: 0xA9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377n,\n  a: 0x7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9n,\n  b: 0x26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6n,\n  G: {\n    isInfinity: false,\n    x: 0x8BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262n,\n    y: 0x547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997n,\n  },\n  n: 0xA9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7n,\n  h: 1n,\n})\n\n/**\n * 320 位素域上的 RFC 5639 曲线\n *\n * RFC 5639 curve over a 320 bit prime field\n */\nexport const bp320r1: FpWECParams = Object.freeze({\n  type: 'Weierstrass',\n  p: 0xD35E472036BC4FB7E13C785ED201E065F98FCFA6F6F40DEF4F92B9EC7893EC28FCD412B1F1B32E27n,\n  a: 0x3EE30B568FBAB0F883CCEBD46D3F3BB8A2A73513F5EB79DA66190EB085FFA9F492F375A97D860EB4n,\n  b: 0x520883949DFDBC42D3AD198640688A6FE13F41349554B49ACC31DCCD884539816F5EB4AC8FB1F1A6n,\n  G: {\n    isInfinity: false,\n    x: 0x43BD7E9AFB53D8B85289BCC48EE5BFE6F20137D10A087EB6E7871E2A10A599C710AF8D0D39E20611n,\n    y: 0x14FDD05545EC1CC8AB4093247F77275E0743FFED117182EAA9C77877AAAC6AC7D35245D1692E8EE1n,\n  },\n  n: 0xD35E472036BC4FB7E13C785ED201E065F98FCFA5B68F12A32D482EC7EE8658E98691555B44C59311n,\n  h: 1n,\n})\n\n/**\n * 384 位素域上的 RFC 5639 曲线\n *\n * RFC 5639 curve over a 384 bit prime field\n */\nexport const bp384r1: FpWECParams = Object.freeze({\n  type: 'Weierstrass',\n  p: 0x8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B412B1DA197FB71123ACD3A729901D1A71874700133107EC53n,\n  a: 0x7BC382C63D8C150C3C72080ACE05AFA0C2BEA28E4FB22787139165EFBA91F90F8AA5814A503AD4EB04A8C7DD22CE2826n,\n  b: 0x04A8C7DD22CE28268B39B55416F0447C2FB77DE107DCD2A62E880EA53EEB62D57CB4390295DBC9943AB78696FA504C11n,\n  G: {\n    isInfinity: false,\n    x: 0x1D1C64F068CF45FFA2A63A81B7C13F6B8847A3E77EF14FE3DB7FCAFE0CBD10E8E826E03436D646AAEF87B2E247D4AF1En,\n    y: 0x8ABE1D7520F9C2A45CB1EB8E95CFD55262B70B29FEEC5864E19C054FF99129280E4646217791811142820341263C5315n,\n  },\n  n: 0x8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B31F166E6CAC0425A7CF3AB6AF6B7FC3103B883202E9046565n,\n  h: 1n,\n})\n\n/**\n * 512 位素域上的 RFC 5639 曲线\n *\n * RFC 5639 curve over a 512 bit prime field\n */\nexport const bp512r1: FpWECParams = Object.freeze({\n  type: 'Weierstrass',\n  p: 0xAADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA703308717D4D9B009BC66842AECDA12AE6A380E62881FF2F2D82C68528AA6056583A48F3n,\n  a: 0x7830A3318B603B89E2327145AC234CC594CBDD8D3DF91610A83441CAEA9863BC2DED5D5AA8253AA10A2EF1C98B9AC8B57F1117A72BF2C7B9E7C1AC4D77FC94CAn,\n  b: 0x3DF91610A83441CAEA9863BC2DED5D5AA8253AA10A2EF1C98B9AC8B57F1117A72BF2C7B9E7C1AC4D77FC94CADC083E67984050B75EBAE5DD2809BD638016F723n,\n  G: {\n    isInfinity: false,\n    x: 0x81AEE4BDD82ED9645A21322E9C4C6A9385ED9F70B5D916C1B43B62EEF4D0098EFF3B1F78E2D0D48D50D1687B93B97D5F7C6D5047406A5E688B352209BCB9F822n,\n    y: 0x7DDE385D566332ECC0EABFA9CF7822FDF209F70024A57B1AA000C55B881F8111B2DCDE494A5F485E5BCA4BD88A2763AED1CA2B2FA8F0540678CD1E0F3AD80892n,\n  },\n  n: 0xAADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA70330870553E5C414CA92619418661197FAC10471DB1D381085DDADDB58796829CA90069n,\n  h: 1n,\n})\n","import { createHash } from '../core/hash'\nimport { U8, rotateL32 } from '../core/utils'\n\n// * Function\n\nconst FF = (X: number, Y: number, Z: number, j: number) => j < 16 ? X ^ Y ^ Z : (X & Y) | (X & Z) | (Y & Z)\nconst GG = (X: number, Y: number, Z: number, j: number) => j < 16 ? X ^ Y ^ Z : (X & Y) | (~X & Z)\nconst P0 = (X: number) => X ^ rotateL32(X, 9) ^ rotateL32(X, 17)\nconst P1 = (X: number) => X ^ rotateL32(X, 15) ^ rotateL32(X, 23)\n\n// * Algorithm\n\nfunction digest(message: Uint8Array) {\n  // * 初始化\n  const state = new U8(32)\n  const state_view = state.view(4)\n  state_view.set(0, 0x7380166Fn)\n  state_view.set(1, 0x4914B2B9n)\n  state_view.set(2, 0x172442D7n)\n  state_view.set(3, 0xDA8A0600n)\n  state_view.set(4, 0xA96F30BCn)\n  state_view.set(5, 0x163138AAn)\n  state_view.set(6, 0xE38DEE4Dn)\n  state_view.set(7, 0xB0FB0E4En)\n\n  const m_byte = message.length\n  const m_bit = BigInt(m_byte) << 3n\n  const block_size = 64\n  // ceil((M_BYTE + 9) / 64)\n  const block_total = (m_byte + 9 + 63) >> 6\n\n  // * 填充\n  const p = new U8(block_total * block_size)\n  p.set(message)\n\n  // appending the bit '1' to the message\n  p[m_byte] = 0x80\n\n  // appending length\n  const p_view = new DataView(p.buffer)\n  p_view.setBigUint64(p.length - 8, m_bit, false)\n\n  // * 迭代压缩\n  for (let offset = 0; offset < p.length; offset += block_size) {\n    /** B(n) = p[offset:offset + block_size] */\n\n    // 准备状态字\n    const H0 = Number(state_view.get(0))\n    const H1 = Number(state_view.get(1))\n    const H2 = Number(state_view.get(2))\n    const H3 = Number(state_view.get(3))\n    const H4 = Number(state_view.get(4))\n    const H5 = Number(state_view.get(5))\n    const H6 = Number(state_view.get(6))\n    const H7 = Number(state_view.get(7))\n    let A = H0\n    let B = H1\n    let C = H2\n    let D = H3\n    let E = H4\n    let F = H5\n    let G = H6\n    let H = H7\n\n    // 合并执行 扩展 & 压缩\n    const W = new Uint32Array(68)\n    const W1 = new Uint32Array(64)\n    for (let i = 0; i < 68; i++) {\n      // 拓展 W\n      if (i < 16) {\n        // W[i] = B(n)[i]\n        W[i] = p_view.getUint32(offset + (i << 2), false)\n      }\n      else {\n        W[i] = P1(W[i - 16] ^ W[i - 9] ^ rotateL32(W[i - 3], 15)) ^ rotateL32(W[i - 13], 7) ^ W[i - 6]\n      }\n\n      // W1 拓展 & 压缩\n      if (i > 3) {\n        // W1 拓展\n        const j = i - 4\n        // W1[j] = W[j] ^ W[j + 4]\n        W1[j] = W[j] ^ W[i]\n\n        // 压缩\n        const T = j < 16 ? 0x79CC4519 : 0x7A879D8A\n        const SS1 = rotateL32(rotateL32(A, 12) + E + rotateL32(T, j), 7)\n        const SS2 = SS1 ^ rotateL32(A, 12)\n        const TT1 = FF(A, B, C, j) + D + SS2 + W1[j]\n        const TT2 = GG(E, F, G, j) + H + SS1 + W[j]\n        D = C\n        C = rotateL32(B, 9)\n        B = A\n        A = TT1\n        H = G\n        G = rotateL32(F, 19)\n        F = E\n        E = P0(TT2)\n      }\n    }\n\n    // 更新状态字\n    state_view.set(0, BigInt(H0 ^ A))\n    state_view.set(1, BigInt(H1 ^ B))\n    state_view.set(2, BigInt(H2 ^ C))\n    state_view.set(3, BigInt(H3 ^ D))\n    state_view.set(4, BigInt(H4 ^ E))\n    state_view.set(5, BigInt(H5 ^ F))\n    state_view.set(6, BigInt(H6 ^ G))\n    state_view.set(7, BigInt(H7 ^ H))\n  }\n\n  // * 截断输出\n  return state\n}\n\nexport const sm3 = createHash(\n  digest,\n  {\n    ALGORITHM: 'SM3',\n    BLOCK_SIZE: 64,\n    DIGEST_SIZE: 32,\n    OID: '1.2.156.10197.1.401',\n  },\n)\n","import type { Hash } from '../../core/hash'\nimport type { KDF } from '../../core/kdf'\nimport type { ECKeyPair, ECPrivateKey, ECPublicKey, FpECCrypto } from './ecc'\nimport { sm2p256v1 } from '../../core/ecParams'\nimport { x963kdf } from '../../core/kdf'\nimport { genBitMask, getBIBits, joinBuffer, KitError, mod, modInverse, U8 } from '../../core/utils'\nimport { sm3 } from '../../hash/sm3'\nimport { FpECC } from './ecc'\n\nexport interface SM2DI {\n  /**\n   * SM2 可辨别标识散列\n   *\n   * SM2 Distinguishable Identity Hash\n   *\n   * @param {Uint8Array} id - 用户标识 / User Identity\n   * @param {ECPublicKey} key - 公钥 / Public Key\n   * @param {Hash} hash - 哈希算法 / Hash Algorithm (default: SM3)\n   */\n  (id: Uint8Array, key: ECPublicKey, hash?: Hash): U8\n}\n\nexport interface SM2DH {\n  /**\n   * SM2 椭圆曲线迪菲-赫尔曼, 密钥协商算法\n   *\n   * SM2 Elliptic Curve Diffie-Hellman Key Agreement Algorithm\n   *\n   * @param {ECKeyPair} KA - 己方密钥对 / Self Key Pair\n   * @param {ECPublicKey} KX - 己方临时密钥对 / Self Temporary Key Pair\n   * @param {ECPublicKey} KB - 对方公钥 / Opposite Public Key\n   * @param {ECPublicKey} KY - 对方临时公钥 / Opposite Temporary Public Key\n   * @param [Uint8Array] ZA - 发起方标识派生值 / Initiator Identity Derived Value\n   * @param [Uint8Array] ZB - 接收方标识派生值 / Receiver Identity Derived Value\n   * @returns {U8} - 密钥材料 / Keying Material\n   */\n  (KA: ECKeyPair, KX: ECKeyPair, KB: ECPublicKey, KY: ECPublicKey, ZA?: Uint8Array, ZB?: Uint8Array): U8\n}\n\nexport interface SM2DSASignature<T = bigint | Uint8Array> {\n  r: T\n  s: T\n}\nexport interface SM2DSA {\n  /**\n   * SM2 椭圆曲线数字签名\n   *\n   * SM2 Elliptic Curve Digital Signature Algorithm\n   *\n   * @param {Hash} hash - 哈希算法 / Hash Algorithm (default: SM3)\n   */\n  (hash?: Hash): {\n    /**\n     * @param {Uint8Array} Z - 标识派生值 / Identity Derived Value\n     * @param {ECPrivateKey} key - 签名方私钥 / Signer Private Key\n     * @param {Uint8Array} M - 消息 / Message\n     */\n    sign: (Z: Uint8Array, key: ECPrivateKey, M: Uint8Array) => SM2DSASignature<U8>\n    /**\n     * @param {Uint8Array} Z - 标识派生值 / Identity Derived Value\n     * @param {ECPublicKey} key - 签名方公钥 / Signer Public Key\n     * @param {Uint8Array} M - 消息 / Message\n     * @param {SM2DSASignature} S - 签名 / Signature\n     */\n    verify: (Z: Uint8Array, key: ECPublicKey, M: Uint8Array, S: SM2DSASignature) => boolean\n  }\n}\n\nexport interface SM2Encrypt {\n  /**\n   * SM2 椭圆曲线加密\n   *\n   * SM2 Elliptic Curve Encryption\n   *\n   * @param {ECPublicKey} p_key - 接收方公钥 / Receiver Public Key\n   * @param {Uint8Array} M - 明文 / Plaintext\n   */\n  (p_key: ECPublicKey, M: Uint8Array): U8\n}\nexport interface SM2Decrypt {\n  /**\n   * SM2 椭圆曲线解密\n   *\n   * SM2 Elliptic Curve Decryption\n   *\n   * @param {ECPrivateKey} s_key - 解密方私钥 / Decryptor Private Key\n   * @param {Uint8Array} C - 密文 / Ciphertext\n   */\n  (s_key: ECPrivateKey, C: Uint8Array): U8\n}\nexport interface SM2EncryptionScheme {\n  /**\n   * SM2 椭圆曲线加密方案\n   *\n   * SM2 Elliptic Curve Encryption Scheme\n   *\n   * @param {Hash} hash - 哈希算法 / Hash Algorithm (default: SM3)\n   * @param {KDF} kdf - 密钥派生函数 / Key Derivation Function (default: X9.63 KDF with SM3)\n   * @param {'c1c2c3' | 'c1c3c2'} order - 密文分段顺序 / Ciphertext Segment Order (default: 'c1c3c2')\n   */\n  (hash?: Hash, kdf?: KDF, order?: 'c1c2c3' | 'c1c3c2'): {\n    encrypt: SM2Encrypt\n    decrypt: SM2Decrypt\n  }\n}\n\nexport interface FpSM2Crypto {\n  utils: FpECCrypto['utils']\n  /**\n   * 生成 SM2 椭圆曲线密钥\n   *\n   * Generate SM2 Elliptic Curve Key\n   */\n  gen: FpECCrypto['gen']\n  /**\n   * SM2 可辨别标识散列\n   *\n   * SM2 Distinguishable Identity Hash\n   */\n  di: SM2DI\n  /**\n   * SM2 椭圆曲线加密方案\n   *\n   * SM2 Elliptic Curve Encryption Scheme\n   */\n  es: SM2EncryptionScheme\n  /**\n   * SM2 椭圆曲线迪菲-赫尔曼, 密钥协商算法\n   *\n   * SM2 Elliptic Curve Diffie-Hellman Key Agreement Algorithm\n   */\n  dh: SM2DH\n  /**\n   * SM2 椭圆曲线数字签名\n   *\n   * SM2 Elliptic Curve Digital Signature Algorithm\n   */\n  dsa: SM2DSA\n}\n\n/**\n * SM2 椭圆曲线公钥密码算法\n *\n * Public Key Cryptography Algorithm SM2 Based on Elliptic Curves\n *\n * @param {FpECParams} curve - 椭圆曲线参数 / Elliptic Curve Parameters (default: sm2p256v1)\n */\nexport function sm2(curve = sm2p256v1): FpSM2Crypto {\n  const { p, a, b, G, n, h } = curve\n  const p_bit = getBIBits(p)\n  const p_byte = (p_bit + 7) >> 3\n  const ecc = FpECC(curve)\n  const { addPoint, mulPoint } = ecc.utils\n\n  const a_buffer = U8.fromBI(a)\n  const b_buffer = U8.fromBI(b)\n  const Gx_buffer = U8.fromBI(G.x)\n  const Gy_buffer = U8.fromBI(G.y)\n\n  const gen = ecc.gen\n  const isLegalPK = ecc.utils.isLegalPK\n  const PointToU8 = ecc.utils.PointToU8\n  const U8ToPoint = ecc.utils.U8ToPoint\n  const di: SM2DI = (id: Uint8Array, key: ECPublicKey, hash: Hash = sm3) => {\n    const ent = id.length << 3\n    if (ent > 0xFFFF) {\n      throw new KitError('ID长度超过了最大限制')\n    }\n    const ENT = new Uint8Array([ent >> 8, ent & 0xFF])\n    const a = a_buffer\n    const b = b_buffer\n    const Gx = Gx_buffer\n    const Gy = Gy_buffer\n    const Ax = typeof key.Q.x === 'bigint' ? U8.fromBI(key.Q.x) : U8.from(key.Q.x)\n    const Ay = typeof key.Q.y === 'bigint' ? U8.fromBI(key.Q.y) : U8.from(key.Q.y)\n    const ZA = hash(joinBuffer(ENT, id, a, b, Gx, Gy, Ax, Ay))\n\n    return ZA\n  }\n  const w = Math.ceil(getBIBits(n) / 2) - 1\n  const w_mask = genBitMask(w)\n  const dh: SM2DH = (\n    KA: ECKeyPair,\n    KX: ECKeyPair,\n    KB: ECPublicKey,\n    KY: ECPublicKey,\n    ZA = new Uint8Array(),\n    ZB = new Uint8Array(),\n  ) => {\n    if (isLegalPK(KB) === false || isLegalPK(KY) === false) {\n      throw new KitError('非法的公钥')\n    }\n    const KA_d = typeof KA.d === 'bigint' ? KA.d : U8.from(KA.d).toBI()\n    const KX_d = typeof KX.d === 'bigint' ? KX.d : U8.from(KX.d).toBI()\n    const KX_Q_x = typeof KX.Q.x === 'bigint' ? KX.Q.x : U8.from(KX.Q.x).toBI()\n    const KY_Q_x = typeof KY.Q.x === 'bigint' ? KY.Q.x : U8.from(KY.Q.x).toBI()\n    const x1 = (1n << BigInt(w)) + (KX_Q_x & w_mask)\n    const x2 = (1n << BigInt(w)) + (KY_Q_x & w_mask)\n\n    const t = mod(KA_d + KX_d * x1, n)\n    const V = mulPoint(addPoint(KB.Q, mulPoint(KY.Q, x2)), h * t)\n    if (V.isInfinity) {\n      throw new KitError('协商失败')\n    }\n    const xu = U8.fromBI(V.x)\n    const yu = U8.fromBI(V.y)\n    return joinBuffer(xu, yu, ZA, ZB)\n  }\n  const dsa: SM2DSA = (hash: Hash = sm3) => {\n    if (hash.DIGEST_SIZE !== 32) {\n      throw new KitError('不支持的哈希算法')\n    }\n    const sign = (Z: Uint8Array, key: ECPrivateKey, M: Uint8Array) => {\n      const dA = typeof key.d === 'bigint' ? key.d : U8.from(key.d).toBI()\n      let r = 0n\n      let s = 0n\n      const e = hash(joinBuffer(Z, M)).toBI()\n      do {\n        const k = gen('private_key').d.toBI()\n        const p = mulPoint(G, k)\n        r = mod(e + p.x, n)\n        if (r === 0n || r + k === n) {\n          continue\n        }\n        const numerator = mod(k - r * dA, n)\n        const denominator = modInverse(1n + dA, n)\n        s = mod(numerator * denominator, n)\n        if (s === 0n) {\n          continue\n        }\n        break\n      } while (1)\n      const r_buffer = new U8(p_byte)\n      const s_buffer = new U8(p_byte)\n      r_buffer.set(U8.fromBI(r))\n      s_buffer.set(U8.fromBI(s))\n      return { r: r_buffer, s: s_buffer }\n    }\n    const verify = (Z: Uint8Array, key: ECPublicKey, M: Uint8Array, S: SM2DSASignature) => {\n      const PA = key.Q\n      const r = typeof S.r === 'bigint' ? S.r : U8.from(S.r).toBI()\n      const s = typeof S.s === 'bigint' ? S.s : U8.from(S.s).toBI()\n      if (r <= 0n || r >= n || s <= 0n || s >= n) {\n        return false\n      }\n      const e = hash(joinBuffer(Z, M)).toBI()\n      const t = mod(r + s, n)\n      if (t === 0n) {\n        return false\n      }\n      const p = addPoint(\n        mulPoint(G, s),\n        mulPoint(PA, t),\n      )\n      const R = mod(e + p.x, n)\n      return R === r\n    }\n    return { sign, verify }\n  }\n  const es: SM2EncryptionScheme = (hash = sm3, kdf = x963kdf(sm3), order = 'c1c3c2') => {\n    const encrypt: SM2Encrypt = (p_key: ECPublicKey, M: Uint8Array) => {\n      const C1 = gen()\n      const S = mulPoint(p_key.Q, h)\n      if (S.isInfinity) {\n        throw new KitError('加密失败')\n      }\n      const { x, y } = mulPoint(p_key.Q, C1.d)\n      const x2 = U8.fromBI(x)\n      const y2 = U8.fromBI(y)\n      const ikm = joinBuffer(x2, y2)\n      const C2 = kdf(M.length, ikm)\n      C2.forEach((_, i) => C2[i] ^= M[i])\n      const C3 = hash(joinBuffer(x2, M, y2))\n      if (order === 'c1c2c3') {\n        return joinBuffer(PointToU8(C1.Q), C2, C3)\n      }\n      else {\n        return joinBuffer(PointToU8(C1.Q), C3, C2)\n      }\n    }\n    const decrypt: SM2Decrypt = (s_key: ECPrivateKey, C: Uint8Array) => {\n      const C1_Length = (p_byte << 1) + 1\n      const C3_Length = hash.DIGEST_SIZE\n      const C2_Length = C.length - C1_Length - C3_Length\n      const C1 = U8ToPoint(C.subarray(0, C1_Length))\n      const S = mulPoint(C1, h)\n      if (S.isInfinity) {\n        throw new KitError('解密失败')\n      }\n      const { x, y } = mulPoint(C1, s_key.d)\n      const x2 = U8.fromBI(x)\n      const y2 = U8.fromBI(y)\n      const ikm = joinBuffer(x2, y2)\n      const t = kdf(C2_Length, ikm)\n      let C2: Uint8Array\n      let C3: Uint8Array\n      if (order === 'c1c2c3') {\n        C2 = C.subarray(C1_Length, C1_Length + C2_Length)\n        C3 = C.subarray(C1_Length + C2_Length)\n      }\n      else {\n        C3 = C.subarray(C1_Length, C1_Length + C3_Length)\n        C2 = C.subarray(C1_Length + C3_Length)\n      }\n      const M = t.map((_, i) => t[i] ^ C2[i])\n      const u = hash(joinBuffer(x2, M, y2))\n      u.forEach((_, i) => {\n        if (u[i] !== C3[i]) {\n          throw new KitError('解密失败')\n        }\n      })\n      return M\n    }\n    return { encrypt, decrypt }\n  }\n\n  return {\n    utils: ecc.utils,\n    gen,\n    di,\n    es,\n    dh,\n    dsa,\n  }\n}\n","import { Fp } from '../../core/ec'\nimport { curve448, curve25519 } from '../../core/ecParams'\nimport { genRandomBI, getBIBits, KitError, U8 } from '../../core/utils'\n\n// * Interfaces\n\nexport interface X25519PrivateKey<T = bigint | Uint8Array> {\n  /** 私钥 / Private Key */\n  d: T\n}\nexport interface X25519PublicKey<T = bigint | Uint8Array> {\n  /** 公钥 / Public Key */\n  Q: T\n}\nexport interface X25519KeyPair<T = bigint | Uint8Array> extends X25519PrivateKey<T>, X25519PublicKey<T> {\n}\n\nexport interface X448PrivateKey<T = bigint | Uint8Array> extends X25519PrivateKey<T> {\n}\nexport interface X448PublicKey<T = bigint | Uint8Array> extends X25519PublicKey<T> {\n}\nexport interface X448KeyPair<T = bigint | Uint8Array> extends X25519KeyPair<T> {\n}\n\nexport interface X25519 {\n  /**\n   * 生成 x25519 椭圆曲线密钥\n   *\n   * Generate x25519 Elliptic Curve Key\n   */\n  gen: {\n    /** 生成密钥对 / Generate Key Pair */\n    (type?: 'key_pair'): X25519KeyPair<U8>\n    /** 生成私钥 / Generate Private Key */\n    (type: 'private_key'): X25519PrivateKey<U8>\n    /** 生成公钥 / Generate Public Key */\n    (type: 'public_key', s_key: X25519PrivateKey): X25519KeyPair<U8>\n  }\n  /**\n   * x25519 椭圆曲线密钥协商算法\n   *\n   * x25519 Elliptic Curve Diffie-Hellman Key Agreement Algorithm\n   */\n  dh: {\n    /**\n     * @param {X25519PrivateKey} s_key - 己方私钥 / Self Private Key\n     * @param {X25519PublicKey} p_key - 对方公钥 / Counterparty Public Key\n     */\n    (s_key: X25519PrivateKey, p_key: X25519PublicKey): U8\n  }\n}\n\nexport interface X448 {\n  /**\n   * 生成 x448 椭圆曲线密钥\n   *\n   * Generate x448 Elliptic Curve Key\n   */\n  gen: {\n    /** 生成密钥对 / Generate Key Pair */\n    (type?: 'key_pair'): X448KeyPair<U8>\n    /** 生成私钥 / Generate Private Key */\n    (type: 'private_key'): X448PrivateKey<U8>\n    /** 生成公钥 / Generate Public Key */\n    (type: 'public_key', s_key: X448PrivateKey): X448KeyPair<U8>\n  }\n  /**\n   * x448 椭圆曲线密钥协商算法\n   *\n   * x448 Elliptic Curve Diffie-Hellman Key Agreement Algorithm\n   */\n  dh: {\n    /**\n     * @param {X448PrivateKey} s_key - 己方私钥 / Self Private Key\n     * @param {X448PublicKey} p_key - 对方公钥 / Counterparty Public Key\n     */\n    (s_key: X448PrivateKey, p_key: X448PublicKey): U8\n  }\n}\n\n// * X25519 & X448 Algorithms\n\nfunction cSwap(swap: bigint, x_2: bigint, x_3: bigint) {\n  const mask = -swap\n  const dummy = mask & (x_2 ^ x_3)\n  x_2 ^= dummy\n  x_3 ^= dummy\n  return [x_2, x_3]\n}\n/** 蒙哥马利梯子算法 / Montgomery Ladder Algorithm */\nfunction ladder(k: bigint, u: bigint, p: bigint, a24: bigint, bit: number) {\n  const { plus, subtract, pow, multiply } = Fp(p)\n  let x_2 = 1n\n  let z_2 = 0n\n  let x_3 = u\n  let z_3 = 1n\n  let swap = 0n\n  const bit_array = k.toString(2).padStart(bit, '0').split('').map(BigInt)\n  for (const bit of bit_array) {\n    swap ^= bit;\n    [x_2, x_3] = cSwap(swap, x_2, x_3);\n    [z_2, z_3] = cSwap(swap, z_2, z_3)\n    swap = bit\n\n    const A = plus(x_2, z_2)\n    const AA = pow(A, 2n)\n    const B = subtract(x_2, z_2)\n    const BB = pow(B, 2n)\n    const E = subtract(AA, BB)\n    const C = plus(x_3, z_3)\n    const D = subtract(x_3, z_3)\n    const DA = multiply(D, A)\n    const CB = multiply(C, B)\n    x_3 = pow(plus(DA, CB), 2n)\n    z_3 = multiply(u, pow(subtract(DA, CB), 2n))\n    x_2 = multiply(AA, BB)\n    z_2 = multiply(E, plus(AA, multiply(E, a24)))\n  }\n  [x_2, x_3] = cSwap(swap, x_2, x_3);\n  [z_2, z_3] = cSwap(swap, z_2, z_3)\n  return multiply(x_2, pow(z_2, p - 2n))\n}\n\n/** x25519 椭圆曲线算法 / Elliptic Curve Algorithm */\nexport const x25519: X25519 = (() => {\n  const { p, G, n } = curve25519\n  const p_bit = getBIBits(p)\n  const p_byte = (p_bit + 7) >> 3\n\n  const a24 = 121665n\n  const Gx = typeof G.x === 'bigint' ? G.x : U8.from(G.x).toBI()\n\n  function clamp(d: bigint) {\n    d = d & 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8n\n    d = d | 0x4000000000000000000000000000000000000000000000000000000000000000n\n    return d\n  }\n  function gen(type?: 'key_pair'): X25519KeyPair<U8>\n  function gen(type: 'private_key'): X25519PrivateKey<U8>\n  function gen(type: 'public_key', s_key: X25519PrivateKey): X25519KeyPair<U8>\n  function gen(\n    type: 'key_pair' | 'private_key' | 'public_key' = 'key_pair',\n    s_key?: X25519PrivateKey,\n  ) {\n    if (type === 'key_pair') {\n      // private key\n      const t = genRandomBI(n, p_byte)\n      const d_buffer = t.buffer\n      const d = t.result\n      // public key\n      const x = ladder(clamp(d), Gx, p, a24, 255)\n      const Q = U8.fromBI(x, p_byte)\n      return { Q, d: d_buffer }\n    }\n    else if (type === 'private_key') {\n      return { d: genRandomBI(n, p_byte).buffer }\n    }\n    else if (type === 'public_key') {\n      const d_buffer = typeof s_key!.d === 'bigint' ? U8.fromBI(s_key!.d) : U8.from(s_key!.d)\n      const d = typeof s_key!.d === 'bigint' ? s_key!.d : d_buffer.toBI()\n      if (d === 0n) {\n        throw new KitError('Invalid private key')\n      }\n      const x = ladder(clamp(d), Gx, p, a24, 255)\n      const Q = U8.fromBI(x, p_byte)\n      return { Q, d: d_buffer }\n    }\n  }\n  const ecdh: X25519['dh'] = (s_key: X25519PrivateKey, p_key: X25519PublicKey): U8 => {\n    const u = typeof p_key.Q === 'bigint' ? p_key.Q : U8.from(p_key.Q).toBI()\n    const k = typeof s_key.d === 'bigint' ? s_key.d : U8.from(s_key.d).toBI()\n    const x = ladder(clamp(k), u, p, a24, 255)\n    return U8.fromBI(x, p_byte)\n  }\n  return { gen, dh: ecdh }\n})()\n\n/** x448 椭圆曲线算法 / Elliptic Curve Algorithm */\nexport const x448: X448 = (() => {\n  const { p, G, n } = curve448\n  const p_bit = getBIBits(p)\n  const p_byte = (p_bit + 7) >> 3\n\n  const a24 = 39081n\n  const Gx = typeof G.x === 'bigint' ? G.x : U8.from(G.x).toBI()\n\n  function clamp(d: bigint) {\n    d = d & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCn\n    d = d | 0x8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000n\n    return d\n  }\n  function gen(type?: 'key_pair'): X448KeyPair<U8>\n  function gen(type: 'private_key'): X448PrivateKey<U8>\n  function gen(type: 'public_key', s_key: X448PrivateKey): X448KeyPair<U8>\n  function gen(\n    type: 'key_pair' | 'private_key' | 'public_key' = 'key_pair',\n    s_key?: X448PrivateKey,\n  ) {\n    if (type === 'key_pair') {\n      // private key\n      const t = genRandomBI(n, p_byte)\n      const d_buffer = t.buffer\n      const d = t.result\n      // public key\n      const x = ladder(clamp(d), Gx, p, a24, 448)\n      const Q = U8.fromBI(x, p_byte)\n      return { Q, d: d_buffer }\n    }\n    else if (type === 'private_key') {\n      return { d: genRandomBI(n, p_byte).buffer }\n    }\n    else if (type === 'public_key') {\n      const d_buffer = typeof s_key!.d === 'bigint' ? U8.fromBI(s_key!.d) : U8.from(s_key!.d)\n      const d = typeof s_key!.d === 'bigint' ? s_key!.d : d_buffer.toBI()\n      if (d === 0n) {\n        throw new KitError('Invalid private key')\n      }\n      const x = ladder(clamp(d), Gx, p, a24, 448)\n      const Q = U8.fromBI(x, p_byte)\n      return { Q, d: d_buffer }\n    }\n  }\n  const ecdh: X448['dh'] = (s_key: X448PrivateKey, p_key: X448PublicKey): U8 => {\n    const u = typeof p_key.Q === 'bigint' ? p_key.Q : U8.from(p_key.Q).toBI()\n    const k = typeof s_key.d === 'bigint' ? s_key.d : U8.from(s_key.d).toBI()\n    const x = ladder(clamp(k), u, p, a24, 448)\n    return U8.fromBI(x, p_byte)\n  }\n  return { gen, dh: ecdh }\n})()\n","import { createCipher } from '../../core/cipher'\nimport { KitError, U8 } from '../../core/utils'\n\n// * Functions\n\nfunction KSA(K: Uint8Array) {\n  const SBox = new Uint8Array(256)\n  SBox.forEach((_, i) => SBox[i] = i)\n\n  let j = 0\n  for (let i = 0; i < 256; i++) {\n    j = (j + SBox[i] + K[i % K.byteLength]) % 256;\n    [SBox[i], SBox[j]] = [SBox[j], SBox[i]]\n  }\n\n  return SBox\n}\n\n// * RC4 Algorithm\n\nfunction cipher(M: Uint8Array, SBox: Uint8Array) {\n  SBox = SBox.slice(0)\n  const result = new U8(M.byteLength)\n  let i = 0\n  let j = 0\n  M.forEach((_, k) => {\n    i = (i + 1) % 256\n    j = (j + SBox[i]) % 256;\n    [SBox[i], SBox[j]] = [SBox[j], SBox[i]]\n    result[k] = M[k] ^ SBox[(SBox[i] + SBox[j]) % 256]\n  })\n  return result\n}\n\nfunction _arc4(K: Uint8Array) {\n  if (K.byteLength < 5 || K.byteLength > 256) {\n    throw new KitError(`RC4 key must be between 5 and 256 byte`)\n  }\n  const SBox = KSA(K)\n  return {\n    encrypt: (M: Uint8Array) => cipher(M, SBox),\n    decrypt: (M: Uint8Array) => cipher(M, SBox),\n  }\n}\n\n/**\n * ARC4 流密码 / stream cipher\n */\nexport const arc4 = createCipher(\n  _arc4,\n  {\n    ALGORITHM: `ARC4`,\n    KEY_SIZE: 16,\n    MIN_KEY_SIZE: 5,\n    MAX_KEY_SIZE: 256,\n  },\n)\n","import { createCipher } from '../../core/cipher'\nimport { KitError, resizeBuffer, rotateL32, U8 } from '../../core/utils'\n\n// * Constants\n\nconst A = new Uint32Array([0x4D34D34D, 0xD34D34D3, 0x34D34D34, 0x4D34D34D, 0xD34D34D3, 0x34D34D34, 0x4D34D34D, 0xD34D34D3])\n\n// * Rabbit Algorithm\n\nfunction _rabbit(key: Uint8Array, iv: Uint8Array) {\n  if (key.length !== 16) {\n    throw new KitError('Rabbit key must be 16 byte')\n  }\n\n  // 内部状态\n  let carray = 0\n  const X = new Uint8Array(32)\n  const C = new Uint8Array(32)\n  const X32 = new Uint32Array(X.buffer)\n  const C32 = new Uint32Array(C.buffer)\n  const nextState = (skipExtract: boolean = false): Uint8Array => {\n    // Counter System\n    for (let i = 0; i < 8; i++) {\n      const T = C32[i] + A[i] + carray\n      C32[i] = T | 0\n      carray = T > 0xFFFFFFFF ? 1 : 0\n    }\n\n    // G\n    const G = new Uint32Array(8)\n    for (let i = 0; i < 8; i++) {\n      const T = (BigInt(X32[i]) + BigInt(C32[i])) & 0xFFFFFFFFn\n      const S = T * T\n      G[i] = Number((S ^ (S >> 32n)) & 0xFFFFFFFFn)\n    }\n\n    // Next State\n    X32[0] = 0xFFFFFFFF & (G[0] + rotateL32(G[7], 16) + rotateL32(G[6], 16))\n    X32[1] = 0xFFFFFFFF & (G[1] + rotateL32(G[0], 8) + G[7])\n    X32[2] = 0xFFFFFFFF & (G[2] + rotateL32(G[1], 16) + rotateL32(G[0], 16))\n    X32[3] = 0xFFFFFFFF & (G[3] + rotateL32(G[2], 8) + G[1])\n    X32[4] = 0xFFFFFFFF & (G[4] + rotateL32(G[3], 16) + rotateL32(G[2], 16))\n    X32[5] = 0xFFFFFFFF & (G[5] + rotateL32(G[4], 8) + G[3])\n    X32[6] = 0xFFFFFFFF & (G[6] + rotateL32(G[5], 16) + rotateL32(G[4], 16))\n    X32[7] = 0xFFFFFFFF & (G[7] + rotateL32(G[6], 8) + G[5])\n\n    if (skipExtract) {\n      return new Uint8Array()\n    }\n\n    // Extract Output\n    const S = new Uint32Array(4)\n    S[0] = X32[0] ^ (X32[5] >>> 16) ^ (X32[3] << 16)\n    S[1] = X32[2] ^ (X32[7] >>> 16) ^ (X32[5] << 16)\n    S[2] = X32[4] ^ (X32[1] >>> 16) ^ (X32[7] << 16)\n    S[3] = X32[6] ^ (X32[3] >>> 16) ^ (X32[1] << 16)\n    return new Uint8Array(S.buffer)\n  }\n\n  // 初始化\n  (() => {\n    // 配置密钥\n    const K16 = new Uint16Array(key.buffer)\n    for (let i = 0; i < 8; i++) {\n      if ((i & 1) === 0) {\n        const KH = K16[(i + 1) % 8]\n        const KL = K16[i]\n        X32[i] = (KH << 16) | KL\n        const CH = K16[(i + 4) % 8]\n        const CL = K16[(i + 5) % 8]\n        C32[i] = (CH << 16) | CL\n      }\n      else {\n        const KH = K16[(i + 5) % 8]\n        const KL = K16[(i + 4) % 8]\n        X32[i] = (KH << 16) | KL\n        const CH = K16[i]\n        const CL = K16[(i + 1) % 8]\n        C32[i] = (CH << 16) | CL\n      }\n    }\n    for (let i = 0; i < 4; i++) {\n      nextState(true)\n    }\n    for (let i = 0; i < 8; i++) {\n      C32[i] ^= X32[(i + 4) % 8]\n    }\n\n    // 配置 IV\n    if (iv.length === 8) {\n      const iv32 = new Uint32Array(iv.buffer)\n      const iv16 = new Uint16Array(iv.buffer)\n      C32[0] ^= iv32[0]\n      C32[1] ^= (iv16[3] << 16) | iv16[1]\n      C32[2] ^= iv32[1]\n      C32[3] ^= (iv16[2] << 16) | iv16[0]\n      C32[4] ^= iv32[0]\n      C32[5] ^= (iv16[3] << 16) | iv16[1]\n      C32[6] ^= iv32[1]\n      C32[7] ^= (iv16[2] << 16) | iv16[0]\n      for (let i = 0; i < 4; i++) {\n        nextState(true)\n      }\n    }\n    else if (iv.length !== 0 && iv.length !== 8) {\n      throw new KitError('Rabbit iv must be 8 byte')\n    }\n  })()\n\n  // 密钥流\n  let S = nextState()\n  let current = 1\n  const squeeze = (count: number) => {\n    if (current >= count) {\n      return S\n    }\n    S = resizeBuffer(S, count << 4)\n    while (current < count) {\n      S.set(nextState(), current << 4)\n      current++\n    }\n    return S\n  }\n  const cipher = (M: Uint8Array) => {\n    const BLOCK_TOTAL = Math.ceil(M.length >> 4) || 1\n    S = squeeze(BLOCK_TOTAL)\n    return new U8(M.map((_, i) => _ ^ S[i]))\n  }\n\n  return {\n    encrypt: (M: Uint8Array) => cipher(M),\n    decrypt: (C: Uint8Array) => cipher(C),\n  }\n}\n\n/**\n * Rabbit 流密码 / stream cipher\n */\nexport const rabbit = createCipher(\n  _rabbit,\n  {\n    ALGORITHM: 'rabbit',\n    KEY_SIZE: 16,\n    MIN_KEY_SIZE: 16,\n    MAX_KEY_SIZE: 16,\n    IV_SIZE: 8,\n    MIN_IV_SIZE: 0,\n    MAX_IV_SIZE: 8,\n  },\n)\n","import { createCipher } from '../../core/cipher'\nimport { Counter, KitError, resizeBuffer, rotateL32, U8, u32 } from '../../core/utils'\n\n// * Functions\n\n// eslint-disable-next-line unused-imports/no-unused-vars\nfunction QR(a: number, b: number, c: number, d: number) {\n  b ^= rotateL32(a + d,  7)\n  c ^= rotateL32(b + a,  9)\n  d ^= rotateL32(c + b, 13)\n  a ^= rotateL32(d + c, 18)\n  return [a, b, c, d]\n}\n\nfunction hash(x: Uint8Array, rounds: number = 20) {\n  // to word\n  const X = u32(x)\n  const W = X.slice(0)\n  // main loop\n  for (let i = 0; i < rounds; i += 2) {\n    // ODD Rounds\n    // [W[0],  W[4],  W[8],  W[12]] = QR(W[0],  W[4],  W[8],  W[12]);\n    // [W[5],  W[9],  W[13], W[1]]  = QR(W[5],  W[9],  W[13], W[1]);\n    // [W[10], W[14], W[2],  W[6]]  = QR(W[10], W[14], W[2],  W[6]);\n    // [W[15], W[3],  W[7],  W[11]] = QR(W[15], W[3],  W[7],  W[11]);\n    // EVEN Rounds\n    // [W[0],  W[1],  W[2],  W[3]]  = QR(W[0],  W[1],  W[2],  W[3]);\n    // [W[5],  W[6],  W[7],  W[4]]  = QR(W[5],  W[6],  W[7],  W[4]);\n    // [W[10], W[11], W[8],  W[9]]  = QR(W[10], W[11], W[8],  W[9]);\n    // [W[15], W[12], W[13], W[14]] = QR(W[15], W[12], W[13], W[14])\n    W[4]  ^= rotateL32(W[0]  + W[12],  7)\n    W[8]  ^= rotateL32(W[4]  + W[0],   9)\n    W[12] ^= rotateL32(W[8]  + W[4],  13)\n    W[0]  ^= rotateL32(W[12] + W[8],  18)\n    W[9]  ^= rotateL32(W[5]  + W[1],   7)\n    W[13] ^= rotateL32(W[9]  + W[5],   9)\n    W[1]  ^= rotateL32(W[13] + W[9],  13)\n    W[5]  ^= rotateL32(W[1]  + W[13], 18)\n    W[14] ^= rotateL32(W[10] + W[6],   7)\n    W[2]  ^= rotateL32(W[14] + W[10],  9)\n    W[6]  ^= rotateL32(W[2]  + W[14], 13)\n    W[10] ^= rotateL32(W[6]  + W[2],  18)\n    W[3]  ^= rotateL32(W[15] + W[11],  7)\n    W[7]  ^= rotateL32(W[3]  + W[15],  9)\n    W[11] ^= rotateL32(W[7]  + W[3],  13)\n    W[15] ^= rotateL32(W[11] + W[7],  18)\n    W[1]  ^= rotateL32(W[0]  + W[3],   7)\n    W[2]  ^= rotateL32(W[1]  + W[0],   9)\n    W[3]  ^= rotateL32(W[2]  + W[1],  13)\n    W[0]  ^= rotateL32(W[3]  + W[2],  18)\n    W[6]  ^= rotateL32(W[5]  + W[4],   7)\n    W[7]  ^= rotateL32(W[6]  + W[5],   9)\n    W[4]  ^= rotateL32(W[7]  + W[6],  13)\n    W[5]  ^= rotateL32(W[4]  + W[7],  18)\n    W[11] ^= rotateL32(W[10] + W[9],   7)\n    W[8]  ^= rotateL32(W[11] + W[10],  9)\n    W[9]  ^= rotateL32(W[8]  + W[11], 13)\n    W[10] ^= rotateL32(W[9]  + W[8],  18)\n    W[12] ^= rotateL32(W[15] + W[14],  7)\n    W[13] ^= rotateL32(W[12] + W[15],  9)\n    W[14] ^= rotateL32(W[13] + W[12], 13)\n    W[15] ^= rotateL32(W[14] + W[13], 18)\n  }\n  // mix\n  for (let i = 0; i < 16; i++) {\n    W[i] += X[i]\n  }\n  return new U8(W.buffer)\n}\n\nfunction expand(K: Uint8Array, iv: Uint8Array) {\n  if (iv.byteLength !== 8) {\n    throw new KitError(`Salsa20 iv must be 8 byte`)\n  }\n\n  const S = new Counter(64)\n  const S32 = u32(S)\n  const K32 = u32(K)\n  const N32 = u32(iv)\n  switch (K.byteLength) {\n    case 16: // use tau\n      S32[0] = 0x61707865\n      S32[1] = K32[0]\n      S32[2] = K32[1]\n      S32[3] = K32[2]\n      S32[4] = K32[3]\n      S32[5] = 0x3120646E\n      S32[6] = N32[0]\n      S32[7] = N32[1]\n      S32[10] = 0x79622D36\n      S32[11] = K32[0]\n      S32[12] = K32[1]\n      S32[13] = K32[2]\n      S32[14] = K32[3]\n      S32[15] = 0x6B206574\n      break\n    case 32: // use sigma\n      S32[0] = 0x61707865\n      S32[1] = K32[0]\n      S32[2] = K32[1]\n      S32[3] = K32[2]\n      S32[4] = K32[3]\n      S32[5] = 0x3320646E\n      S32[6] = N32[0]\n      S32[7] = N32[1]\n      S32[10] = 0x79622D32\n      S32[11] = K32[4]\n      S32[12] = K32[5]\n      S32[13] = K32[6]\n      S32[14] = K32[7]\n      S32[15] = 0x6B206574\n      break\n    default:\n      throw new KitError(`Salsa20 key must be 16 or 32 byte`)\n  }\n\n  return S\n}\n\n// * Salsa20 Algorithm\n\nfunction _salsa20(key: Uint8Array, iv: Uint8Array) {\n  /** Counter Block */\n  const E = expand(key, iv)\n  /** Presudo Random Byte Stream */\n  let S = hash(E)\n  let current = 1\n\n  const cipher = (M: Uint8Array) => {\n    const R = U8.from(M)\n    const BLOCK_TOTAL = (R.length >> 6) + 1\n    if (current > BLOCK_TOTAL) {\n      return R.map((byte, i) => byte ^ S[i])\n    }\n    // Squeeze\n    S = resizeBuffer(S, BLOCK_TOTAL << 6)\n    while (BLOCK_TOTAL > current) {\n      E.inc(32, 8, true)\n      S.set(hash(E), current << 6)\n      current++\n    }\n    return R.map((byte, i) => byte ^ S[i])\n  }\n  return {\n    encrypt: (M: Uint8Array) => cipher(M),\n    decrypt: (C: Uint8Array) => cipher(C),\n  }\n}\n\n/**\n * Salsa20 流密码 / Stream Cipher\n */\nexport const salsa20 = createCipher(\n  _salsa20,\n  {\n    ALGORITHM: 'Salsa20',\n    KEY_SIZE: 32,\n    MIN_KEY_SIZE: 16,\n    MAX_KEY_SIZE: 32,\n    IV_SIZE: 8,\n    MIN_IV_SIZE: 8,\n    MAX_IV_SIZE: 8,\n  },\n)\n","import { KitError, rotateL32, U8, wrap } from '../../core/utils'\n\n// * Constants\n\nconst S0 = new Uint8Array([0x3E, 0x72, 0x5B, 0x47, 0xCA, 0xE0, 0x00, 0x33, 0x04, 0xD1, 0x54, 0x98, 0x09, 0xB9, 0x6D, 0xCB, 0x7B, 0x1B, 0xF9, 0x32, 0xAF, 0x9D, 0x6A, 0xA5, 0xB8, 0x2D, 0xFC, 0x1D, 0x08, 0x53, 0x03, 0x90, 0x4D, 0x4E, 0x84, 0x99, 0xE4, 0xCE, 0xD9, 0x91, 0xDD, 0xB6, 0x85, 0x48, 0x8B, 0x29, 0x6E, 0xAC, 0xCD, 0xC1, 0xF8, 0x1E, 0x73, 0x43, 0x69, 0xC6, 0xB5, 0xBD, 0xFD, 0x39, 0x63, 0x20, 0xD4, 0x38, 0x76, 0x7D, 0xB2, 0xA7, 0xCF, 0xED, 0x57, 0xC5, 0xF3, 0x2C, 0xBB, 0x14, 0x21, 0x06, 0x55, 0x9B, 0xE3, 0xEF, 0x5E, 0x31, 0x4F, 0x7F, 0x5A, 0xA4, 0x0D, 0x82, 0x51, 0x49, 0x5F, 0xBA, 0x58, 0x1C, 0x4A, 0x16, 0xD5, 0x17, 0xA8, 0x92, 0x24, 0x1F, 0x8C, 0xFF, 0xD8, 0xAE, 0x2E, 0x01, 0xD3, 0xAD, 0x3B, 0x4B, 0xDA, 0x46, 0xEB, 0xC9, 0xDE, 0x9A, 0x8F, 0x87, 0xD7, 0x3A, 0x80, 0x6F, 0x2F, 0xC8, 0xB1, 0xB4, 0x37, 0xF7, 0x0A, 0x22, 0x13, 0x28, 0x7C, 0xCC, 0x3C, 0x89, 0xC7, 0xC3, 0x96, 0x56, 0x07, 0xBF, 0x7E, 0xF0, 0x0B, 0x2B, 0x97, 0x52, 0x35, 0x41, 0x79, 0x61, 0xA6, 0x4C, 0x10, 0xFE, 0xBC, 0x26, 0x95, 0x88, 0x8A, 0xB0, 0xA3, 0xFB, 0xC0, 0x18, 0x94, 0xF2, 0xE1, 0xE5, 0xE9, 0x5D, 0xD0, 0xDC, 0x11, 0x66, 0x64, 0x5C, 0xEC, 0x59, 0x42, 0x75, 0x12, 0xF5, 0x74, 0x9C, 0xAA, 0x23, 0x0E, 0x86, 0xAB, 0xBE, 0x2A, 0x02, 0xE7, 0x67, 0xE6, 0x44, 0xA2, 0x6C, 0xC2, 0x93, 0x9F, 0xF1, 0xF6, 0xFA, 0x36, 0xD2, 0x50, 0x68, 0x9E, 0x62, 0x71, 0x15, 0x3D, 0xD6, 0x40, 0xC4, 0xE2, 0x0F, 0x8E, 0x83, 0x77, 0x6B, 0x25, 0x05, 0x3F, 0x0C, 0x30, 0xEA, 0x70, 0xB7, 0xA1, 0xE8, 0xA9, 0x65, 0x8D, 0x27, 0x1A, 0xDB, 0x81, 0xB3, 0xA0, 0xF4, 0x45, 0x7A, 0x19, 0xDF, 0xEE, 0x78, 0x34, 0x60])\nconst S1 = new Uint8Array([0x55, 0xC2, 0x63, 0x71, 0x3B, 0xC8, 0x47, 0x86, 0x9F, 0x3C, 0xDA, 0x5B, 0x29, 0xAA, 0xFD, 0x77, 0x8C, 0xC5, 0x94, 0x0C, 0xA6, 0x1A, 0x13, 0x00, 0xE3, 0xA8, 0x16, 0x72, 0x40, 0xF9, 0xF8, 0x42, 0x44, 0x26, 0x68, 0x96, 0x81, 0xD9, 0x45, 0x3E, 0x10, 0x76, 0xC6, 0xA7, 0x8B, 0x39, 0x43, 0xE1, 0x3A, 0xB5, 0x56, 0x2A, 0xC0, 0x6D, 0xB3, 0x05, 0x22, 0x66, 0xBF, 0xDC, 0x0B, 0xFA, 0x62, 0x48, 0xDD, 0x20, 0x11, 0x06, 0x36, 0xC9, 0xC1, 0xCF, 0xF6, 0x27, 0x52, 0xBB, 0x69, 0xF5, 0xD4, 0x87, 0x7F, 0x84, 0x4C, 0xD2, 0x9C, 0x57, 0xA4, 0xBC, 0x4F, 0x9A, 0xDF, 0xFE, 0xD6, 0x8D, 0x7A, 0xEB, 0x2B, 0x53, 0xD8, 0x5C, 0xA1, 0x14, 0x17, 0xFB, 0x23, 0xD5, 0x7D, 0x30, 0x67, 0x73, 0x08, 0x09, 0xEE, 0xB7, 0x70, 0x3F, 0x61, 0xB2, 0x19, 0x8E, 0x4E, 0xE5, 0x4B, 0x93, 0x8F, 0x5D, 0xDB, 0xA9, 0xAD, 0xF1, 0xAE, 0x2E, 0xCB, 0x0D, 0xFC, 0xF4, 0x2D, 0x46, 0x6E, 0x1D, 0x97, 0xE8, 0xD1, 0xE9, 0x4D, 0x37, 0xA5, 0x75, 0x5E, 0x83, 0x9E, 0xAB, 0x82, 0x9D, 0xB9, 0x1C, 0xE0, 0xCD, 0x49, 0x89, 0x01, 0xB6, 0xBD, 0x58, 0x24, 0xA2, 0x5F, 0x38, 0x78, 0x99, 0x15, 0x90, 0x50, 0xB8, 0x95, 0xE4, 0xD0, 0x91, 0xC7, 0xCE, 0xED, 0x0F, 0xB4, 0x6F, 0xA0, 0xCC, 0xF0, 0x02, 0x4A, 0x79, 0xC3, 0xDE, 0xA3, 0xEF, 0xEA, 0x51, 0xE6, 0x6B, 0x18, 0xEC, 0x1B, 0x2C, 0x80, 0xF7, 0x74, 0xE7, 0xFF, 0x21, 0x5A, 0x6A, 0x54, 0x1E, 0x41, 0x31, 0x92, 0x35, 0xC4, 0x33, 0x07, 0x0A, 0xBA, 0x7E, 0x0E, 0x34, 0x88, 0xB1, 0x98, 0x7C, 0xF3, 0x3D, 0x60, 0x6C, 0x7B, 0xCA, 0xD3, 0x1F, 0x32, 0x65, 0x04, 0x28, 0x64, 0xBE, 0x85, 0x9B, 0x2F, 0x59, 0x8A, 0xD7, 0xB0, 0x25, 0xAC, 0xAF, 0x12, 0x03, 0xE2, 0xF2])\nconst D = new Uint16Array([0x44D7, 0x26BC, 0x626B, 0x135E, 0x5789, 0x35E2, 0x7135, 0x09AF, 0x4D78, 0x2F13, 0x6BC4, 0x1AF1, 0x5E26, 0x3C4D, 0x789A, 0x47AC])\n\n// * Functions\n\nfunction mulPow2n(v: number, n: number) {\n  return ((v << n | v >>> (31 - n)) & 0x7FFFFFFF)\n}\nfunction addMod31(a: number, b: number) {\n  const c = a + b\n  return (c & 0x7FFFFFFF) + (c >>> 31)\n}\n\nconst L1 = (X: number) => X ^ rotateL32(X, 2) ^ rotateL32(X, 10) ^ rotateL32(X, 18) ^ rotateL32(X, 24)\nconst L2 = (X: number) => X ^ rotateL32(X, 8) ^ rotateL32(X, 14) ^ rotateL32(X, 22) ^ rotateL32(X, 30)\nfunction BR(S: Uint32Array, X: Uint32Array) {\n  X[0] = (S[15] & 0x7FFF8000) << 1 | S[14] & 0xFFFF\n  X[1] = (S[11] & 0x0000FFFF) << 16 | S[9] >>> 15\n  X[2] = (S[7] & 0x0000FFFF) << 16 | S[5] >>> 15\n  X[3] = (S[2] & 0x0000FFFF) << 16 | S[0] >>> 15\n}\nfunction F(X0: number, X1: number, X2: number, R: Uint32Array) {\n  const W = (X0 ^ R[0]) + R[1]\n  const W1 = (R[0] + X1) & 0xFFFFFFFF\n  const W2 = R[1] ^ X2\n  const r0 = L1((W1 << 16) | (W2 >>> 16))\n  R[0] = S0[r0 >>> 24] << 24 | S1[(r0 >>> 16) & 0xFF] << 16 | S0[(r0 >>> 8) & 0xFF] << 8 | S1[r0 & 0xFF]\n  const r1 = L2((W2 << 16) | (W1 >>> 16))\n  R[1] = S0[r1 >>> 24] << 24 | S1[(r1 >>> 16) & 0xFF] << 16 | S0[(r1 >>> 8) & 0xFF] << 8 | S1[r1 & 0xFF]\n  return W\n}\n/**\n * 线性反馈移位寄存器有两种运行模式：初始化模式和工作模式，当输入 `u` 时为初始化模式，否则为工作模式\n *\n * @param {Uint32Array} S - 线性反馈移位寄存器(LFSR)\n * @param {number} u - 初始化模式下的输入\n */\nfunction next(S: Uint32Array, u?: number) {\n  let s16: number, v: number\n  s16 = S[0]\n  v = mulPow2n(S[0], 8)\n  s16 = addMod31(s16, v)\n  v = mulPow2n(S[4], 20)\n  s16 = addMod31(s16, v)\n  v = mulPow2n(S[10], 21)\n  s16 = addMod31(s16, v)\n  v = mulPow2n(S[13], 17)\n  s16 = addMod31(s16, v)\n  v = mulPow2n(S[15], 15)\n  s16 = addMod31(s16, v)\n\n  s16 = u ? addMod31(s16, u) : s16\n  s16 = s16 || 0x7FFFFFFF\n  for (let i = 0; i < 15; i++) {\n    S[i] = S[i + 1]\n  }\n  S[15] = s16\n}\n\n// * ZUC Algorithm (presudo-random generator)\n\n/**\n * 3GPP ZUC 算法用于生成密钥流，每次调用返回一个 32 位的密钥流.\n *\n * 3GPP ZUC algorithm is used to generate a key stream, each call returns a 32-bit key stream.\n *\n * ```ts\n * const K = new Uint8Array(16)\n * const iv = new Uint8Array(16)\n * const prg = zuc(K, iv)\n * prg() // 32-bit number\n * ```\n */\nexport function zuc(K: Uint8Array, iv: Uint8Array) {\n  if (K.byteLength !== 16) {\n    throw new KitError('ZUC requires a key of 16 bytes')\n  }\n  if (iv.byteLength !== 16) {\n    throw new KitError('ZUC requires an IV of 16 bytes')\n  }\n  const LFSR = new Uint32Array(16)\n  const X = new Uint32Array(4)\n  const R = new Uint32Array(2);\n  (function init() {\n    for (let i = 0; i < 16; i++) {\n      LFSR[i] = K[i] << 23 | D[i] << 8 | iv[i]\n    }\n    for (let i = 0; i < 32; i++) {\n      BR(LFSR, X)\n      const W = F(X[0], X[1], X[2], R)\n      next(LFSR, W >>> 1)\n    }\n    BR(LFSR, X)\n    F(X[0], X[1], X[2], R)\n    next(LFSR)\n  })()\n\n  return () => {\n    BR(LFSR, X)\n    const W = F(X[0], X[1], X[2], R) ^ X[3]\n    next(LFSR)\n    return W\n  }\n}\n\n// * EEA3 & EIA3\n\nfunction createEEA_IV(count: Uint8Array, bearer: number, direction: 0 | 1) {\n  const iv = new Uint8Array(16)\n  iv.set(count, 0)\n  iv[4] = bearer << 3 | direction << 2\n  iv.set(iv.subarray(0, 5), 8)\n  return iv\n}\nfunction createEIA_IV(count: Uint8Array, bearer: number, direction: 0 | 1) {\n  const iv = new Uint8Array(16)\n  iv.set(count, 0)\n  iv[4] = bearer << 3\n  iv.set(iv.subarray(0, 5), 8)\n  iv[8] ^= direction << 7\n  iv[14] ^= direction << 7\n  return iv\n}\nfunction getWord(Z: DataView, bit_offset: number) {\n  const ti = bit_offset % 8\n  const byte_offset = bit_offset >>> 3\n  const W = ti === 0\n    ? Z.getUint32(byte_offset, false)\n    : Z.getUint32(byte_offset, false) << ti | Z.getUint32(byte_offset + 4, false) >>> (32 - ti)\n  return W & 0xFFFFFFFF\n}\n\nexport interface ZUCParams {\n  /**\n   * 32-bit counter\n   *\n   * if `counter` is `number` type, convert to `Uint8Array` type in little-endian.\n   *\n   * 如果 `counter` 为 `number` 类型，则转换为小端存储的 `Uint8Array` 类型.\n   */\n  COUNTER: Uint8Array | number\n  /**\n   * 5-bit bearer\n   */\n  BEARER: number\n  /**\n   * 1-bit direction\n   */\n  DIRECTION: 0 | 1\n  /**\n   * 128-bit key\n   */\n  KEY: Uint8Array\n  /**\n   * 32-bit length\n   */\n  LENGTH: number\n  M: Uint8Array\n}\nexport interface ZUC3GPP {\n  (param: ZUCParams): U8\n}\n/**\n * 3GPP ZUC 加密算法 / Encryption algorithm\n */\nexport const eea3 = wrap<ZUC3GPP>(\n  (param: ZUCParams) => {\n    const { BEARER, DIRECTION, KEY, M } = param\n    let { COUNTER, LENGTH } = param\n\n    // 转换参数\n    COUNTER = typeof COUNTER === 'number' ? new Uint8Array([COUNTER >> 24, COUNTER >> 16, COUNTER >> 8, COUNTER]) : COUNTER\n\n    // 生成密钥流\n    LENGTH = M.byteLength << 3\n    const WORD_COUNT = (LENGTH + 31) >> 5\n    const EEA_KeyStream = new Uint8Array(WORD_COUNT << 2)\n    const KSView = new DataView(EEA_KeyStream.buffer)\n    const EEA_IV = createEEA_IV(COUNTER, BEARER, DIRECTION)\n    const prg = zuc(KEY, EEA_IV)\n    for (let i = 0; i < WORD_COUNT; i++) {\n      KSView.setUint32(i << 2, prg(), false)\n    }\n\n    // 加密\n    return new U8(M.map((_, i) => _ ^ EEA_KeyStream[i]))\n  },\n  {\n    ALGORITHM: 'ZUC-EEA3',\n    KEY_SIZE: 16,\n  },\n)\n/**\n * 3GPP ZUC 完整性算法 / Integrity algorithm\n */\nexport const eia3 = wrap<ZUC3GPP>(\n  (param: ZUCParams) => {\n    const { BEARER, DIRECTION, KEY, M } = param\n    let { COUNTER, LENGTH } = param\n\n    // 转换参数\n    COUNTER = typeof COUNTER === 'number' ? new Uint8Array([COUNTER >> 24, COUNTER >> 16, COUNTER >> 8, COUNTER]) : COUNTER\n\n    // 生成密钥流\n    const N = LENGTH + 64\n    const WORD_COUNT = N + 31 >> 5\n    const EIA_KeyStream = new Uint8Array(WORD_COUNT << 2)\n    const KSView = new DataView(EIA_KeyStream.buffer)\n    const EIA_IV = createEIA_IV(COUNTER, BEARER, DIRECTION)\n    const prg = zuc(KEY, EIA_IV)\n    for (let i = 0; i < WORD_COUNT; i++) {\n      KSView.setUint32(i << 2, prg(), false)\n    }\n\n    // 计算 MAC\n    let t = 0\n    for (let i = 0; i < LENGTH; i++) {\n      const bit = M[i >>> 3] & (1 << (7 - (i % 8)))\n      if (bit) {\n        t ^= getWord(KSView, i)\n      }\n    }\n    t ^= getWord(KSView, LENGTH)\n    t ^= KSView.getUint32(EIA_KeyStream.byteLength - 4)\n    return new U8([t >> 24, t >> 16, t >> 8, t])\n  },\n  {\n    ALGORITHM: 'ZUC-EIA3',\n    KEY_SIZE: 16,\n  },\n)\n","import { KitError, trying, U8, wrap } from './utils'\n\n/** 字符编解码器 / String Codec */\nexport interface Codec {\n  /**\n   * 将编码字符串解析为 Uint8Array\n   *\n   * Parse encoded string to Uint8Array\n   */\n  (input: string): U8\n  /**\n   * 将 Uint8Array 编码为字符串\n   *\n   * Stringify Uint8Array to encoded string\n   */\n  (input: Uint8Array): string\n  FORMAT: string\n}\nfunction createCodec(\n  parse: (input: string) => U8,\n  stringify: (input: Uint8Array) => string,\n  format: string,\n): Codec {\n  function codec(input: string): U8\n  function codec(input: Uint8Array): string\n  function codec(input: string | Uint8Array) {\n    return typeof input === 'string'\n      ? parse(input)\n      : stringify(input)\n  }\n  return wrap(codec, { FORMAT: format })\n}\n\nfunction UTF8ToU8(input: string) {\n  /**\n   * 尝试使用 TextEncoder 编码\n   * 否则使用自定义编码器\n   */\n  const [error, result] = trying(() => new TextEncoder().encode(input))\n  if (!error) { return U8.from(result) }\n\n  /** provided by xingluo233 */\n  const buffer: number[] = []\n  for (let i = 0; i < input.length; i++) {\n    const char_code = input.codePointAt(i)\n    if (char_code === undefined) {\n      continue\n    }\n    else if (char_code < 0x80) {\n      buffer.push(char_code)\n    }\n    else if (char_code < 0x800) {\n      buffer.push(0xC0 | (char_code >> 6))\n      buffer.push(0x80 | (char_code & 0x3F))\n    }\n    else if (char_code < 0x10000) {\n      buffer.push(0xE0 | (char_code >> 12))\n      buffer.push(0x80 | ((char_code >> 6) & 0x3F))\n      buffer.push(0x80 | (char_code & 0x3F))\n    }\n    else if (char_code < 0x110000) {\n      buffer.push(0xF0 | (char_code >> 18))\n      buffer.push(0x80 | ((char_code >> 12) & 0x3F))\n      buffer.push(0x80 | ((char_code >> 6) & 0x3F))\n      buffer.push(0x80 | (char_code & 0x3F))\n      i++\n    }\n  }\n  return U8.from(buffer)\n}\nfunction U8ToUTF8(input: Uint8Array) {\n  /**\n   * 尝试使用 TextDecoder 解码\n   * 否则使用自定义解码器\n   */\n  const [error, result] = trying(() => new TextDecoder().decode(input))\n  if (!error) { return result }\n\n  /** provided by xingluo233 */\n  const str = []\n  let i = 0\n  while (i < input.length) {\n    const byte1 = input[i++]\n    if (byte1 < 0x80) {\n      str.push(String.fromCharCode(byte1))\n    }\n    else if (byte1 >= 0xC0 && byte1 < 0xE0) {\n      const byte2 = input[i++]\n      const char_code = ((byte1 & 0x1F) << 6) | (byte2 & 0x3F)\n      str.push(String.fromCharCode(char_code))\n    }\n    else if (byte1 >= 0xE0 && byte1 < 0xF0) {\n      const byte2 = input[i++]\n      const byte3 = input[i++]\n      const char_code = ((byte1 & 0x0F) << 12) | ((byte2 & 0x3F) << 6) | (byte3 & 0x3F)\n      str.push(String.fromCharCode(char_code))\n    }\n    else if (byte1 >= 0xF0 && byte1 < 0xF8) {\n      const byte2 = input[i++]\n      const byte3 = input[i++]\n      const byte4 = input[i++]\n      const char_code = ((byte1 & 0x07) << 18) | ((byte2 & 0x3F) << 12) | ((byte3 & 0x3F) << 6) | (byte4 & 0x3F)\n      str.push(String.fromCodePoint(char_code))\n    }\n    else {\n      console.warn('Included an invalid UTF-8 byte')\n    }\n  }\n  return str.join('')\n}\n/** UTF-8 编解码器 / Codec */\nexport const UTF8 = createCodec(UTF8ToU8, U8ToUTF8, 'utf-8')\n\nfunction HEXToU8(input: string) {\n  // eslint-disable-next-line node/prefer-global/buffer\n  const [error, result] = trying(() => Buffer.from(\n    input.replace(/[^0-9a-f]/gi, ''),\n    'hex',\n  ))\n  if (!error) { return U8.from(result) }\n\n  const arr = input.match(/[\\da-f]{2}/gi)\n  if (arr == null) { return new U8() }\n  return new U8(arr.map(h => Number.parseInt(h, 16)))\n}\nfunction U8ToHEX(input: Uint8Array) {\n  // eslint-disable-next-line node/prefer-global/buffer\n  const [error, str] = trying(() => Buffer.from(input).toString('hex'))\n  if (!error) { return str }\n\n  let result = ''\n  for (let i = 0; i < input.length; i++) {\n    result += input[i].toString(16).padStart(2, '0')\n  }\n  return result\n}\n/** hex 编解码器 / Codec */\nexport const HEX = createCodec(HEXToU8, U8ToHEX, 'hex')\n\nfunction B64ToU8(input: string) {\n  // eslint-disable-next-line node/prefer-global/buffer\n  const [error, result] = trying(() => Buffer.from(\n    input.replace(/[^A-Z0-9+/]/gi, ''),\n    'base64',\n  ))\n  if (!error) { return U8.from(result) }\n\n  return B64CommonParse(input)\n}\nfunction U8ToB64(input: Uint8Array) {\n  // eslint-disable-next-line node/prefer-global/buffer\n  const [error, str] = trying(() => Buffer.from(input).toString('base64'))\n  if (!error) { return str }\n\n  return B64CommonStringify(input, false)\n}\n/** base64 编解码器 / Codec */\nexport const B64 = createCodec(B64ToU8, U8ToB64, 'base64')\n\nfunction B64URLToU8(input: string) {\n  // eslint-disable-next-line node/prefer-global/buffer\n  const [error, result] = trying(() => Buffer.from(\n    input.replace(/[^\\w\\-]/g, ''),\n    'base64url',\n  ))\n  if (!error) { return U8.from(result) }\n\n  return B64CommonParse(input)\n}\nfunction U8ToB64URL(input: Uint8Array) {\n  // eslint-disable-next-line node/prefer-global/buffer\n  const [error, str] = trying(() => Buffer.from(input).toString('base64url'))\n  if (!error) { return str }\n\n  return B64(input).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '')\n}\n/** base64url 编解码器 / Codec */\nexport const B64URL = createCodec(B64URLToU8, U8ToB64URL, 'base64url')\n\n/**\n * provided by xingluo233\n *\n * B64CommonParse can parse B64 or B64url string to Uint8Array\n *\n * B64CommonParse 可以将 B64 或者 B64url 字符串解析为 Uint8Array\n *\n * @param {string} input - B64 或 B64url 字符串\n */\nfunction B64CommonParse(input: string) {\n  const map = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n  input = input\n    .replace(/-/g, '+')\n    .replace(/_/g, '/')\n    .replace(/[^A-Z0-9+/]/gi, '')\n  const length = input.length * 0.75\n  const result = new U8(length)\n\n  let i = 0\n  let j = 0\n  while (i < input.length) {\n    const a = map.indexOf(input.charAt(i++))\n    const b = map.indexOf(input.charAt(i++))\n    const c = map.indexOf(input.charAt(i++))\n    const d = map.indexOf(input.charAt(i++))\n\n    const combined = (a << 18) | (b << 12) | (c << 6) | d\n\n    result[j++] = (combined >> 16) & 0xFF\n    result[j++] = (combined >> 8) & 0xFF\n    result[j++] = combined & 0xFF\n  }\n  return result\n}\n\n/**\n * B64CommonStringify can stringify Uint8Array to B64 or B64url string\n *\n * B64CommonStringify 可以将 Uint8Array 编码为 B64 或 B64url 字符串\n *\n * @param {Uint8Array} input - Uint8Array\n * @param {boolean} url - 是否是 B64url 字符串\n */\nfunction B64CommonStringify(input: Uint8Array, url: boolean) {\n  let map = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\n  map += url ? '-_' : '+/'\n  let result = ''\n  let i: number\n  for (i = 0; i < input.length - 2; i += 3) {\n    result += map[input[i] >> 2]\n    result += map[((input[i] & 3) << 4) | (input[i + 1] >> 4)]\n    result += map[((input[i + 1] & 15) << 2) | (input[i + 2] >> 6)]\n    result += map[input[i + 2] & 63]\n  }\n\n  if (i === input.length - 2) {\n    result += map[input[i] >> 2]\n    result += map[((input[i] & 3) << 4) | (input[i + 1] >> 4)]\n    result += map[(input[i + 1] & 15) << 2]\n    result += url ? '' : '='\n  }\n  else if (i === input.length - 1) {\n    result += map[input[i] >> 2]\n    result += map[(input[i] & 3) << 4]\n    result += url ? '' : '=='\n  }\n  return result\n}\n\ninterface B32Params {\n  variant?: 'rfc4648' | 'rfc4648-hex' | 'crockford'\n  padding?: boolean\n}\ninterface B32Codec extends Codec {\n  /**\n   * 创建一个 base32 编解码器\n   *\n   * Create a base32 codec\n   */\n  (params: B32Params): Codec\n}\n\nfunction TheB32Codec(input: string): U8\nfunction TheB32Codec(input: Uint8Array): string\nfunction TheB32Codec(params: B32Params): Codec\nfunction TheB32Codec(args: string | Uint8Array | B32Params) {\n  // 使用默认配置处理 B32 编解码\n\n  const RFC4648_B32_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'\n  if (typeof args === 'string') {\n    const input = args.toUpperCase().replace(/[^A-Z2-7]/g, '')\n    return B32CommonParse(input, RFC4648_B32_MAP)\n  }\n  else if (args instanceof Uint8Array) {\n    return B32CommonStringify(args, RFC4648_B32_MAP, false)\n  }\n\n  // 创建 B32 变体\n\n  const { variant = 'rfc4648', padding = false } = args\n  if (variant === 'rfc4648') {\n    function B32ToU8(input: string) {\n      input = input.toUpperCase().replace(/[^A-Z2-7]/g, '')\n      return B32CommonParse(input, RFC4648_B32_MAP)\n    }\n    function U8ToB32(input: Uint8Array) {\n      return B32CommonStringify(input, RFC4648_B32_MAP, padding)\n    }\n    return createCodec(B32ToU8, U8ToB32, 'base32')\n  }\n  else if (variant === 'rfc4648-hex') {\n    const RFC4648_B32_HEX_MAP = '0123456789ABCDEFGHIJKLMNOPQRSTUV'\n    function B32HexToU8(input: string) {\n      input = input.toUpperCase().replace(/[^0-9A-V]/g, '')\n      return B32CommonParse(input, RFC4648_B32_HEX_MAP)\n    }\n    function U8ToB32Hex(input: Uint8Array) {\n      return B32CommonStringify(input, RFC4648_B32_HEX_MAP, padding)\n    }\n    return createCodec(B32HexToU8, U8ToB32Hex, 'base32-hex')\n  }\n  else if (variant === 'crockford') {\n    const RFC4648_B32_CROCKFORD_MAP = '0123456789ABCDEFGHJKMNPQRSTVWXYZ'\n    function B32CrockfordToU8(input: string) {\n      input = input\n        .toUpperCase()\n        .replace(/O/g, '0')\n        .replace(/[IL]/g, '1')\n        .replace(/[^0-9A-HJKMNP-TV-Z]/g, '')\n      return B32CommonParse(input, RFC4648_B32_CROCKFORD_MAP)\n    }\n    function U8ToB32Crockford(input: Uint8Array) {\n      return B32CommonStringify(input, RFC4648_B32_CROCKFORD_MAP, padding)\n    }\n    return createCodec(B32CrockfordToU8, U8ToB32Crockford, 'base32-crockford')\n  }\n}\n/** base32 编解码器 / Codec */\nexport const B32: B32Codec = wrap(TheB32Codec, { FORMAT: 'base32' })\n\n/**\n * B32CommonParse can parse B32 string to Uint8Array\n *\n * B32CommonParse 可以将 B32 字符串解析为 Uint8Array\n *\n * @param {string} input - B32 或 B32url 字符串\n * @param {string} map - 字符表\n */\nfunction B32CommonParse(input: string, map: string) {\n  const length = input.length * 0.625\n  const result = new U8(length)\n\n  let i = 0\n  let j = 0\n  while (i < input.length) {\n    const a = map.indexOf(input.charAt(i++))\n    const b = map.indexOf(input.charAt(i++))\n    const c = map.indexOf(input.charAt(i++))\n    const d = map.indexOf(input.charAt(i++))\n    const e = map.indexOf(input.charAt(i++))\n    const f = map.indexOf(input.charAt(i++))\n    const g = map.indexOf(input.charAt(i++))\n    const h = map.indexOf(input.charAt(i++))\n\n    result[j++] = (a << 3) | (b >> 2)\n    result[j++] = ((b & 0b11) << 6) | (c << 1) | (d >> 4)\n    result[j++] = ((d & 0b1111) << 4) | (e >> 1)\n    result[j++] = ((e & 0b1) << 7) | (f << 2) | (g >> 3)\n    result[j++] = ((g & 0b111) << 5) | h\n  }\n\n  return result\n}\n\n/**\n * B32CommonStringify can stringify Uint8Array to B32 string\n *\n * B32CommonStringify 可以将 Uint8Array 编码为 B32 字符串\n *\n * @param {Uint8Array} input - Uint8Array\n * @param {string} map - 字符表\n * @param {boolean} pad - 是否填充\n */\nfunction B32CommonStringify(input: Uint8Array, map: string, pad: boolean) {\n  let result = ''\n  let i: number\n  for (i = 0; i < input.length - 4; i += 5) {\n    const E0 = input[i]\n    const E1 = input[i + 1]\n    const E2 = input[i + 2]\n    const E3 = input[i + 3]\n    const E4 = input[i + 4]\n\n    result += map[E0 >> 3]\n    result += map[((E0 & 0b111) << 2) | (E1 >> 6)]\n    result += map[(E1 >> 1) & 0b11111]\n    result += map[((E1 & 0b1) << 4) | (E2 >> 4)]\n    result += map[((E2 & 0b1111) << 1) | (E3 >> 7)]\n    result += map[(E3 >> 2) & 0b11111]\n    result += map[((E3 & 0b11) << 3) | (E4 >> 5)]\n    result += map[E4 & 0b11111]\n  }\n\n  if (i === input.length - 4) {\n    const E0 = input[i]\n    const E1 = input[i + 1]\n    const E2 = input[i + 2]\n    const E3 = input[i + 3]\n\n    result += map[E0 >> 3]\n    result += map[((E0 & 0b111) << 2) | (E1 >> 6)]\n    result += map[(E1 >> 1) & 0b11111]\n    result += map[((E1 & 0b1) << 4) | (E2 >> 4)]\n    result += map[((E2 & 0b1111) << 1) | (E3 >> 7)]\n    result += map[(E3 >> 2) & 0b11111]\n    result += map[((E3 & 0b11) << 3)]\n    result += pad ? '=' : ''\n  }\n  else if (i === input.length - 3) {\n    const E0 = input[i]\n    const E1 = input[i + 1]\n    const E2 = input[i + 2]\n\n    result += map[E0 >> 3]\n    result += map[((E0 & 0b111) << 2) | (E1 >> 6)]\n    result += map[(E1 >> 1) & 0b11111]\n    result += map[((E1 & 0b1) << 4) | (E2 >> 4)]\n    result += map[(E2 & 0b1111) << 1]\n    result += pad ? '===' : ''\n  }\n  else if (i === input.length - 2) {\n    const E0 = input[i]\n    const E1 = input[i + 1]\n\n    result += map[E0 >> 3]\n    result += map[((E0 & 0b111) << 2) | (E1 >> 6)]\n    result += map[(E1 >> 1) & 0b11111]\n    result += map[(E1 & 0b1) << 4]\n    result += pad ? '====' : ''\n  }\n  else if (i === input.length - 1) {\n    const E0 = input[i]\n\n    result += map[E0 >> 3]\n    result += map[(E0 & 0b111) << 2]\n    result += pad ? '======' : ''\n  }\n\n  return result\n}\n\nfunction CSVToU8(input: string) {\n  const coreValueMap = new Map<string, number>()\n  coreValueMap.set('富强', 0)\n  coreValueMap.set('民主', 1)\n  coreValueMap.set('文明', 2)\n  coreValueMap.set('和谐', 3)\n  coreValueMap.set('自由', 4)\n  coreValueMap.set('平等', 5)\n  coreValueMap.set('公正', 6)\n  coreValueMap.set('法治', 7)\n  coreValueMap.set('爱国', 8)\n  coreValueMap.set('敬业', 9)\n  coreValueMap.set('诚信', 10)\n  coreValueMap.set('友善', 11)\n\n  const from = (value: string) => {\n    const nibble = coreValueMap.get(value)\n    if (nibble === undefined) {\n      throw new KitError('你竟然在社会主义核心价值观里夹带私货！')\n    }\n    return nibble\n  }\n\n  const coreValues = input.match(/(\\S){2}/g)\n  if (coreValues == null) { return new U8() }\n\n  let h = 0\n  let l = 0\n  let count = 0\n  const result: number[] = []\n  for (let i = 0; i < coreValues.length; i++) {\n    const isHigh = count % 2 === 0\n\n    let nibble = from(coreValues[i])\n    if (nibble === 10 || nibble === 11) {\n      i++\n      if (i === coreValues.length) {\n        throw new KitError('你的社会主义核心价值观破碎了！')\n      }\n      nibble = nibble === 10\n        ? 10 + from(coreValues[i])\n        : 6 + from(coreValues[i])\n    }\n    if (isHigh) { h = nibble }\n    else { l = nibble }\n\n    if (!isHigh) { result.push(((h << 4) | l) & 0xFF) }\n    count++\n  }\n\n  return new U8(result)\n}\nfunction U8ToCSV(input: Uint8Array) {\n  const rand = () => Math.random() >= 0.5\n  const map = ['富强', '民主', '文明', '和谐', '自由', '平等', '公正', '法治', '爱国', '敬业', '诚信', '友善']\n\n  let result = ''\n  input.forEach((byte) => {\n    const h = (byte >> 4) & 0xF\n    const l = byte & 0xF\n    if (h < 10) { result += map[h] }\n    else if (rand()) { result += map[11] + map[h - 6] }\n    else { result += map[11] + map[h - 6] }\n\n    if (l < 10) { result += map[l] }\n    else if (rand()) { result += map[10] + map[l - 10] }\n    else { result += map[11] + map[l - 6] }\n  })\n\n  return result\n}\n/** 社会主义核心价值观编解码器 / Core Socialist Values Codec */\nexport const CSV = createCodec(CSVToU8, U8ToCSV, 'core-socialist-values')\n","import { KitError, U8, genBitMask, joinBuffer, rotateL } from '../core/utils'\n\n// * Constants\n\n/**\n * ρ(A) 位移表 / Shift Table\n */\nconst R = [\n  [0n, 36n, 3n, 41n, 18n],\n  [1n, 44n, 10n, 45n, 2n],\n  [62n, 6n, 43n, 15n, 61n],\n  [28n, 55n, 25n, 21n, 56n],\n  [27n, 20n, 39n, 8n, 14n],\n]\n/**\n * https://datatracker.ietf.org/doc/draft-irtf-cfrg-kangarootwelve/\n */\nconst RC12 = [\n  0x000000008000808Bn,\n  0x800000000000008Bn,\n  0x8000000000008089n,\n  0x8000000000008003n,\n  0x8000000000008002n,\n  0x8000000000000080n,\n  0x000000000000800An,\n  0x800000008000000An,\n  0x8000000080008081n,\n  0x8000000000008080n,\n  0x0000000080000001n,\n  0x8000000080008008n,\n]\n/**\n * `RCGen(6, 24)`\n */\nconst RC24 = [\n  0x0000000000000001n,\n  0x0000000000008082n,\n  0x800000000000808An,\n  0x8000000080008000n,\n  0x000000000000808Bn,\n  0x0000000080000001n,\n  0x8000000080008081n,\n  0x8000000000008009n,\n  0x000000000000008An,\n  0x0000000000000088n,\n  0x0000000080008009n,\n  0x000000008000000An,\n  0x000000008000808Bn,\n  0x800000000000008Bn,\n  0x8000000000008089n,\n  0x8000000000008003n,\n  0x8000000000008002n,\n  0x8000000000000080n,\n  0x000000000000800An,\n  0x800000008000000An,\n  0x8000000080008081n,\n  0x8000000000008080n,\n  0x0000000080000001n,\n  0x8000000080008008n,\n]\n\nconst mask64 = genBitMask(64)\nconst rotateL64 = (x: bigint, n: bigint) => rotateL(64, x, n, mask64)\n\n// * Keccak Utils\n\n/**\n * RC Table Generation Function\n *\n * @param {number} l - log2(w)\n * @param {number} [nr] - 轮数\n */\nexport function RCGen(l = 6, nr = 24) {\n  const RCTable = []\n  for (let ir = 0; ir < nr; ir++) {\n    let RC = 0n\n    for (let j = 0; j <= l; j++) {\n      const t = j + 7 * ir\n\n      // rc(t)\n      let rc: bigint\n      if (t % 255 === 0) {\n        rc = 1n\n      }\n      else {\n        let R = 0x80n\n        for (let i = 1; i <= t % 255; i++) {\n          const b = R & 1n\n          R ^= (b << 8n) | (b << 4n) | (b << 3n) | (b << 2n)\n          R >>= 1n\n        }\n        rc = R >> 7n\n      }\n\n      // RC[2^j - 1] = rc(j + 7ir)\n      RC |= (rc << BigInt(2 ** j - 1))\n    }\n    RCTable.push(RC)\n  }\n  return RCTable\n}\n\n/**\n * @param {number} w - 工作字长度 / Word Size\n */\nexport function RGen(w: number | bigint) {\n  w = BigInt(w)\n  const R = [\n    [0n, 36n, 3n, 105n, 210n],\n    [1n, 300n, 10n, 45n, 66n],\n    [190n, 6n, 171n, 15n, 253n],\n    [28n, 276n, 120n, 136n, 55n],\n    [91n, 276n, 210n, 66n, 253n],\n  ]\n\n  return R.map(x => x.map(y => y % w))\n}\n\n// * Permutation Function\n\ntype StateArray1600 = BigUint64Array[]\n\n/**\n * create a 5x5 `State Array`\n *\n * 创建一个 5x5 `状态矩阵`\n */\nfunction createStateArray(): StateArray1600 {\n  return Array.from({ length: 5 }).map(() => new BigUint64Array(5))\n}\n\n/**\n * Converting `State` to `State Arrays`\n *\n * 将 `状态` 转换为 `状态矩阵`\n */\nfunction toStateArray(S: Uint8Array) {\n  const A = createStateArray()\n  const view = new DataView(S.buffer)\n\n  for (let x = 0; x < 5; x++) {\n    for (let y = 0; y < 5; y++) {\n      A[x][y] = view.getBigUint64((y * 5 + x) << 3, true)\n    }\n  }\n\n  return A\n}\n\n/**\n * Converting `State Arrays` to `State`\n *\n * 将 `状态矩阵` 转换为 `状态`\n */\nfunction toState(A: StateArray1600) {\n  const S = new Uint8Array(200)\n  const view = new DataView(S.buffer)\n\n  for (let x = 0; x < 5; x++) {\n    for (let y = 0; y < 5; y++) {\n      view.setBigUint64((y * 5 + x) << 3, A[x][y], true)\n    }\n  }\n\n  return S\n}\n\n// * Mapping Function\n\n/** Algorithm 1: θ(A) */\nfunction theta(A: StateArray1600) {\n  const C = new BigUint64Array(5)\n  const D = new BigUint64Array(5)\n\n  for (let x = 0; x < 5; x++) {\n    C[x] = A[x][0] ^ A[x][1] ^ A[x][2] ^ A[x][3] ^ A[x][4]\n  }\n\n  for (let x = 0; x < 5; x++) {\n    D[x] = C[(x + 4) % 5] ^ rotateL64(C[(x + 1) % 5], 1n)\n\n    for (let y = 0; y < 5; y++) {\n      A[x][y] = A[x][y] ^ D[x]\n    }\n  }\n\n  return A\n}\n\n/** Algorithm 2: ρ(A) */\n// eslint-disable-next-line unused-imports/no-unused-vars\nfunction rho(A: StateArray1600) {\n  const _A = createStateArray()\n  for (let x = 0; x < 5; x++) {\n    for (let y = 0; y < 5; y++) {\n      _A[x][y] = rotateL64(A[x][y], R[x][y])\n    }\n  }\n  return _A\n}\n\n/** Algorithm 3: π(A) */\n// eslint-disable-next-line unused-imports/no-unused-vars\nfunction pi(A: StateArray1600) {\n  const _A = createStateArray()\n  for (let x = 0; x < 5; x++) {\n    for (let y = 0; y < 5; y++) {\n      _A[x][y] = A[(x + 3 * y) % 5][x]\n    }\n  }\n  return _A\n}\n\n/**\n * Combining π(ρ(A))\n *\n * 合并执行 π(ρ(A))\n */\nfunction rhoPi(A: StateArray1600) {\n  const _A = createStateArray()\n  for (let x = 0; x < 5; x++) {\n    for (let y = 0; y < 5; y++) {\n      _A[y][(2 * x + 3 * y) % 5] = rotateL64(A[x][y], R[x][y])\n    }\n  }\n  return _A\n}\n\n/** Algorithm 4: χ(A) */\nfunction chi(A: StateArray1600) {\n  const _A = createStateArray()\n  for (let x = 0; x < 5; x++) {\n    for (let y = 0; y < 5; y++) {\n      _A[x][y] = A[x][y] ^ ((~A[(x + 1) % 5][y]) & A[(x + 2) % 5][y])\n    }\n  }\n  return _A\n}\n\n/** Algorithm 6: ι(A, ir) */\nfunction iota(A: StateArray1600, RC: bigint) {\n  A[0][0] = A[0][0] ^ RC\n  return A\n}\n\n// * Keccak-p[1600]\n\n/**\n * `Keccak-p` 置换函数 / Permutate Function\n */\nexport interface Keccak_p {\n  /**\n   * @param {Uint8Array} S - 状态 / State\n   */\n  (S: Uint8Array): Uint8Array\n}\n\n/**\n * `Keccak-p[1600, nr]` 置换函数 / Permutate Function\n *\n * @param {number} [nr] - 轮数 / Rounds (default: 24)\n */\nexport function keccak_p_1600(nr = 24): Keccak_p {\n  // b = 1600\n  const bByte = 200\n  const l = 6\n\n  // 当轮数非默认的情况下，重新生成 RC\n  let RC: bigint[]\n  if (nr === 12) {\n    RC = RC12\n  }\n  else if (nr === 24) {\n    RC = RC24\n  }\n  else {\n    RC = RCGen(l, nr)\n  }\n\n  return (S: Uint8Array) => {\n    if (S.byteLength !== bByte) {\n      throw new KitError('Invalid state size')\n    }\n\n    let A = toStateArray(S)\n    for (let i = 0; i < nr; i++) {\n      A = iota(chi(rhoPi(theta(A))), RC[i])\n    }\n    return new U8(toState(A))\n  }\n}\n\n// * Sponge Construction\n\n/**\n * `SPONGE` 填充函数 / Padding Function\n */\nexport interface SpongePadding {\n  /**\n   * @param {Uint8Array} M - 消息 / Message\n   */\n  (M: Uint8Array): Uint8Array\n}\n\n/**\n * `SPONGE` & `Keccak-p[1600]`\n *\n * @param {number} r_byte - 处理速率 / Rate\n * @param {number} d_byte - 输出长度 / Digest Size\n * @param {SpongePadding} pad - 填充函数 / Padding Function\n * @param {Keccak_p} f - Keccak-p 置换函数 / Permutate Function\n */\nexport function sponge_1600(\n  r_byte: number,\n  d_byte: number,\n  pad: SpongePadding,\n  f: Keccak_p = keccak_p_1600(),\n) {\n  return (M: Uint8Array) => {\n    // * 填充\n    const P = pad(M)\n    // * 吸收\n    let S: Uint8Array = new Uint8Array(200)\n    let i = 0\n    while (i < P.byteLength) {\n      const Pi = P.slice(i, i += r_byte)\n      S.forEach((byte, index) => S[index] = byte ^ Pi[index])\n      S = f(S)\n    }\n    // * 挤出\n    const z = [S.slice(0, r_byte)]\n    let z_byte = r_byte\n    while (z_byte < d_byte) {\n      S = f(S)\n      z.push(S.slice(0, r_byte))\n      z_byte += r_byte\n    }\n    // * 截断输出\n    return joinBuffer(...z).slice(0, d_byte)\n  }\n}\n","import { createHash } from '../core/hash'\nimport { KitError } from '../core/utils'\nimport type { SpongePadding } from './keccak1600'\nimport { keccak_p_1600, sponge_1600 } from './keccak1600'\n\n/**\n * turboSHAKE 填充函数 / Padding Function\n *\n * ```ts\n * M || D || 0x00*\n * ```\n *\n * @param {number} rByte - 处理速率 / Rate\n * @param {number} D - 域分隔符 / Domain Separator\n */\nfunction turboShakePadding(rByte: number, D: number): SpongePadding {\n  return (M: Uint8Array) => {\n    const sig_byte = M.length + 1\n    const block = Math.ceil(sig_byte / rByte)\n    const P = new Uint8Array(block * rByte)\n    P.set(M)\n    P[M.length] = D\n    P[P.length - 1] ^= 0x80\n    return P\n  }\n}\n\n/**\n * TurboSHAKE128\n *\n * @param {number} d - 输出长度 / Digest Size (bit)\n * @param {number} [D] - 域分隔符 / Domain Separator (range: 0x01 ~ 0x7F, default: 0x1F)\n */\nexport function turboshake128(d: number, D = 0x1F) {\n  if (D < 0x01 || D > 0x7F) {\n    throw new KitError('Invalid Domain Separator')\n  }\n  const d_byte = d >> 3\n  const r_byte = 168\n  const f = keccak_p_1600(12)\n  const pad = turboShakePadding(r_byte, D)\n  return createHash(\n    (M: Uint8Array) => sponge_1600(r_byte, d_byte, pad, f)(M),\n    {\n      ALGORITHM: `TurboSHAKE128/${d}`,\n      BLOCK_SIZE: r_byte,\n      DIGEST_SIZE: d_byte,\n    },\n  )\n}\n\n/**\n * TurboSHAKE256\n *\n * @param {number} d - 输出长度 / Digest Size (bit)\n * @param {number} [D] - 域分隔符 / Domain Separator (range: 0x01 ~ 0x7F, default: 0x1F)\n */\nexport function turboshake256(d: number, D = 0x1F) {\n  if (D < 0x01 || D > 0x7F) {\n    throw new KitError('Invalid Domain Separator')\n  }\n  const d_byte = d >> 3\n  const r_byte = 136\n  const f = keccak_p_1600(12)\n  const pad = turboShakePadding(r_byte, D)\n  return createHash(\n    (M: Uint8Array) => sponge_1600(r_byte, d_byte, pad, f)(M),\n    {\n      ALGORITHM: `TurboSHAKE256/${d}`,\n      BLOCK_SIZE: r_byte,\n      DIGEST_SIZE: d_byte,\n    },\n  )\n}\n","import { createHash } from '../core/hash'\nimport { joinBuffer } from '../core/utils'\nimport { turboshake128, turboshake256 } from './turboSHAKE'\n\nfunction lengthEncode(x: number): Uint8Array {\n  const S: number[] = []\n  while (x > 0) {\n    S.unshift(x & 0xFF)\n    x >>= 8\n  }\n  S.push(S.length)\n  return new Uint8Array(S)\n}\n\n/**\n * KangarooTwelve\n *\n * @param {number} d - 输出长度 / Digest Size (bit)\n * @param {Uint8Array} C - 自定义参数 / Customization\n * @param {typeof turboshake128} SHAKE - TurboSHAKE 函数 / Function\n * @param {number} cv - 中间压缩值长度 / Compressed Value Size (bit)\n */\nfunction kt(d: number, C: Uint8Array, SHAKE: typeof turboshake128, cv: number) {\n  return (M: Uint8Array) => {\n    const length_encode = lengthEncode(C.length)\n    const S = joinBuffer(M, C, length_encode)\n    if (S.length <= 8192) {\n      return SHAKE(d, 0x07)(S)\n    }\n    else {\n      // KangarooTwelve hopping\n      const FinalNode: Uint8Array[] = []\n      FinalNode.push(S.slice(0, 8192))\n      FinalNode.push(new Uint8Array([0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]))\n      let offset = 8192\n      let num_block = 0\n      while (offset < S.length) {\n        const CV = SHAKE(cv, 0x0B)(S.slice(offset, offset += 8192))\n        FinalNode.push(CV)\n        num_block++\n      }\n      FinalNode.push(lengthEncode(num_block))\n      FinalNode.push(new Uint8Array([0xFF, 0xFF]))\n      return SHAKE(d, 0x06)(joinBuffer(...FinalNode))\n    }\n  }\n}\n\n/**\n * KangarooTwelve 128\n *\n * @param {number} d - 输出长度 / Digest Size (bit)\n * @param {Uint8Array} [C] - 自定义参数 / Customization\n */\nexport function kt128(d: number, C = new Uint8Array()) {\n  return createHash(\n    kt(d, C, turboshake128, 256),\n    {\n      ALGORITHM: `KangarooTwelve128/${d}`,\n      BLOCK_SIZE: 8192,\n      DIGEST_SIZE: d >> 3,\n    },\n  )\n}\n\n/**\n * KangarooTwelve 256\n *\n * @param {number} d - 输出长度 / Digest Size (bit)\n * @param {Uint8Array} [C] - 自定义参数 / Customization\n */\nexport function kt256(d: number, C = new Uint8Array()) {\n  return createHash(\n    kt(d, C, turboshake256, 512),\n    {\n      ALGORITHM: `KangarooTwelve256/${d}`,\n      BLOCK_SIZE: 8192,\n      DIGEST_SIZE: d >> 3,\n    },\n  )\n}\n","import { createHash } from '../core/hash'\nimport { U8, rotateL32 } from '../core/utils'\n\n// * Constants\n\n/**\n * 轮常量列表 K 由 64 个 32 位无符号整数组成, 使用 1 到 64 的正弦函数生成.\n *\n * The round constants K is a list of 64 32-bit unsigned integers,\n * generated by the sine function from 1 to 64.\n *\n * ```ts\n * const K: number[] = []\n * for (let i = 0; i < 64; i++) {\n *   K[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) >>> 0\n * }\n * ```\n */\nconst K = new Uint32Array([0xD76AA478, 0xE8C7B756, 0x242070DB, 0xC1BDCEEE, 0xF57C0FAF, 0x4787C62A, 0xA8304613, 0xFD469501, 0x698098D8, 0x8B44F7AF, 0xFFFF5BB1, 0x895CD7BE, 0x6B901122, 0xFD987193, 0xA679438E, 0x49B40821, 0xF61E2562, 0xC040B340, 0x265E5A51, 0xE9B6C7AA, 0xD62F105D, 0x02441453, 0xD8A1E681, 0xE7D3FBC8, 0x21E1CDE6, 0xC33707D6, 0xF4D50D87, 0x455A14ED, 0xA9E3E905, 0xFCEFA3F8, 0x676F02D9, 0x8D2A4C8A, 0xFFFA3942, 0x8771F681, 0x6D9D6122, 0xFDE5380C, 0xA4BEEA44, 0x4BDECFA9, 0xF6BB4B60, 0xBEBFBC70, 0x289B7EC6, 0xEAA127FA, 0xD4EF3085, 0x04881D05, 0xD9D4D039, 0xE6DB99E5, 0x1FA27CF8, 0xC4AC5665, 0xF4292244, 0x432AFF97, 0xAB9423A7, 0xFC93A039, 0x655B59C3, 0x8F0CCC92, 0xFFEFF47D, 0x85845DD1, 0x6FA87E4F, 0xFE2CE6E0, 0xA3014314, 0x4E0811A1, 0xF7537E82, 0xBD3AF235, 0x2AD7D2BB, 0xEB86D391])\n\n// * Function\n\nfunction FF(a: number, b: number, c: number, d: number, m: number, s: number, k: number) {\n  const n = a + ((b & c) | (~b & d)) + m + k\n  return rotateL32(n, s) + b\n}\n\nfunction GG(a: number, b: number, c: number, d: number, m: number, s: number, k: number) {\n  const n = a + ((b & d) | (c & ~d)) + m + k\n  return rotateL32(n, s) + b\n}\n\nfunction HH(a: number, b: number, c: number, d: number, m: number, s: number, k: number) {\n  const n = a + (b ^ c ^ d) + m + k\n  return rotateL32(n, s) + b\n}\n\nfunction II(a: number, b: number, c: number, d: number, m: number, s: number, k: number) {\n  const n = a + (c ^ (b | ~d)) + m + k\n  return rotateL32(n, s) + b\n}\n\n// * Algorithm\n\nfunction digest(message: Uint8Array) {\n  // * 初始化\n  const state = new Uint32Array([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476])\n\n  const m_byte = message.length\n  const m_bit = BigInt(m_byte) << 3n\n  const block_size = 64\n  // ceil((M_BYTE + 9) / 64)\n  const block_total = (m_byte + 9 + 63) >> 6\n\n  // * 填充\n  const p = new U8(block_total * block_size)\n  p.set(message)\n\n  // appending the bit '1' to the message\n  p[m_byte] = 0x80\n\n  // appending length\n  const p_view = new DataView(p.buffer)\n  p_view.setBigUint64(p.length - 8, m_bit, true)\n\n  // * 分块处理\n  for (let offset = 0; offset < p.length;) {\n    // 获取分块\n    const current_buffer = p.subarray(offset, offset += block_size).buffer\n\n    // 准备状态字\n    const A = state[0]\n    const B = state[1]\n    const C = state[2]\n    const D = state[3]\n    let a = A\n    let b = B\n    let c = C\n    let d = D\n\n    // 划分词典\n    const M = new Uint32Array(current_buffer)\n\n    /* Round 1 */\n    a = FF(a, b, c, d, M[0], 7, K[0])\n    d = FF(d, a, b, c, M[1], 12, K[1])\n    c = FF(c, d, a, b, M[2], 17, K[2])\n    b = FF(b, c, d, a, M[3], 22, K[3])\n    a = FF(a, b, c, d, M[4], 7, K[4])\n    d = FF(d, a, b, c, M[5], 12, K[5])\n    c = FF(c, d, a, b, M[6], 17, K[6])\n    b = FF(b, c, d, a, M[7], 22, K[7])\n    a = FF(a, b, c, d, M[8], 7, K[8])\n    d = FF(d, a, b, c, M[9], 12, K[9])\n    c = FF(c, d, a, b, M[10], 17, K[10])\n    b = FF(b, c, d, a, M[11], 22, K[11])\n    a = FF(a, b, c, d, M[12], 7, K[12])\n    d = FF(d, a, b, c, M[13], 12, K[13])\n    c = FF(c, d, a, b, M[14], 17, K[14])\n    b = FF(b, c, d, a, M[15], 22, K[15])\n\n    /* Round 2 */\n    a = GG(a, b, c, d, M[1], 5, K[16])\n    d = GG(d, a, b, c, M[6], 9, K[17])\n    c = GG(c, d, a, b, M[11], 14, K[18])\n    b = GG(b, c, d, a, M[0], 20, K[19])\n    a = GG(a, b, c, d, M[5], 5, K[20])\n    d = GG(d, a, b, c, M[10], 9, K[21])\n    c = GG(c, d, a, b, M[15], 14, K[22])\n    b = GG(b, c, d, a, M[4], 20, K[23])\n    a = GG(a, b, c, d, M[9], 5, K[24])\n    d = GG(d, a, b, c, M[14], 9, K[25])\n    c = GG(c, d, a, b, M[3], 14, K[26])\n    b = GG(b, c, d, a, M[8], 20, K[27])\n    a = GG(a, b, c, d, M[13], 5, K[28])\n    d = GG(d, a, b, c, M[2], 9, K[29])\n    c = GG(c, d, a, b, M[7], 14, K[30])\n    b = GG(b, c, d, a, M[12], 20, K[31])\n\n    /* Round 3 */\n    a = HH(a, b, c, d, M[5], 4, K[32])\n    d = HH(d, a, b, c, M[8], 11, K[33])\n    c = HH(c, d, a, b, M[11], 16, K[34])\n    b = HH(b, c, d, a, M[14], 23, K[35])\n    a = HH(a, b, c, d, M[1], 4, K[36])\n    d = HH(d, a, b, c, M[4], 11, K[37])\n    c = HH(c, d, a, b, M[7], 16, K[38])\n    b = HH(b, c, d, a, M[10], 23, K[39])\n    a = HH(a, b, c, d, M[13], 4, K[40])\n    d = HH(d, a, b, c, M[0], 11, K[41])\n    c = HH(c, d, a, b, M[3], 16, K[42])\n    b = HH(b, c, d, a, M[6], 23, K[43])\n    a = HH(a, b, c, d, M[9], 4, K[44])\n    d = HH(d, a, b, c, M[12], 11, K[45])\n    c = HH(c, d, a, b, M[15], 16, K[46])\n    b = HH(b, c, d, a, M[2], 23, K[47])\n\n    /* Round 4 */\n    a = II(a, b, c, d, M[0], 6, K[48])\n    d = II(d, a, b, c, M[7], 10, K[49])\n    c = II(c, d, a, b, M[14], 15, K[50])\n    b = II(b, c, d, a, M[5], 21, K[51])\n    a = II(a, b, c, d, M[12], 6, K[52])\n    d = II(d, a, b, c, M[3], 10, K[53])\n    c = II(c, d, a, b, M[10], 15, K[54])\n    b = II(b, c, d, a, M[1], 21, K[55])\n    a = II(a, b, c, d, M[8], 6, K[56])\n    d = II(d, a, b, c, M[15], 10, K[57])\n    c = II(c, d, a, b, M[6], 15, K[58])\n    b = II(b, c, d, a, M[13], 21, K[59])\n    a = II(a, b, c, d, M[4], 6, K[60])\n    d = II(d, a, b, c, M[11], 10, K[61])\n    c = II(c, d, a, b, M[2], 15, K[62])\n    b = II(b, c, d, a, M[9], 21, K[63])\n\n    // 更新状态字\n    state[0] = A + a\n    state[1] = B + b\n    state[2] = C + c\n    state[3] = D + d\n  }\n\n  // * 返回状态\n  return new U8(state.buffer)\n}\n\nexport const md5 = createHash(\n  digest,\n  {\n    ALGORITHM: 'MD5',\n    BLOCK_SIZE: 64,\n    DIGEST_SIZE: 16,\n    OID: '1.2.840.113549.2.5',\n  },\n)\n","import { createHash } from '../core/hash'\nimport { U8, rotateL32 } from '../core/utils'\n\n// * Constants\n\nfunction K(t: number) {\n  if (t < 20)\n    return 0x5A827999\n  if (t < 40)\n    return 0x6ED9EBA1\n  if (t < 60)\n    return 0x8F1BBCDC\n  return 0xCA62C1D6\n}\n\n// * Function\n\nconst Ch = (x: number, y: number, z: number) => (x & y) ^ ((~x) & z)\nconst Parity = (x: number, y: number, z: number) => x ^ y ^ z\nconst Maj = (x: number, y: number, z: number) => (x & y) ^ (x & z) ^ (y & z)\nfunction ft(x: number, y: number, z: number, t: number) {\n  if (t < 20)\n    return Ch(x, y, z)\n  if (t < 40)\n    return Parity(x, y, z)\n  if (t < 60)\n    return Maj(x, y, z)\n  return Parity(x, y, z)\n}\n\n// * Algorithm\n\nfunction digest(message: Uint8Array) {\n  // * 初始化\n  const state = new U8(20)\n  const state_view = state.view(4)\n  state_view.set(0, 0x67452301n)\n  state_view.set(1, 0xEFCDAB89n)\n  state_view.set(2, 0x98BADCFEn)\n  state_view.set(3, 0x10325476n)\n  state_view.set(4, 0xC3D2E1F0n)\n\n  const m_byte = message.length\n  const m_bit = BigInt(m_byte) << 3n\n  const block_size = 64\n  // ceil((M_BYTE + 9) / 64)\n  const block_total = (m_byte + 9 + 63) >> 6\n\n  // * 填充\n  const p = new U8(block_total * block_size)\n  p.set(message)\n\n  // appending the bit '1' to the message\n  p[m_byte] = 0x80\n\n  // appending length\n  const p_view = new DataView(p.buffer)\n  p_view.setBigUint64(p.length - 8, m_bit)\n\n  // * 分块处理\n  for (let offset = 0; offset < p.length; offset += block_size) {\n    /** B(n) = p[offset:offset + block_size] */\n\n    // 准备状态字\n    const H0 = Number(state_view.get(0))\n    const H1 = Number(state_view.get(1))\n    const H2 = Number(state_view.get(2))\n    const H3 = Number(state_view.get(3))\n    const H4 = Number(state_view.get(4))\n    let a = H0\n    let b = H1\n    let c = H2\n    let d = H3\n    let e = H4\n\n    // 合并执行 扩展 & 压缩\n    const W = new Uint32Array(80)\n    for (let i = 0; i < 80; i++) {\n      // 扩展\n      if (i < 16)\n        // W[i] = B(n)[i]\n        W[i] = p_view.getUint32(offset + (i << 2))\n      else\n        W[i] = rotateL32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1)\n\n      // 压缩\n      const T = rotateL32(a, 5) + ft(b, c, d, i) + K(i) + e + W[i]\n      e = d\n      d = c\n      c = rotateL32(b, 30)\n      b = a\n      a = T\n    }\n\n    // 更新状态字\n    state_view.set(0, BigInt(H0 + a))\n    state_view.set(1, BigInt(H1 + b))\n    state_view.set(2, BigInt(H2 + c))\n    state_view.set(3, BigInt(H3 + d))\n    state_view.set(4, BigInt(H4 + e))\n  }\n\n  // * 返回状态\n  return state\n}\n\nexport const sha1 = createHash(\n  digest,\n  {\n    ALGORITHM: 'SHA-1',\n    BLOCK_SIZE: 64,\n    DIGEST_SIZE: 20,\n    OID: '1.3.14.3.2.26',\n  },\n)\n","import { createHash } from '../core/hash'\nimport { sponge_1600 } from './keccak1600'\n\n// * SHA3 Padding Function\n\n/**\n * `SHA3` 填充函数 / Padding Function\n */\nexport interface Sha3Padding {\n  /**\n   * @param {number} r_byte - 处理速率 / Rate\n   */\n  (r_byte: number): {\n    /**\n     * @param {Uint8Array} M - 消息 / Message\n     */\n    (M: Uint8Array): Uint8Array\n  }\n}\n\n/**\n * `SHA3` 填充函数 / Padding Function\n *\n * ```ts\n * M || 01 || 10*1\n * ```\n *\n * @param {number} r_byte - 处理速率 / Rate\n */\nconst sha3Padding: Sha3Padding = (r_byte: number) => {\n  return (M: Uint8Array) => {\n    const sig_byte = M.length\n    const pad_byte = r_byte - (sig_byte % r_byte)\n    const P = new Uint8Array(sig_byte + pad_byte)\n    P.set(M)\n    if (pad_byte === 1) {\n      P[sig_byte] = 0x86\n    }\n    P[sig_byte] = 0x06\n    P[P.length - 1] |= 0x80\n    return P\n  }\n}\n\n/**\n * `SHAKE` 填充函数 / Padding Function\n *\n * ```ts\n * M || 1111 || 10*1\n * ```\n *\n * @param {number} r_byte - 处理速率 / Rate\n */\nconst shakePadding: Sha3Padding = (r_byte: number) => {\n  return (M: Uint8Array) => {\n    const sig_byte = M.length\n    const pad_byte = r_byte - (sig_byte % r_byte)\n    const P = new Uint8Array(sig_byte + pad_byte)\n    P.set(M)\n    if (pad_byte === 1) {\n      P[sig_byte] = 0x9F\n    }\n    P[sig_byte] = 0x1F\n    P[P.length - 1] |= 0x80\n    return P\n  }\n}\n\n// * SHA3 Function Specification\n\n/**\n * @param {number} c - 安全容量 / Capacity (bit)\n * @param {number} d - 输出长度 / Digest Size (bit)\n * @param {Sha3Padding} padding - 填充函数 / Padding Function\n */\nexport function Keccak_c(c: number, d: number, padding: Sha3Padding) {\n  const r = 1600 - c\n  const rByte = r >> 3\n  const pad = padding(rByte)\n  return (M: Uint8Array) => sponge_1600(rByte, d >> 3, pad)(M)\n}\n\nexport const sha3_224 = createHash(\n  (M: Uint8Array) => Keccak_c(448, 224, sha3Padding)(M),\n  {\n    ALGORITHM: 'SHA3-224',\n    BLOCK_SIZE: 144,\n    DIGEST_SIZE: 28,\n    OID: '2.16.840.1.101.3.4.2.7',\n  },\n)\n\nexport const sha3_256 = createHash(\n  (M: Uint8Array) => Keccak_c(512, 256, sha3Padding)(M),\n  {\n    ALGORITHM: 'SHA3-256',\n    BLOCK_SIZE: 136,\n    DIGEST_SIZE: 32,\n    OID: '2.16.840.1.101.3.4.2.8',\n  },\n)\n\nexport const sha3_384 = createHash(\n  (M: Uint8Array) => Keccak_c(768, 384, sha3Padding)(M),\n  {\n    ALGORITHM: 'SHA3-384',\n    BLOCK_SIZE: 104,\n    DIGEST_SIZE: 48,\n    OID: '2.16.840.1.101.3.4.2.9',\n  },\n)\n\nexport const sha3_512 = createHash(\n  (M: Uint8Array) => Keccak_c(1024, 512, sha3Padding)(M),\n  {\n    ALGORITHM: 'SHA3-512',\n    BLOCK_SIZE: 72,\n    DIGEST_SIZE: 64,\n    OID: '2.16.840.1.101.3.4.2.10',\n  },\n)\n\n/**\n * @param {number} d - 输出长度 / Digest Size (bit)\n */\nexport function shake128(d: number) {\n  return createHash(\n    (M: Uint8Array) => Keccak_c(256, d, shakePadding)(M),\n    {\n      ALGORITHM: `SHAKE128/${d}`,\n      BLOCK_SIZE: 168,\n      DIGEST_SIZE: d >> 3,\n    },\n  )\n}\n\n/**\n * @param {number} d - 输出长度 / Digest Size (bit)\n */\nexport function shake256(d: number) {\n  return createHash(\n    (M: Uint8Array) => Keccak_c(512, d, shakePadding)(M),\n    {\n      ALGORITHM: `SHAKE256/${d}`,\n      BLOCK_SIZE: 136,\n      DIGEST_SIZE: d >> 3,\n    },\n  )\n}\n","import { UTF8 } from '../core/codec'\nimport { KitError, joinBuffer } from '../core/utils'\nimport type { Hash, KeyHash } from '../core/hash'\nimport { createHash, createKeyHash, createTupleHash } from '../core/hash'\nimport type { Sha3Padding } from './sha3'\nimport { Keccak_c, shake128, shake256 } from './sha3'\n\n// * Encode and Padding Function\n\n/**\n * SP.800-185 2.3.1:\n *\n * 左侧整数编码 / left_encode\n *\n * Inspired by https://github.com/paulmillr/noble-hashes\n *\n * ```ts\n * leftEncode(0) // Uint8Array(2) [ 1, 0 ]\n * leftEncode(18446744073709551615n) // Uint8Array(9) [ 8, 255, 255, 255, 255, 255, 255, 255, 255 ]\n * ```\n *\n * @param {number} x - 输入 / input\n */\nfunction leftEncode(x: number): Uint8Array {\n  const result = []\n  do {\n    result.unshift(x & 0xFF)\n    x = x >> 8\n  } while (x > 0)\n  result.unshift(result.length)\n  return Uint8Array.from(result)\n}\n\n/**\n * SP.800-185 2.3.1:\n *\n * 右侧整数编码 / right_encode\n *\n * Inspired by https://github.com/paulmillr/noble-hashes\n *\n * ```ts\n * rightEncode(0) // Uint8Array(2) [ 0, 1 ]\n * rightEncode(18446744073709551615n) // Uint8Array(9) [ 255, 255, 255, 255, 255, 255, 255, 255, 8 ]\n * ```\n *\n * @param {number | bigint} x - 输入 / input\n */\nfunction rightEncode(x: number): Uint8Array {\n  const result = []\n  do {\n    result.unshift(x & 0xFF)\n    x = x >> 8\n  } while (x > 0)\n  result.push(result.length)\n  return Uint8Array.from(result)\n}\n\n/**\n * SP.800-185 2.3.2:\n *\n * 字符编码 / encode_string\n *\n * 与规范文档不同, 这个实现不会进行串接操作, 而是返回一个数组, 串接操作在外部进行. 详细见 `bytepad` 函数.\n *\n * Unlike the specification document, this implementation does not perform concatenation operations, but returns an array, and the concatenation operation is performed externally. See `bytepad` function for details.\n *\n * ```ts\n * encodeString(K) // [left_encode(len(K)), K]\n * ```\n *\n * @param {string | Uint8Array} input - 输入 / input\n */\nfunction encodeString(input: string | Uint8Array) {\n  input = typeof input === 'string' ? UTF8(input) : input\n  return [leftEncode(input.byteLength << 3), input]\n}\n\n/**\n * SP.800-185 2.3.3:\n *\n * 在算法中 `bytePad` 涉及很多串接操作, 但对 `Javascript` 实现来说, 每次串接都意味着创建 `Uint8Array` 进行合并. 频繁地创建 `Uint8Array` 有可能导致性能问题.\n * 这是一个优化后的实现. 将输入 `X` 改为数组, 最后也返回数组, 将合并操作移动到外部.\n *\n * The `bytePad` is used by many algorithms which involves many concatenation operations, but for `Javascript` implementation, each concatenation means creating a `Uint8Array` for merging. Frequent creation of `Uint8Array` may cause performance issues.\n * This is an optimized implementation. The input `X` is changed to an array, and the final return is also an array. The merge operation is moved to the outside.\n *\n *\n * ```ts\n * bytepad(X, w) = left_encode(w) || X0 || ... || Xn || 0^z\n * ```\n *\n * @param {Uint8Array} X - 输入数组 / input array\n * @param {number} w - 字节倍数 / byte multiple\n */\nfunction bytepad(X: Uint8Array[], w: number): Uint8Array[] {\n  if (w <= 0) {\n    throw new KitError('w must be greater than 0')\n  }\n\n  // 使用 leftEncode 函数编码 w\n  const left_encoded_w = leftEncode(w)\n\n  // z = left_encode(w) || X0 || ... || Xn\n\n  // 计算 z 的有效字节长度总和, 用于计算填充零字节的数量\n  let z_byte = left_encoded_w.length\n  X.forEach(x => z_byte += x.length)\n\n  // 计算需要填充的零字节的数量\n  const zero_byte = w - z_byte % w\n\n  X.unshift(left_encoded_w)\n  X.push(new Uint8Array(zero_byte))\n\n  return X\n}\n\n/**\n * `cSHAKE` 填充函数 / Padding Function\n *\n * ```ts\n * M || 00 || 10*1\n * ```\n *\n * @param {number} r_byte - 处理速率 / Rate\n */\nconst cshakePadding: Sha3Padding = (r_byte: number) => {\n  return (M: Uint8Array) => {\n    const sig_byte = M.length\n    const pad_byte = r_byte - (sig_byte % r_byte)\n    const P = new Uint8Array(sig_byte + pad_byte)\n    P.set(M)\n    if (pad_byte === 1) {\n      P[sig_byte] = 0x84\n    }\n    P[sig_byte] = 0x04\n    P[P.length - 1] |= 0x80\n    return P\n  }\n}\n\n// * cSHAKE\n\n/**\n * @param {number} d - 输出长度 / Digest Size (bit)\n * @param {Uint8Array} N - 函数名 / Function name\n * @param {Uint8Array} S - 自定义参数 / Customization\n * @param {number} c - 安全容量 / capacity (bit)\n * @param {number} r_byte - 处理速率 / Rate (byte)\n * @param {Hash} SHAKE - SHAKE 函数\n */\nfunction cshake(\n  d: number,\n  N: Uint8Array,\n  S: Uint8Array,\n  c: number,\n  r_byte: number,\n  SHAKE: typeof shake128,\n) {\n  if (N.byteLength === 0 && S.byteLength === 0) {\n    return (M: Uint8Array) => SHAKE(d)(M)\n  }\n  return (M: Uint8Array) => {\n    const P = bytepad([...encodeString(N), ...encodeString(S)], r_byte)\n    P.push(M)\n    return Keccak_c(c, d, cshakePadding)(joinBuffer(...P))\n  }\n}\n\n/**\n * `cSHAKE128` 是 `SHAKE128` 的可定制变体\n *\n * `cSHAKE128` is a customizable variant of `SHAKE128`\n *\n * @param {number} d - 输出长度 / Digest Size (bit)\n * @param {Uint8Array} [N] - 函数名 / Function name\n * @param {Uint8Array} [S] - 自定义参数 / Customization\n */\nexport function cshake128(d: number, N = new Uint8Array(), S = new Uint8Array()) {\n  return createHash(\n    cshake(d, N, S, 256, 168, shake128),\n    {\n      ALGORITHM: `cSHAKE128/${d}`,\n      BLOCK_SIZE: 168,\n      DIGEST_SIZE: d >> 3,\n    },\n  )\n}\n\n/**\n * `cSHAKE256` 是 `SHAKE256` 的可定制变体\n *\n * `cSHAKE256` is a customizable variant of `SHAKE256`\n *\n * @param {number} d - 输出长度 / Digest Size (bit)\n * @param {Uint8Array} [N] - 函数名 / Function name\n * @param {Uint8Array} [S] - 自定义参数 / Customization\n */\nexport function cshake256(d: number, N = new Uint8Array(), S = new Uint8Array()) {\n  return createHash(\n    cshake(d, N, S, 512, 136, shake256),\n    {\n      ALGORITHM: `cSHAKE256/${d}`,\n      BLOCK_SIZE: 136,\n      DIGEST_SIZE: d >> 3,\n    },\n  )\n}\n\n// * KMAC\n\n/**\n * @param {number} d - 输出长度 / Digest Size (bit)\n * @param {Uint8Array} S - 自定义参数 / Customization\n * @param {number} c - 安全容量 / capacity (bit)\n * @param {number} r_byte - 处理速率 / Rate (byte)\n * @param {boolean} XOF - 是否为 XOF 模式 / XOF mode\n */\nfunction kmac(\n  d: number,\n  S: Uint8Array,\n  c: number,\n  r_byte: number,\n  XOF: boolean,\n) {\n  return (K: Uint8Array, M: Uint8Array) => {\n    const X = bytepad([...encodeString('KMAC'), ...encodeString(S)], r_byte)\n    X.push(...bytepad(encodeString(K), r_byte))\n    X.push(M)\n    X.push(rightEncode(XOF ? 0 : d))\n    return Keccak_c(c, d, cshakePadding)(joinBuffer(...X))\n  }\n}\n\n/**\n * Keccak 消息认证码 (KMAC) 算法\n * `KMAC128` 是 `KMAC` 的变体, 由 `cSHAKE128` 构建\n *\n * The Keccak Message Authentication Code (KMAC) algorithm\n * `KMAC128` is a variant of `KMAC`, build from `cSHAKE128`\n *\n * @param {number} d - 输出长度 / Digest Size (bit)\n * @param {Uint8Array} S - 自定义参数 / Customization\n * @param {number} k_size - 推荐密钥大小 / Recommended key size (bit)\n */\nexport function kmac128(d: number, S = new Uint8Array(0), k_size: number = 128): KeyHash {\n  return createKeyHash(\n    kmac(d, S, 256, 168, false),\n    {\n      ALGORITHM: `KMAC128/${d}`,\n      BLOCK_SIZE: 168,\n      DIGEST_SIZE: d >> 3,\n      KEY_SIZE: k_size >> 3,\n    },\n  )\n}\n\n/**\n * Keccak 消息认证码 (KMAC) 算法\n * `KMAC256` 是 `KMAC` 的变体, 由 `cSHAKE256` 构建\n *\n * The Keccak Message Authentication Code (KMAC) algorithm\n * `KMAC256` is a variant of `KMAC`, build from `cSHAKE256`\n *\n * @param {number} d - 输出长度 / Digest Size (bit)\n * @param {Uint8Array} S - 自定义参数 / Customization\n * @param {number} k_size - 推荐密钥大小 / Recommended key size (bit)\n */\nexport function kmac256(d: number, S = new Uint8Array(0), k_size: number = 256): KeyHash {\n  return createKeyHash(\n    kmac(d, S, 512, 136, false),\n    {\n      ALGORITHM: `KMAC256/${d}`,\n      BLOCK_SIZE: 136,\n      DIGEST_SIZE: d >> 3,\n      KEY_SIZE: k_size >> 3,\n    },\n  )\n}\n\n/**\n * 可变长度输出的 `KMAC`\n * `KMAC128XOF` 是 `KMAC128` 的 XOF 模式, 由 `cSHAKE128` 构建\n *\n * `KMAC` with Arbitrary-Length Output\n * `KMAC128XOF` is a XOF mode of `KMAC128`, build from `cSHAKE128`\n *\n * @param {number} d - 输出长度 / Digest Size (bit)\n * @param {Uint8Array} S - 自定义参数 / Customization\n * @param {number} k_size - 推荐密钥大小 / Recommended key size (bit)\n */\nexport function kmac128XOF(d: number, S = new Uint8Array(0), k_size: number = 128): KeyHash {\n  return createKeyHash(\n    kmac(d, S, 256, 168, true),\n    {\n      ALGORITHM: `KMAC128XOF/${d}`,\n      BLOCK_SIZE: 168,\n      DIGEST_SIZE: d >> 3,\n      KEY_SIZE: k_size >> 3,\n    },\n  )\n}\n\n/**\n * 可变长度输出的 `KMAC`\n * `KMAC256XOF` 是 `KMAC256` 的 XOF 模式, 由 `cSHAKE256` 构建\n *\n * `KMAC` with Arbitrary-Length Output\n * `KMAC256XOF` is a XOF mode of `KMAC256`, build from `cSHAKE256`\n *\n * @param {number} d - 输出长度 / Digest Size (bit)\n * @param {Uint8Array} S - 自定义参数 / Customization\n * @param {number} k_size - 推荐密钥大小 / recommended key size (bit)\n */\nexport function kmac256XOF(d: number, S = new Uint8Array(0), k_size: number = 256): KeyHash {\n  return createKeyHash(\n    kmac(d, S, 512, 136, true),\n    {\n      ALGORITHM: `KMAC256XOF/${d}`,\n      BLOCK_SIZE: 136,\n      DIGEST_SIZE: d >> 3,\n      KEY_SIZE: k_size >> 3,\n    },\n  )\n}\n\n// * TupleHash\n\n/**\n * @param {number} d - 输出长度 / Digest Size (bit)\n * @param {Uint8Array} S - 自定义参数 / Customization\n * @param {number} c - 安全容量 / capacity (bit)\n * @param {number} r_byte - 处理速率 / Rate (byte)\n * @param {boolean} XOF - 是否为 XOF 模式 / XOF mode\n */\nfunction tuplehash(d: number, S: Uint8Array, c: number, r_byte: number, XOF: boolean) {\n  return (M: Uint8Array[]) => {\n    const X = bytepad([...encodeString('TupleHash'), ...encodeString(S)], r_byte)\n    M.forEach(m => X.push(...encodeString(m)))\n    X.push(rightEncode(XOF ? 0 : d))\n    return Keccak_c(c, d, cshakePadding)(joinBuffer(...X))\n  }\n}\n\n/**\n * `TupleHash` 是一个具有可变长度输出的 `SHA3` 派生散列函数, 旨在以一种明确的方式简单地散列输入字符串的元组, 这些字符串中的任何一个或全部都可以是空字符串.\n *\n * `TupleHash` is a `SHA3` derived hash function with variable-length output that is designed to simply hash a tuple of input strings, any or all of which may be empty strings, in an unambiguous way.\n *\n * @param {number} d - 输出长度 / Digest Size (bit)\n * @param {Uint8Array} S - 自定义参数 / Customization\n */\nexport function tuplehash128(d: number, S: Uint8Array = new Uint8Array()) {\n  return createTupleHash(\n    tuplehash(d, S, 256, 168, false),\n    {\n      ALGORITHM: `TupleHash128/${d}`,\n      BLOCK_SIZE: 168,\n      DIGEST_SIZE: d >> 3,\n    },\n  )\n}\n\n/**\n * `TupleHash` 是一个具有可变长度输出的 `SHA3` 派生散列函数, 旨在以一种明确的方式简单地散列输入字符串的元组, 这些字符串中的任何一个或全部都可以是空字符串.\n *\n * `TupleHash` is a `SHA3` derived hash function with variable-length output that is designed to simply hash a tuple of input strings, any or all of which may be empty strings, in an unambiguous way.\n *\n * @param {number} d - 输出长度 / Digest Size (bit)\n * @param {Uint8Array} S - 自定义参数 / Customization\n */\nexport function tuplehash256(d: number, S: Uint8Array = new Uint8Array()) {\n  return createTupleHash(\n    tuplehash(d, S, 512, 136, false),\n    {\n      ALGORITHM: `TupleHash256/${d}`,\n      BLOCK_SIZE: 136,\n      DIGEST_SIZE: d >> 3,\n    },\n  )\n}\n\n/**\n * 可变长度输出的 `TupleHash`\n *\n * `TupleHash` with Arbitrary-Length Output\n *\n * @param {number} d - 输出长度 / Digest Size (bit)\n * @param {Uint8Array} S - 自定义参数 / Customization\n */\nexport function tuplehash128XOF(d: number, S: Uint8Array = new Uint8Array()) {\n  return createTupleHash(\n    tuplehash(d, S, 256, 168, true),\n    {\n      ALGORITHM: `TupleHash128XOF/${d}`,\n      BLOCK_SIZE: 168,\n      DIGEST_SIZE: d >> 3,\n    },\n  )\n}\n\n/**\n * 可变长度输出的 `TupleHash`\n *\n * `TupleHash` with Arbitrary-Length Output\n *\n * @param {number} d - 输出长度 / Digest Size (bit)\n * @param {Uint8Array} S - 自定义参数 / Customization\n */\nexport function tuplehash256XOF(d: number, S: Uint8Array = new Uint8Array()) {\n  return createTupleHash(\n    tuplehash(d, S, 512, 136, true),\n    {\n      ALGORITHM: `TupleHash256XOF/${d}`,\n      BLOCK_SIZE: 136,\n      DIGEST_SIZE: d >> 3,\n    },\n  )\n}\n\n// * ParallelHash\n\n// ! Note: This ParallelHash does not actually perform parallel computation, because writing multi-threaded in JavaScript is not easy.\n// ! 注意: 此 ParallelHash 实际上并不执行并行计算, 因为在 JavaScript 写多线程并不轻松.\n\n// TODO 计划引入 `multithreading` 依赖, 实现真正的并行计算\n\n/**\n * @param {number} b - 状态大小 / State size (bit)\n * @param {number} d - 输出长度 / Digest Size (bit)\n * @param {Uint8Array} S - 自定义参数 / Customization\n * @param {number} c - 安全容量 / capacity (bit)\n * @param {number} r_byte - 处理速率 / Rate (byte)\n * @param {boolean} XOF - 是否为 XOF 模式 / XOF mode\n */\nfunction parallelhash(b: number, d: number, S: Uint8Array, c: number, r_byte: number, XOF: boolean, SHAKE: Hash) {\n  const bByte = b >> 3\n  return (M: Uint8Array) => {\n    const n = Math.ceil(M.byteLength / bByte)\n    const X = bytepad([...encodeString('ParallelHash'), ...encodeString(S)], r_byte)\n    X.push(leftEncode(b))\n\n    for (let i = 0; i < n; i++) {\n      const B = M.slice(i * (b << 3), (i + 1) * (b << 3))\n      X.push(SHAKE(B))\n    }\n\n    X.push(rightEncode(n))\n    X.push(rightEncode(XOF ? 0 : d))\n\n    return Keccak_c(c, d, cshakePadding)(joinBuffer(...X))\n  }\n}\n\n/**\n * `ParallelHash` 的目的是利用现代处理器中可用的并行性, 支持对非常长的字符串进行高效散列.\n *\n * The purpose of `ParallelHash` is to support the efficient hashing of very long strings, by taking advantage of the parallelism available in modern processors.\n *\n * @param {number} b - 状态大小 / State size (bit)\n * @param {number} d - 输出长度 / Digest Size (bit)\n * @param {Uint8Array} S - 自定义参数 / Customization\n */\nexport function parallelhash128(b: number, d: number, S: Uint8Array = new Uint8Array()) {\n  return createHash(\n    parallelhash(b, d, S, 256, 168, false, shake128(256)),\n    {\n      ALGORITHM: `ParallelHash128/${d}`,\n      BLOCK_SIZE: 168,\n      DIGEST_SIZE: d >> 3,\n    },\n  )\n}\n\n/**\n * `ParallelHash` 的目的是利用现代处理器中可用的并行性, 支持对非常长的字符串进行高效散列.\n *\n * The purpose of `ParallelHash` is to support the efficient hashing of very long strings, by taking advantage of the parallelism available in modern processors.\n *\n * @param {number} b - 状态大小 / State size (bit)\n * @param {number} d - 输出长度 / Digest Size (bit)\n * @param {Uint8Array} S - 自定义参数 / Customization\n */\nexport function parallelhash256(b: number, d: number, S: Uint8Array = new Uint8Array()) {\n  return createHash(\n    parallelhash(b, d, S, 512, 136, false, shake256(512)),\n    {\n      ALGORITHM: `ParallelHash256/${d}`,\n      BLOCK_SIZE: 136,\n      DIGEST_SIZE: d >> 3,\n    },\n  )\n}\n\n/**\n * 可变长度输出的 `ParallelHash`\n *\n * `ParallelHash` with Arbitrary-Length Output\n *\n * @param {number} b - 状态大小 / State size (bit)\n * @param {number} d - 输出长度 / Digest Size (bit)\n * @param {Uint8Array} S - 自定义参数 / Customization\n */\nexport function parallelhash128XOF(b: number, d: number, S: Uint8Array = new Uint8Array()) {\n  return createHash(\n    parallelhash(b, d, S, 256, 168, true, shake128(256)),\n    {\n      ALGORITHM: `ParallelHash128XOF`,\n      BLOCK_SIZE: 168,\n      DIGEST_SIZE: d >> 3,\n    },\n  )\n}\n\n/**\n * 可变长度输出的 `ParallelHash`\n *\n * `ParallelHash` with Arbitrary-Length Output\n *\n * @param {number} b - 状态大小 / State size (bit)\n * @param {number} d - 输出长度 / Digest Size (bit)\n * @param {Uint8Array} S - 自定义参数 / Customization\n */\nexport function parallelhash256XOF(b: number, d: number, S: Uint8Array = new Uint8Array()) {\n  return createHash(\n    parallelhash(b, d, S, 512, 136, true, shake256(512)),\n    {\n      ALGORITHM: `ParallelHash256XOF`,\n      BLOCK_SIZE: 136,\n      DIGEST_SIZE: d >> 3,\n    },\n  )\n}\n","import { UTF8 } from '../core/codec'\nimport { createHash } from '../core/hash'\nimport { KitError, U8, genBitMask, rotateR } from '../core/utils'\n\n// * Constants\n\nconst K = new BigUint64Array([0x428A2F98D728AE22n, 0x7137449123EF65CDn, 0xB5C0FBCFEC4D3B2Fn, 0xE9B5DBA58189DBBCn, 0x3956C25BF348B538n, 0x59F111F1B605D019n, 0x923F82A4AF194F9Bn, 0xAB1C5ED5DA6D8118n, 0xD807AA98A3030242n, 0x12835B0145706FBEn, 0x243185BE4EE4B28Cn, 0x550C7DC3D5FFB4E2n, 0x72BE5D74F27B896Fn, 0x80DEB1FE3B1696B1n, 0x9BDC06A725C71235n, 0xC19BF174CF692694n, 0xE49B69C19EF14AD2n, 0xEFBE4786384F25E3n, 0x0FC19DC68B8CD5B5n, 0x240CA1CC77AC9C65n, 0x2DE92C6F592B0275n, 0x4A7484AA6EA6E483n, 0x5CB0A9DCBD41FBD4n, 0x76F988DA831153B5n, 0x983E5152EE66DFABn, 0xA831C66D2DB43210n, 0xB00327C898FB213Fn, 0xBF597FC7BEEF0EE4n, 0xC6E00BF33DA88FC2n, 0xD5A79147930AA725n, 0x06CA6351E003826Fn, 0x142929670A0E6E70n, 0x27B70A8546D22FFCn, 0x2E1B21385C26C926n, 0x4D2C6DFC5AC42AEDn, 0x53380D139D95B3DFn, 0x650A73548BAF63DEn, 0x766A0ABB3C77B2A8n, 0x81C2C92E47EDAEE6n, 0x92722C851482353Bn, 0xA2BFE8A14CF10364n, 0xA81A664BBC423001n, 0xC24B8B70D0F89791n, 0xC76C51A30654BE30n, 0xD192E819D6EF5218n, 0xD69906245565A910n, 0xF40E35855771202An, 0x106AA07032BBD1B8n, 0x19A4C116B8D2D0C8n, 0x1E376C085141AB53n, 0x2748774CDF8EEB99n, 0x34B0BCB5E19B48A8n, 0x391C0CB3C5C95A63n, 0x4ED8AA4AE3418ACBn, 0x5B9CCA4F7763E373n, 0x682E6FF3D6B2B8A3n, 0x748F82EE5DEFB2FCn, 0x78A5636F43172F60n, 0x84C87814A1F0AB72n, 0x8CC702081A6439ECn, 0x90BEFFFA23631E28n, 0xA4506CEBDE82BDE9n, 0xBEF9A3F7B2C67915n, 0xC67178F2E372532Bn, 0xCA273ECEEA26619Cn, 0xD186B8C721C0C207n, 0xEADA7DD6CDE0EB1En, 0xF57D4F7FEE6ED178n, 0x06F067AA72176FBAn, 0x0A637DC5A2C898A6n, 0x113F9804BEF90DAEn, 0x1B710B35131C471Bn, 0x28DB77F523047D84n, 0x32CAAB7B40C72493n, 0x3C9EBE0A15C9BEBCn, 0x431D67C49C100D4Cn, 0x4CC5D4BECB3E42B6n, 0x597F299CFC657E2An, 0x5FCB6FAB3AD6FAECn, 0x6C44198C4A475817n])\n\n// * Function\nconst mask64 = genBitMask(64)\nconst rotateR64 = (x: bigint, n: bigint) => rotateR(64, x, n, mask64)\n\nconst Ch = (x: bigint, y: bigint, z: bigint) => (x & y) ^ ((~x) & z)\nconst Maj = (x: bigint, y: bigint, z: bigint) => (x & y) ^ (x & z) ^ (y & z)\nconst Sigma0 = (x: bigint) => rotateR64(x, 28n) ^ rotateR64(x, 34n) ^ rotateR64(x, 39n)\nconst Sigma1 = (x: bigint) => rotateR64(x, 14n) ^ rotateR64(x, 18n) ^ rotateR64(x, 41n)\nconst sigma0 = (x: bigint) => rotateR64(x, 1n) ^ rotateR64(x, 8n) ^ (x >> 7n)\nconst sigma1 = (x: bigint) => rotateR64(x, 19n) ^ rotateR64(x, 61n) ^ (x >> 6n)\n\n/**\n * SHA-512/t IV 生成函数 / generator\n *\n * ```ts\n * (0 < t < 512) && (t !== 384)\n * ```\n *\n * @param {number} t - 截断长度 / truncation length (bit)\n */\nfunction IVGen(t: number) {\n  if (t <= 0) {\n    throw new KitError('SHA-512 truncation must be greater than 0')\n  }\n  if (t >= 512) {\n    throw new KitError('SHA-512 truncation must be less than 512')\n  }\n  if (t === 384) {\n    throw new KitError('SHA-512 truncation must not be 384')\n  }\n\n  const state = new U8(64)\n  const state_view = state.view(8)\n  state_view.set(0, 0x6A09E667F3BCC908n ^ 0xA5A5A5A5A5A5A5A5n)\n  state_view.set(1, 0xBB67AE8584CAA73Bn ^ 0xA5A5A5A5A5A5A5A5n)\n  state_view.set(2, 0x3C6EF372FE94F82Bn ^ 0xA5A5A5A5A5A5A5A5n)\n  state_view.set(3, 0xA54FF53A5F1D36F1n ^ 0xA5A5A5A5A5A5A5A5n)\n  state_view.set(4, 0x510E527FADE682D1n ^ 0xA5A5A5A5A5A5A5A5n)\n  state_view.set(5, 0x9B05688C2B3E6C1Fn ^ 0xA5A5A5A5A5A5A5A5n)\n  state_view.set(6, 0x1F83D9ABFB41BD6Bn ^ 0xA5A5A5A5A5A5A5A5n)\n  state_view.set(7, 0x5BE0CD19137E2179n ^ 0xA5A5A5A5A5A5A5A5n)\n\n  return digest(state, UTF8(`SHA-512/${t}`))\n}\n\n// * Algorithm\n\nfunction digest(state: U8, message: Uint8Array) {\n  // * 初始化\n  state = state.slice(0)\n  const state_view = state.view(8)\n\n  const m_byte = message.byteLength\n  const m_bit = BigInt(m_byte) << 3n\n  const block_size = 128\n  // ceil((m_byte + 17) / 128)\n  const block_total = (m_byte + 17 + 127) >> 7\n\n  // * 填充\n  const p = new U8(block_total * block_size)\n  p.set(message)\n\n  // appending the bit '1' to the message\n  p[m_byte] = 0x80\n\n  // appending length\n  const p_view = new DataView(p.buffer)\n  p_view.setBigUint64(p.byteLength - 16, m_bit >> 32n)\n  p_view.setBigUint64(p.byteLength - 8, m_bit & 0xFFFFFFFFFFFFFFFFn)\n\n  // * 分块处理\n  for (let offset = 0; offset < p.length; offset += block_size) {\n    /** B(n) = p[offset:offset + block_size] */\n\n    // 准备状态字\n    const H0 = state_view.get(0)\n    const H1 = state_view.get(1)\n    const H2 = state_view.get(2)\n    const H3 = state_view.get(3)\n    const H4 = state_view.get(4)\n    const H5 = state_view.get(5)\n    const H6 = state_view.get(6)\n    const H7 = state_view.get(7)\n    let a = H0\n    let b = H1\n    let c = H2\n    let d = H3\n    let e = H4\n    let f = H5\n    let g = H6\n    let h = H7\n\n    // 合并执行 扩展 & 压缩\n    const W = new BigUint64Array(80)\n    for (let i = 0; i < W.length; i++) {\n      // 扩展\n      if (i < 16)\n        // W[i] = B(n)[i]\n        W[i] = p_view.getBigUint64(offset + (i << 3))\n      else\n        W[i] = sigma1(W[i - 2]) + W[i - 7] + sigma0(W[i - 15]) + W[i - 16]\n\n      // 压缩\n      const T1 = h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i]\n      const T2 = Sigma0(a) + Maj(a, b, c)\n      h = g\n      g = f\n      f = e\n      e = (d + T1) & 0xFFFFFFFFFFFFFFFFn\n      d = c\n      c = b\n      b = a\n      a = (T1 + T2) & 0xFFFFFFFFFFFFFFFFn\n    }\n\n    // 更新状态字\n    state_view.set(0, H0 + a)\n    state_view.set(1, H1 + b)\n    state_view.set(2, H2 + c)\n    state_view.set(3, H3 + d)\n    state_view.set(4, H4 + e)\n    state_view.set(5, H5 + f)\n    state_view.set(6, H6 + g)\n    state_view.set(7, H7 + h)\n  }\n\n  // * 返回状态\n  return state\n}\n\nfunction sha384Digest(M: Uint8Array) {\n  // * 初始化 SHA-384 状态\n  const state = new U8(64)\n  const state_view = state.view(8)\n  state_view.set(0, 0xCBBB9D5DC1059ED8n)\n  state_view.set(1, 0x629A292A367CD507n)\n  state_view.set(2, 0x9159015A3070DD17n)\n  state_view.set(3, 0x152FECD8F70E5939n)\n  state_view.set(4, 0x67332667FFC00B31n)\n  state_view.set(5, 0x8EB44A8768581511n)\n  state_view.set(6, 0xDB0C2E0D64F98FA7n)\n  state_view.set(7, 0x47B5481DBEFA4FA4n)\n\n  return digest(state, M).slice(0, 48)\n}\n\nfunction sha512Digest(M: Uint8Array) {\n  // * 初始化 SHA-512 状态\n  const state = new U8(64)\n  const state_view = state.view(8)\n  state_view.set(0, 0x6A09E667F3BCC908n)\n  state_view.set(1, 0xBB67AE8584CAA73Bn)\n  state_view.set(2, 0x3C6EF372FE94F82Bn)\n  state_view.set(3, 0xA54FF53A5F1D36F1n)\n  state_view.set(4, 0x510E527FADE682D1n)\n  state_view.set(5, 0x9B05688C2B3E6C1Fn)\n  state_view.set(6, 0x1F83D9ABFB41BD6Bn)\n  state_view.set(7, 0x5BE0CD19137E2179n)\n\n  return digest(state, M)\n}\n\nexport const sha384 = createHash(\n  sha384Digest,\n  {\n    ALGORITHM: 'SHA-384',\n    BLOCK_SIZE: 128,\n    DIGEST_SIZE: 48,\n    OID: '2.16.840.1.101.3.4.2.2',\n  },\n)\n\nexport const sha512 = createHash(\n  sha512Digest,\n  {\n    ALGORITHM: 'SHA-512',\n    BLOCK_SIZE: 128,\n    DIGEST_SIZE: 64,\n    OID: '2.16.840.1.101.3.4.2.3',\n  },\n)\n\n/**\n * @param {number} t - 截断长度 / truncation length (bit)\n */\nexport function sha512t(t: number) {\n  // * 初始化 SHA-512/t 状态\n  const status = IVGen(t)\n\n  let OID: string | undefined\n  if (t === 224)\n    OID = '2.16.840.1.101.3.4.2.5'\n  if (t === 256)\n    OID = '2.16.840.1.101.3.4.2.6'\n\n  return createHash(\n    (M: Uint8Array) => digest(status, M).slice(0, t >> 3),\n    {\n      ALGORITHM: `SHA-512/${t}`,\n      BLOCK_SIZE: 128,\n      DIGEST_SIZE: t >> 3,\n      OID,\n    },\n  )\n}\n","import type { KeyHash } from '../core/hash'\nimport { U8 } from '../core/utils'\nimport { hmac } from './hmac'\nimport { sha1 } from './sha1'\n\n/**\n * 生成 HOTP (基于计数的一次性密码)\n *\n * Generate HOTP (HMAC-based One-Time Password)\n *\n * @param {Uint8Array} secret - 密钥 / Secret key\n * @param {Uint8Array} counter - 计数器 / Counter\n * @param {KeyHash} mac - 带密钥的加密散列算法 / Keyed Hashing Algorithm (default: HMAC-SHA1)\n * @returns {U8} - 返回的 HOTP 字节数组 / HOTP byte array\n */\nfunction hotp(\n  secret: Uint8Array,\n  counter: Uint8Array,\n  mac: KeyHash = hmac(sha1),\n): U8 {\n  const HS = mac(secret, counter)\n  const offset = HS[HS.length - 1] & 0x0F\n  return HS.slice(offset, offset + 4)\n}\n\ninterface TOTP {\n  /**\n   * 生成 TOTP (时间同步的一次性密码)\n   *\n   * Generate TOTP (Time-based One-Time Password)\n   *\n   * @param {Uint8Array} secret - 密钥 / Secret key\n   * @returns {string} - 返回的 TOTP 字符串 / TOTP string\n   */\n  (secret: Uint8Array): string\n}\n\ninterface TOTPParams {\n  /**\n   * 带密钥的加密散列算法 / Keyed Hashing Algorithm (default: HMAC-SHA1)\n   */\n  mac?: KeyHash\n  /**\n   * 当前时间戳 / Current timestamp (default: Date.now() milliseconds)\n   *\n   * 指定此参数时，将不再从 `Date.now()` 获取当前时间戳.\n   *\n   * When this parameter is specified, the current timestamp will not be obtained from `Date.now()`.\n   */\n  current?: number\n  /**\n   * 纪元时间戳 / Epoch timestamp (default: 0 milliseconds)\n   */\n  epoch?: number\n  /**\n   * 时间步长 / Time step (default: 30000 milliseconds)\n   */\n  step?: number\n  /**\n   * 计数器 / Counter\n   *\n   * `counter = (cuttent_time - epoch_time) / step`\n   *\n   * 指定此参数时，将不再从当前时间戳计算计数器.\n   *\n   * When this parameter is specified, the counter will not be calculated from the current timestamp.\n   */\n  counter?: number | bigint | Uint8Array\n  /**\n   * 返回的数字位数 / Number of digits in the returned OTP (default: 6)\n   */\n  digits?: number\n}\n\n/**\n * 生成 TOTP (时间同步的一次性密码)\n *\n * Generate TOTP (Time-based One-Time Password)\n *\n * @param {Uint8Array} secret - 密钥 / Secret key\n * @returns {string} - 返回的 TOTP 字符串 / TOTP string\n */\nexport function totp(secret: Uint8Array): string\n/**\n * 创建 TOTP 函数 / Create a TOTP function\n *\n * @param {TOTPParams} params - TOTP 参数 / TOTP parameters\n * @returns {TOTP} - 返回的 TOTP 函数 / TOTP function\n */\nexport function totp(params: TOTPParams): TOTP\nexport function totp(\n  args: Uint8Array | TOTPParams,\n) {\n  if (args instanceof Uint8Array) {\n    const K = args\n    const C = U8.fromBI(BigInt(Math.floor(Date.now() / 30000)), 8, false)\n    const HS = hotp(K, C, hmac(sha1))\n    const OTP = 0\n      | (HS[0] & 0x7F) << 24\n      | (HS[1] & 0xFF) << 16\n      | (HS[2] & 0xFF) << 8\n      | (HS[3] & 0xFF)\n    return (OTP % 1_000_000)\n      .toString()\n      .padStart(6, '0')\n  }\n\n  return (secret: Uint8Array) => {\n    let {\n      mac = hmac(sha1),\n      current = Date.now(),\n      epoch = 0,\n      step = 30000,\n      counter = 0,\n      digits = 6,\n    } = args || {}\n\n    if (!counter) {\n      const T = BigInt(Math.floor((current - epoch) / step))\n      counter = U8.fromBI(T, 8, false)\n    }\n    if (!(counter instanceof Uint8Array)) {\n      counter = U8.fromBI(BigInt(counter), 8, false)\n    }\n\n    const BIN = hotp(secret, counter, mac)\n    const OTP = 0\n      | (BIN[0] & 0x7F) << 24\n      | (BIN[1] & 0xFF) << 16\n      | (BIN[2] & 0xFF) << 8\n      | (BIN[3] & 0xFF)\n    return (OTP % (10 ** digits))\n      .toString()\n      .padStart(digits, '0')\n  }\n}\n"],"names":["gcd","i","SBox","Cipher","W","S","L","A","cipher","P","S1","T","F","P0","P1","K","Ch","Maj","Sigma0","Sigma1","sigma0","sigma1","digest","r","FF","GG","a","b","p","bit","C","mask64","R"],"mappings":"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AAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,CAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,KAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,CAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,CAAA,EAAM,GAAM,EAAA,CAAA,EAAM,IAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,CAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,CAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,KAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,CAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,IAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,KAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,CAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,KAAM,GAAM,EAAA,CAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,CAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,IAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAI,CAAC,CAAA,CAAA;AAC5hD,MAAM,OAAU,GAAA,IAAI,UAAW,CAAA,CAAC,EAAM,EAAA,CAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,IAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,CAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,IAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,IAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,CAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,CAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,CAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,CAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,CAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,IAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,KAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,CAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,KAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA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M,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,IAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,KAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,CAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,KAAM,GAAM,EAAA,CAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,CAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,IAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAI,CAAC,CAAA,CAAA;AAC7hD,MAAM,KAAQ,GAAA,IAAI,UAAW,CAAA,CAAC,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,KAAM,GAAM,EAAA,EAAA,EAAM,CAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,CAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,CAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,CAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,KAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,CAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,CAAA,EAAM,GAAM,EAAA,EAAA,EAAM,KAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,CAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,CAAA,EAAM,GAAM,EAAA,EAAA,EAAM,KAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,CAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,KAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,KAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAI,CAAC,CAAA,CAAA;AAC7hD,MAAM,KAAQ,GAAA,IAAI,UAAW,CAAA,CAAC,EAAM,EAAA,CAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,IAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,CAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,IAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,IAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,CAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,CAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,CAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,CAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,CAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,IAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,KAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,CAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,KAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,CAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAI,CAAC,CAAA,CAAA;AAC7hD,MAAM,KAAQ,GAAA,IAAI,UAAW,CAAA,CAAC,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,CAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,IAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,KAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,CAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,CAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,CAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,KAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,CAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,KAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,CAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,IAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,KAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,CAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,CAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,KAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,CAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,CAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAI,CAAC,CAAA,CAAA;AAE7hD,MAAM,EAAA,GAAK,IAAI,UAAW,CAAA,CAAC,IAAM,GAAM,EAAA,GAAA,EAAM,KAAM,EAAM,EAAA,EAAA,EAAM,IAAM,GAAM,EAAA,GAAA,EAAM,IAAM,GAAM,EAAA,GAAA,EAAM,KAAM,GAAM,EAAA,GAAA,EAAM,GAAI,CAAC,CAAA,CAAA;AAC1H,MAAM,EAAA,GAAK,IAAI,UAAW,CAAA,CAAC,KAAM,GAAM,EAAA,EAAA,EAAM,KAAM,GAAM,EAAA,EAAA,EAAM,KAAM,EAAM,EAAA,GAAA,EAAM,IAAM,GAAM,EAAA,GAAA,EAAM,KAAM,EAAM,EAAA,GAAA,EAAM,GAAI,CAAC,CAAA,CAAA;AAC1H,MAAM,EAAA,GAAK,IAAI,UAAW,CAAA,CAAC,KAAM,GAAM,EAAA,EAAA,EAAM,IAAM,EAAM,EAAA,EAAA,EAAM,KAAM,GAAM,EAAA,CAAA,EAAM,IAAM,GAAM,EAAA,GAAA,EAAM,GAAM,GAAM,EAAA,GAAA,EAAM,EAAI,CAAC,CAAA,CAAA;AAI1H,SAAS,KAAA,CAAM,GAAe,CAAW,EAAA;AACvC,EAAA,MAAM,SAAS,CAAE,CAAA,MAAA,CAAA;AACjB,EAAA,MAAM,QAAQ,MAAU,IAAA,CAAA,CAAA;AAGxB,EAAA,MAAM,QAAQ,CAAI,GAAA,KAAA,CAAA;AAClB,EAAA,IAAI,UAAU,CAAG,EAAA;AACf,IAAO,OAAA,CAAA,CAAE,MAAM,CAAC,CAAA,CAAA;AAAA,GAClB;AAGA,EAAA,MAAM,aAAa,KAAS,IAAA,CAAA,CAAA;AAC5B,EAAA,MAAM,YAAY,KAAQ,GAAA,CAAA,CAAA;AAE1B,EAAA,MAAM,MAAS,GAAA,IAAI,EAAG,CAAA,CAAA,CAAE,MAAM,CAAA,CAAA;AAC9B,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,MAAA,EAAQ,CAAK,EAAA,EAAA;AAC/B,IAAM,MAAA,OAAA,GAAU,EAAE,CAAC,CAAA,CAAA;AACnB,IAAA,MAAM,IAAO,GAAA,CAAA,CAAA,CAAG,CAAI,GAAA,CAAA,IAAK,MAAM,CAAA,CAAA;AAE/B,IAAA,MAAA,CAAO,CAAC,CAAA,GAAK,OAAW,IAAA,SAAA,GAAc,QAAS,CAAI,GAAA,SAAA,CAAA;AAAA,GACrD;AAGA,EAAA,IAAI,aAAa,CAAG,EAAA;AAClB,IAAM,MAAA,IAAA,GAAO,IAAI,UAAA,CAAW,MAAM,CAAA,CAAA;AAClC,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,MAAA,EAAQ,CAAK,EAAA,EAAA;AAC/B,MAAA,MAAA,CAAO,CAAC,CAAA,GAAI,IAAM,CAAA,CAAA,CAAA,GAAI,cAAc,MAAM,CAAA,CAAA;AAAA,KAC5C;AAAA,GACF;AAEA,EAAO,OAAA,MAAA,CAAA;AACT,CAAA;AACA,SAAS,KAAA,CAAM,GAAe,CAAW,EAAA;AACvC,EAAA,MAAM,SAAS,CAAE,CAAA,MAAA,CAAA;AACjB,EAAA,MAAM,QAAQ,MAAU,IAAA,CAAA,CAAA;AAGxB,EAAA,MAAM,QAAQ,CAAI,GAAA,KAAA,CAAA;AAClB,EAAA,IAAI,UAAU,CAAG,EAAA;AACf,IAAO,OAAA,CAAA,CAAE,MAAM,CAAC,CAAA,CAAA;AAAA,GAClB;AAGA,EAAA,MAAM,aAAa,KAAS,IAAA,CAAA,CAAA;AAC5B,EAAA,MAAM,YAAY,KAAQ,GAAA,CAAA,CAAA;AAE1B,EAAA,MAAM,MAAS,GAAA,IAAI,EAAG,CAAA,CAAA,CAAE,MAAM,CAAA,CAAA;AAC9B,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,MAAA,EAAQ,CAAK,EAAA,EAAA;AAC/B,IAAM,MAAA,OAAA,GAAU,EAAE,CAAC,CAAA,CAAA;AACnB,IAAA,MAAM,IAAO,GAAA,CAAA,CAAA,CAAG,CAAI,GAAA,CAAA,GAAI,UAAU,MAAM,CAAA,CAAA;AAExC,IAAA,MAAA,CAAO,CAAC,CAAA,GAAK,OAAW,IAAA,SAAA,GAAc,QAAS,CAAI,GAAA,SAAA,CAAA;AAAA,GACrD;AAGA,EAAA,IAAI,aAAa,CAAG,EAAA;AAClB,IAAM,MAAA,IAAA,GAAO,IAAI,UAAA,CAAW,MAAM,CAAA,CAAA;AAClC,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,MAAA,EAAQ,CAAK,EAAA,EAAA;AAC/B,MAAA,MAAA,CAAO,CAAC,CAAI,GAAA,IAAA,CAAA,CAAM,CAAI,GAAA,UAAA,GAAa,UAAU,MAAM,CAAA,CAAA;AAAA,KACrD;AAAA,GACF;AAEA,EAAO,OAAA,MAAA,CAAA;AACT,CAAA;AACA,SAAS,GAAA,CAAI,GAAe,CAAe,EAAA;AACzC,EAAO,OAAA,CAAA,CAAE,GAAI,CAAA,CAAC,CAAG,EAAA,CAAA,KAAM,EAAE,CAAC,CAAA,GAAI,CAAE,CAAA,CAAC,CAAC,CAAA,CAAA;AACpC,CAAA;AAEA,SAAS,EAAA,CAAG,GAAe,EAAgB,EAAA;AACzC,EAAA,OAAOC,IAAE,GAAI,CAAA,GAAA,CAAI,CAAG,EAAA,EAAE,CAAC,CAAC,CAAA,CAAA;AAC1B,CAAA;AACA,SAAS,EAAA,CAAG,GAAe,EAAgB,EAAA;AACzC,EAAA,OAAOA,IAAE,GAAI,CAAA,GAAA,CAAI,CAAG,EAAA,EAAE,CAAC,CAAC,CAAA,CAAA;AAC1B,CAAA;AACA,SAAS,IAAI,CAAe,EAAA;AAC1B,EAAM,MAAA,CAAA,GAAI,IAAI,UAAA,CAAW,EAAE,CAAA,CAAA;AAK3B,EAAA,CAAA,CAAE,CAAC,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AACjB,EAAA,CAAA,CAAE,CAAC,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AACjB,EAAA,CAAA,CAAE,CAAC,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AACjB,EAAA,CAAA,CAAE,CAAC,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AACjB,EAAA,CAAA,CAAE,CAAC,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AACjB,EAAA,CAAA,CAAE,CAAC,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AACjB,EAAA,CAAA,CAAE,CAAC,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AACjB,EAAA,CAAA,CAAE,CAAC,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AACjB,EAAA,CAAA,CAAE,CAAC,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AACjB,EAAA,CAAA,CAAE,CAAC,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AACjB,EAAA,CAAA,CAAE,EAAE,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,EAAE,CAAC,CAAA,CAAA;AACnB,EAAA,CAAA,CAAE,EAAE,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,EAAE,CAAC,CAAA,CAAA;AACnB,EAAA,CAAA,CAAE,EAAE,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,EAAE,CAAC,CAAA,CAAA;AACnB,EAAA,CAAA,CAAE,EAAE,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,EAAE,CAAC,CAAA,CAAA;AACnB,EAAA,CAAA,CAAE,EAAE,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,EAAE,CAAC,CAAA,CAAA;AACnB,EAAA,CAAA,CAAE,EAAE,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,EAAE,CAAC,CAAA,CAAA;AACnB,EAAO,OAAA,CAAA,CAAA;AACT,CAAA;AACA,SAAS,IAAI,CAAe,EAAA;AAC1B,EAAM,MAAA,CAAA,GAAI,IAAI,UAAA,CAAW,EAAE,CAAA,CAAA;AAK3B,EAAA,CAAA,CAAE,CAAC,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AACjB,EAAA,CAAA,CAAE,CAAC,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AACjB,EAAA,CAAA,CAAE,CAAC,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AACjB,EAAA,CAAA,CAAE,CAAC,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AACjB,EAAA,CAAA,CAAE,CAAC,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AACjB,EAAA,CAAA,CAAE,CAAC,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AACjB,EAAA,CAAA,CAAE,CAAC,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AACjB,EAAA,CAAA,CAAE,CAAC,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AACjB,EAAA,CAAA,CAAE,CAAC,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AACjB,EAAA,CAAA,CAAE,CAAC,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AACjB,EAAA,CAAA,CAAE,EAAE,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,EAAE,CAAC,CAAA,CAAA;AACnB,EAAA,CAAA,CAAE,EAAE,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,EAAE,CAAC,CAAA,CAAA;AACnB,EAAA,CAAA,CAAE,EAAE,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,EAAE,CAAC,CAAA,CAAA;AACnB,EAAA,CAAA,CAAE,EAAE,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,EAAE,CAAC,CAAA,CAAA;AACnB,EAAA,CAAA,CAAE,EAAE,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,EAAE,CAAC,CAAA,CAAA;AACnB,EAAA,CAAA,CAAE,EAAE,CAAA,GAAI,KAAM,CAAA,CAAA,CAAE,EAAE,CAAC,CAAA,CAAA;AACnB,EAAO,OAAA,CAAA,CAAA;AACT,CAAA;AACA,SAASA,IAAE,CAAe,EAAA;AACxB,EAAM,MAAA,CAAA,GAAI,IAAI,UAAA,CAAW,EAAE,CAAA,CAAA;AAiB3B,EAAE,CAAA,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,EAAE,CAAI,GAAA,CAAA,CAAE,EAAE,CAAA,CAAA;AACtD,EAAE,CAAA,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,EAAE,CAAI,GAAA,CAAA,CAAE,EAAE,CAAA,CAAA;AACtD,EAAE,CAAA,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,EAAE,IAAI,CAAE,CAAA,EAAE,IAAI,CAAE,CAAA,EAAE,CAAI,GAAA,CAAA,CAAE,EAAE,CAAA,CAAA;AACxD,EAAE,CAAA,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,EAAE,IAAI,CAAE,CAAA,EAAE,IAAI,CAAE,CAAA,EAAE,CAAI,GAAA,CAAA,CAAE,EAAE,CAAA,CAAA;AACxD,EAAE,CAAA,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,EAAE,IAAI,CAAE,CAAA,EAAE,CAAI,GAAA,CAAA,CAAE,EAAE,CAAA,CAAA;AACvD,EAAE,CAAA,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,EAAE,IAAI,CAAE,CAAA,EAAE,CAAI,GAAA,CAAA,CAAE,EAAE,CAAA,CAAA;AACvD,EAAE,CAAA,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,EAAE,IAAI,CAAE,CAAA,EAAE,CAAI,GAAA,CAAA,CAAE,EAAE,CAAA,CAAA;AACvD,EAAE,CAAA,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,EAAE,IAAI,CAAE,CAAA,EAAE,CAAI,GAAA,CAAA,CAAE,EAAE,CAAA,CAAA;AACvD,EAAE,CAAA,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,EAAE,IAAI,CAAE,CAAA,EAAE,CAAI,GAAA,CAAA,CAAE,EAAE,CAAA,CAAA;AACvD,EAAE,CAAA,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,EAAE,IAAI,CAAE,CAAA,EAAE,CAAI,GAAA,CAAA,CAAE,EAAE,CAAA,CAAA;AACvD,EAAE,CAAA,CAAA,EAAE,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,EAAE,CAAI,GAAA,CAAA,CAAE,EAAE,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SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,YAAY,SAAY,EAAA,SAAA,EAAY,QAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,YAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,SAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,YAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,WAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,SAAA,EAAY,SAAY,EAAA,SAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,SAAY,EAAA,SAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAU,CAAC,CAAA;AAAA,IAChhG,IAAI,WAAA,CAAY,CAAC,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,QAAY,EAAA,UAAA,EAAY,UAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,QAAY,EAAA,QAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,SAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,YAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,QAAA,EAAY,SAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,QAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,YAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,QAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,SAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAA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UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,SAAA,EAAY,YAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,SAAA,EAAY,SAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,QAAA,EAAY,UAAY,EAAA,UAAA,EAAY,YAAY,SAAY,EAAA,UAAA,EAAY,SAAY,EAAA,QAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,SAAA,EAAY,SAAY,EAAA,SAAA,EAAY,SAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,SAAY,EAAA,UAAA,EAAY,YAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,CAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,QAAA,EAAY,UAAY,EAAA,UAAA,EAAY,WAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,QAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,YAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,YAAY,SAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,SAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAU,CAAC,CAAA,CAAA;AACniG,MAAM,UAAa,GAAA,IAAI,WAAY,CAAA,CAAC,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,YAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,QAAY,EAAA,SAAA,EAAY,SAAY,EAAA,UAAA,EAAY,SAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,YAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,CAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,YAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,YAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,SAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,SAAY,EAAA,SAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,QAAY,EAAA,UAAA,EAAY,SAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,SAAY,EAAA,SAAA,EAAY,SAAY,EAAA,SAAA,EAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,YAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,QAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,QAAA,EAAY,UAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,SAAA,EAAY,SAAY,EAAA,SAAA,EAAY,UAAY,EAAA,UAAA,EAAY,YAAY,SAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAAY,UAAY,EAAA,UAAA,EAA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A,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,CAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,CAAM,EAAA,GAAA,EAAM,KAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,CAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,CAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,KAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,CAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,IAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,CAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,CAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,CAAA,EAAM,KAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,KAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,CAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,KAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,KAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,CAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAA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,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,IAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,CAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,KAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,CAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,IAAM,EAAM,EAAA,CAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,CAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,IAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,CAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,IAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,CAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,CAAA,EAAM,KAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,CAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAI,CAAC,CAAA,CAAA;AAC1hD,MAAMC,IAAK,GAAA,IAAI,UAAW,CAAA,CAAC,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,IAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,CAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,CAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,CAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,KAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,KAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,CAAA,EAAM,GAAM,EAAA,CAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,KAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,KAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,CAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,KAAM,CAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,KAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,E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AAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,MAAM,IAAI,CAAA,CAAA;A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AM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,CAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,IAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,CAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,IAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,CAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,KAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,KAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,CAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,KAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,CAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAI,CAAC,CAAA,CAAA;AAC1hD,MAAM,EAAK,GAAA,IAAI,UAAW,CAAA,CAAC,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,CAAA,EAAM,KAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,CAAM,EAAA,EAAA,EAAM,KAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,CAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,KAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,CAAA,EAAM,CAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,KAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,KAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,CAAA,EAAM,GAAM,EAAA,GAAA,EAAM,EAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,EAAM,EAAA,GAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,EAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,EAAA,GAAA,EAAM,GAAM,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"}