{"version":3,"file":"index.node.mjs","sources":["../../ciphers/dist/aes.mjs","../../ciphers/dist/des.mjs","../../ciphers/dist/rc4.mjs","../../ciphers/dist/triple-des.mjs","../../kdfs/dist/evpkdf.mjs","../../kdfs/dist/pbkdf2.mjs","../src/preset-node.ts"],"sourcesContent":["/*!\n * @jscrypto/ciphers v0.9.1\n * Copyright 2026 Chen, Yi-Cyuan\n * Released under the MIT license\n */\n/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) */\n/**\n * Checks if something is Uint8Array. Be careful: nodejs Buffer will return true.\n * @param a - Value to inspect.\n * @returns `true` when the value is a Uint8Array view, including Node's `Buffer`.\n * @example\n * Guards a value before treating it as raw key material.\n *\n * ```ts\n * isBytes(new Uint8Array());\n * ```\n */\nfunction isBytes(a) {\n    // Plain `instanceof Uint8Array` is too strict for some Buffer / proxy /\n    // cross-realm cases. The fallback still requires a real ArrayBuffer view\n    // so plain JSON-deserialized `{ constructor: ... }`\n    // spoofing is rejected, and `BYTES_PER_ELEMENT === 1` keeps the fallback on byte-oriented views.\n    return (a instanceof Uint8Array ||\n        (ArrayBuffer.isView(a) &&\n            a.constructor.name === 'Uint8Array' &&\n            'BYTES_PER_ELEMENT' in a &&\n            a.BYTES_PER_ELEMENT === 1));\n}\n/**\n * Asserts something is Uint8Array.\n * @param value - Value to validate.\n * @param length - Expected byte length.\n * @param title - Optional label used in error messages.\n * @returns The validated byte array.\n * On Node, `Buffer` is accepted too because it is a Uint8Array view.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument lengths. {@link RangeError}\n * @example\n * Validates a fixed-length nonce or key buffer.\n *\n * ```ts\n * abytes(new Uint8Array([1, 2]), 2);\n * ```\n */\nfunction abytes(value, length, title = '') {\n    const bytes = isBytes(value);\n    const len = value?.length;\n    const needsLen = length !== undefined;\n    if (!bytes || (needsLen && len !== length)) {\n        const prefix = title && `\"${title}\" `;\n        const ofLen = needsLen ? ` of length ${length}` : '';\n        const got = bytes ? `length=${len}` : `type=${typeof value}`;\n        const message = prefix + 'expected Uint8Array' + ofLen + ', got ' + got;\n        if (!bytes)\n            throw new TypeError(message);\n        throw new RangeError(message);\n    }\n    return value;\n}\n/**\n * Asserts output is a properly-sized byte array.\n * @param out - Output buffer to validate.\n * @param instance - Hash-like instance providing `outputLen`.\n * This is the relaxed `digestInto()`-style contract: output must be at least `outputLen`,\n * unlike one-shot cipher helpers elsewhere in the repo that often require exact lengths.\n * @throws On wrong argument types. {@link TypeError}\n * @param onlyAligned - Whether `out` must be 4-byte aligned for zero-allocation word views.\n * @throws On wrong output buffer lengths. {@link RangeError}\n * @throws On wrong output buffer alignment. {@link Error}\n * @example\n * Verifies that a caller-provided output buffer is large enough.\n *\n * ```ts\n * aoutput(new Uint8Array(16), { outputLen: 16 });\n * ```\n */\nfunction aoutput(out, instance, onlyAligned = false) {\n    abytes(out, undefined, 'output');\n    const min = instance.outputLen;\n    if (out.length < min) {\n        throw new RangeError('digestInto() expects output buffer of length at least ' + min);\n    }\n    if (onlyAligned && !isAligned32(out))\n        throw new Error('invalid output, must be aligned');\n}\n/**\n * Casts a typed-array view to Uint8Array.\n * @param arr - Typed-array view to reinterpret.\n * @returns Uint8Array view over the same bytes.\n * @example\n * Views 32-bit words as raw bytes without copying.\n *\n * ```ts\n * u8(new Uint32Array([1]));\n * ```\n */\nfunction u8(arr) {\n    return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/**\n * Casts a typed-array view to Uint32Array.\n * @param arr - Typed-array view to reinterpret.\n * @returns Uint32Array view over the same bytes. Callers are expected to provide a\n * 4-byte-aligned offset; trailing `1..3` bytes are silently dropped.\n * @example\n * Views a byte buffer as 32-bit words for block processing.\n *\n * ```ts\n * u32(new Uint8Array(4));\n * ```\n */\nfunction u32(arr) {\n    return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n/**\n * Zeroizes typed arrays in place.\n * Warning: JS provides no guarantees.\n * @param arrays - Arrays to wipe.\n * @example\n * Wipes a temporary key buffer after use.\n *\n * ```ts\n * const bytes = new Uint8Array([1]);\n * clean(bytes);\n * ```\n */\nfunction clean(...arrays) {\n    for (let i = 0; i < arrays.length; i++) {\n        arrays[i].fill(0);\n    }\n}\n/**\n * Creates a DataView for byte-level manipulation.\n * @param arr - Typed-array view to wrap.\n * @returns DataView over the same bytes.\n * @example\n * Creates an endian-aware view for length encoding.\n *\n * ```ts\n * createView(new Uint8Array(4));\n * ```\n */\nfunction createView(arr) {\n    return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/**\n * Whether the current platform is little-endian.\n * Most are; some IBM systems are not.\n */\nconst isLE = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n/**\n * Reverses byte order of one 32-bit word.\n * @param word - Unsigned 32-bit word to swap.\n * @returns The same word with bytes reversed.\n * @example\n * Swaps a big-endian word into little-endian byte order.\n *\n * ```ts\n * byteSwap(0x11223344);\n * ```\n */\nconst byteSwap = (word) => ((word << 24) & 0xff000000) |\n    ((word << 8) & 0xff0000) |\n    ((word >>> 8) & 0xff00) |\n    ((word >>> 24) & 0xff);\n/**\n * Normalizes one 32-bit word to the little-endian representation expected by cipher cores.\n * @param n - Unsigned 32-bit word to normalize.\n * @returns Little-endian normalized word on big-endian hosts, else the input word unchanged.\n * @example\n * Normalizes a host-endian word before passing it into an ARX/AES core.\n *\n * ```ts\n * swap8IfBE(0x11223344);\n * ```\n */\nconst swap8IfBE = isLE\n    ? (n) => n\n    : (n) => byteSwap(n) >>> 0;\n/**\n * Byte-swaps every word of a Uint32Array in place.\n * @param arr - Uint32Array whose words should be swapped.\n * @returns The same array after in-place byte swapping.\n * @example\n * Swaps every 32-bit word in a word-view buffer.\n *\n * ```ts\n * byteSwap32(new Uint32Array([0x11223344]));\n * ```\n */\nconst byteSwap32 = (arr) => {\n    for (let i = 0; i < arr.length; i++)\n        arr[i] = byteSwap(arr[i]);\n    return arr;\n};\n/**\n * Normalizes a Uint32Array view to the little-endian representation expected by cipher cores.\n * @param u - Word view to normalize in place.\n * @returns Little-endian normalized word view.\n * @example\n * Normalizes a word-view buffer before block processing.\n *\n * ```ts\n * swap32IfBE(new Uint32Array([0x11223344]));\n * ```\n */\nconst swap32IfBE = isLE\n    ? (u) => u\n    : byteSwap32;\n/**\n * Checks if two U8A use same underlying buffer and overlaps.\n * This is invalid and can corrupt data.\n * @param a - First byte view.\n * @param b - Second byte view.\n * @returns `true` when the views overlap in memory.\n * @example\n * Detects whether two slices alias the same backing buffer.\n *\n * ```ts\n * overlapBytes(new Uint8Array(4), new Uint8Array(4));\n * ```\n */\nfunction overlapBytes(a, b) {\n    // Zero-length views cannot overwrite anything, even if their offset sits inside another range.\n    if (!a.byteLength || !b.byteLength)\n        return false;\n    return (a.buffer === b.buffer && // best we can do, may fail with an obscure Proxy\n        a.byteOffset < b.byteOffset + b.byteLength && // a starts before b end\n        b.byteOffset < a.byteOffset + a.byteLength // b starts before a end\n    );\n}\n/**\n * If input and output overlap and input starts before output, we will overwrite end of input before\n * we start processing it, so this is not supported for most ciphers\n * (except chacha/salsa, which were designed for this)\n * @param input - Input bytes.\n * @param output - Output bytes.\n * @throws If the output view would overwrite unread input bytes. {@link Error}\n * @example\n * Rejects an in-place layout that would overwrite unread input bytes.\n *\n * ```ts\n * complexOverlapBytes(new Uint8Array(4), new Uint8Array(4));\n * ```\n */\nfunction complexOverlapBytes(input, output) {\n    // This is very cursed. It works somehow, but I'm completely unsure,\n    // reasoning about overlapping aligned windows is very hard.\n    if (overlapBytes(input, output) && input.byteOffset < output.byteOffset)\n        throw new Error('complex overlap of input and output is not supported');\n}\n/**\n * Wraps a keyed MAC constructor into a one-shot helper with `.create()`.\n * @param keyLen - Valid probe-key length used to read static metadata once.\n * The probe key is only used for `outputLen` / `blockLen`, so callers with several valid key sizes\n * can pass any representative size as long as those values stay fixed.\n * @param macCons - Keyed MAC constructor or factory.\n * @param fromMsg - Optional adapter that derives extra constructor args from the one-shot message.\n * @returns Callable MAC helper with `.create()`.\n */\nfunction wrapMacConstructor(keyLen, macCons, fromMsg) {\n    const mac = macCons;\n    const getArgs = (fromMsg || (() => []));\n    const macC = (msg, key) => mac(key, ...getArgs(msg))\n        .update(msg)\n        .digest();\n    const tmp = mac(new Uint8Array(keyLen), ...getArgs(new Uint8Array(0)));\n    macC.outputLen = tmp.outputLen;\n    macC.blockLen = tmp.blockLen;\n    macC.create = (key, ...args) => mac(key, ...args);\n    return macC;\n}\n/**\n * By default, returns u8a of length.\n * When out is available, it checks it for validity and uses it.\n * @param expectedLength - Required output length.\n * @param out - Optional destination buffer.\n * @param onlyAligned - Whether `out` must be 4-byte aligned.\n * @returns Output buffer ready for writing.\n * @throws On wrong argument types. {@link TypeError}\n * @throws If the provided output buffer has the wrong size or alignment. {@link Error}\n * @example\n * Reuses a caller-provided output buffer when lengths match.\n *\n * ```ts\n * getOutput(16, new Uint8Array(16));\n * ```\n */\nfunction getOutput(expectedLength, out, onlyAligned = true) {\n    if (out === undefined)\n        return new Uint8Array(expectedLength);\n    // Keep Buffer/cross-realm Uint8Array support here instead of trusting a shape-compatible object.\n    abytes(out, undefined, 'output');\n    if (out.length !== expectedLength)\n        throw new Error('\"output\" expected Uint8Array of length ' + expectedLength + ', got: ' + out.length);\n    if (onlyAligned && !isAligned32(out))\n        throw new Error('invalid output, must be aligned');\n    return out;\n}\n/**\n * Checks whether a byte array is aligned to a 4-byte offset.\n * @param bytes - Byte array to inspect.\n * @returns `true` when the view is 4-byte aligned.\n * @example\n * Checks whether a buffer can be safely viewed as Uint32Array.\n *\n * ```ts\n * isAligned32(new Uint8Array(4));\n * ```\n */\nfunction isAligned32(bytes) {\n    return bytes.byteOffset % 4 === 0;\n}\n/**\n * Copies bytes into a new Uint8Array.\n * @param bytes - Bytes to copy.\n * @returns Copied byte array.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Copies input into an aligned Uint8Array before block processing.\n *\n * ```ts\n * copyBytes(new Uint8Array([1, 2]));\n * ```\n */\nfunction copyBytes(bytes) {\n    // `Uint8Array.from(...)` would also accept arrays / other typed arrays. Keep this helper strict\n    // because callers use it at byte-validation boundaries before mutating the detached copy.\n    return Uint8Array.from(abytes(bytes));\n}\n\n/**\n * {@link https://en.wikipedia.org/wiki/Advanced_Encryption_Standard | AES}\n * a.k.a. Advanced Encryption Standard\n * is a variant of Rijndael block cipher, standardized by NIST in 2001.\n * We provide the fastest available pure JS implementation.\n *\n * `cipher = encrypt(block, key)`\n *\n * Data is split into 128-bit blocks.\n * Encrypted in 10/12/14 rounds (128/192/256 bits). In every round:\n * 1. **S-box**, table substitution\n * 2. **Shift rows**, cyclic shift left of all rows of data array\n * 3. **Mix columns**, multiplying every column by fixed polynomial\n * 4. **Add round key**, round_key xor i-th column of array\n *\n * Check out\n * {@link https://csrc.nist.gov/files/pubs/fips/197/final/docs/fips-197.pdf | FIPS-197},\n * {@link https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-38G.pdf | NIST 800-38G},\n * and {@link https://csrc.nist.gov/csrc/media/projects/cryptographic-standards-and-guidelines/documents/aes-development/rijndael-ammended.pdf | original proposal}.\n * @module\n */\nconst BLOCK_SIZE$1 = 16;\n// AES operates on 16-byte blocks, i.e. 4 32-bit words.\nconst BLOCK_SIZE32 = 4;\n// Shared zero block (`0^128`) used by GCM's `H = CIPH_K(0^128)` / J0 scratch\n// and by CMAC / SIV helpers; callers take `.slice()` before mutating it.\nconst EMPTY_BLOCK = /* @__PURE__ */ new Uint8Array(BLOCK_SIZE$1);\n// RFC 5297 §2.1 / §2.4: S2V uses `<one> = 0^127 || 1` for the `n = 0` special case.\nconst ONE_BLOCK = /* @__PURE__ */ Uint8Array.from([\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,\n]);\nconst POLY = 0x11b; // 1 + x + x**3 + x**4 + x**8\n// Validates plain AES key sizes only; AES-SIV's doubled-key contract is checked elsewhere.\nfunction validateKeyLength(key) {\n    if (![16, 24, 32].includes(key.length))\n        throw new Error('\"aes key\" expected Uint8Array of length 16/24/32, got length=' + key.length);\n}\n// TODO: remove multiplication, binary ops only\n// Doubles one GF(2^8) field element; callers are expected to stay in byte range.\n// FIPS 197 upd1 §4.3 equation (4.5): XTIMES(b) left-shifts by one and, when\n// b7=1, reduces by m(x); using POLY=0x11b here yields the same byte result\n// as XORing with {1b} after the shift.\nfunction mul2(n) {\n    return (n << 1) ^ (POLY & -(n >> 7));\n}\n// Shift-and-add multiplication in GF(2^8); callers are expected to pass byte values.\n// FIPS 197 upd1 §4.3 equation (4.7): general products are XORs of repeated\n// XTIMES() multiples, e.g. {57}•{13} = {57}⊕{ae}⊕{07}.\nfunction mul(a, b) {\n    let res = 0;\n    for (; b > 0; b >>= 1) {\n        // Usual shift-and-add step in GF(2^8), not a scalar-multiplication ladder.\n        res ^= a & -(b & 1); // if (b&1) res ^=a (but const-time).\n        a = mul2(a); // a = 2*a\n    }\n    return res;\n}\n/**\n * Increments a counter block with wrap around.\n * AES call sites here currently use the big-endian branch, but the helper supports both layouts.\n * NIST SP 800-38A Appendix B.1 and SP 800-38D §6.2 increment the\n * least-significant/rightmost bits.\n * `isLE=false` matches that standard counter-block layout, while `isLE=true`\n * is a generic extension for non-AES callers.\n * The implementation keeps a 32-bit bitwise carry path, so `carry` is capped at `0xffffff00`;\n * larger values throw instead of silently overflowing before the next-byte propagation step.\n */\n// Keep the helper explicitly typed so `--isolatedDeclarations` can expose it\n// through the test-only `__TESTS` export without inference errors.\nconst incBytes = (data, isLE, carry = 1) => {\n    // Keep `carry + byte <= 0xffffffff` so the `| 0` / `>>> 8` path below\n    // never truncates a real carry bit.\n    if (!Number.isSafeInteger(carry) || carry > 0xffffff00)\n        throw new Error('incBytes: wrong carry ' + carry);\n    abytes(data);\n    for (let i = 0; i < data.length; i++) {\n        const pos = !isLE ? data.length - 1 - i : i;\n        carry = (carry + (data[pos] & 0xff)) | 0;\n        data[pos] = carry & 0xff;\n        carry >>>= 8;\n    }\n};\n// AES S-box is generated using finite field inversion,\n// an affine transform, and xor of a constant 0x63.\nconst sbox = /* @__PURE__ */ (() => {\n    const t = new Uint8Array(256);\n    // Repeated multiplication by {03} walks all 255 nonzero field elements\n    // once, so t[255 - i] is the multiplicative inverse of t[i] for the\n    // affine step.\n    for (let i = 0, x = 1; i < 256; i++, x ^= mul2(x))\n        t[i] = x;\n    const box = new Uint8Array(256);\n    // FIPS 197 upd1 §5.1.1: SBOX({00}) = {63} because the inverse step leaves\n    // {00} at {00}, then the affine transform xors in c = {63}.\n    box[0] = 0x63;\n    for (let i = 0; i < 255; i++) {\n        let x = t[255 - i];\n        x |= x << 8;\n        box[t[i]] = (x ^ (x >> 4) ^ (x >> 5) ^ (x >> 6) ^ (x >> 7) ^ 0x63) & 0xff;\n    }\n    clean(t);\n    return box;\n})();\n// FIPS 197 upd1 §5.3.2: INVSBOX() is derived from SBOX() by swapping input\n// and output roles (Table 6).\n// `indexOf` is only used once at module init, so the quadratic setup cost stays off hot paths.\nconst invSbox = /* @__PURE__ */ sbox.map((_, j) => sbox.indexOf(j));\n// FIPS 197 upd1 §5.2: ROTWORD([a0,a1,a2,a3]) = [a1,a2,a3,a0]; with this LE\n// word packing that is a right rotate by 8 bits.\nconst rotr32_8 = (n) => (n << 24) | (n >>> 8);\n// LE T-table helper: rotates one precomputed word by one byte so T1/T2/T3\n// reuse T0's substitution/mix result in the other byte lanes.\nconst rotl32_8 = (n) => (n << 8) | (n >>> 24);\n// T-table is optimization suggested in 5.2 of original proposal (missed from FIPS-197). Changes:\n// - LE instead of BE\n// - bigger tables: T0 and T1 are merged into T01 table and T2 & T3 into T23;\n//   so index is u16, instead of u8. This speeds up things, unexpectedly\nfunction genTtable(sbox, fn) {\n    if (sbox.length !== 256)\n        throw new Error('Wrong sbox length');\n    const T0 = new Uint32Array(256).map((_, j) => fn(sbox[j]));\n    const T1 = T0.map(rotl32_8);\n    const T2 = T1.map(rotl32_8);\n    const T3 = T2.map(rotl32_8);\n    // Pre-xor adjacent lanes so apply0123/applySbox can fetch two substituted\n    // byte lanes per lookup in the LE round layout.\n    const T01 = new Uint32Array(256 * 256);\n    const T23 = new Uint32Array(256 * 256);\n    const sbox2 = new Uint16Array(256 * 256);\n    for (let i = 0; i < 256; i++) {\n        for (let j = 0; j < 256; j++) {\n            const idx = i * 256 + j;\n            T01[idx] = T0[i] ^ T1[j];\n            T23[idx] = T2[i] ^ T3[j];\n            sbox2[idx] = (sbox[i] << 8) | sbox[j];\n        }\n    }\n    return { sbox, sbox2, T0, T1, T2, T3, T01, T23 };\n}\n// Forward round precompute: the packed word stores the MIXCOLUMNS row\n// [{02},{01},{01},{03}] in LE byte-lane order, and the returned `sbox2`\n// is also reused by key expansion and the final round.\nconst tableEncoding = /* @__PURE__ */ genTtable(sbox, (s) => (mul(s, 3) << 24) | (s << 16) | (s << 8) | mul(s, 2));\n// Inverse round precompute: the packed word stores the INVMIXCOLUMNS row\n// [{0e},{09},{0d},{0b}] in LE byte-lane order, and the tables are reused\n// by decrypt() and expandKeyDecLE().\nconst tableDecoding = /* @__PURE__ */ genTtable(invSbox, (s) => (mul(s, 11) << 24) | (mul(s, 13) << 16) | (mul(s, 9) << 8) | mul(s, 14));\n// FIPS 197 upd1 §5.2 Table 5: left-most bytes of Rcon[j] = x^(j-1), generated by repeated XTIMES().\nconst xPowers = /* @__PURE__ */ (() => {\n    const p = new Uint8Array(16);\n    for (let i = 0, x = 1; i < 16; i++, x = mul2(x))\n        p[i] = x;\n    return p;\n})();\n/** Forward AES key expansion used across ECB/CBC/CTR/GCM/CMAC/KW-style paths. */\nfunction expandKeyLE(key) {\n    abytes(key);\n    const len = key.length;\n    validateKeyLength(key);\n    const { sbox2 } = tableEncoding;\n    const toClean = [];\n    // Copy on BE or misaligned inputs so the LE word normalization below never\n    // mutates caller key bytes in place.\n    if (!isLE || !isAligned32(key))\n        toClean.push((key = copyBytes(key)));\n    const k32 = swap32IfBE(u32(key));\n    const Nk = k32.length;\n    // `applySbox` normally reads one byte lane from each argument; repeating\n    // `n` across all four lanes turns it into SUBWORD(n).\n    const subByte = (n) => applySbox(sbox2, n, n, n, n);\n    // AES key sizes are 16/24/32 bytes, so len + 28 yields the 44/52/60\n    // schedule words from FIPS 197 §5.2 / Table 3.\n    const xk = new Uint32Array(len + 28); // expanded key\n    xk.set(k32);\n    // 4.3.1 Key expansion\n    for (let i = Nk; i < xk.length; i++) {\n        let t = xk[i - 1];\n        if (i % Nk === 0)\n            t = subByte(rotr32_8(t)) ^ xPowers[i / Nk - 1];\n        else if (Nk > 6 && i % Nk === 4)\n            t = subByte(t);\n        xk[i] = xk[i - Nk] ^ t;\n    }\n    clean(...toClean);\n    return xk;\n}\nfunction expandKeyDecLE(key) {\n    const encKey = expandKeyLE(key);\n    const xk = encKey.slice();\n    const Nk = encKey.length;\n    const { sbox2 } = tableEncoding;\n    const { T0, T1, T2, T3 } = tableDecoding;\n    // Local decrypt() walks round keys forward from xk[0], so reverse the\n    // encryption round-key blocks first before applying the equivalent-inverse\n    // middle-round transform.\n    for (let i = 0; i < Nk; i += 4) {\n        for (let j = 0; j < 4; j++)\n            xk[i + j] = encKey[Nk - i - 4 + j];\n    }\n    clean(encKey);\n    // Apply InvMixColumn to the reversed round keys using the same LE sbox2\n    // packing as the forward path.\n    // apply InvMixColumn except first & last round\n    for (let i = 4; i < Nk - 4; i++) {\n        const x = xk[i];\n        const w = applySbox(sbox2, x, x, x, x);\n        xk[i] = T0[w & 0xff] ^ T1[(w >>> 8) & 0xff] ^ T2[(w >>> 16) & 0xff] ^ T3[w >>> 24];\n    }\n    return xk;\n}\n// Apply tables\nfunction apply0123(T01, T23, s0, s1, s2, s3) {\n    // `T01` takes the low byte lane from `s0` plus the next lane from `s1`;\n    // `T23` does the same for `s2`/`s3`.\n    // Equivalent to `T0[s0&0xff] ^ T1[(s1>>>8)&0xff] ^ T2[(s2>>>16)&0xff] ^\n    // T3[s3>>>24]`, but with two merged-table fetches.\n    return (T01[((s0 << 8) & 0xff00) | ((s1 >>> 8) & 0xff)] ^\n        T23[((s2 >>> 8) & 0xff00) | ((s3 >>> 24) & 0xff)]);\n}\nfunction applySbox(sbox2, s0, s1, s2, s3) {\n    // `sbox2` packs two substituted byte lanes at a time in the same LE\n    // layout used by the round code.\n    // Equivalent to `SBOX(byte0(s0)) | SBOX(byte1(s1))<<8 |\n    // SBOX(byte2(s2))<<16 | SBOX(byte3(s3))<<24`.\n    return (sbox2[(s0 & 0xff) | (s1 & 0xff00)] |\n        (sbox2[((s2 >>> 16) & 0xff) | ((s3 >>> 16) & 0xff00)] << 16));\n}\nfunction encrypt(xk, s0, s1, s2, s3) {\n    const { sbox2, T01, T23 } = tableEncoding;\n    let k = 0;\n    ((s0 ^= xk[k++]), (s1 ^= xk[k++]), (s2 ^= xk[k++]), (s3 ^= xk[k++]));\n    // `xk` has Nr+1 round-key blocks, so after the initial AddRoundKey and the\n    // final S-box-only round there are Nr-1 full table/MixColumns rounds left.\n    const rounds = xk.length / 4 - 2;\n    for (let i = 0; i < rounds; i++) {\n        const t0 = xk[k++] ^ apply0123(T01, T23, s0, s1, s2, s3);\n        const t1 = xk[k++] ^ apply0123(T01, T23, s1, s2, s3, s0);\n        const t2 = xk[k++] ^ apply0123(T01, T23, s2, s3, s0, s1);\n        const t3 = xk[k++] ^ apply0123(T01, T23, s3, s0, s1, s2);\n        ((s0 = t0), (s1 = t1), (s2 = t2), (s3 = t3));\n    }\n    // last round (without mixcolumns, so using SBOX2 table)\n    const t0 = xk[k++] ^ applySbox(sbox2, s0, s1, s2, s3);\n    const t1 = xk[k++] ^ applySbox(sbox2, s1, s2, s3, s0);\n    const t2 = xk[k++] ^ applySbox(sbox2, s2, s3, s0, s1);\n    const t3 = xk[k++] ^ applySbox(sbox2, s3, s0, s1, s2);\n    return { s0: t0, s1: t1, s2: t2, s3: t3 };\n}\n// Can't be merged with encrypt: arg positions for apply0123 / applySbox are different\nfunction decrypt(xk, s0, s1, s2, s3) {\n    const { sbox2, T01, T23 } = tableDecoding;\n    let k = 0;\n    ((s0 ^= xk[k++]), (s1 ^= xk[k++]), (s2 ^= xk[k++]), (s3 ^= xk[k++]));\n    // With `expandKeyDecLE()` the round keys are already reversed and middle\n    // rounds are InvMixColumns-adjusted, so this loop follows the equivalent\n    // inverse cipher order directly.\n    const rounds = xk.length / 4 - 2;\n    for (let i = 0; i < rounds; i++) {\n        const t0 = xk[k++] ^ apply0123(T01, T23, s0, s3, s2, s1);\n        const t1 = xk[k++] ^ apply0123(T01, T23, s1, s0, s3, s2);\n        const t2 = xk[k++] ^ apply0123(T01, T23, s2, s1, s0, s3);\n        const t3 = xk[k++] ^ apply0123(T01, T23, s3, s2, s1, s0);\n        ((s0 = t0), (s1 = t1), (s2 = t2), (s3 = t3));\n    }\n    // Final equivalent-inverse round omits InvMixColumns, so use inverse\n    // S-box lanes in InvShiftRows order.\n    const t0 = xk[k++] ^ applySbox(sbox2, s0, s3, s2, s1);\n    const t1 = xk[k++] ^ applySbox(sbox2, s1, s0, s3, s2);\n    const t2 = xk[k++] ^ applySbox(sbox2, s2, s1, s0, s3);\n    const t3 = xk[k++] ^ applySbox(sbox2, s3, s2, s1, s0);\n    return { s0: t0, s1: t1, s2: t2, s3: t3 };\n}\nfunction ctrCounter(xk, nonce, src, dst) {\n    abytes(nonce, BLOCK_SIZE$1, 'nonce');\n    abytes(src);\n    const srcLen = src.length;\n    dst = getOutput(srcLen, dst);\n    complexOverlapBytes(src, dst);\n    // Internal helper: mutate `nonce` in place as the live counter block so\n    // each encrypted block uses the next CTR value.\n    const ctr = nonce;\n    const c32 = u32(ctr);\n    const src32 = u32(src);\n    const dst32 = u32(dst);\n    // Fill block (empty, ctr=0)\n    let { s0, s1, s2, s3 } = encrypt(xk, swap8IfBE(c32[0]), swap8IfBE(c32[1]), swap8IfBE(c32[2]), swap8IfBE(c32[3]));\n    // process blocks\n    for (let i = 0; i + 4 <= src32.length; i += 4) {\n        dst32[i + 0] = src32[i + 0] ^ swap8IfBE(s0);\n        dst32[i + 1] = src32[i + 1] ^ swap8IfBE(s1);\n        dst32[i + 2] = src32[i + 2] ^ swap8IfBE(s2);\n        dst32[i + 3] = src32[i + 3] ^ swap8IfBE(s3);\n        incBytes(ctr, false, 1); // Full 128 bit counter with wrap around\n        ({ s0, s1, s2, s3 } = encrypt(xk, swap8IfBE(c32[0]), swap8IfBE(c32[1]), swap8IfBE(c32[2]), swap8IfBE(c32[3])));\n    }\n    // NIST SP 800-38A CTR mode uses the leading `u` bits of the next output\n    // block for the final short block.\n    // It's possible to handle > u32 fast, but is it worth it?\n    const start = BLOCK_SIZE$1 * Math.floor(src32.length / BLOCK_SIZE32);\n    if (start < srcLen) {\n        const b32 = new Uint32Array([s0, s1, s2, s3]);\n        swap32IfBE(b32);\n        const buf = u8(b32);\n        for (let i = start, pos = 0; i < srcLen; i++, pos++)\n            dst[i] = src[i] ^ buf[pos];\n        clean(b32);\n    }\n    // Unsafe mutable-counter API only advances whole blocks. Callers that want to\n    // resume after consuming part of this block must re-run from the same counter\n    // with left-padding and strip the already-consumed prefix themselves.\n    return dst;\n}\n// AES CTR with overflowing 32 bit counter\n// It's possible to do 32le significantly simpler (and probably faster) by using u32.\n// But, we need both, and perf bottleneck is in ghash anyway.\n// Unsafe 32-bit CTR helper: mutates `nonce` in place, expects aligned `src`/`dst`,\n// and uses `isLE` to choose which 32-bit counter word is incremented.\nfunction ctr32(xk, isLE, nonce, src, dst) {\n    abytes(nonce, BLOCK_SIZE$1, 'nonce');\n    abytes(src);\n    dst = getOutput(src.length, dst);\n    const ctr = nonce; // write new value to nonce, so it can be re-used\n    const c32 = u32(ctr);\n    const view = createView(ctr);\n    const src32 = u32(src);\n    const dst32 = u32(dst);\n    // NIST SP 800-38D GCTR increments the rightmost 32 bits of J0, while\n    // RFC 8452 AES-GCM-SIV increments the first 32 bits as a little-endian u32.\n    const ctrPos = isLE ? 0 : 12;\n    const srcLen = src.length;\n    // Fill block (empty, ctr=0)\n    let ctrNum = view.getUint32(ctrPos, isLE); // read current counter value\n    let { s0, s1, s2, s3 } = encrypt(xk, swap8IfBE(c32[0]), swap8IfBE(c32[1]), swap8IfBE(c32[2]), swap8IfBE(c32[3]));\n    // process blocks\n    for (let i = 0; i + 4 <= src32.length; i += 4) {\n        dst32[i + 0] = src32[i + 0] ^ swap8IfBE(s0);\n        dst32[i + 1] = src32[i + 1] ^ swap8IfBE(s1);\n        dst32[i + 2] = src32[i + 2] ^ swap8IfBE(s2);\n        dst32[i + 3] = src32[i + 3] ^ swap8IfBE(s3);\n        ctrNum = (ctrNum + 1) >>> 0; // u32 wrap\n        view.setUint32(ctrPos, ctrNum, isLE);\n        ({ s0, s1, s2, s3 } = encrypt(xk, swap8IfBE(c32[0]), swap8IfBE(c32[1]), swap8IfBE(c32[2]), swap8IfBE(c32[3])));\n    }\n    // leftovers (less than a block)\n    const start = BLOCK_SIZE$1 * Math.floor(src32.length / BLOCK_SIZE32);\n    if (start < srcLen) {\n        const b32 = new Uint32Array([s0, s1, s2, s3]);\n        swap32IfBE(b32);\n        const buf = u8(b32);\n        for (let i = start, pos = 0; i < srcLen; i++, pos++)\n            dst[i] = src[i] ^ buf[pos];\n        clean(b32);\n    }\n    // Same unsafe contract as ctrCounter(): only full blocks advance the stored\n    // mutable counter state; partial-block continuation is caller-managed.\n    return dst;\n}\nfunction isBytes32(a) {\n    // Plain `instanceof Uint32Array` is too strict for cross-realm expanded-key views.\n    // This is only a best-effort unsafe-export guard, not a provenance proof for `expandKeyLE`.\n    return (a instanceof Uint32Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint32Array'));\n}\n// Unsafe single-block helpers: mutate `block` in place and require its 16-byte\n// Uint8Array view to be 4-byte aligned because `u32(block)` reinterprets it.\nfunction encryptBlock(xk, block) {\n    abytes(block, 16, 'block');\n    if (!isBytes32(xk))\n        throw new Error('_encryptBlock accepts result of expandKeyLE');\n    const b32 = u32(block);\n    swap32IfBE(b32);\n    let { s0, s1, s2, s3 } = encrypt(xk, b32[0], b32[1], b32[2], b32[3]);\n    ((b32[0] = s0), (b32[1] = s1), (b32[2] = s2), (b32[3] = s3));\n    swap32IfBE(b32);\n    return block;\n}\nfunction decryptBlock(xk, block) {\n    abytes(block, 16, 'block');\n    if (!isBytes32(xk))\n        throw new Error('_decryptBlock accepts result of expandKeyLE');\n    const b32 = u32(block);\n    swap32IfBE(b32);\n    let { s0, s1, s2, s3 } = decrypt(xk, b32[0], b32[1], b32[2], b32[3]);\n    ((b32[0] = s0), (b32[1] = s1), (b32[2] = s2), (b32[3] = s3));\n    swap32IfBE(b32);\n    return block;\n}\n//#region CMAC\n/**\n * Left-shift by one bit and conditionally XOR with 0x87:\n * ```\n * if MSB(L) is equal to 0\n * then    K1 := L << 1;\n * else    K1 := (L << 1) XOR const_Rb;\n * ```\n *\n * Specs:\n * {@link https://www.rfc-editor.org/rfc/rfc4493.html#section-2.3 | RFC 4493 Section 2.3},\n * {@link https://datatracker.ietf.org/doc/html/rfc5297.html#section-2.3 | RFC 5297 Section 2.3}\n *\n * @returns modified `block` (for chaining)\n */\nfunction dbl(block) {\n    let carry = 0;\n    // Left shift by 1 bit\n    for (let i = BLOCK_SIZE$1 - 1; i >= 0; i--) {\n        const newCarry = (block[i] & 0x80) >>> 7;\n        block[i] = (block[i] << 1) | carry;\n        carry = newCarry;\n    }\n    // XOR with 0x87 if there was a carry from the most significant bit\n    if (carry) {\n        // RFC 4493 §2.3 / RFC 5297 §2.1: 0x87 is const_Rb for doubling in the\n        // CMAC/S2V finite field with primitive polynomial x^128 + x^7 + x^2 + x + 1.\n        block[BLOCK_SIZE$1 - 1] ^= 0x87;\n    }\n    return block;\n}\n/**\n * `a XOR b`, running in-place on `a`.\n * @param a left operand and output\n * @param b right operand\n * @returns `a` (for chaining)\n */\nfunction xorBlock(a, b) {\n    if (a.length !== b.length)\n        throw new Error('xorBlock: blocks must have same length');\n    for (let i = 0; i < a.length; i++) {\n        a[i] = a[i] ^ b[i];\n    }\n    return a;\n}\n/**\n * xorend as defined in\n * {@link https://datatracker.ietf.org/doc/html/rfc5297.html#section-2.1 | RFC 5297 Section 2.1}.\n *\n * ```\n * leftmost(A, len(A)-len(B)) || (rightmost(A, len(B)) xor B)\n * ```\n *\n * Mutates `a` in place so the left prefix stays untouched and only the\n * rightmost `len(B)` bytes are xored with `b`.\n */\nfunction xorend(a, b) {\n    if (b.length > a.length) {\n        throw new Error('xorend: len(B) must be less than or equal to len(A)');\n    }\n    // keep leftmost part of `a` unchanged\n    // and xor only the rightmost part:\n    const offset = a.length - b.length;\n    for (let i = 0; i < b.length; i++) {\n        a[offset + i] = a[offset + i] ^ b[i];\n    }\n    return a;\n}\n/**\n * Internal CMAC class.\n */\nclass _CMAC {\n    blockLen = BLOCK_SIZE$1;\n    outputLen = BLOCK_SIZE$1;\n    // CMAC can only decide between `K1` and `K2` once the true final block is known,\n    // so updates process older blocks eagerly but keep one pending block buffered.\n    buffer;\n    pos;\n    finished;\n    destroyed;\n    k1;\n    k2;\n    x;\n    xk;\n    constructor(key) {\n        abytes(key);\n        validateKeyLength(key);\n        this.xk = expandKeyLE(key);\n        this.buffer = new Uint8Array(BLOCK_SIZE$1);\n        this.pos = 0;\n        this.finished = false;\n        this.destroyed = false;\n        this.x = new Uint8Array(BLOCK_SIZE$1);\n        // L = AES_encrypt(K, const_Zero)\n        const L = new Uint8Array(BLOCK_SIZE$1);\n        encryptBlock(this.xk, L);\n        // Generate subkeys K1 and K2 from the main key according to\n        // {@link https://www.rfc-editor.org/rfc/rfc4493.html#section-2.3 | RFC 4493 Section 2.3}\n        // K1\n        this.k1 = dbl(L);\n        this.k2 = dbl(new Uint8Array(this.k1));\n    }\n    process(data) {\n        // RFC 4493 §2.4 step 6 loop body: Y := X XOR M_i; X := AES-128(K, Y).\n        xorBlock(this.x, data);\n        encryptBlock(this.xk, this.x);\n    }\n    update(data) {\n        if (this.destroyed)\n            throw new Error('Hash instance has been destroyed');\n        if (this.finished)\n            throw new Error('Hash#digest() has already been called');\n        abytes(data);\n        let pos = 0;\n        if (this.pos) {\n            const take = Math.min(BLOCK_SIZE$1 - this.pos, data.length);\n            this.buffer.set(data.subarray(0, take), this.pos);\n            this.pos += take;\n            pos = take;\n            if (this.pos === BLOCK_SIZE$1 && pos < data.length) {\n                this.process(this.buffer);\n                this.pos = 0;\n            }\n        }\n        // Keep one complete block buffered: an exact 16-byte tail may still be\n        // M_n, and digestInto() must decide there whether RFC 4493 uses K1 or K2.\n        while (pos + BLOCK_SIZE$1 < data.length) {\n            this.process(data.subarray(pos, pos + BLOCK_SIZE$1));\n            pos += BLOCK_SIZE$1;\n        }\n        if (pos < data.length) {\n            this.buffer.set(data.subarray(pos), 0);\n            this.pos = data.length - pos;\n        }\n        return this;\n    }\n    // See {@link https://www.rfc-editor.org/rfc/rfc4493.html#section-2.4 | RFC 4493 Section 2.4}.\n    digestInto(out) {\n        if (this.destroyed)\n            throw new Error('Hash instance has been destroyed');\n        if (this.finished)\n            throw new Error('Hash#digest() has already been called');\n        // `digestInto(out)` is the no-allocation fast path, so AES block re-use below\n        // requires a 32-bit-aligned caller buffer instead of hidden temp copies.\n        aoutput(out, this, true);\n        this.finished = true;\n        // `digestInto()` accepts out.length >= outputLen, so only the first block stores the tag.\n        const view = out.subarray(0, this.outputLen);\n        let last = new Uint8Array(BLOCK_SIZE$1);\n        if (this.pos === BLOCK_SIZE$1) {\n            // M_last := M_n XOR K1;\n            last.set(this.buffer);\n            xorBlock(last, this.k1);\n        }\n        else {\n            // M_last := padding(M_n) XOR K2;\n            //\n            // [...] padding(x) is the concatenation of x and a single '1',\n            // followed by the minimum number of '0's, so that the total length is\n            // equal to 128 bits.\n            last.set(this.buffer.subarray(0, this.pos));\n            last[this.pos] = 0x80; // single '1' bit\n            xorBlock(last, this.k2);\n        }\n        view.set(this.x); // X := AES_CBC(K, M_1..M_{n-1})\n        xorBlock(view, last); // Y := X XOR M_last\n        encryptBlock(this.xk, view); // T := AES-128(K, Y)\n        clean(last);\n    }\n    digest() {\n        const { buffer, outputLen } = this;\n        this.digestInto(buffer);\n        // Copy out before destroy() wipes the internal digest buffer in place.\n        const res = buffer.slice(0, outputLen);\n        this.destroy();\n        return res;\n    }\n    destroy() {\n        const { buffer, destroyed, x, xk, k1, k2 } = this;\n        if (destroyed)\n            return;\n        this.destroyed = true;\n        // Wipe the buffered tail, chaining value, expanded AES key, and both CMAC subkeys.\n        clean(buffer, x, xk, k1, k2);\n    }\n}\n/**\n * AES-CMAC (Cipher-based Message Authentication Code).\n * Specs: {@link https://www.rfc-editor.org/rfc/rfc4493.html | RFC 4493}.\n * @param msg - Message bytes to authenticate.\n * @param key - AES key bytes.\n * @returns 16-byte authentication tag. `cmac.create(...)` follows the same incremental MAC shape as\n * the other keyed helpers in this repo, including `blockLen`,\n * `outputLen`, `digestInto()` and `destroy()`.\n * @example\n * Authenticates a message with AES-CMAC and a fresh key.\n *\n * ```ts\n * import { cmac } from '@noble/ciphers/aes.js';\n * import { randomBytes } from '@noble/ciphers/utils.js';\n * const key = randomBytes(16);\n * cmac(new Uint8Array(), key);\n * ```\n */\n// The 16-byte probe key is only used to read static metadata; runtime CMAC\n// still accepts AES-128/192/256 keys.\nconst cmac = /* @__PURE__ */ wrapMacConstructor(16, (key) => new _CMAC(key));\n/**\n * S2V (Synthetic Initialization Vector) function as described in\n * {@link https://datatracker.ietf.org/doc/html/rfc5297.html#section-2.4 | RFC 5297 Section 2.4}.\n *\n * ```\n * S2V(K, S1, ..., Sn) {\n *   if n = 0 then\n *     return V = AES-CMAC(K, <one>)\n *   fi\n *   D = AES-CMAC(K, <zero>)\n *   for i = 1 to n-1 do\n *     D = dbl(D) xor AES-CMAC(K, Si)\n *   done\n *   if len(Sn) >= 128 then\n *     T = Sn xorend D\n *   else\n *     T = dbl(D) xor pad(Sn)\n *   fi\n *   return V = AES-CMAC(K, T)\n * }\n * ```\n *\n * S2V takes a key and a vector of strings S1, S2, ..., Sn and returns a 128-bit string.\n * The S2V function is used to generate a synthetic IV for AES-SIV.\n *\n * @param key - AES key (128, 192, or 256 bits)\n * @param strings - Array of byte arrays to process\n * @returns 128-bit synthetic IV\n */\nfunction s2v(key, strings) {\n    validateKeyLength(key);\n    const len = strings.length;\n    if (len > 127) {\n        // RFC 5297 §7 only proves S2V secure for at most 127 components; SIV\n        // spends one of those on the plaintext, leaving at most 126 AAD inputs.\n        throw new Error('s2v: number of input strings must be less than or equal to 127');\n    }\n    if (len === 0)\n        return cmac(ONE_BLOCK, key);\n    // D = AES-CMAC(K, <zero>)\n    let d = cmac(EMPTY_BLOCK, key);\n    // for i = 1 to n-1 do\n    //   D = dbl(D) xor AES-CMAC(K, Si)\n    for (let i = 0; i < len - 1; i++) {\n        dbl(d);\n        const cmacResult = cmac(strings[i], key);\n        xorBlock(d, cmacResult);\n        clean(cmacResult);\n    }\n    const s_n = strings[len - 1];\n    // Earlier components are validated through cmac(...); validate the final one explicitly because\n    // the Uint8Array.from()/set() paths below would otherwise coerce array-like inputs silently.\n    abytes(s_n);\n    let t;\n    // if len(Sn) >= 128 then\n    if (s_n.byteLength >= BLOCK_SIZE$1) {\n        // T = Sn xorend D\n        t = xorend(Uint8Array.from(s_n), d);\n    }\n    else {\n        // pad(Sn):\n        const paddedSn = new Uint8Array(BLOCK_SIZE$1);\n        paddedSn.set(s_n);\n        paddedSn[s_n.length] = 0x80; // padding: 0x80 followed by zeros\n        // T = dbl(D) xor pad(Sn)\n        t = xorBlock(dbl(d), paddedSn);\n        clean(paddedSn);\n    }\n    // V = AES-CMAC(K, T)\n    const result = cmac(t, key);\n    clean(d, t);\n    return result;\n}\n//#endregion\n/**\n * Unsafe low-level internal methods. May change at any time.\n * Callers are expected to use reviewed expanded-key outputs, pass mutable and\n * aligned 16-byte blocks where required, and treat several helpers as in-place\n * mutations of their input buffers or counters.\n */\nconst unsafe = /* @__PURE__ */ Object.freeze({\n    expandKeyLE,\n    expandKeyDecLE,\n    encrypt,\n    decrypt,\n    encryptBlock,\n    decryptBlock,\n    ctrCounter,\n    ctr32,\n    dbl,\n    xorBlock,\n    xorend,\n    s2v,\n});\n\nconst BLOCK_SIZE = 16;\nconst aes = {\n    kind: 'cipher',\n    name: 'AES',\n    type: 'block',\n    blockSize: BLOCK_SIZE,\n    keySizes: [16, 24, 32],\n    create(key) {\n        return createAesCipher(key);\n    },\n};\nconst aesPreset = {\n    kind: 'preset',\n    name: 'aes',\n    components() {\n        return [aes];\n    },\n};\nfunction createAesCipher(key) {\n    if (key.length !== 16 && key.length !== 24 && key.length !== 32) {\n        throw new Error('AES key must be 128, 192, or 256 bits.');\n    }\n    const encryptionKey = unsafe.expandKeyLE(key);\n    const decryptionKey = unsafe.expandKeyDecLE(key);\n    return {\n        blockSize: BLOCK_SIZE,\n        encryptBlock(input, inputOffset, output, outputOffset) {\n            transformBlock(encryptionKey, input, inputOffset, output, outputOffset, unsafe.encrypt);\n        },\n        decryptBlock(input, inputOffset, output, outputOffset) {\n            transformBlock(decryptionKey, input, inputOffset, output, outputOffset, unsafe.decrypt);\n        },\n        encrypt(input, output) {\n            assertBlocks(input, output);\n            return transformBlocks(encryptionKey, input, output, unsafe.encrypt);\n        },\n        decrypt(input, output) {\n            assertBlocks(input, output);\n            return transformBlocks(decryptionKey, input, output, unsafe.decrypt);\n        },\n    };\n}\nfunction transformBlocks(expandedKey, input, output, transform) {\n    for (let offset = 0; offset < input.length; offset += BLOCK_SIZE) {\n        transformBlock(expandedKey, input, offset, output, offset, transform);\n    }\n    return output;\n}\nfunction transformBlock(expandedKey, input, inputOffset, output, outputOffset, transform) {\n    const { s0, s1, s2, s3 } = transform(expandedKey, readUint32LE(input, inputOffset), readUint32LE(input, inputOffset + 4), readUint32LE(input, inputOffset + 8), readUint32LE(input, inputOffset + 12));\n    writeUint32LE(output, outputOffset, s0);\n    writeUint32LE(output, outputOffset + 4, s1);\n    writeUint32LE(output, outputOffset + 8, s2);\n    writeUint32LE(output, outputOffset + 12, s3);\n}\nfunction readUint32LE(input, offset) {\n    return (input[offset]\n        | (input[offset + 1] << 8)\n        | (input[offset + 2] << 16)\n        | (input[offset + 3] << 24)) >>> 0;\n}\nfunction writeUint32LE(output, offset, value) {\n    output[offset] = value;\n    output[offset + 1] = value >>> 8;\n    output[offset + 2] = value >>> 16;\n    output[offset + 3] = value >>> 24;\n}\nfunction assertBlocks(input, output) {\n    if (input.length % BLOCK_SIZE !== 0) {\n        throw new Error('AES input length must be a multiple of 128 bits.');\n    }\n    if (output.length !== input.length) {\n        throw new Error('AES output length must equal input length.');\n    }\n}\n\nexport { aes, aesPreset, createAesCipher };\n//# sourceMappingURL=aes.mjs.map\n","/*!\n * @jscrypto/ciphers v0.9.1\n * Copyright 2026 Chen, Yi-Cyuan\n * Released under the MIT license\n */\nconst des = {\n    kind: 'cipher',\n    name: 'DES',\n    type: 'block',\n    blockSize: 8,\n    keySizes: [8],\n    create(key) {\n        return createDesCipher(key);\n    },\n};\nconst desPreset = {\n    kind: 'preset',\n    name: 'des',\n    components() {\n        return [des];\n    },\n};\nfunction createDesCipher(key) {\n    if (key.length !== 8) {\n        throw new Error('DES key must be 64 bits.');\n    }\n    const subkeys = createSubkeys(key);\n    const tmp = [0, 0];\n    return {\n        blockSize: 8,\n        encryptBlock(input, inputOffset, output, outputOffset) {\n            processBlock(input, inputOffset, output, outputOffset, subkeys, tmp, true);\n        },\n        decryptBlock(input, inputOffset, output, outputOffset) {\n            processBlock(input, inputOffset, output, outputOffset, subkeys, tmp, false);\n        },\n        encrypt(input, output) {\n            return processBlocks(input, output, subkeys, true, 'DES');\n        },\n        decrypt(input, output) {\n            return processBlocks(input, output, subkeys, false, 'DES');\n        },\n    };\n}\nfunction processBlocks(input, output, subkeys, encrypting, name) {\n    assertBlocks(input, output, name);\n    const tmp = [0, 0];\n    for (let offset = 0; offset < input.length; offset += 8) {\n        processBlock(input, offset, output, offset, subkeys, tmp, encrypting);\n    }\n    return output;\n}\nfunction createSubkeys(key) {\n    const subkeys = new Array(32);\n    let keyLeft = readUint32BE(key, 0);\n    let keyRight = readUint32BE(key, 4);\n    const tmp = [0, 0];\n    permutedChoice1(keyLeft, keyRight, tmp, 0);\n    keyLeft = tmp[0];\n    keyRight = tmp[1];\n    for (let index = 0; index < subkeys.length; index += 2) {\n        const shift = KEY_SHIFTS[index >>> 1];\n        keyLeft = rotateLeft28(keyLeft, shift);\n        keyRight = rotateLeft28(keyRight, shift);\n        permutedChoice2(keyLeft, keyRight, subkeys, index);\n    }\n    return subkeys;\n}\nfunction processBlock(input, inputOffset, output, outputOffset, subkeys, tmp, encrypting) {\n    let left = readUint32BE(input, inputOffset);\n    let right = readUint32BE(input, inputOffset + 4);\n    initialPermutation(left, right, tmp, 0);\n    left = tmp[0];\n    right = tmp[1];\n    if (encrypting) {\n        for (let index = 0; index < subkeys.length; index += 2) {\n            const nextLeft = right;\n            right = (left ^ feistel(right, subkeys[index], subkeys[index + 1], tmp)) >>> 0;\n            left = nextLeft;\n        }\n        reverseInitialPermutation(right, left, tmp, 0);\n    }\n    else {\n        const originalLeft = left;\n        left = right;\n        right = originalLeft;\n        for (let index = subkeys.length - 2; index >= 0; index -= 2) {\n            const nextLeft = left;\n            left = (right ^ feistel(left, subkeys[index], subkeys[index + 1], tmp)) >>> 0;\n            right = nextLeft;\n        }\n        reverseInitialPermutation(left, right, tmp, 0);\n    }\n    writeUint32BE(output, tmp[0], outputOffset);\n    writeUint32BE(output, tmp[1], outputOffset + 4);\n}\nfunction feistel(right, keyLeft, keyRight, tmp) {\n    expand(right, tmp, 0);\n    return permute(substitute((keyLeft ^ tmp[0]) >>> 0, (keyRight ^ tmp[1]) >>> 0));\n}\nfunction readUint32BE(bytes, offset) {\n    return ((bytes[offset] << 24)\n        | (bytes[offset + 1] << 16)\n        | (bytes[offset + 2] << 8)\n        | bytes[offset + 3]) >>> 0;\n}\nfunction writeUint32BE(bytes, value, offset) {\n    bytes[offset] = value >>> 24;\n    bytes[offset + 1] = value >>> 16;\n    bytes[offset + 2] = value >>> 8;\n    bytes[offset + 3] = value;\n}\n// Word-based DES helpers adapted from des.js (MIT, Fedor Indutny).\nfunction initialPermutation(inputLeft, inputRight, output, offset) {\n    let outputLeft = 0;\n    let outputRight = 0;\n    for (let bit = 6; bit >= 0; bit -= 2) {\n        for (let shift = 0; shift <= 24; shift += 8) {\n            outputLeft = (outputLeft << 1) | ((inputRight >>> (shift + bit)) & 1);\n        }\n        for (let shift = 0; shift <= 24; shift += 8) {\n            outputLeft = (outputLeft << 1) | ((inputLeft >>> (shift + bit)) & 1);\n        }\n    }\n    for (let bit = 6; bit >= 0; bit -= 2) {\n        for (let shift = 1; shift <= 25; shift += 8) {\n            outputRight = (outputRight << 1) | ((inputRight >>> (shift + bit)) & 1);\n        }\n        for (let shift = 1; shift <= 25; shift += 8) {\n            outputRight = (outputRight << 1) | ((inputLeft >>> (shift + bit)) & 1);\n        }\n    }\n    output[offset] = outputLeft >>> 0;\n    output[offset + 1] = outputRight >>> 0;\n}\nfunction reverseInitialPermutation(inputLeft, inputRight, output, offset) {\n    let outputLeft = 0;\n    let outputRight = 0;\n    for (let bit = 0; bit < 4; bit++) {\n        for (let shift = 24; shift >= 0; shift -= 8) {\n            outputLeft = (outputLeft << 1) | ((inputRight >>> (shift + bit)) & 1);\n            outputLeft = (outputLeft << 1) | ((inputLeft >>> (shift + bit)) & 1);\n        }\n    }\n    for (let bit = 4; bit < 8; bit++) {\n        for (let shift = 24; shift >= 0; shift -= 8) {\n            outputRight = (outputRight << 1) | ((inputRight >>> (shift + bit)) & 1);\n            outputRight = (outputRight << 1) | ((inputLeft >>> (shift + bit)) & 1);\n        }\n    }\n    output[offset] = outputLeft >>> 0;\n    output[offset + 1] = outputRight >>> 0;\n}\nfunction permutedChoice1(inputLeft, inputRight, output, offset) {\n    let outputLeft = 0;\n    let outputRight = 0;\n    let bit = 0;\n    for (bit = 7; bit >= 5; bit--) {\n        for (let shift = 0; shift <= 24; shift += 8) {\n            outputLeft = (outputLeft << 1) | ((inputRight >> (shift + bit)) & 1);\n        }\n        for (let shift = 0; shift <= 24; shift += 8) {\n            outputLeft = (outputLeft << 1) | ((inputLeft >> (shift + bit)) & 1);\n        }\n    }\n    for (let shift = 0; shift <= 24; shift += 8) {\n        outputLeft = (outputLeft << 1) | ((inputRight >> (shift + bit)) & 1);\n    }\n    for (bit = 1; bit <= 3; bit++) {\n        for (let shift = 0; shift <= 24; shift += 8) {\n            outputRight = (outputRight << 1) | ((inputRight >> (shift + bit)) & 1);\n        }\n        for (let shift = 0; shift <= 24; shift += 8) {\n            outputRight = (outputRight << 1) | ((inputLeft >> (shift + bit)) & 1);\n        }\n    }\n    for (let shift = 0; shift <= 24; shift += 8) {\n        outputRight = (outputRight << 1) | ((inputLeft >> (shift + bit)) & 1);\n    }\n    output[offset] = outputLeft >>> 0;\n    output[offset + 1] = outputRight >>> 0;\n}\nfunction rotateLeft28(value, shift) {\n    return ((value << shift) & 0xfffffff) | (value >>> (28 - shift));\n}\nconst PERMUTED_CHOICE2_TABLE = [\n    14, 11, 17, 4, 27, 23, 25, 0,\n    13, 22, 7, 18, 5, 9, 16, 24,\n    2, 20, 12, 21, 1, 8, 15, 26,\n    15, 4, 25, 19, 9, 1, 26, 16,\n    5, 11, 23, 8, 12, 7, 17, 0,\n    22, 3, 10, 14, 6, 20, 27, 24,\n];\nfunction permutedChoice2(inputLeft, inputRight, output, offset) {\n    let outputLeft = 0;\n    let outputRight = 0;\n    const halfLength = PERMUTED_CHOICE2_TABLE.length >>> 1;\n    for (let index = 0; index < halfLength; index++) {\n        outputLeft = (outputLeft << 1) | ((inputLeft >>> PERMUTED_CHOICE2_TABLE[index]) & 1);\n    }\n    for (let index = halfLength; index < PERMUTED_CHOICE2_TABLE.length; index++) {\n        outputRight = (outputRight << 1) | ((inputRight >>> PERMUTED_CHOICE2_TABLE[index]) & 1);\n    }\n    output[offset] = outputLeft >>> 0;\n    output[offset + 1] = outputRight >>> 0;\n}\nfunction expand(right, output, offset) {\n    let outputLeft = ((right & 1) << 5) | (right >>> 27);\n    let outputRight = 0;\n    for (let bit = 23; bit >= 15; bit -= 4) {\n        outputLeft = (outputLeft << 6) | ((right >>> bit) & 0x3f);\n    }\n    for (let bit = 11; bit >= 3; bit -= 4) {\n        outputRight |= (right >>> bit) & 0x3f;\n        outputRight <<= 6;\n    }\n    outputRight |= ((right & 0x1f) << 1) | (right >>> 31);\n    output[offset] = outputLeft >>> 0;\n    output[offset + 1] = outputRight >>> 0;\n}\nfunction substitute(inputLeft, inputRight) {\n    let output = 0;\n    for (let index = 0; index < 4; index++) {\n        output = (output << 4) | S_TABLE[index * 0x40 + ((inputLeft >>> (18 - index * 6)) & 0x3f)];\n    }\n    for (let index = 0; index < 4; index++) {\n        output = (output << 4) | S_TABLE[4 * 0x40 + index * 0x40 + ((inputRight >>> (18 - index * 6)) & 0x3f)];\n    }\n    return output >>> 0;\n}\nconst PERMUTE_TABLE = [\n    16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n    30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7,\n];\nfunction permute(value) {\n    let output = 0;\n    for (const bit of PERMUTE_TABLE) {\n        output = (output << 1) | ((value >>> bit) & 1);\n    }\n    return output >>> 0;\n}\nconst KEY_SHIFTS = [\n    1, 1, 2, 2, 2, 2, 2, 2,\n    1, 2, 2, 2, 2, 2, 2, 1,\n];\nconst S_TABLE = [\n    14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n    3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n    4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n    15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n    15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n    9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n    0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n    5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n    10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n    1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n    13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n    11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n    7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n    1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n    10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n    15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n    2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n    8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n    4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n    15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n    12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n    0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n    9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n    7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n    4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n    3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n    1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n    10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n    13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n    10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n    7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n    0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11,\n];\nfunction assertBlocks(input, output, name) {\n    if (input.length % 8 !== 0) {\n        throw new Error(`${name} input length must be a multiple of 64 bits.`);\n    }\n    if (output.length !== input.length) {\n        throw new Error(`${name} output length must equal input length.`);\n    }\n}\n\nexport { createDesCipher, des, desPreset };\n//# sourceMappingURL=des.mjs.map\n","/*!\n * @jscrypto/ciphers v0.9.1\n * Copyright 2026 Chen, Yi-Cyuan\n * Released under the MIT license\n */\nconst rc4 = {\n    kind: 'cipher',\n    name: 'RC4',\n    type: 'stream',\n    createEncryptor({ key, options }) {\n        return createRc4Transform(key, getDrop(options, 0));\n    },\n    createDecryptor({ key, options }) {\n        return createRc4Transform(key, getDrop(options, 0));\n    },\n};\nconst rc4Drop = {\n    kind: 'cipher',\n    name: 'RC4Drop',\n    type: 'stream',\n    createEncryptor({ key, options }) {\n        return createRc4Transform(key, getDrop(options, 192));\n    },\n    createDecryptor({ key, options }) {\n        return createRc4Transform(key, getDrop(options, 192));\n    },\n};\nconst rc4Preset = {\n    kind: 'preset',\n    name: 'rc4',\n    components() {\n        return [rc4, rc4Drop];\n    },\n};\nfunction createRc4Transform(key, drop = 0) {\n    assertKey(key);\n    assertDrop(drop);\n    const state = createInitialState(key);\n    for (let n = 0; n < drop; n++) {\n        nextByte(state);\n    }\n    let finalized = false;\n    const processInput = (input) => {\n        const output = new Uint8Array(input.length);\n        for (let i = 0; i < input.length; i++) {\n            output[i] = input[i] ^ nextByte(state);\n        }\n        return output;\n    };\n    return {\n        process(input) {\n            assertNotFinalized(finalized);\n            return processInput(input);\n        },\n        finalize(input = new Uint8Array(0)) {\n            assertNotFinalized(finalized);\n            finalized = true;\n            return input.length === 0 ? new Uint8Array(0) : processInput(input);\n        },\n    };\n}\nfunction createInitialState(key) {\n    const s = new Uint8Array(256);\n    for (let i = 0; i < s.length; i++) {\n        s[i] = i;\n    }\n    let j = 0;\n    for (let i = 0; i < s.length; i++) {\n        j = (j + s[i] + key[i % key.length]) & 0xff;\n        swap(s, i, j);\n    }\n    return { s, i: 0, j: 0 };\n}\nfunction nextByte(state) {\n    const { s } = state;\n    state.i = (state.i + 1) & 0xff;\n    state.j = (state.j + s[state.i]) & 0xff;\n    swap(s, state.i, state.j);\n    return s[(s[state.i] + s[state.j]) & 0xff];\n}\nfunction swap(bytes, a, b) {\n    const value = bytes[a];\n    bytes[a] = bytes[b];\n    bytes[b] = value;\n}\nfunction getDrop(options, defaultDrop) {\n    if (!isRc4Options(options) || options.drop === undefined) {\n        return defaultDrop;\n    }\n    return options.drop;\n}\nfunction isRc4Options(options) {\n    return typeof options === 'object' && options !== null;\n}\nfunction assertKey(key) {\n    if (key.length < 5) {\n        throw new Error('RC4 key should be greater or equal than 40 bits.');\n    }\n}\nfunction assertDrop(drop) {\n    if (!Number.isInteger(drop) || drop < 0) {\n        throw new RangeError('RC4 drop must be a non-negative integer.');\n    }\n}\nfunction assertNotFinalized(finalized) {\n    if (finalized) {\n        throw new Error('Transform is already finalized.');\n    }\n}\n\nexport { createRc4Transform, rc4, rc4Drop, rc4Preset };\n//# sourceMappingURL=rc4.mjs.map\n","/*!\n * @jscrypto/ciphers v0.9.1\n * Copyright 2026 Chen, Yi-Cyuan\n * Released under the MIT license\n */\nfunction createDesCipher(key) {\n    if (key.length !== 8) {\n        throw new Error('DES key must be 64 bits.');\n    }\n    const subkeys = createSubkeys(key);\n    const tmp = [0, 0];\n    return {\n        blockSize: 8,\n        encryptBlock(input, inputOffset, output, outputOffset) {\n            processBlock(input, inputOffset, output, outputOffset, subkeys, tmp, true);\n        },\n        decryptBlock(input, inputOffset, output, outputOffset) {\n            processBlock(input, inputOffset, output, outputOffset, subkeys, tmp, false);\n        },\n        encrypt(input, output) {\n            return processBlocks(input, output, subkeys, true, 'DES');\n        },\n        decrypt(input, output) {\n            return processBlocks(input, output, subkeys, false, 'DES');\n        },\n    };\n}\nfunction processBlocks(input, output, subkeys, encrypting, name) {\n    assertBlocks$1(input, output, name);\n    const tmp = [0, 0];\n    for (let offset = 0; offset < input.length; offset += 8) {\n        processBlock(input, offset, output, offset, subkeys, tmp, encrypting);\n    }\n    return output;\n}\nfunction createSubkeys(key) {\n    const subkeys = new Array(32);\n    let keyLeft = readUint32BE(key, 0);\n    let keyRight = readUint32BE(key, 4);\n    const tmp = [0, 0];\n    permutedChoice1(keyLeft, keyRight, tmp, 0);\n    keyLeft = tmp[0];\n    keyRight = tmp[1];\n    for (let index = 0; index < subkeys.length; index += 2) {\n        const shift = KEY_SHIFTS[index >>> 1];\n        keyLeft = rotateLeft28(keyLeft, shift);\n        keyRight = rotateLeft28(keyRight, shift);\n        permutedChoice2(keyLeft, keyRight, subkeys, index);\n    }\n    return subkeys;\n}\nfunction processBlock(input, inputOffset, output, outputOffset, subkeys, tmp, encrypting) {\n    let left = readUint32BE(input, inputOffset);\n    let right = readUint32BE(input, inputOffset + 4);\n    initialPermutation(left, right, tmp, 0);\n    left = tmp[0];\n    right = tmp[1];\n    if (encrypting) {\n        for (let index = 0; index < subkeys.length; index += 2) {\n            const nextLeft = right;\n            right = (left ^ feistel(right, subkeys[index], subkeys[index + 1], tmp)) >>> 0;\n            left = nextLeft;\n        }\n        reverseInitialPermutation(right, left, tmp, 0);\n    }\n    else {\n        const originalLeft = left;\n        left = right;\n        right = originalLeft;\n        for (let index = subkeys.length - 2; index >= 0; index -= 2) {\n            const nextLeft = left;\n            left = (right ^ feistel(left, subkeys[index], subkeys[index + 1], tmp)) >>> 0;\n            right = nextLeft;\n        }\n        reverseInitialPermutation(left, right, tmp, 0);\n    }\n    writeUint32BE(output, tmp[0], outputOffset);\n    writeUint32BE(output, tmp[1], outputOffset + 4);\n}\nfunction feistel(right, keyLeft, keyRight, tmp) {\n    expand(right, tmp, 0);\n    return permute(substitute((keyLeft ^ tmp[0]) >>> 0, (keyRight ^ tmp[1]) >>> 0));\n}\nfunction readUint32BE(bytes, offset) {\n    return ((bytes[offset] << 24)\n        | (bytes[offset + 1] << 16)\n        | (bytes[offset + 2] << 8)\n        | bytes[offset + 3]) >>> 0;\n}\nfunction writeUint32BE(bytes, value, offset) {\n    bytes[offset] = value >>> 24;\n    bytes[offset + 1] = value >>> 16;\n    bytes[offset + 2] = value >>> 8;\n    bytes[offset + 3] = value;\n}\n// Word-based DES helpers adapted from des.js (MIT, Fedor Indutny).\nfunction initialPermutation(inputLeft, inputRight, output, offset) {\n    let outputLeft = 0;\n    let outputRight = 0;\n    for (let bit = 6; bit >= 0; bit -= 2) {\n        for (let shift = 0; shift <= 24; shift += 8) {\n            outputLeft = (outputLeft << 1) | ((inputRight >>> (shift + bit)) & 1);\n        }\n        for (let shift = 0; shift <= 24; shift += 8) {\n            outputLeft = (outputLeft << 1) | ((inputLeft >>> (shift + bit)) & 1);\n        }\n    }\n    for (let bit = 6; bit >= 0; bit -= 2) {\n        for (let shift = 1; shift <= 25; shift += 8) {\n            outputRight = (outputRight << 1) | ((inputRight >>> (shift + bit)) & 1);\n        }\n        for (let shift = 1; shift <= 25; shift += 8) {\n            outputRight = (outputRight << 1) | ((inputLeft >>> (shift + bit)) & 1);\n        }\n    }\n    output[offset] = outputLeft >>> 0;\n    output[offset + 1] = outputRight >>> 0;\n}\nfunction reverseInitialPermutation(inputLeft, inputRight, output, offset) {\n    let outputLeft = 0;\n    let outputRight = 0;\n    for (let bit = 0; bit < 4; bit++) {\n        for (let shift = 24; shift >= 0; shift -= 8) {\n            outputLeft = (outputLeft << 1) | ((inputRight >>> (shift + bit)) & 1);\n            outputLeft = (outputLeft << 1) | ((inputLeft >>> (shift + bit)) & 1);\n        }\n    }\n    for (let bit = 4; bit < 8; bit++) {\n        for (let shift = 24; shift >= 0; shift -= 8) {\n            outputRight = (outputRight << 1) | ((inputRight >>> (shift + bit)) & 1);\n            outputRight = (outputRight << 1) | ((inputLeft >>> (shift + bit)) & 1);\n        }\n    }\n    output[offset] = outputLeft >>> 0;\n    output[offset + 1] = outputRight >>> 0;\n}\nfunction permutedChoice1(inputLeft, inputRight, output, offset) {\n    let outputLeft = 0;\n    let outputRight = 0;\n    let bit = 0;\n    for (bit = 7; bit >= 5; bit--) {\n        for (let shift = 0; shift <= 24; shift += 8) {\n            outputLeft = (outputLeft << 1) | ((inputRight >> (shift + bit)) & 1);\n        }\n        for (let shift = 0; shift <= 24; shift += 8) {\n            outputLeft = (outputLeft << 1) | ((inputLeft >> (shift + bit)) & 1);\n        }\n    }\n    for (let shift = 0; shift <= 24; shift += 8) {\n        outputLeft = (outputLeft << 1) | ((inputRight >> (shift + bit)) & 1);\n    }\n    for (bit = 1; bit <= 3; bit++) {\n        for (let shift = 0; shift <= 24; shift += 8) {\n            outputRight = (outputRight << 1) | ((inputRight >> (shift + bit)) & 1);\n        }\n        for (let shift = 0; shift <= 24; shift += 8) {\n            outputRight = (outputRight << 1) | ((inputLeft >> (shift + bit)) & 1);\n        }\n    }\n    for (let shift = 0; shift <= 24; shift += 8) {\n        outputRight = (outputRight << 1) | ((inputLeft >> (shift + bit)) & 1);\n    }\n    output[offset] = outputLeft >>> 0;\n    output[offset + 1] = outputRight >>> 0;\n}\nfunction rotateLeft28(value, shift) {\n    return ((value << shift) & 0xfffffff) | (value >>> (28 - shift));\n}\nconst PERMUTED_CHOICE2_TABLE = [\n    14, 11, 17, 4, 27, 23, 25, 0,\n    13, 22, 7, 18, 5, 9, 16, 24,\n    2, 20, 12, 21, 1, 8, 15, 26,\n    15, 4, 25, 19, 9, 1, 26, 16,\n    5, 11, 23, 8, 12, 7, 17, 0,\n    22, 3, 10, 14, 6, 20, 27, 24,\n];\nfunction permutedChoice2(inputLeft, inputRight, output, offset) {\n    let outputLeft = 0;\n    let outputRight = 0;\n    const halfLength = PERMUTED_CHOICE2_TABLE.length >>> 1;\n    for (let index = 0; index < halfLength; index++) {\n        outputLeft = (outputLeft << 1) | ((inputLeft >>> PERMUTED_CHOICE2_TABLE[index]) & 1);\n    }\n    for (let index = halfLength; index < PERMUTED_CHOICE2_TABLE.length; index++) {\n        outputRight = (outputRight << 1) | ((inputRight >>> PERMUTED_CHOICE2_TABLE[index]) & 1);\n    }\n    output[offset] = outputLeft >>> 0;\n    output[offset + 1] = outputRight >>> 0;\n}\nfunction expand(right, output, offset) {\n    let outputLeft = ((right & 1) << 5) | (right >>> 27);\n    let outputRight = 0;\n    for (let bit = 23; bit >= 15; bit -= 4) {\n        outputLeft = (outputLeft << 6) | ((right >>> bit) & 0x3f);\n    }\n    for (let bit = 11; bit >= 3; bit -= 4) {\n        outputRight |= (right >>> bit) & 0x3f;\n        outputRight <<= 6;\n    }\n    outputRight |= ((right & 0x1f) << 1) | (right >>> 31);\n    output[offset] = outputLeft >>> 0;\n    output[offset + 1] = outputRight >>> 0;\n}\nfunction substitute(inputLeft, inputRight) {\n    let output = 0;\n    for (let index = 0; index < 4; index++) {\n        output = (output << 4) | S_TABLE[index * 0x40 + ((inputLeft >>> (18 - index * 6)) & 0x3f)];\n    }\n    for (let index = 0; index < 4; index++) {\n        output = (output << 4) | S_TABLE[4 * 0x40 + index * 0x40 + ((inputRight >>> (18 - index * 6)) & 0x3f)];\n    }\n    return output >>> 0;\n}\nconst PERMUTE_TABLE = [\n    16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n    30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7,\n];\nfunction permute(value) {\n    let output = 0;\n    for (const bit of PERMUTE_TABLE) {\n        output = (output << 1) | ((value >>> bit) & 1);\n    }\n    return output >>> 0;\n}\nconst KEY_SHIFTS = [\n    1, 1, 2, 2, 2, 2, 2, 2,\n    1, 2, 2, 2, 2, 2, 2, 1,\n];\nconst S_TABLE = [\n    14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n    3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n    4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n    15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n    15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n    9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n    0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n    5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n    10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n    1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n    13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n    11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n    7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n    1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n    10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n    15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n    2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n    8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n    4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n    15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n    12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n    0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n    9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n    7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n    4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n    3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n    1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n    10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n    13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n    10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n    7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n    0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11,\n];\nfunction assertBlocks$1(input, output, name) {\n    if (input.length % 8 !== 0) {\n        throw new Error(`${name} input length must be a multiple of 64 bits.`);\n    }\n    if (output.length !== input.length) {\n        throw new Error(`${name} output length must equal input length.`);\n    }\n}\n\nconst tripleDes = {\n    kind: 'cipher',\n    name: 'TripleDES',\n    type: 'block',\n    blockSize: 8,\n    keySizes: [16, 24],\n    create(key) {\n        return createTripleDesCipher(key);\n    },\n};\nconst tripleDesPreset = {\n    kind: 'preset',\n    name: 'triple-des',\n    components() {\n        return [tripleDes];\n    },\n};\nfunction createTripleDesCipher(key) {\n    if (key.length !== 16 && key.length !== 24) {\n        throw new Error('Triple DES key must be 128 or 192 bits.');\n    }\n    const first = createDesCipher(key.subarray(0, 8));\n    const second = createDesCipher(key.subarray(8, 16));\n    const third = createDesCipher(key.length === 24 ? key.subarray(16, 24) : key.subarray(0, 8));\n    const firstOutput = new Uint8Array(8);\n    const secondOutput = new Uint8Array(8);\n    return {\n        blockSize: 8,\n        encryptBlock(input, inputOffset, output, outputOffset) {\n            encryptTripleBlockAt(input, inputOffset, output, outputOffset, first, second, third, firstOutput, secondOutput);\n        },\n        decryptBlock(input, inputOffset, output, outputOffset) {\n            decryptTripleBlockAt(input, inputOffset, output, outputOffset, first, second, third, firstOutput, secondOutput);\n        },\n        encrypt(input, output) {\n            assertBlocks(input, output);\n            for (let offset = 0; offset < input.length; offset += 8) {\n                encryptTripleBlockAt(input, offset, output, offset, first, second, third, firstOutput, secondOutput);\n            }\n            return output;\n        },\n        decrypt(input, output) {\n            assertBlocks(input, output);\n            for (let offset = 0; offset < input.length; offset += 8) {\n                decryptTripleBlockAt(input, offset, output, offset, first, second, third, firstOutput, secondOutput);\n            }\n            return output;\n        },\n    };\n}\nfunction encryptTripleBlockAt(input, inputOffset, output, outputOffset, first, second, third, firstOutput, secondOutput) {\n    encryptBlock(first, input, inputOffset, firstOutput, 0);\n    decryptBlock(second, firstOutput, 0, secondOutput, 0);\n    encryptBlock(third, secondOutput, 0, output, outputOffset);\n}\nfunction decryptTripleBlockAt(input, inputOffset, output, outputOffset, first, second, third, thirdOutput, secondOutput) {\n    decryptBlock(third, input, inputOffset, thirdOutput, 0);\n    encryptBlock(second, thirdOutput, 0, secondOutput, 0);\n    decryptBlock(first, secondOutput, 0, output, outputOffset);\n}\nfunction encryptBlock(cipher, input, inputOffset, output, outputOffset) {\n    if (cipher.encryptBlock) {\n        cipher.encryptBlock(input, inputOffset, output, outputOffset);\n    }\n    else {\n        cipher.encrypt(input.subarray(inputOffset, inputOffset + 8), output.subarray(outputOffset, outputOffset + 8));\n    }\n}\nfunction decryptBlock(cipher, input, inputOffset, output, outputOffset) {\n    if (cipher.decryptBlock) {\n        cipher.decryptBlock(input, inputOffset, output, outputOffset);\n    }\n    else {\n        cipher.decrypt(input.subarray(inputOffset, inputOffset + 8), output.subarray(outputOffset, outputOffset + 8));\n    }\n}\nfunction assertBlocks(input, output) {\n    if (input.length % 8 !== 0) {\n        throw new Error('Triple DES input length must be a multiple of 64 bits.');\n    }\n    if (output.length !== input.length) {\n        throw new Error('Triple DES output length must equal input length.');\n    }\n}\n\nexport { createTripleDesCipher, tripleDes, tripleDesPreset };\n//# sourceMappingURL=triple-des.mjs.map\n","/*!\n * @jscrypto/kdfs v0.9.1\n * Copyright 2026 Chen, Yi-Cyuan\n * Released under the MIT license\n */\nimport { concatBytes } from '@jscrypto/core';\n\nconst evpKdf = {\n    kind: 'kdf',\n    name: 'EvpKDF',\n    derive(params, context) {\n        const options = params;\n        return deriveEvpKdf({\n            ...options,\n            hash: context.getHash(options.hash ?? 'MD5'),\n        });\n    },\n};\nconst evpKdfPreset = {\n    kind: 'preset',\n    name: 'evpkdf',\n    components() {\n        return [evpKdf];\n    },\n};\nfunction deriveEvpKdf(params) {\n    assertPositiveInteger(params.length, 'EvpKDF length');\n    if (params.iterations !== undefined) {\n        assertPositiveInteger(params.iterations, 'EvpKDF iterations');\n    }\n    if (params.input === undefined || params.input === null) {\n        throw new TypeError('EvpKDF requires input.');\n    }\n    if (params.salt === undefined || params.salt === null) {\n        throw new TypeError('EvpKDF requires salt.');\n    }\n    const password = toBytes(params.input);\n    const salt = toBytes(params.salt);\n    const blocks = [];\n    let previous = new Uint8Array(0);\n    let length = 0;\n    while (length < params.length) {\n        let block = params.hash.hash(concatBytes(previous, password, salt));\n        for (let i = 1; i < (params.iterations ?? 1); i++) {\n            block = params.hash.hash(block);\n        }\n        blocks.push(block);\n        previous = block;\n        length += block.length;\n    }\n    return concatBytes(...blocks).slice(0, params.length);\n}\nfunction toBytes(input) {\n    return typeof input === 'string' ? new TextEncoder().encode(input) : input;\n}\nfunction assertPositiveInteger(value, label) {\n    if (!Number.isInteger(value) || value <= 0) {\n        throw new RangeError(`${label} must be a positive integer.`);\n    }\n}\n\nexport { deriveEvpKdf, evpKdf, evpKdfPreset };\n//# sourceMappingURL=evpkdf.mjs.map\n","/*!\n * @jscrypto/kdfs v0.9.1\n * Copyright 2026 Chen, Yi-Cyuan\n * Released under the MIT license\n */\nimport { concatBytes } from '@jscrypto/core';\n\nfunction hmac(hash, key, input) {\n    const normalizedKey = key.length > hash.blockSize ? hash.hash(key) : key;\n    const innerKey = new Uint8Array(hash.blockSize);\n    const outerKey = new Uint8Array(hash.blockSize);\n    innerKey.set(normalizedKey);\n    outerKey.set(normalizedKey);\n    for (let i = 0; i < hash.blockSize; i++) {\n        innerKey[i] ^= 0x36;\n        outerKey[i] ^= 0x5c;\n    }\n    return hash.hash(concatBytes(outerKey, hash.hash(concatBytes(innerKey, input))));\n}\n\nconst pbkdf2 = {\n    kind: 'kdf',\n    name: 'PBKDF2',\n    derive(params, context) {\n        const options = params;\n        return derivePbkdf2({\n            ...options,\n            hash: context.getHash(options.hash ?? 'SHA256'),\n        });\n    },\n};\nconst pbkdf2Preset = {\n    kind: 'preset',\n    name: 'pbkdf2',\n    components() {\n        return [pbkdf2];\n    },\n};\nfunction derivePbkdf2(params) {\n    assertPositiveInteger(params.iterations, 'PBKDF2 iterations');\n    assertPositiveInteger(params.length, 'PBKDF2 length');\n    if (params.input === undefined || params.input === null) {\n        throw new TypeError('PBKDF2 requires input.');\n    }\n    if (params.salt === undefined || params.salt === null) {\n        throw new TypeError('PBKDF2 requires salt.');\n    }\n    const password = toBytes(params.input);\n    const salt = toBytes(params.salt);\n    const blocks = [];\n    const blockCount = Math.ceil(params.length / params.hash.digestSize);\n    for (let index = 1; index <= blockCount; index++) {\n        const counter = new Uint8Array([\n            (index >>> 24) & 0xff,\n            (index >>> 16) & 0xff,\n            (index >>> 8) & 0xff,\n            index & 0xff,\n        ]);\n        let block = hmac(params.hash, password, concatBytes(salt, counter));\n        const result = block.slice();\n        for (let iteration = 1; iteration < params.iterations; iteration++) {\n            block = hmac(params.hash, password, block);\n            for (let i = 0; i < result.length; i++) {\n                result[i] ^= block[i];\n            }\n        }\n        blocks.push(result);\n    }\n    return concatBytes(...blocks).slice(0, params.length);\n}\nfunction toBytes(input) {\n    return typeof input === 'string' ? new TextEncoder().encode(input) : input;\n}\nfunction assertPositiveInteger(value, label) {\n    if (!Number.isInteger(value) || value <= 0) {\n        throw new RangeError(`${label} must be a positive integer.`);\n    }\n}\n\nexport { derivePbkdf2, pbkdf2, pbkdf2Preset };\n//# sourceMappingURL=pbkdf2.mjs.map\n","import { createRegistry, type PresetComponent, type Registry } from '@jscrypto/core';\nimport { aesPreset } from '@jscrypto/ciphers/aes';\nimport { desPreset } from '@jscrypto/ciphers/des';\nimport { rc4Preset } from '@jscrypto/ciphers/rc4';\nimport { tripleDesPreset } from '@jscrypto/ciphers/triple-des';\nimport { formatsPreset } from '@jscrypto/formats';\nimport { classicKdfsPreset } from '@jscrypto/kdfs';\nimport { modesPreset } from '@jscrypto/modes';\nimport { paddingsPreset } from '@jscrypto/paddings';\n\nfunction classicCiphersPreset(): PresetComponent<'classic-ciphers'> {\n  return {\n    kind: 'preset',\n    name: 'classic-ciphers',\n    components() {\n      return [aesPreset, desPreset, rc4Preset, tripleDesPreset];\n    },\n  };\n}\n\nexport function classicPreset(): PresetComponent<'classic'> {\n  return {\n    kind: 'preset',\n    name: 'classic',\n    components() {\n      return [\n        classicCiphersPreset(),\n        modesPreset(),\n        paddingsPreset(),\n        classicKdfsPreset(),\n        formatsPreset(),\n      ];\n    },\n  };\n}\n\nexport function createClassicRegistry(): Registry {\n  return createRegistry().use(classicPreset());\n}\n\nexport const registry: Registry = createClassicRegistry();\n"],"names":["encryptBlock","decryptBlock","assertBlocks","createDesCipher","createSubkeys","processBlock","processBlocks","readUint32BE","permutedChoice1","KEY_SHIFTS","rotateLeft28","permutedChoice2","initialPermutation","feistel","reverseInitialPermutation","writeUint32BE","expand","permute","substitute","PERMUTED_CHOICE2_TABLE","S_TABLE","PERMUTE_TABLE","assertPositiveInteger","toBytes"],"mappings":"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zD,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACvD,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;AACvD,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AACzD,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACtD,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1D,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACxD,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACxD,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACzD,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;AACvD,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AACzD,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACvD,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;AACzD,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACvD,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACxD,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACxD,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE;AACxD,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;AACxD,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE;AACzD,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACvD,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACzD,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;AACvD,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,E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EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;AACxD,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACxD,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACzD,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACvD,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;AACvD,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AACzD,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACtD,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1D,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACxD,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACxD,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACzD,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;AACvD,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AACzD,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACvD,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;AACzD,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACvD,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACxD,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACxD,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE;AACxD,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;AACxD,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE;AACzD,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE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"}