{"version":3,"file":"utils-B2r9oQh6.cjs","sources":["../../../node_modules/.pnpm/@noble+curves@1.1.0/node_modules/@noble/curves/esm/abstract/utils.js","../../../node_modules/.pnpm/@noble+curves@1.1.0/node_modules/@noble/curves/esm/abstract/modular.js","../../../node_modules/.pnpm/@noble+curves@1.1.0/node_modules/@noble/curves/esm/abstract/curve.js","../../../node_modules/.pnpm/@noble+curves@1.1.0/node_modules/@noble/curves/esm/abstract/weierstrass.js","../../../node_modules/.pnpm/@noble+ciphers@1.2.1/node_modules/@noble/ciphers/esm/_assert.js","../../../node_modules/.pnpm/@noble+ciphers@1.2.1/node_modules/@noble/ciphers/esm/utils.js","../../../node_modules/.pnpm/@noble+ciphers@1.2.1/node_modules/@noble/ciphers/esm/_polyval.js","../../../node_modules/.pnpm/sm-crypto-v2@1.10.0/node_modules/sm-crypto-v2/dist/index.mjs","../hooks/cipher.js","../hooks/datetime.js","../hooks/network.js","../hooks/form.js","../hooks/utils.js"],"sourcesContent":["/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// 100 lines of code in the file are duplicated from noble-hashes (utils).\n// This is OK: `abstract` directory does not use noble-hashes.\n// User may opt-in into using different hashing library. This way, noble-hashes\n// won't be included into their bundle.\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst u8a = (a) => a instanceof Uint8Array;\nconst hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes) {\n    if (!u8a(bytes))\n        throw new Error('Uint8Array expected');\n    // pre-caching improves the speed 6x\n    let hex = '';\n    for (let i = 0; i < bytes.length; i++) {\n        hex += hexes[bytes[i]];\n    }\n    return hex;\n}\nexport function numberToHexUnpadded(num) {\n    const hex = num.toString(16);\n    return hex.length & 1 ? `0${hex}` : hex;\n}\nexport function hexToNumber(hex) {\n    if (typeof hex !== 'string')\n        throw new Error('hex string expected, got ' + typeof hex);\n    // Big Endian\n    return BigInt(hex === '' ? '0' : `0x${hex}`);\n}\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex) {\n    if (typeof hex !== 'string')\n        throw new Error('hex string expected, got ' + typeof hex);\n    const len = hex.length;\n    if (len % 2)\n        throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n    const array = new Uint8Array(len / 2);\n    for (let i = 0; i < array.length; i++) {\n        const j = i * 2;\n        const hexByte = hex.slice(j, j + 2);\n        const byte = Number.parseInt(hexByte, 16);\n        if (Number.isNaN(byte) || byte < 0)\n            throw new Error('Invalid byte sequence');\n        array[i] = byte;\n    }\n    return array;\n}\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes) {\n    return hexToNumber(bytesToHex(bytes));\n}\nexport function bytesToNumberLE(bytes) {\n    if (!u8a(bytes))\n        throw new Error('Uint8Array expected');\n    return hexToNumber(bytesToHex(Uint8Array.from(bytes).reverse()));\n}\nexport function numberToBytesBE(n, len) {\n    return hexToBytes(n.toString(16).padStart(len * 2, '0'));\n}\nexport function numberToBytesLE(n, len) {\n    return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nexport function numberToVarBytesBE(n) {\n    return hexToBytes(numberToHexUnpadded(n));\n}\n/**\n * Takes hex string or Uint8Array, converts to Uint8Array.\n * Validates output length.\n * Will throw error for other types.\n * @param title descriptive title for an error e.g. 'private key'\n * @param hex hex string or Uint8Array\n * @param expectedLength optional, will compare to result array's length\n * @returns\n */\nexport function ensureBytes(title, hex, expectedLength) {\n    let res;\n    if (typeof hex === 'string') {\n        try {\n            res = hexToBytes(hex);\n        }\n        catch (e) {\n            throw new Error(`${title} must be valid hex string, got \"${hex}\". Cause: ${e}`);\n        }\n    }\n    else if (u8a(hex)) {\n        // Uint8Array.from() instead of hash.slice() because node.js Buffer\n        // is instance of Uint8Array, and its slice() creates **mutable** copy\n        res = Uint8Array.from(hex);\n    }\n    else {\n        throw new Error(`${title} must be hex string or Uint8Array`);\n    }\n    const len = res.length;\n    if (typeof expectedLength === 'number' && len !== expectedLength)\n        throw new Error(`${title} expected ${expectedLength} bytes, got ${len}`);\n    return res;\n}\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays) {\n    const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n    let pad = 0; // walk through each item, ensure they have proper type\n    arrays.forEach((a) => {\n        if (!u8a(a))\n            throw new Error('Uint8Array expected');\n        r.set(a, pad);\n        pad += a.length;\n    });\n    return r;\n}\nexport function equalBytes(b1, b2) {\n    // We don't care about timing attacks here\n    if (b1.length !== b2.length)\n        return false;\n    for (let i = 0; i < b1.length; i++)\n        if (b1[i] !== b2[i])\n            return false;\n    return true;\n}\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str) {\n    if (typeof str !== 'string')\n        throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n    return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n// Bit operations\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n */\nexport function bitLen(n) {\n    let len;\n    for (len = 0; n > _0n; n >>= _1n, len += 1)\n        ;\n    return len;\n}\n/**\n * Gets single bit at position.\n * NOTE: first bit position is 0 (same as arrays)\n * Same as `!!+Array.from(n.toString(2)).reverse()[pos]`\n */\nexport function bitGet(n, pos) {\n    return (n >> BigInt(pos)) & _1n;\n}\n/**\n * Sets single bit at position.\n */\nexport const bitSet = (n, pos, value) => {\n    return n | ((value ? _1n : _0n) << BigInt(pos));\n};\n/**\n * Calculate mask for N bits. Not using ** operator with bigints because of old engines.\n * Same as BigInt(`0b${Array(i).fill('1').join('')}`)\n */\nexport const bitMask = (n) => (_2n << BigInt(n - 1)) - _1n;\n// DRBG\nconst u8n = (data) => new Uint8Array(data); // creates Uint8Array\nconst u8fr = (arr) => Uint8Array.from(arr); // another shortcut\n/**\n * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n * @returns function that will call DRBG until 2nd arg returns something meaningful\n * @example\n *   const drbg = createHmacDRBG<Key>(32, 32, hmac);\n *   drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nexport function createHmacDrbg(hashLen, qByteLen, hmacFn) {\n    if (typeof hashLen !== 'number' || hashLen < 2)\n        throw new Error('hashLen must be a number');\n    if (typeof qByteLen !== 'number' || qByteLen < 2)\n        throw new Error('qByteLen must be a number');\n    if (typeof hmacFn !== 'function')\n        throw new Error('hmacFn must be a function');\n    // Step B, Step C: set hashLen to 8*ceil(hlen/8)\n    let v = u8n(hashLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n    let k = u8n(hashLen); // Steps B and C of RFC6979 3.2: set hashLen, in our case always same\n    let i = 0; // Iterations counter, will throw when over 1000\n    const reset = () => {\n        v.fill(1);\n        k.fill(0);\n        i = 0;\n    };\n    const h = (...b) => hmacFn(k, v, ...b); // hmac(k)(v, ...values)\n    const reseed = (seed = u8n()) => {\n        // HMAC-DRBG reseed() function. Steps D-G\n        k = h(u8fr([0x00]), seed); // k = hmac(k || v || 0x00 || seed)\n        v = h(); // v = hmac(k || v)\n        if (seed.length === 0)\n            return;\n        k = h(u8fr([0x01]), seed); // k = hmac(k || v || 0x01 || seed)\n        v = h(); // v = hmac(k || v)\n    };\n    const gen = () => {\n        // HMAC-DRBG generate() function\n        if (i++ >= 1000)\n            throw new Error('drbg: tried 1000 values');\n        let len = 0;\n        const out = [];\n        while (len < qByteLen) {\n            v = h();\n            const sl = v.slice();\n            out.push(sl);\n            len += v.length;\n        }\n        return concatBytes(...out);\n    };\n    const genUntil = (seed, pred) => {\n        reset();\n        reseed(seed); // Steps D-G\n        let res = undefined; // Step H: grind until k is in [1..n-1]\n        while (!(res = pred(gen())))\n            reseed();\n        reset();\n        return res;\n    };\n    return genUntil;\n}\n// Validating curves and fields\nconst validatorFns = {\n    bigint: (val) => typeof val === 'bigint',\n    function: (val) => typeof val === 'function',\n    boolean: (val) => typeof val === 'boolean',\n    string: (val) => typeof val === 'string',\n    isSafeInteger: (val) => Number.isSafeInteger(val),\n    array: (val) => Array.isArray(val),\n    field: (val, object) => object.Fp.isValid(val),\n    hash: (val) => typeof val === 'function' && Number.isSafeInteger(val.outputLen),\n};\n// type Record<K extends string | number | symbol, T> = { [P in K]: T; }\nexport function validateObject(object, validators, optValidators = {}) {\n    const checkField = (fieldName, type, isOptional) => {\n        const checkVal = validatorFns[type];\n        if (typeof checkVal !== 'function')\n            throw new Error(`Invalid validator \"${type}\", expected function`);\n        const val = object[fieldName];\n        if (isOptional && val === undefined)\n            return;\n        if (!checkVal(val, object)) {\n            throw new Error(`Invalid param ${String(fieldName)}=${val} (${typeof val}), expected ${type}`);\n        }\n    };\n    for (const [fieldName, type] of Object.entries(validators))\n        checkField(fieldName, type, false);\n    for (const [fieldName, type] of Object.entries(optValidators))\n        checkField(fieldName, type, true);\n    return object;\n}\n// validate type tests\n// const o: { a: number; b: number; c: number } = { a: 1, b: 5, c: 6 };\n// const z0 = validateObject(o, { a: 'isSafeInteger' }, { c: 'bigint' }); // Ok!\n// // Should fail type-check\n// const z1 = validateObject(o, { a: 'tmp' }, { c: 'zz' });\n// const z2 = validateObject(o, { a: 'isSafeInteger' }, { c: 'zz' });\n// const z3 = validateObject(o, { test: 'boolean', z: 'bug' });\n// const z4 = validateObject(o, { a: 'boolean', z: 'bug' });\n//# sourceMappingURL=utils.js.map","/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Utilities for modular arithmetics and finite fields\nimport { bitMask, numberToBytesBE, numberToBytesLE, bytesToNumberBE, bytesToNumberLE, ensureBytes, validateObject, } from './utils.js';\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);\n// prettier-ignore\nconst _4n = BigInt(4), _5n = BigInt(5), _8n = BigInt(8);\n// prettier-ignore\nconst _9n = BigInt(9), _16n = BigInt(16);\n// Calculates a modulo b\nexport function mod(a, b) {\n    const result = a % b;\n    return result >= _0n ? result : b + result;\n}\n/**\n * Efficiently raise num to power and do modular division.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n * @example\n * pow(2n, 6n, 11n) // 64n % 11n == 9n\n */\n// TODO: use field version && remove\nexport function pow(num, power, modulo) {\n    if (modulo <= _0n || power < _0n)\n        throw new Error('Expected power/modulo > 0');\n    if (modulo === _1n)\n        return _0n;\n    let res = _1n;\n    while (power > _0n) {\n        if (power & _1n)\n            res = (res * num) % modulo;\n        num = (num * num) % modulo;\n        power >>= _1n;\n    }\n    return res;\n}\n// Does x ^ (2 ^ power) mod p. pow2(30, 4) == 30 ^ (2 ^ 4)\nexport function pow2(x, power, modulo) {\n    let res = x;\n    while (power-- > _0n) {\n        res *= res;\n        res %= modulo;\n    }\n    return res;\n}\n// Inverses number over modulo\nexport function invert(number, modulo) {\n    if (number === _0n || modulo <= _0n) {\n        throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);\n    }\n    // Euclidean GCD https://brilliant.org/wiki/extended-euclidean-algorithm/\n    // Fermat's little theorem \"CT-like\" version inv(n) = n^(m-2) mod m is 30x slower.\n    let a = mod(number, modulo);\n    let b = modulo;\n    // prettier-ignore\n    let x = _0n, y = _1n, u = _1n, v = _0n;\n    while (a !== _0n) {\n        // JIT applies optimization if those two lines follow each other\n        const q = b / a;\n        const r = b % a;\n        const m = x - u * q;\n        const n = y - v * q;\n        // prettier-ignore\n        b = a, a = r, x = u, y = v, u = m, v = n;\n    }\n    const gcd = b;\n    if (gcd !== _1n)\n        throw new Error('invert: does not exist');\n    return mod(x, modulo);\n}\n// Tonelli-Shanks algorithm\n// Paper 1: https://eprint.iacr.org/2012/685.pdf (page 12)\n// Paper 2: Square Roots from 1; 24, 51, 10 to Dan Shanks\nexport function tonelliShanks(P) {\n    // Legendre constant: used to calculate Legendre symbol (a | p),\n    // which denotes the value of a^((p-1)/2) (mod p).\n    // (a | p) ≡ 1    if a is a square (mod p)\n    // (a | p) ≡ -1   if a is not a square (mod p)\n    // (a | p) ≡ 0    if a ≡ 0 (mod p)\n    const legendreC = (P - _1n) / _2n;\n    let Q, S, Z;\n    // Step 1: By factoring out powers of 2 from p - 1,\n    // find q and s such that p - 1 = q*(2^s) with q odd\n    for (Q = P - _1n, S = 0; Q % _2n === _0n; Q /= _2n, S++)\n        ;\n    // Step 2: Select a non-square z such that (z | p) ≡ -1 and set c ≡ zq\n    for (Z = _2n; Z < P && pow(Z, legendreC, P) !== P - _1n; Z++)\n        ;\n    // Fast-path\n    if (S === 1) {\n        const p1div4 = (P + _1n) / _4n;\n        return function tonelliFast(Fp, n) {\n            const root = Fp.pow(n, p1div4);\n            if (!Fp.eql(Fp.sqr(root), n))\n                throw new Error('Cannot find square root');\n            return root;\n        };\n    }\n    // Slow-path\n    const Q1div2 = (Q + _1n) / _2n;\n    return function tonelliSlow(Fp, n) {\n        // Step 0: Check that n is indeed a square: (n | p) should not be ≡ -1\n        if (Fp.pow(n, legendreC) === Fp.neg(Fp.ONE))\n            throw new Error('Cannot find square root');\n        let r = S;\n        // TODO: will fail at Fp2/etc\n        let g = Fp.pow(Fp.mul(Fp.ONE, Z), Q); // will update both x and b\n        let x = Fp.pow(n, Q1div2); // first guess at the square root\n        let b = Fp.pow(n, Q); // first guess at the fudge factor\n        while (!Fp.eql(b, Fp.ONE)) {\n            if (Fp.eql(b, Fp.ZERO))\n                return Fp.ZERO; // https://en.wikipedia.org/wiki/Tonelli%E2%80%93Shanks_algorithm (4. If t = 0, return r = 0)\n            // Find m such b^(2^m)==1\n            let m = 1;\n            for (let t2 = Fp.sqr(b); m < r; m++) {\n                if (Fp.eql(t2, Fp.ONE))\n                    break;\n                t2 = Fp.sqr(t2); // t2 *= t2\n            }\n            // NOTE: r-m-1 can be bigger than 32, need to convert to bigint before shift, otherwise there will be overflow\n            const ge = Fp.pow(g, _1n << BigInt(r - m - 1)); // ge = 2^(r-m-1)\n            g = Fp.sqr(ge); // g = ge * ge\n            x = Fp.mul(x, ge); // x *= ge\n            b = Fp.mul(b, g); // b *= g\n            r = m;\n        }\n        return x;\n    };\n}\nexport function FpSqrt(P) {\n    // NOTE: different algorithms can give different roots, it is up to user to decide which one they want.\n    // For example there is FpSqrtOdd/FpSqrtEven to choice root based on oddness (used for hash-to-curve).\n    // P ≡ 3 (mod 4)\n    // √n = n^((P+1)/4)\n    if (P % _4n === _3n) {\n        // Not all roots possible!\n        // const ORDER =\n        //   0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaabn;\n        // const NUM = 72057594037927816n;\n        const p1div4 = (P + _1n) / _4n;\n        return function sqrt3mod4(Fp, n) {\n            const root = Fp.pow(n, p1div4);\n            // Throw if root**2 != n\n            if (!Fp.eql(Fp.sqr(root), n))\n                throw new Error('Cannot find square root');\n            return root;\n        };\n    }\n    // Atkin algorithm for q ≡ 5 (mod 8), https://eprint.iacr.org/2012/685.pdf (page 10)\n    if (P % _8n === _5n) {\n        const c1 = (P - _5n) / _8n;\n        return function sqrt5mod8(Fp, n) {\n            const n2 = Fp.mul(n, _2n);\n            const v = Fp.pow(n2, c1);\n            const nv = Fp.mul(n, v);\n            const i = Fp.mul(Fp.mul(nv, _2n), v);\n            const root = Fp.mul(nv, Fp.sub(i, Fp.ONE));\n            if (!Fp.eql(Fp.sqr(root), n))\n                throw new Error('Cannot find square root');\n            return root;\n        };\n    }\n    // P ≡ 9 (mod 16)\n    if (P % _16n === _9n) {\n        // NOTE: tonelli is too slow for bls-Fp2 calculations even on start\n        // Means we cannot use sqrt for constants at all!\n        //\n        // const c1 = Fp.sqrt(Fp.negate(Fp.ONE)); //  1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F\n        // const c2 = Fp.sqrt(c1);                //  2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F\n        // const c3 = Fp.sqrt(Fp.negate(c1));     //  3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F\n        // const c4 = (P + _7n) / _16n;           //  4. c4 = (q + 7) / 16        # Integer arithmetic\n        // sqrt = (x) => {\n        //   let tv1 = Fp.pow(x, c4);             //  1. tv1 = x^c4\n        //   let tv2 = Fp.mul(c1, tv1);           //  2. tv2 = c1 * tv1\n        //   const tv3 = Fp.mul(c2, tv1);         //  3. tv3 = c2 * tv1\n        //   let tv4 = Fp.mul(c3, tv1);           //  4. tv4 = c3 * tv1\n        //   const e1 = Fp.equals(Fp.square(tv2), x); //  5.  e1 = (tv2^2) == x\n        //   const e2 = Fp.equals(Fp.square(tv3), x); //  6.  e2 = (tv3^2) == x\n        //   tv1 = Fp.cmov(tv1, tv2, e1); //  7. tv1 = CMOV(tv1, tv2, e1)  # Select tv2 if (tv2^2) == x\n        //   tv2 = Fp.cmov(tv4, tv3, e2); //  8. tv2 = CMOV(tv4, tv3, e2)  # Select tv3 if (tv3^2) == x\n        //   const e3 = Fp.equals(Fp.square(tv2), x); //  9.  e3 = (tv2^2) == x\n        //   return Fp.cmov(tv1, tv2, e3); //  10.  z = CMOV(tv1, tv2, e3)  # Select the sqrt from tv1 and tv2\n        // }\n    }\n    // Other cases: Tonelli-Shanks algorithm\n    return tonelliShanks(P);\n}\n// Little-endian check for first LE bit (last BE bit);\nexport const isNegativeLE = (num, modulo) => (mod(num, modulo) & _1n) === _1n;\n// prettier-ignore\nconst FIELD_FIELDS = [\n    'create', 'isValid', 'is0', 'neg', 'inv', 'sqrt', 'sqr',\n    'eql', 'add', 'sub', 'mul', 'pow', 'div',\n    'addN', 'subN', 'mulN', 'sqrN'\n];\nexport function validateField(field) {\n    const initial = {\n        ORDER: 'bigint',\n        MASK: 'bigint',\n        BYTES: 'isSafeInteger',\n        BITS: 'isSafeInteger',\n    };\n    const opts = FIELD_FIELDS.reduce((map, val) => {\n        map[val] = 'function';\n        return map;\n    }, initial);\n    return validateObject(field, opts);\n}\n// Generic field functions\nexport function FpPow(f, num, power) {\n    // Should have same speed as pow for bigints\n    // TODO: benchmark!\n    if (power < _0n)\n        throw new Error('Expected power > 0');\n    if (power === _0n)\n        return f.ONE;\n    if (power === _1n)\n        return num;\n    let p = f.ONE;\n    let d = num;\n    while (power > _0n) {\n        if (power & _1n)\n            p = f.mul(p, d);\n        d = f.sqr(d);\n        power >>= _1n;\n    }\n    return p;\n}\n// 0 is non-invertible: non-batched version will throw on 0\nexport function FpInvertBatch(f, nums) {\n    const tmp = new Array(nums.length);\n    // Walk from first to last, multiply them by each other MOD p\n    const lastMultiplied = nums.reduce((acc, num, i) => {\n        if (f.is0(num))\n            return acc;\n        tmp[i] = acc;\n        return f.mul(acc, num);\n    }, f.ONE);\n    // Invert last element\n    const inverted = f.inv(lastMultiplied);\n    // Walk from last to first, multiply them by inverted each other MOD p\n    nums.reduceRight((acc, num, i) => {\n        if (f.is0(num))\n            return acc;\n        tmp[i] = f.mul(acc, tmp[i]);\n        return f.mul(acc, num);\n    }, inverted);\n    return tmp;\n}\nexport function FpDiv(f, lhs, rhs) {\n    return f.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, f.ORDER) : f.inv(rhs));\n}\n// This function returns True whenever the value x is a square in the field F.\nexport function FpIsSquare(f) {\n    const legendreConst = (f.ORDER - _1n) / _2n; // Integer arithmetic\n    return (x) => {\n        const p = f.pow(x, legendreConst);\n        return f.eql(p, f.ZERO) || f.eql(p, f.ONE);\n    };\n}\n// CURVE.n lengths\nexport function nLength(n, nBitLength) {\n    // Bit size, byte size of CURVE.n\n    const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length;\n    const nByteLength = Math.ceil(_nBitLength / 8);\n    return { nBitLength: _nBitLength, nByteLength };\n}\n/**\n * Initializes a galois field over prime. Non-primes are not supported for now.\n * Do not init in loop: slow. Very fragile: always run a benchmark on change.\n * Major performance gains:\n * a) non-normalized operations like mulN instead of mul\n * b) `Object.freeze`\n * c) Same object shape: never add or remove keys\n * @param ORDER prime positive bigint\n * @param bitLen how many bits the field consumes\n * @param isLE (def: false) if encoding / decoding should be in little-endian\n * @param redef optional faster redefinitions of sqrt and other methods\n */\nexport function Field(ORDER, bitLen, isLE = false, redef = {}) {\n    if (ORDER <= _0n)\n        throw new Error(`Expected Fp ORDER > 0, got ${ORDER}`);\n    const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, bitLen);\n    if (BYTES > 2048)\n        throw new Error('Field lengths over 2048 bytes are not supported');\n    const sqrtP = FpSqrt(ORDER);\n    const f = Object.freeze({\n        ORDER,\n        BITS,\n        BYTES,\n        MASK: bitMask(BITS),\n        ZERO: _0n,\n        ONE: _1n,\n        create: (num) => mod(num, ORDER),\n        isValid: (num) => {\n            if (typeof num !== 'bigint')\n                throw new Error(`Invalid field element: expected bigint, got ${typeof num}`);\n            return _0n <= num && num < ORDER; // 0 is valid element, but it's not invertible\n        },\n        is0: (num) => num === _0n,\n        isOdd: (num) => (num & _1n) === _1n,\n        neg: (num) => mod(-num, ORDER),\n        eql: (lhs, rhs) => lhs === rhs,\n        sqr: (num) => mod(num * num, ORDER),\n        add: (lhs, rhs) => mod(lhs + rhs, ORDER),\n        sub: (lhs, rhs) => mod(lhs - rhs, ORDER),\n        mul: (lhs, rhs) => mod(lhs * rhs, ORDER),\n        pow: (num, power) => FpPow(f, num, power),\n        div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER),\n        // Same as above, but doesn't normalize\n        sqrN: (num) => num * num,\n        addN: (lhs, rhs) => lhs + rhs,\n        subN: (lhs, rhs) => lhs - rhs,\n        mulN: (lhs, rhs) => lhs * rhs,\n        inv: (num) => invert(num, ORDER),\n        sqrt: redef.sqrt || ((n) => sqrtP(f, n)),\n        invertBatch: (lst) => FpInvertBatch(f, lst),\n        // TODO: do we really need constant cmov?\n        // We don't have const-time bigints anyway, so probably will be not very useful\n        cmov: (a, b, c) => (c ? b : a),\n        toBytes: (num) => (isLE ? numberToBytesLE(num, BYTES) : numberToBytesBE(num, BYTES)),\n        fromBytes: (bytes) => {\n            if (bytes.length !== BYTES)\n                throw new Error(`Fp.fromBytes: expected ${BYTES}, got ${bytes.length}`);\n            return isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n        },\n    });\n    return Object.freeze(f);\n}\nexport function FpSqrtOdd(Fp, elm) {\n    if (!Fp.isOdd)\n        throw new Error(`Field doesn't have isOdd`);\n    const root = Fp.sqrt(elm);\n    return Fp.isOdd(root) ? root : Fp.neg(root);\n}\nexport function FpSqrtEven(Fp, elm) {\n    if (!Fp.isOdd)\n        throw new Error(`Field doesn't have isOdd`);\n    const root = Fp.sqrt(elm);\n    return Fp.isOdd(root) ? Fp.neg(root) : root;\n}\n/**\n * FIPS 186 B.4.1-compliant \"constant-time\" private key generation utility.\n * Can take (n+8) or more bytes of uniform input e.g. from CSPRNG or KDF\n * and convert them into private scalar, with the modulo bias being negligible.\n * Needs at least 40 bytes of input for 32-byte private key.\n * https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/\n * @param hash hash output from SHA3 or a similar function\n * @param groupOrder size of subgroup - (e.g. curveFn.CURVE.n)\n * @param isLE interpret hash bytes as LE num\n * @returns valid private scalar\n */\nexport function hashToPrivateScalar(hash, groupOrder, isLE = false) {\n    hash = ensureBytes('privateHash', hash);\n    const hashLen = hash.length;\n    const minLen = nLength(groupOrder).nByteLength + 8;\n    if (minLen < 24 || hashLen < minLen || hashLen > 1024)\n        throw new Error(`hashToPrivateScalar: expected ${minLen}-1024 bytes of input, got ${hashLen}`);\n    const num = isLE ? bytesToNumberLE(hash) : bytesToNumberBE(hash);\n    return mod(num, groupOrder - _1n) + _1n;\n}\n//# sourceMappingURL=modular.js.map","/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Abelian group utilities\nimport { validateField, nLength } from './modular.js';\nimport { validateObject } from './utils.js';\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\n// Elliptic curve multiplication of Point by scalar. Fragile.\n// Scalars should always be less than curve order: this should be checked inside of a curve itself.\n// Creates precomputation tables for fast multiplication:\n// - private scalar is split by fixed size windows of W bits\n// - every window point is collected from window's table & added to accumulator\n// - since windows are different, same point inside tables won't be accessed more than once per calc\n// - each multiplication is 'Math.ceil(CURVE_ORDER / 𝑊) + 1' point additions (fixed for any scalar)\n// - +1 window is neccessary for wNAF\n// - wNAF reduces table size: 2x less memory + 2x faster generation, but 10% slower multiplication\n// TODO: Research returning 2d JS array of windows, instead of a single window. This would allow\n// windows to be in different memory locations\nexport function wNAF(c, bits) {\n    const constTimeNegate = (condition, item) => {\n        const neg = item.negate();\n        return condition ? neg : item;\n    };\n    const opts = (W) => {\n        const windows = Math.ceil(bits / W) + 1; // +1, because\n        const windowSize = 2 ** (W - 1); // -1 because we skip zero\n        return { windows, windowSize };\n    };\n    return {\n        constTimeNegate,\n        // non-const time multiplication ladder\n        unsafeLadder(elm, n) {\n            let p = c.ZERO;\n            let d = elm;\n            while (n > _0n) {\n                if (n & _1n)\n                    p = p.add(d);\n                d = d.double();\n                n >>= _1n;\n            }\n            return p;\n        },\n        /**\n         * Creates a wNAF precomputation window. Used for caching.\n         * Default window size is set by `utils.precompute()` and is equal to 8.\n         * Number of precomputed points depends on the curve size:\n         * 2^(𝑊−1) * (Math.ceil(𝑛 / 𝑊) + 1), where:\n         * - 𝑊 is the window size\n         * - 𝑛 is the bitlength of the curve order.\n         * For a 256-bit curve and window size 8, the number of precomputed points is 128 * 33 = 4224.\n         * @returns precomputed point tables flattened to a single array\n         */\n        precomputeWindow(elm, W) {\n            const { windows, windowSize } = opts(W);\n            const points = [];\n            let p = elm;\n            let base = p;\n            for (let window = 0; window < windows; window++) {\n                base = p;\n                points.push(base);\n                // =1, because we skip zero\n                for (let i = 1; i < windowSize; i++) {\n                    base = base.add(p);\n                    points.push(base);\n                }\n                p = base.double();\n            }\n            return points;\n        },\n        /**\n         * Implements ec multiplication using precomputed tables and w-ary non-adjacent form.\n         * @param W window size\n         * @param precomputes precomputed tables\n         * @param n scalar (we don't check here, but should be less than curve order)\n         * @returns real and fake (for const-time) points\n         */\n        wNAF(W, precomputes, n) {\n            // TODO: maybe check that scalar is less than group order? wNAF behavious is undefined otherwise\n            // But need to carefully remove other checks before wNAF. ORDER == bits here\n            const { windows, windowSize } = opts(W);\n            let p = c.ZERO;\n            let f = c.BASE;\n            const mask = BigInt(2 ** W - 1); // Create mask with W ones: 0b1111 for W=4 etc.\n            const maxNumber = 2 ** W;\n            const shiftBy = BigInt(W);\n            for (let window = 0; window < windows; window++) {\n                const offset = window * windowSize;\n                // Extract W bits.\n                let wbits = Number(n & mask);\n                // Shift number by W bits.\n                n >>= shiftBy;\n                // If the bits are bigger than max size, we'll split those.\n                // +224 => 256 - 32\n                if (wbits > windowSize) {\n                    wbits -= maxNumber;\n                    n += _1n;\n                }\n                // This code was first written with assumption that 'f' and 'p' will never be infinity point:\n                // since each addition is multiplied by 2 ** W, it cannot cancel each other. However,\n                // there is negate now: it is possible that negated element from low value\n                // would be the same as high element, which will create carry into next window.\n                // It's not obvious how this can fail, but still worth investigating later.\n                // Check if we're onto Zero point.\n                // Add random point inside current window to f.\n                const offset1 = offset;\n                const offset2 = offset + Math.abs(wbits) - 1; // -1 because we skip zero\n                const cond1 = window % 2 !== 0;\n                const cond2 = wbits < 0;\n                if (wbits === 0) {\n                    // The most important part for const-time getPublicKey\n                    f = f.add(constTimeNegate(cond1, precomputes[offset1]));\n                }\n                else {\n                    p = p.add(constTimeNegate(cond2, precomputes[offset2]));\n                }\n            }\n            // JIT-compiler should not eliminate f here, since it will later be used in normalizeZ()\n            // Even if the variable is still unused, there are some checks which will\n            // throw an exception, so compiler needs to prove they won't happen, which is hard.\n            // At this point there is a way to F be infinity-point even if p is not,\n            // which makes it less const-time: around 1 bigint multiply.\n            return { p, f };\n        },\n        wNAFCached(P, precomputesMap, n, transform) {\n            // @ts-ignore\n            const W = P._WINDOW_SIZE || 1;\n            // Calculate precomputes on a first run, reuse them after\n            let comp = precomputesMap.get(P);\n            if (!comp) {\n                comp = this.precomputeWindow(P, W);\n                if (W !== 1) {\n                    precomputesMap.set(P, transform(comp));\n                }\n            }\n            return this.wNAF(W, comp, n);\n        },\n    };\n}\nexport function validateBasic(curve) {\n    validateField(curve.Fp);\n    validateObject(curve, {\n        n: 'bigint',\n        h: 'bigint',\n        Gx: 'field',\n        Gy: 'field',\n    }, {\n        nBitLength: 'isSafeInteger',\n        nByteLength: 'isSafeInteger',\n    });\n    // Set defaults\n    return Object.freeze({\n        ...nLength(curve.n, curve.nBitLength),\n        ...curve,\n        ...{ p: curve.Fp.ORDER },\n    });\n}\n//# sourceMappingURL=curve.js.map","/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Short Weierstrass curve. The formula is: y² = x³ + ax + b\nimport * as mod from './modular.js';\nimport * as ut from './utils.js';\nimport { ensureBytes } from './utils.js';\nimport { wNAF, validateBasic } from './curve.js';\nfunction validatePointOpts(curve) {\n    const opts = validateBasic(curve);\n    ut.validateObject(opts, {\n        a: 'field',\n        b: 'field',\n    }, {\n        allowedPrivateKeyLengths: 'array',\n        wrapPrivateKey: 'boolean',\n        isTorsionFree: 'function',\n        clearCofactor: 'function',\n        allowInfinityPoint: 'boolean',\n        fromBytes: 'function',\n        toBytes: 'function',\n    });\n    const { endo, Fp, a } = opts;\n    if (endo) {\n        if (!Fp.eql(a, Fp.ZERO)) {\n            throw new Error('Endomorphism can only be defined for Koblitz curves that have a=0');\n        }\n        if (typeof endo !== 'object' ||\n            typeof endo.beta !== 'bigint' ||\n            typeof endo.splitScalar !== 'function') {\n            throw new Error('Expected endomorphism with beta: bigint and splitScalar: function');\n        }\n    }\n    return Object.freeze({ ...opts });\n}\n// ASN.1 DER encoding utilities\nconst { bytesToNumberBE: b2n, hexToBytes: h2b } = ut;\nexport const DER = {\n    // asn.1 DER encoding utils\n    Err: class DERErr extends Error {\n        constructor(m = '') {\n            super(m);\n        }\n    },\n    _parseInt(data) {\n        const { Err: E } = DER;\n        if (data.length < 2 || data[0] !== 0x02)\n            throw new E('Invalid signature integer tag');\n        const len = data[1];\n        const res = data.subarray(2, len + 2);\n        if (!len || res.length !== len)\n            throw new E('Invalid signature integer: wrong length');\n        // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n        // since we always use positive integers here. It must always be empty:\n        // - add zero byte if exists\n        // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n        if (res[0] & 0b10000000)\n            throw new E('Invalid signature integer: negative');\n        if (res[0] === 0x00 && !(res[1] & 0b10000000))\n            throw new E('Invalid signature integer: unnecessary leading zero');\n        return { d: b2n(res), l: data.subarray(len + 2) }; // d is data, l is left\n    },\n    toSig(hex) {\n        // parse DER signature\n        const { Err: E } = DER;\n        const data = typeof hex === 'string' ? h2b(hex) : hex;\n        if (!(data instanceof Uint8Array))\n            throw new Error('ui8a expected');\n        let l = data.length;\n        if (l < 2 || data[0] != 0x30)\n            throw new E('Invalid signature tag');\n        if (data[1] !== l - 2)\n            throw new E('Invalid signature: incorrect length');\n        const { d: r, l: sBytes } = DER._parseInt(data.subarray(2));\n        const { d: s, l: rBytesLeft } = DER._parseInt(sBytes);\n        if (rBytesLeft.length)\n            throw new E('Invalid signature: left bytes after parsing');\n        return { r, s };\n    },\n    hexFromSig(sig) {\n        // Add leading zero if first byte has negative bit enabled. More details in '_parseInt'\n        const slice = (s) => (Number.parseInt(s[0], 16) & 0b1000 ? '00' + s : s);\n        const h = (num) => {\n            const hex = num.toString(16);\n            return hex.length & 1 ? `0${hex}` : hex;\n        };\n        const s = slice(h(sig.s));\n        const r = slice(h(sig.r));\n        const shl = s.length / 2;\n        const rhl = r.length / 2;\n        const sl = h(shl);\n        const rl = h(rhl);\n        return `30${h(rhl + shl + 4)}02${rl}${r}02${sl}${s}`;\n    },\n};\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3), _4n = BigInt(4);\nexport function weierstrassPoints(opts) {\n    const CURVE = validatePointOpts(opts);\n    const { Fp } = CURVE; // All curves has same field / group length as for now, but they can differ\n    const toBytes = CURVE.toBytes ||\n        ((c, point, isCompressed) => {\n            const a = point.toAffine();\n            return ut.concatBytes(Uint8Array.from([0x04]), Fp.toBytes(a.x), Fp.toBytes(a.y));\n        });\n    const fromBytes = CURVE.fromBytes ||\n        ((bytes) => {\n            // const head = bytes[0];\n            const tail = bytes.subarray(1);\n            // if (head !== 0x04) throw new Error('Only non-compressed encoding is supported');\n            const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n            const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n            return { x, y };\n        });\n    /**\n     * y² = x³ + ax + b: Short weierstrass curve formula\n     * @returns y²\n     */\n    function weierstrassEquation(x) {\n        const { a, b } = CURVE;\n        const x2 = Fp.sqr(x); // x * x\n        const x3 = Fp.mul(x2, x); // x2 * x\n        return Fp.add(Fp.add(x3, Fp.mul(x, a)), b); // x3 + a * x + b\n    }\n    // Validate whether the passed curve params are valid.\n    // We check if curve equation works for generator point.\n    // `assertValidity()` won't work: `isTorsionFree()` is not available at this point in bls12-381.\n    // ProjectivePoint class has not been initialized yet.\n    if (!Fp.eql(Fp.sqr(CURVE.Gy), weierstrassEquation(CURVE.Gx)))\n        throw new Error('bad generator point: equation left != right');\n    // Valid group elements reside in range 1..n-1\n    function isWithinCurveOrder(num) {\n        return typeof num === 'bigint' && _0n < num && num < CURVE.n;\n    }\n    function assertGE(num) {\n        if (!isWithinCurveOrder(num))\n            throw new Error('Expected valid bigint: 0 < bigint < curve.n');\n    }\n    // Validates if priv key is valid and converts it to bigint.\n    // Supports options allowedPrivateKeyLengths and wrapPrivateKey.\n    function normPrivateKeyToScalar(key) {\n        const { allowedPrivateKeyLengths: lengths, nByteLength, wrapPrivateKey, n } = CURVE;\n        if (lengths && typeof key !== 'bigint') {\n            if (key instanceof Uint8Array)\n                key = ut.bytesToHex(key);\n            // Normalize to hex string, pad. E.g. P521 would norm 130-132 char hex to 132-char bytes\n            if (typeof key !== 'string' || !lengths.includes(key.length))\n                throw new Error('Invalid key');\n            key = key.padStart(nByteLength * 2, '0');\n        }\n        let num;\n        try {\n            num =\n                typeof key === 'bigint'\n                    ? key\n                    : ut.bytesToNumberBE(ensureBytes('private key', key, nByteLength));\n        }\n        catch (error) {\n            throw new Error(`private key must be ${nByteLength} bytes, hex or bigint, not ${typeof key}`);\n        }\n        if (wrapPrivateKey)\n            num = mod.mod(num, n); // disabled by default, enabled for BLS\n        assertGE(num); // num in range [1..N-1]\n        return num;\n    }\n    const pointPrecomputes = new Map();\n    function assertPrjPoint(other) {\n        if (!(other instanceof Point))\n            throw new Error('ProjectivePoint expected');\n    }\n    /**\n     * Projective Point works in 3d / projective (homogeneous) coordinates: (x, y, z) ∋ (x=x/z, y=y/z)\n     * Default Point works in 2d / affine coordinates: (x, y)\n     * We're doing calculations in projective, because its operations don't require costly inversion.\n     */\n    class Point {\n        constructor(px, py, pz) {\n            this.px = px;\n            this.py = py;\n            this.pz = pz;\n            if (px == null || !Fp.isValid(px))\n                throw new Error('x required');\n            if (py == null || !Fp.isValid(py))\n                throw new Error('y required');\n            if (pz == null || !Fp.isValid(pz))\n                throw new Error('z required');\n        }\n        // Does not validate if the point is on-curve.\n        // Use fromHex instead, or call assertValidity() later.\n        static fromAffine(p) {\n            const { x, y } = p || {};\n            if (!p || !Fp.isValid(x) || !Fp.isValid(y))\n                throw new Error('invalid affine point');\n            if (p instanceof Point)\n                throw new Error('projective point not allowed');\n            const is0 = (i) => Fp.eql(i, Fp.ZERO);\n            // fromAffine(x:0, y:0) would produce (x:0, y:0, z:1), but we need (x:0, y:1, z:0)\n            if (is0(x) && is0(y))\n                return Point.ZERO;\n            return new Point(x, y, Fp.ONE);\n        }\n        get x() {\n            return this.toAffine().x;\n        }\n        get y() {\n            return this.toAffine().y;\n        }\n        /**\n         * Takes a bunch of Projective Points but executes only one\n         * inversion on all of them. Inversion is very slow operation,\n         * so this improves performance massively.\n         * Optimization: converts a list of projective points to a list of identical points with Z=1.\n         */\n        static normalizeZ(points) {\n            const toInv = Fp.invertBatch(points.map((p) => p.pz));\n            return points.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n        }\n        /**\n         * Converts hash string or Uint8Array to Point.\n         * @param hex short/long ECDSA hex\n         */\n        static fromHex(hex) {\n            const P = Point.fromAffine(fromBytes(ensureBytes('pointHex', hex)));\n            P.assertValidity();\n            return P;\n        }\n        // Multiplies generator point by privateKey.\n        static fromPrivateKey(privateKey) {\n            return Point.BASE.multiply(normPrivateKeyToScalar(privateKey));\n        }\n        // \"Private method\", don't use it directly\n        _setWindowSize(windowSize) {\n            this._WINDOW_SIZE = windowSize;\n            pointPrecomputes.delete(this);\n        }\n        // A point on curve is valid if it conforms to equation.\n        assertValidity() {\n            // Zero is valid point too!\n            if (this.is0()) {\n                if (CURVE.allowInfinityPoint)\n                    return;\n                throw new Error('bad point: ZERO');\n            }\n            // Some 3rd-party test vectors require different wording between here & `fromCompressedHex`\n            const { x, y } = this.toAffine();\n            // Check if x, y are valid field elements\n            if (!Fp.isValid(x) || !Fp.isValid(y))\n                throw new Error('bad point: x or y not FE');\n            const left = Fp.sqr(y); // y²\n            const right = weierstrassEquation(x); // x³ + ax + b\n            if (!Fp.eql(left, right))\n                throw new Error('bad point: equation left != right');\n            if (!this.isTorsionFree())\n                throw new Error('bad point: not in prime-order subgroup');\n        }\n        hasEvenY() {\n            const { y } = this.toAffine();\n            if (Fp.isOdd)\n                return !Fp.isOdd(y);\n            throw new Error(\"Field doesn't support isOdd\");\n        }\n        /**\n         * Compare one point to another.\n         */\n        equals(other) {\n            assertPrjPoint(other);\n            const { px: X1, py: Y1, pz: Z1 } = this;\n            const { px: X2, py: Y2, pz: Z2 } = other;\n            const U1 = Fp.eql(Fp.mul(X1, Z2), Fp.mul(X2, Z1));\n            const U2 = Fp.eql(Fp.mul(Y1, Z2), Fp.mul(Y2, Z1));\n            return U1 && U2;\n        }\n        /**\n         * Flips point to one corresponding to (x, -y) in Affine coordinates.\n         */\n        negate() {\n            return new Point(this.px, Fp.neg(this.py), this.pz);\n        }\n        // Renes-Costello-Batina exception-free doubling formula.\n        // There is 30% faster Jacobian formula, but it is not complete.\n        // https://eprint.iacr.org/2015/1060, algorithm 3\n        // Cost: 8M + 3S + 3*a + 2*b3 + 15add.\n        double() {\n            const { a, b } = CURVE;\n            const b3 = Fp.mul(b, _3n);\n            const { px: X1, py: Y1, pz: Z1 } = this;\n            let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n            let t0 = Fp.mul(X1, X1); // step 1\n            let t1 = Fp.mul(Y1, Y1);\n            let t2 = Fp.mul(Z1, Z1);\n            let t3 = Fp.mul(X1, Y1);\n            t3 = Fp.add(t3, t3); // step 5\n            Z3 = Fp.mul(X1, Z1);\n            Z3 = Fp.add(Z3, Z3);\n            X3 = Fp.mul(a, Z3);\n            Y3 = Fp.mul(b3, t2);\n            Y3 = Fp.add(X3, Y3); // step 10\n            X3 = Fp.sub(t1, Y3);\n            Y3 = Fp.add(t1, Y3);\n            Y3 = Fp.mul(X3, Y3);\n            X3 = Fp.mul(t3, X3);\n            Z3 = Fp.mul(b3, Z3); // step 15\n            t2 = Fp.mul(a, t2);\n            t3 = Fp.sub(t0, t2);\n            t3 = Fp.mul(a, t3);\n            t3 = Fp.add(t3, Z3);\n            Z3 = Fp.add(t0, t0); // step 20\n            t0 = Fp.add(Z3, t0);\n            t0 = Fp.add(t0, t2);\n            t0 = Fp.mul(t0, t3);\n            Y3 = Fp.add(Y3, t0);\n            t2 = Fp.mul(Y1, Z1); // step 25\n            t2 = Fp.add(t2, t2);\n            t0 = Fp.mul(t2, t3);\n            X3 = Fp.sub(X3, t0);\n            Z3 = Fp.mul(t2, t1);\n            Z3 = Fp.add(Z3, Z3); // step 30\n            Z3 = Fp.add(Z3, Z3);\n            return new Point(X3, Y3, Z3);\n        }\n        // Renes-Costello-Batina exception-free addition formula.\n        // There is 30% faster Jacobian formula, but it is not complete.\n        // https://eprint.iacr.org/2015/1060, algorithm 1\n        // Cost: 12M + 0S + 3*a + 3*b3 + 23add.\n        add(other) {\n            assertPrjPoint(other);\n            const { px: X1, py: Y1, pz: Z1 } = this;\n            const { px: X2, py: Y2, pz: Z2 } = other;\n            let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n            const a = CURVE.a;\n            const b3 = Fp.mul(CURVE.b, _3n);\n            let t0 = Fp.mul(X1, X2); // step 1\n            let t1 = Fp.mul(Y1, Y2);\n            let t2 = Fp.mul(Z1, Z2);\n            let t3 = Fp.add(X1, Y1);\n            let t4 = Fp.add(X2, Y2); // step 5\n            t3 = Fp.mul(t3, t4);\n            t4 = Fp.add(t0, t1);\n            t3 = Fp.sub(t3, t4);\n            t4 = Fp.add(X1, Z1);\n            let t5 = Fp.add(X2, Z2); // step 10\n            t4 = Fp.mul(t4, t5);\n            t5 = Fp.add(t0, t2);\n            t4 = Fp.sub(t4, t5);\n            t5 = Fp.add(Y1, Z1);\n            X3 = Fp.add(Y2, Z2); // step 15\n            t5 = Fp.mul(t5, X3);\n            X3 = Fp.add(t1, t2);\n            t5 = Fp.sub(t5, X3);\n            Z3 = Fp.mul(a, t4);\n            X3 = Fp.mul(b3, t2); // step 20\n            Z3 = Fp.add(X3, Z3);\n            X3 = Fp.sub(t1, Z3);\n            Z3 = Fp.add(t1, Z3);\n            Y3 = Fp.mul(X3, Z3);\n            t1 = Fp.add(t0, t0); // step 25\n            t1 = Fp.add(t1, t0);\n            t2 = Fp.mul(a, t2);\n            t4 = Fp.mul(b3, t4);\n            t1 = Fp.add(t1, t2);\n            t2 = Fp.sub(t0, t2); // step 30\n            t2 = Fp.mul(a, t2);\n            t4 = Fp.add(t4, t2);\n            t0 = Fp.mul(t1, t4);\n            Y3 = Fp.add(Y3, t0);\n            t0 = Fp.mul(t5, t4); // step 35\n            X3 = Fp.mul(t3, X3);\n            X3 = Fp.sub(X3, t0);\n            t0 = Fp.mul(t3, t1);\n            Z3 = Fp.mul(t5, Z3);\n            Z3 = Fp.add(Z3, t0); // step 40\n            return new Point(X3, Y3, Z3);\n        }\n        subtract(other) {\n            return this.add(other.negate());\n        }\n        is0() {\n            return this.equals(Point.ZERO);\n        }\n        wNAF(n) {\n            return wnaf.wNAFCached(this, pointPrecomputes, n, (comp) => {\n                const toInv = Fp.invertBatch(comp.map((p) => p.pz));\n                return comp.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n            });\n        }\n        /**\n         * Non-constant-time multiplication. Uses double-and-add algorithm.\n         * It's faster, but should only be used when you don't care about\n         * an exposed private key e.g. sig verification, which works over *public* keys.\n         */\n        multiplyUnsafe(n) {\n            const I = Point.ZERO;\n            if (n === _0n)\n                return I;\n            assertGE(n); // Will throw on 0\n            if (n === _1n)\n                return this;\n            const { endo } = CURVE;\n            if (!endo)\n                return wnaf.unsafeLadder(this, n);\n            // Apply endomorphism\n            let { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\n            let k1p = I;\n            let k2p = I;\n            let d = this;\n            while (k1 > _0n || k2 > _0n) {\n                if (k1 & _1n)\n                    k1p = k1p.add(d);\n                if (k2 & _1n)\n                    k2p = k2p.add(d);\n                d = d.double();\n                k1 >>= _1n;\n                k2 >>= _1n;\n            }\n            if (k1neg)\n                k1p = k1p.negate();\n            if (k2neg)\n                k2p = k2p.negate();\n            k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n            return k1p.add(k2p);\n        }\n        /**\n         * Constant time multiplication.\n         * Uses wNAF method. Windowed method may be 10% faster,\n         * but takes 2x longer to generate and consumes 2x memory.\n         * Uses precomputes when available.\n         * Uses endomorphism for Koblitz curves.\n         * @param scalar by which the point would be multiplied\n         * @returns New point\n         */\n        multiply(scalar) {\n            assertGE(scalar);\n            let n = scalar;\n            let point, fake; // Fake point is used to const-time mult\n            const { endo } = CURVE;\n            if (endo) {\n                const { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\n                let { p: k1p, f: f1p } = this.wNAF(k1);\n                let { p: k2p, f: f2p } = this.wNAF(k2);\n                k1p = wnaf.constTimeNegate(k1neg, k1p);\n                k2p = wnaf.constTimeNegate(k2neg, k2p);\n                k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n                point = k1p.add(k2p);\n                fake = f1p.add(f2p);\n            }\n            else {\n                const { p, f } = this.wNAF(n);\n                point = p;\n                fake = f;\n            }\n            // Normalize `z` for both points, but return only real one\n            return Point.normalizeZ([point, fake])[0];\n        }\n        /**\n         * Efficiently calculate `aP + bQ`. Unsafe, can expose private key, if used incorrectly.\n         * Not using Strauss-Shamir trick: precomputation tables are faster.\n         * The trick could be useful if both P and Q are not G (not in our case).\n         * @returns non-zero affine point\n         */\n        multiplyAndAddUnsafe(Q, a, b) {\n            const G = Point.BASE; // No Strauss-Shamir trick: we have 10% faster G precomputes\n            const mul = (P, a // Select faster multiply() method\n            ) => (a === _0n || a === _1n || !P.equals(G) ? P.multiplyUnsafe(a) : P.multiply(a));\n            const sum = mul(this, a).add(mul(Q, b));\n            return sum.is0() ? undefined : sum;\n        }\n        // Converts Projective point to affine (x, y) coordinates.\n        // Can accept precomputed Z^-1 - for example, from invertBatch.\n        // (x, y, z) ∋ (x=x/z, y=y/z)\n        toAffine(iz) {\n            const { px: x, py: y, pz: z } = this;\n            const is0 = this.is0();\n            // If invZ was 0, we return zero point. However we still want to execute\n            // all operations, so we replace invZ with a random number, 1.\n            if (iz == null)\n                iz = is0 ? Fp.ONE : Fp.inv(z);\n            const ax = Fp.mul(x, iz);\n            const ay = Fp.mul(y, iz);\n            const zz = Fp.mul(z, iz);\n            if (is0)\n                return { x: Fp.ZERO, y: Fp.ZERO };\n            if (!Fp.eql(zz, Fp.ONE))\n                throw new Error('invZ was invalid');\n            return { x: ax, y: ay };\n        }\n        isTorsionFree() {\n            const { h: cofactor, isTorsionFree } = CURVE;\n            if (cofactor === _1n)\n                return true; // No subgroups, always torsion-free\n            if (isTorsionFree)\n                return isTorsionFree(Point, this);\n            throw new Error('isTorsionFree() has not been declared for the elliptic curve');\n        }\n        clearCofactor() {\n            const { h: cofactor, clearCofactor } = CURVE;\n            if (cofactor === _1n)\n                return this; // Fast-path\n            if (clearCofactor)\n                return clearCofactor(Point, this);\n            return this.multiplyUnsafe(CURVE.h);\n        }\n        toRawBytes(isCompressed = true) {\n            this.assertValidity();\n            return toBytes(Point, this, isCompressed);\n        }\n        toHex(isCompressed = true) {\n            return ut.bytesToHex(this.toRawBytes(isCompressed));\n        }\n    }\n    Point.BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n    Point.ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO);\n    const _bits = CURVE.nBitLength;\n    const wnaf = wNAF(Point, CURVE.endo ? Math.ceil(_bits / 2) : _bits);\n    // Validate if generator point is on curve\n    return {\n        CURVE,\n        ProjectivePoint: Point,\n        normPrivateKeyToScalar,\n        weierstrassEquation,\n        isWithinCurveOrder,\n    };\n}\nfunction validateOpts(curve) {\n    const opts = validateBasic(curve);\n    ut.validateObject(opts, {\n        hash: 'hash',\n        hmac: 'function',\n        randomBytes: 'function',\n    }, {\n        bits2int: 'function',\n        bits2int_modN: 'function',\n        lowS: 'boolean',\n    });\n    return Object.freeze({ lowS: true, ...opts });\n}\nexport function weierstrass(curveDef) {\n    const CURVE = validateOpts(curveDef);\n    const { Fp, n: CURVE_ORDER } = CURVE;\n    const compressedLen = Fp.BYTES + 1; // e.g. 33 for 32\n    const uncompressedLen = 2 * Fp.BYTES + 1; // e.g. 65 for 32\n    function isValidFieldElement(num) {\n        return _0n < num && num < Fp.ORDER; // 0 is banned since it's not invertible FE\n    }\n    function modN(a) {\n        return mod.mod(a, CURVE_ORDER);\n    }\n    function invN(a) {\n        return mod.invert(a, CURVE_ORDER);\n    }\n    const { ProjectivePoint: Point, normPrivateKeyToScalar, weierstrassEquation, isWithinCurveOrder, } = weierstrassPoints({\n        ...CURVE,\n        toBytes(c, point, isCompressed) {\n            const a = point.toAffine();\n            const x = Fp.toBytes(a.x);\n            const cat = ut.concatBytes;\n            if (isCompressed) {\n                return cat(Uint8Array.from([point.hasEvenY() ? 0x02 : 0x03]), x);\n            }\n            else {\n                return cat(Uint8Array.from([0x04]), x, Fp.toBytes(a.y));\n            }\n        },\n        fromBytes(bytes) {\n            const len = bytes.length;\n            const head = bytes[0];\n            const tail = bytes.subarray(1);\n            // this.assertValidity() is done inside of fromHex\n            if (len === compressedLen && (head === 0x02 || head === 0x03)) {\n                const x = ut.bytesToNumberBE(tail);\n                if (!isValidFieldElement(x))\n                    throw new Error('Point is not on curve');\n                const y2 = weierstrassEquation(x); // y² = x³ + ax + b\n                let y = Fp.sqrt(y2); // y = y² ^ (p+1)/4\n                const isYOdd = (y & _1n) === _1n;\n                // ECDSA\n                const isHeadOdd = (head & 1) === 1;\n                if (isHeadOdd !== isYOdd)\n                    y = Fp.neg(y);\n                return { x, y };\n            }\n            else if (len === uncompressedLen && head === 0x04) {\n                const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n                const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n                return { x, y };\n            }\n            else {\n                throw new Error(`Point of length ${len} was invalid. Expected ${compressedLen} compressed bytes or ${uncompressedLen} uncompressed bytes`);\n            }\n        },\n    });\n    const numToNByteStr = (num) => ut.bytesToHex(ut.numberToBytesBE(num, CURVE.nByteLength));\n    function isBiggerThanHalfOrder(number) {\n        const HALF = CURVE_ORDER >> _1n;\n        return number > HALF;\n    }\n    function normalizeS(s) {\n        return isBiggerThanHalfOrder(s) ? modN(-s) : s;\n    }\n    // slice bytes num\n    const slcNum = (b, from, to) => ut.bytesToNumberBE(b.slice(from, to));\n    /**\n     * ECDSA signature with its (r, s) properties. Supports DER & compact representations.\n     */\n    class Signature {\n        constructor(r, s, recovery) {\n            this.r = r;\n            this.s = s;\n            this.recovery = recovery;\n            this.assertValidity();\n        }\n        // pair (bytes of r, bytes of s)\n        static fromCompact(hex) {\n            const l = CURVE.nByteLength;\n            hex = ensureBytes('compactSignature', hex, l * 2);\n            return new Signature(slcNum(hex, 0, l), slcNum(hex, l, 2 * l));\n        }\n        // DER encoded ECDSA signature\n        // https://bitcoin.stackexchange.com/questions/57644/what-are-the-parts-of-a-bitcoin-transaction-input-script\n        static fromDER(hex) {\n            const { r, s } = DER.toSig(ensureBytes('DER', hex));\n            return new Signature(r, s);\n        }\n        assertValidity() {\n            // can use assertGE here\n            if (!isWithinCurveOrder(this.r))\n                throw new Error('r must be 0 < r < CURVE.n');\n            if (!isWithinCurveOrder(this.s))\n                throw new Error('s must be 0 < s < CURVE.n');\n        }\n        addRecoveryBit(recovery) {\n            return new Signature(this.r, this.s, recovery);\n        }\n        recoverPublicKey(msgHash) {\n            const { r, s, recovery: rec } = this;\n            const h = bits2int_modN(ensureBytes('msgHash', msgHash)); // Truncate hash\n            if (rec == null || ![0, 1, 2, 3].includes(rec))\n                throw new Error('recovery id invalid');\n            const radj = rec === 2 || rec === 3 ? r + CURVE.n : r;\n            if (radj >= Fp.ORDER)\n                throw new Error('recovery id 2 or 3 invalid');\n            const prefix = (rec & 1) === 0 ? '02' : '03';\n            const R = Point.fromHex(prefix + numToNByteStr(radj));\n            const ir = invN(radj); // r^-1\n            const u1 = modN(-h * ir); // -hr^-1\n            const u2 = modN(s * ir); // sr^-1\n            const Q = Point.BASE.multiplyAndAddUnsafe(R, u1, u2); // (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1)\n            if (!Q)\n                throw new Error('point at infinify'); // unsafe is fine: no priv data leaked\n            Q.assertValidity();\n            return Q;\n        }\n        // Signatures should be low-s, to prevent malleability.\n        hasHighS() {\n            return isBiggerThanHalfOrder(this.s);\n        }\n        normalizeS() {\n            return this.hasHighS() ? new Signature(this.r, modN(-this.s), this.recovery) : this;\n        }\n        // DER-encoded\n        toDERRawBytes() {\n            return ut.hexToBytes(this.toDERHex());\n        }\n        toDERHex() {\n            return DER.hexFromSig({ r: this.r, s: this.s });\n        }\n        // padded bytes of r, then padded bytes of s\n        toCompactRawBytes() {\n            return ut.hexToBytes(this.toCompactHex());\n        }\n        toCompactHex() {\n            return numToNByteStr(this.r) + numToNByteStr(this.s);\n        }\n    }\n    const utils = {\n        isValidPrivateKey(privateKey) {\n            try {\n                normPrivateKeyToScalar(privateKey);\n                return true;\n            }\n            catch (error) {\n                return false;\n            }\n        },\n        normPrivateKeyToScalar: normPrivateKeyToScalar,\n        /**\n         * Produces cryptographically secure private key from random of size (nBitLength+64)\n         * as per FIPS 186 B.4.1 with modulo bias being neglible.\n         */\n        randomPrivateKey: () => {\n            const rand = CURVE.randomBytes(Fp.BYTES + 8);\n            const num = mod.hashToPrivateScalar(rand, CURVE_ORDER);\n            return ut.numberToBytesBE(num, CURVE.nByteLength);\n        },\n        /**\n         * Creates precompute table for an arbitrary EC point. Makes point \"cached\".\n         * Allows to massively speed-up `point.multiply(scalar)`.\n         * @returns cached point\n         * @example\n         * const fast = utils.precompute(8, ProjectivePoint.fromHex(someonesPubKey));\n         * fast.multiply(privKey); // much faster ECDH now\n         */\n        precompute(windowSize = 8, point = Point.BASE) {\n            point._setWindowSize(windowSize);\n            point.multiply(BigInt(3)); // 3 is arbitrary, just need any number here\n            return point;\n        },\n    };\n    /**\n     * Computes public key for a private key. Checks for validity of the private key.\n     * @param privateKey private key\n     * @param isCompressed whether to return compact (default), or full key\n     * @returns Public key, full when isCompressed=false; short when isCompressed=true\n     */\n    function getPublicKey(privateKey, isCompressed = true) {\n        return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);\n    }\n    /**\n     * Quick and dirty check for item being public key. Does not validate hex, or being on-curve.\n     */\n    function isProbPub(item) {\n        const arr = item instanceof Uint8Array;\n        const str = typeof item === 'string';\n        const len = (arr || str) && item.length;\n        if (arr)\n            return len === compressedLen || len === uncompressedLen;\n        if (str)\n            return len === 2 * compressedLen || len === 2 * uncompressedLen;\n        if (item instanceof Point)\n            return true;\n        return false;\n    }\n    /**\n     * ECDH (Elliptic Curve Diffie Hellman).\n     * Computes shared public key from private key and public key.\n     * Checks: 1) private key validity 2) shared key is on-curve.\n     * Does NOT hash the result.\n     * @param privateA private key\n     * @param publicB different public key\n     * @param isCompressed whether to return compact (default), or full key\n     * @returns shared public key\n     */\n    function getSharedSecret(privateA, publicB, isCompressed = true) {\n        if (isProbPub(privateA))\n            throw new Error('first arg must be private key');\n        if (!isProbPub(publicB))\n            throw new Error('second arg must be public key');\n        const b = Point.fromHex(publicB); // check for being on-curve\n        return b.multiply(normPrivateKeyToScalar(privateA)).toRawBytes(isCompressed);\n    }\n    // RFC6979: ensure ECDSA msg is X bytes and < N. RFC suggests optional truncating via bits2octets.\n    // FIPS 186-4 4.6 suggests the leftmost min(nBitLen, outLen) bits, which matches bits2int.\n    // bits2int can produce res>N, we can do mod(res, N) since the bitLen is the same.\n    // int2octets can't be used; pads small msgs with 0: unacceptatble for trunc as per RFC vectors\n    const bits2int = CURVE.bits2int ||\n        function (bytes) {\n            // For curves with nBitLength % 8 !== 0: bits2octets(bits2octets(m)) !== bits2octets(m)\n            // for some cases, since bytes.length * 8 is not actual bitLength.\n            const num = ut.bytesToNumberBE(bytes); // check for == u8 done here\n            const delta = bytes.length * 8 - CURVE.nBitLength; // truncate to nBitLength leftmost bits\n            return delta > 0 ? num >> BigInt(delta) : num;\n        };\n    const bits2int_modN = CURVE.bits2int_modN ||\n        function (bytes) {\n            return modN(bits2int(bytes)); // can't use bytesToNumberBE here\n        };\n    // NOTE: pads output with zero as per spec\n    const ORDER_MASK = ut.bitMask(CURVE.nBitLength);\n    /**\n     * Converts to bytes. Checks if num in `[0..ORDER_MASK-1]` e.g.: `[0..2^256-1]`.\n     */\n    function int2octets(num) {\n        if (typeof num !== 'bigint')\n            throw new Error('bigint expected');\n        if (!(_0n <= num && num < ORDER_MASK))\n            throw new Error(`bigint expected < 2^${CURVE.nBitLength}`);\n        // works with order, can have different size than numToField!\n        return ut.numberToBytesBE(num, CURVE.nByteLength);\n    }\n    // Steps A, D of RFC6979 3.2\n    // Creates RFC6979 seed; converts msg/privKey to numbers.\n    // Used only in sign, not in verify.\n    // NOTE: we cannot assume here that msgHash has same amount of bytes as curve order, this will be wrong at least for P521.\n    // Also it can be bigger for P224 + SHA256\n    function prepSig(msgHash, privateKey, opts = defaultSigOpts) {\n        if (['recovered', 'canonical'].some((k) => k in opts))\n            throw new Error('sign() legacy options not supported');\n        const { hash, randomBytes } = CURVE;\n        let { lowS, prehash, extraEntropy: ent } = opts; // generates low-s sigs by default\n        if (lowS == null)\n            lowS = true; // RFC6979 3.2: we skip step A, because we already provide hash\n        msgHash = ensureBytes('msgHash', msgHash);\n        if (prehash)\n            msgHash = ensureBytes('prehashed msgHash', hash(msgHash));\n        // We can't later call bits2octets, since nested bits2int is broken for curves\n        // with nBitLength % 8 !== 0. Because of that, we unwrap it here as int2octets call.\n        // const bits2octets = (bits) => int2octets(bits2int_modN(bits))\n        const h1int = bits2int_modN(msgHash);\n        const d = normPrivateKeyToScalar(privateKey); // validate private key, convert to bigint\n        const seedArgs = [int2octets(d), int2octets(h1int)];\n        // extraEntropy. RFC6979 3.6: additional k' (optional).\n        if (ent != null) {\n            // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')\n            const e = ent === true ? randomBytes(Fp.BYTES) : ent; // generate random bytes OR pass as-is\n            seedArgs.push(ensureBytes('extraEntropy', e, Fp.BYTES)); // check for being of size BYTES\n        }\n        const seed = ut.concatBytes(...seedArgs); // Step D of RFC6979 3.2\n        const m = h1int; // NOTE: no need to call bits2int second time here, it is inside truncateHash!\n        // Converts signature params into point w r/s, checks result for validity.\n        function k2sig(kBytes) {\n            // RFC 6979 Section 3.2, step 3: k = bits2int(T)\n            const k = bits2int(kBytes); // Cannot use fields methods, since it is group element\n            if (!isWithinCurveOrder(k))\n                return; // Important: all mod() calls here must be done over N\n            const ik = invN(k); // k^-1 mod n\n            const q = Point.BASE.multiply(k).toAffine(); // q = Gk\n            const r = modN(q.x); // r = q.x mod n\n            if (r === _0n)\n                return;\n            // Can use scalar blinding b^-1(bm + bdr) where b ∈ [1,q−1] according to\n            // https://tches.iacr.org/index.php/TCHES/article/view/7337/6509. We've decided against it:\n            // a) dependency on CSPRNG b) 15% slowdown c) doesn't really help since bigints are not CT\n            const s = modN(ik * modN(m + r * d)); // Not using blinding here\n            if (s === _0n)\n                return;\n            let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n); // recovery bit (2 or 3, when q.x > n)\n            let normS = s;\n            if (lowS && isBiggerThanHalfOrder(s)) {\n                normS = normalizeS(s); // if lowS was passed, ensure s is always\n                recovery ^= 1; // // in the bottom half of N\n            }\n            return new Signature(r, normS, recovery); // use normS, not s\n        }\n        return { seed, k2sig };\n    }\n    const defaultSigOpts = { lowS: CURVE.lowS, prehash: false };\n    const defaultVerOpts = { lowS: CURVE.lowS, prehash: false };\n    /**\n     * Signs message hash with a private key.\n     * ```\n     * sign(m, d, k) where\n     *   (x, y) = G × k\n     *   r = x mod n\n     *   s = (m + dr)/k mod n\n     * ```\n     * @param msgHash NOT message. msg needs to be hashed to `msgHash`, or use `prehash`.\n     * @param privKey private key\n     * @param opts lowS for non-malleable sigs. extraEntropy for mixing randomness into k. prehash will hash first arg.\n     * @returns signature with recovery param\n     */\n    function sign(msgHash, privKey, opts = defaultSigOpts) {\n        const { seed, k2sig } = prepSig(msgHash, privKey, opts); // Steps A, D of RFC6979 3.2.\n        const C = CURVE;\n        const drbg = ut.createHmacDrbg(C.hash.outputLen, C.nByteLength, C.hmac);\n        return drbg(seed, k2sig); // Steps B, C, D, E, F, G\n    }\n    // Enable precomputes. Slows down first publicKey computation by 20ms.\n    Point.BASE._setWindowSize(8);\n    // utils.precompute(8, ProjectivePoint.BASE)\n    /**\n     * Verifies a signature against message hash and public key.\n     * Rejects lowS signatures by default: to override,\n     * specify option `{lowS: false}`. Implements section 4.1.4 from https://www.secg.org/sec1-v2.pdf:\n     *\n     * ```\n     * verify(r, s, h, P) where\n     *   U1 = hs^-1 mod n\n     *   U2 = rs^-1 mod n\n     *   R = U1⋅G - U2⋅P\n     *   mod(R.x, n) == r\n     * ```\n     */\n    function verify(signature, msgHash, publicKey, opts = defaultVerOpts) {\n        const sg = signature;\n        msgHash = ensureBytes('msgHash', msgHash);\n        publicKey = ensureBytes('publicKey', publicKey);\n        if ('strict' in opts)\n            throw new Error('options.strict was renamed to lowS');\n        const { lowS, prehash } = opts;\n        let _sig = undefined;\n        let P;\n        try {\n            if (typeof sg === 'string' || sg instanceof Uint8Array) {\n                // Signature can be represented in 2 ways: compact (2*nByteLength) & DER (variable-length).\n                // Since DER can also be 2*nByteLength bytes, we check for it first.\n                try {\n                    _sig = Signature.fromDER(sg);\n                }\n                catch (derError) {\n                    if (!(derError instanceof DER.Err))\n                        throw derError;\n                    _sig = Signature.fromCompact(sg);\n                }\n            }\n            else if (typeof sg === 'object' && typeof sg.r === 'bigint' && typeof sg.s === 'bigint') {\n                const { r, s } = sg;\n                _sig = new Signature(r, s);\n            }\n            else {\n                throw new Error('PARSE');\n            }\n            P = Point.fromHex(publicKey);\n        }\n        catch (error) {\n            if (error.message === 'PARSE')\n                throw new Error(`signature must be Signature instance, Uint8Array or hex string`);\n            return false;\n        }\n        if (lowS && _sig.hasHighS())\n            return false;\n        if (prehash)\n            msgHash = CURVE.hash(msgHash);\n        const { r, s } = _sig;\n        const h = bits2int_modN(msgHash); // Cannot use fields methods, since it is group element\n        const is = invN(s); // s^-1\n        const u1 = modN(h * is); // u1 = hs^-1 mod n\n        const u2 = modN(r * is); // u2 = rs^-1 mod n\n        const R = Point.BASE.multiplyAndAddUnsafe(P, u1, u2)?.toAffine(); // R = u1⋅G + u2⋅P\n        if (!R)\n            return false;\n        const v = modN(R.x);\n        return v === r;\n    }\n    return {\n        CURVE,\n        getPublicKey,\n        getSharedSecret,\n        sign,\n        verify,\n        ProjectivePoint: Point,\n        Signature,\n        utils,\n    };\n}\n/**\n * Implementation of the Shallue and van de Woestijne method for any weierstrass curve.\n * TODO: check if there is a way to merge this with uvRatio in Edwards; move to modular.\n * b = True and y = sqrt(u / v) if (u / v) is square in F, and\n * b = False and y = sqrt(Z * (u / v)) otherwise.\n * @param Fp\n * @param Z\n * @returns\n */\nexport function SWUFpSqrtRatio(Fp, Z) {\n    // Generic implementation\n    const q = Fp.ORDER;\n    let l = _0n;\n    for (let o = q - _1n; o % _2n === _0n; o /= _2n)\n        l += _1n;\n    const c1 = l; // 1. c1, the largest integer such that 2^c1 divides q - 1.\n    // We need 2n ** c1 and 2n ** (c1-1). We can't use **; but we can use <<.\n    // 2n ** c1 == 2n << (c1-1)\n    const _2n_pow_c1_1 = _2n << (c1 - _1n - _1n);\n    const _2n_pow_c1 = _2n_pow_c1_1 * _2n;\n    const c2 = (q - _1n) / _2n_pow_c1; // 2. c2 = (q - 1) / (2^c1)  # Integer arithmetic\n    const c3 = (c2 - _1n) / _2n; // 3. c3 = (c2 - 1) / 2            # Integer arithmetic\n    const c4 = _2n_pow_c1 - _1n; // 4. c4 = 2^c1 - 1                # Integer arithmetic\n    const c5 = _2n_pow_c1_1; // 5. c5 = 2^(c1 - 1)                  # Integer arithmetic\n    const c6 = Fp.pow(Z, c2); // 6. c6 = Z^c2\n    const c7 = Fp.pow(Z, (c2 + _1n) / _2n); // 7. c7 = Z^((c2 + 1) / 2)\n    let sqrtRatio = (u, v) => {\n        let tv1 = c6; // 1. tv1 = c6\n        let tv2 = Fp.pow(v, c4); // 2. tv2 = v^c4\n        let tv3 = Fp.sqr(tv2); // 3. tv3 = tv2^2\n        tv3 = Fp.mul(tv3, v); // 4. tv3 = tv3 * v\n        let tv5 = Fp.mul(u, tv3); // 5. tv5 = u * tv3\n        tv5 = Fp.pow(tv5, c3); // 6. tv5 = tv5^c3\n        tv5 = Fp.mul(tv5, tv2); // 7. tv5 = tv5 * tv2\n        tv2 = Fp.mul(tv5, v); // 8. tv2 = tv5 * v\n        tv3 = Fp.mul(tv5, u); // 9. tv3 = tv5 * u\n        let tv4 = Fp.mul(tv3, tv2); // 10. tv4 = tv3 * tv2\n        tv5 = Fp.pow(tv4, c5); // 11. tv5 = tv4^c5\n        let isQR = Fp.eql(tv5, Fp.ONE); // 12. isQR = tv5 == 1\n        tv2 = Fp.mul(tv3, c7); // 13. tv2 = tv3 * c7\n        tv5 = Fp.mul(tv4, tv1); // 14. tv5 = tv4 * tv1\n        tv3 = Fp.cmov(tv2, tv3, isQR); // 15. tv3 = CMOV(tv2, tv3, isQR)\n        tv4 = Fp.cmov(tv5, tv4, isQR); // 16. tv4 = CMOV(tv5, tv4, isQR)\n        // 17. for i in (c1, c1 - 1, ..., 2):\n        for (let i = c1; i > _1n; i--) {\n            let tv5 = i - _2n; // 18.    tv5 = i - 2\n            tv5 = _2n << (tv5 - _1n); // 19.    tv5 = 2^tv5\n            let tvv5 = Fp.pow(tv4, tv5); // 20.    tv5 = tv4^tv5\n            const e1 = Fp.eql(tvv5, Fp.ONE); // 21.    e1 = tv5 == 1\n            tv2 = Fp.mul(tv3, tv1); // 22.    tv2 = tv3 * tv1\n            tv1 = Fp.mul(tv1, tv1); // 23.    tv1 = tv1 * tv1\n            tvv5 = Fp.mul(tv4, tv1); // 24.    tv5 = tv4 * tv1\n            tv3 = Fp.cmov(tv2, tv3, e1); // 25.    tv3 = CMOV(tv2, tv3, e1)\n            tv4 = Fp.cmov(tvv5, tv4, e1); // 26.    tv4 = CMOV(tv5, tv4, e1)\n        }\n        return { isValid: isQR, value: tv3 };\n    };\n    if (Fp.ORDER % _4n === _3n) {\n        // sqrt_ratio_3mod4(u, v)\n        const c1 = (Fp.ORDER - _3n) / _4n; // 1. c1 = (q - 3) / 4     # Integer arithmetic\n        const c2 = Fp.sqrt(Fp.neg(Z)); // 2. c2 = sqrt(-Z)\n        sqrtRatio = (u, v) => {\n            let tv1 = Fp.sqr(v); // 1. tv1 = v^2\n            const tv2 = Fp.mul(u, v); // 2. tv2 = u * v\n            tv1 = Fp.mul(tv1, tv2); // 3. tv1 = tv1 * tv2\n            let y1 = Fp.pow(tv1, c1); // 4. y1 = tv1^c1\n            y1 = Fp.mul(y1, tv2); // 5. y1 = y1 * tv2\n            const y2 = Fp.mul(y1, c2); // 6. y2 = y1 * c2\n            const tv3 = Fp.mul(Fp.sqr(y1), v); // 7. tv3 = y1^2; 8. tv3 = tv3 * v\n            const isQR = Fp.eql(tv3, u); // 9. isQR = tv3 == u\n            let y = Fp.cmov(y2, y1, isQR); // 10. y = CMOV(y2, y1, isQR)\n            return { isValid: isQR, value: y }; // 11. return (isQR, y) isQR ? y : y*c2\n        };\n    }\n    // No curves uses that\n    // if (Fp.ORDER % _8n === _5n) // sqrt_ratio_5mod8\n    return sqrtRatio;\n}\n/**\n * From draft-irtf-cfrg-hash-to-curve-16\n */\nexport function mapToCurveSimpleSWU(Fp, opts) {\n    mod.validateField(Fp);\n    if (!Fp.isValid(opts.A) || !Fp.isValid(opts.B) || !Fp.isValid(opts.Z))\n        throw new Error('mapToCurveSimpleSWU: invalid opts');\n    const sqrtRatio = SWUFpSqrtRatio(Fp, opts.Z);\n    if (!Fp.isOdd)\n        throw new Error('Fp.isOdd is not implemented!');\n    // Input: u, an element of F.\n    // Output: (x, y), a point on E.\n    return (u) => {\n        // prettier-ignore\n        let tv1, tv2, tv3, tv4, tv5, tv6, x, y;\n        tv1 = Fp.sqr(u); // 1.  tv1 = u^2\n        tv1 = Fp.mul(tv1, opts.Z); // 2.  tv1 = Z * tv1\n        tv2 = Fp.sqr(tv1); // 3.  tv2 = tv1^2\n        tv2 = Fp.add(tv2, tv1); // 4.  tv2 = tv2 + tv1\n        tv3 = Fp.add(tv2, Fp.ONE); // 5.  tv3 = tv2 + 1\n        tv3 = Fp.mul(tv3, opts.B); // 6.  tv3 = B * tv3\n        tv4 = Fp.cmov(opts.Z, Fp.neg(tv2), !Fp.eql(tv2, Fp.ZERO)); // 7.  tv4 = CMOV(Z, -tv2, tv2 != 0)\n        tv4 = Fp.mul(tv4, opts.A); // 8.  tv4 = A * tv4\n        tv2 = Fp.sqr(tv3); // 9.  tv2 = tv3^2\n        tv6 = Fp.sqr(tv4); // 10. tv6 = tv4^2\n        tv5 = Fp.mul(tv6, opts.A); // 11. tv5 = A * tv6\n        tv2 = Fp.add(tv2, tv5); // 12. tv2 = tv2 + tv5\n        tv2 = Fp.mul(tv2, tv3); // 13. tv2 = tv2 * tv3\n        tv6 = Fp.mul(tv6, tv4); // 14. tv6 = tv6 * tv4\n        tv5 = Fp.mul(tv6, opts.B); // 15. tv5 = B * tv6\n        tv2 = Fp.add(tv2, tv5); // 16. tv2 = tv2 + tv5\n        x = Fp.mul(tv1, tv3); // 17.   x = tv1 * tv3\n        const { isValid, value } = sqrtRatio(tv2, tv6); // 18. (is_gx1_square, y1) = sqrt_ratio(tv2, tv6)\n        y = Fp.mul(tv1, u); // 19.   y = tv1 * u  -> Z * u^3 * y1\n        y = Fp.mul(y, value); // 20.   y = y * y1\n        x = Fp.cmov(x, tv3, isValid); // 21.   x = CMOV(x, tv3, is_gx1_square)\n        y = Fp.cmov(y, value, isValid); // 22.   y = CMOV(y, y1, is_gx1_square)\n        const e1 = Fp.isOdd(u) === Fp.isOdd(y); // 23.  e1 = sgn0(u) == sgn0(y)\n        y = Fp.cmov(Fp.neg(y), y, e1); // 24.   y = CMOV(-y, y, e1)\n        x = Fp.div(x, tv4); // 25.   x = x / tv4\n        return { x, y };\n    };\n}\n//# sourceMappingURL=weierstrass.js.map","/**\n * Internal assertion helpers.\n * @module\n */\nfunction anumber(n) {\n    if (!Number.isSafeInteger(n) || n < 0)\n        throw new Error('positive integer expected, got ' + n);\n}\n// copied from utils\nfunction isBytes(a) {\n    return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\nfunction abytes(b, ...lengths) {\n    if (!isBytes(b))\n        throw new Error('Uint8Array expected');\n    if (lengths.length > 0 && !lengths.includes(b.length))\n        throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\nfunction ahash(h) {\n    if (typeof h !== 'function' || typeof h.create !== 'function')\n        throw new Error('Hash should be wrapped by utils.wrapConstructor');\n    anumber(h.outputLen);\n    anumber(h.blockLen);\n}\nfunction aexists(instance, checkFinished = true) {\n    if (instance.destroyed)\n        throw new Error('Hash instance has been destroyed');\n    if (checkFinished && instance.finished)\n        throw new Error('Hash#digest() has already been called');\n}\nfunction aoutput(out, instance) {\n    abytes(out);\n    const min = instance.outputLen;\n    if (out.length < min) {\n        throw new Error('digestInto() expects output buffer of length at least ' + min);\n    }\n}\nfunction abool(b) {\n    if (typeof b !== 'boolean')\n        throw new Error(`boolean expected, not ${b}`);\n}\nexport { abool, abytes, aexists, ahash, anumber, aoutput, isBytes };\n//# sourceMappingURL=_assert.js.map","/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) */\nimport { abytes, isBytes } from './_assert.js';\n// Cast array to different type\nexport const u8 = (arr) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n// Cast array to view\nexport const createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n// big-endian hardware is rare. Just in case someone still decides to run ciphers:\n// early-throw an error because we don't support BE yet.\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\nif (!isLE)\n    throw new Error('Non little-endian hardware is not supported');\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes) {\n    abytes(bytes);\n    // pre-caching improves the speed 6x\n    let hex = '';\n    for (let i = 0; i < bytes.length; i++) {\n        hex += hexes[bytes[i]];\n    }\n    return hex;\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n    if (ch >= asciis._0 && ch <= asciis._9)\n        return ch - asciis._0; // '2' => 50-48\n    if (ch >= asciis.A && ch <= asciis.F)\n        return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n    if (ch >= asciis.a && ch <= asciis.f)\n        return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n    return;\n}\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex) {\n    if (typeof hex !== 'string')\n        throw new Error('hex string expected, got ' + typeof hex);\n    const hl = hex.length;\n    const al = hl / 2;\n    if (hl % 2)\n        throw new Error('hex string expected, got unpadded hex of length ' + hl);\n    const array = new Uint8Array(al);\n    for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n        const n1 = asciiToBase16(hex.charCodeAt(hi));\n        const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n        if (n1 === undefined || n2 === undefined) {\n            const char = hex[hi] + hex[hi + 1];\n            throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n        }\n        array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n    }\n    return array;\n}\nexport function hexToNumber(hex) {\n    if (typeof hex !== 'string')\n        throw new Error('hex string expected, got ' + typeof hex);\n    return BigInt(hex === '' ? '0' : '0x' + hex); // Big Endian\n}\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes) {\n    return hexToNumber(bytesToHex(bytes));\n}\nexport function numberToBytesBE(n, len) {\n    return hexToBytes(n.toString(16).padStart(len * 2, '0'));\n}\n// There is no setImmediate in browser and setTimeout is slow.\n// call of async fn will return Promise, which will be fullfiled only on\n// next scheduler queue processing step and this is exactly what we need.\nexport const nextTick = async () => { };\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str) {\n    if (typeof str !== 'string')\n        throw new Error('string expected');\n    return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * @example bytesToUtf8(new Uint8Array([97, 98, 99])) // 'abc'\n */\nexport function bytesToUtf8(bytes) {\n    return new TextDecoder().decode(bytes);\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data) {\n    if (typeof data === 'string')\n        data = utf8ToBytes(data);\n    else if (isBytes(data))\n        data = copyBytes(data);\n    else\n        throw new Error('Uint8Array expected, got ' + typeof data);\n    return data;\n}\n/**\n * Checks if two U8A use same underlying buffer and overlaps (will corrupt and break if input and output same)\n */\nexport function overlapBytes(a, b) {\n    return (a.buffer === b.buffer && // probably will fail with some obscure proxies, but this is best we can do\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 (except chacha/salse, which designed with this)\n */\nexport function 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 * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays) {\n    let sum = 0;\n    for (let i = 0; i < arrays.length; i++) {\n        const a = arrays[i];\n        abytes(a);\n        sum += a.length;\n    }\n    const res = new Uint8Array(sum);\n    for (let i = 0, pad = 0; i < arrays.length; i++) {\n        const a = arrays[i];\n        res.set(a, pad);\n        pad += a.length;\n    }\n    return res;\n}\nexport function checkOpts(defaults, opts) {\n    if (opts == null || typeof opts !== 'object')\n        throw new Error('options must be defined');\n    const merged = Object.assign(defaults, opts);\n    return merged;\n}\n// Compares 2 u8a-s in kinda constant time\nexport function equalBytes(a, b) {\n    if (a.length !== b.length)\n        return false;\n    let diff = 0;\n    for (let i = 0; i < a.length; i++)\n        diff |= a[i] ^ b[i];\n    return diff === 0;\n}\n// For runtime check if class implements interface\nexport class Hash {\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nexport const wrapCipher = (params, constructor) => {\n    function wrappedCipher(key, ...args) {\n        // Validate key\n        abytes(key);\n        // Validate nonce if nonceLength is present\n        if (params.nonceLength !== undefined) {\n            const nonce = args[0];\n            if (!nonce)\n                throw new Error('nonce / iv required');\n            if (params.varSizeNonce)\n                abytes(nonce);\n            else\n                abytes(nonce, params.nonceLength);\n        }\n        // Validate AAD if tagLength present\n        const tagl = params.tagLength;\n        if (tagl && args[1] !== undefined) {\n            abytes(args[1]);\n        }\n        const cipher = constructor(key, ...args);\n        const checkOutput = (fnLength, output) => {\n            if (output !== undefined) {\n                if (fnLength !== 2)\n                    throw new Error('cipher output not supported');\n                abytes(output);\n            }\n        };\n        // Create wrapped cipher with validation and single-use encryption\n        let called = false;\n        const wrCipher = {\n            encrypt(data, output) {\n                if (called)\n                    throw new Error('cannot encrypt() twice with same key + nonce');\n                called = true;\n                abytes(data);\n                checkOutput(cipher.encrypt.length, output);\n                return cipher.encrypt(data, output);\n            },\n            decrypt(data, output) {\n                abytes(data);\n                if (tagl && data.length < tagl)\n                    throw new Error('invalid ciphertext length: smaller than tagLength=' + tagl);\n                checkOutput(cipher.decrypt.length, output);\n                return cipher.decrypt(data, output);\n            },\n        };\n        return wrCipher;\n    }\n    Object.assign(wrappedCipher, params);\n    return wrappedCipher;\n};\nexport function getOutput(expectedLength, out, onlyAligned = true) {\n    if (out === undefined)\n        return new Uint8Array(expectedLength);\n    if (out.length !== expectedLength)\n        throw new Error('invalid output length, expected ' + expectedLength + ', got: ' + out.length);\n    if (onlyAligned && !isAligned32(out))\n        throw new Error('invalid output, must be aligned');\n    return out;\n}\n// Polyfill for Safari 14\nexport function setBigUint64(view, byteOffset, value, isLE) {\n    if (typeof view.setBigUint64 === 'function')\n        return view.setBigUint64(byteOffset, value, isLE);\n    const _32n = BigInt(32);\n    const _u32_max = BigInt(0xffffffff);\n    const wh = Number((value >> _32n) & _u32_max);\n    const wl = Number(value & _u32_max);\n    const h = isLE ? 4 : 0;\n    const l = isLE ? 0 : 4;\n    view.setUint32(byteOffset + h, wh, isLE);\n    view.setUint32(byteOffset + l, wl, isLE);\n}\nexport function u64Lengths(ciphertext, AAD) {\n    const num = new Uint8Array(16);\n    const view = createView(num);\n    setBigUint64(view, 0, BigInt(AAD ? AAD.length : 0), true);\n    setBigUint64(view, 8, BigInt(ciphertext.length), true);\n    return num;\n}\n// Is byte array aligned to 4 byte offset (u32)?\nexport function isAligned32(bytes) {\n    return bytes.byteOffset % 4 === 0;\n}\n// copy bytes to new u8a (aligned). Because Buffer.slice is broken.\nexport function copyBytes(bytes) {\n    return Uint8Array.from(bytes);\n}\nexport function clean(...arrays) {\n    for (let i = 0; i < arrays.length; i++) {\n        arrays[i].fill(0);\n    }\n}\n//# sourceMappingURL=utils.js.map","/**\n * GHash from AES-GCM and its little-endian \"mirror image\" Polyval from AES-SIV.\n *\n * Implemented in terms of GHash with conversion function for keys\n * GCM GHASH from\n * [NIST SP800-38d](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf),\n * SIV from\n * [RFC 8452](https://datatracker.ietf.org/doc/html/rfc8452).\n *\n * GHASH   modulo: x^128 + x^7   + x^2   + x     + 1\n * POLYVAL modulo: x^128 + x^127 + x^126 + x^121 + 1\n *\n * @module\n */\nimport { abytes, aexists, aoutput } from './_assert.js';\nimport { clean, copyBytes, createView, Hash, toBytes, u32 } from './utils.js';\nconst BLOCK_SIZE = 16;\n// TODO: rewrite\n// temporary padding buffer\nconst ZEROS16 = /* @__PURE__ */ new Uint8Array(16);\nconst ZEROS32 = u32(ZEROS16);\nconst POLY = 0xe1; // v = 2*v % POLY\n// v = 2*v % POLY\n// NOTE: because x + x = 0 (add/sub is same), mul2(x) != x+x\n// We can multiply any number using montgomery ladder and this function (works as double, add is simple xor)\nconst mul2 = (s0, s1, s2, s3) => {\n    const hiBit = s3 & 1;\n    return {\n        s3: (s2 << 31) | (s3 >>> 1),\n        s2: (s1 << 31) | (s2 >>> 1),\n        s1: (s0 << 31) | (s1 >>> 1),\n        s0: (s0 >>> 1) ^ ((POLY << 24) & -(hiBit & 1)), // reduce % poly\n    };\n};\nconst swapLE = (n) => (((n >>> 0) & 0xff) << 24) |\n    (((n >>> 8) & 0xff) << 16) |\n    (((n >>> 16) & 0xff) << 8) |\n    ((n >>> 24) & 0xff) |\n    0;\n/**\n * `mulX_POLYVAL(ByteReverse(H))` from spec\n * @param k mutated in place\n */\nexport function _toGHASHKey(k) {\n    k.reverse();\n    const hiBit = k[15] & 1;\n    // k >>= 1\n    let carry = 0;\n    for (let i = 0; i < k.length; i++) {\n        const t = k[i];\n        k[i] = (t >>> 1) | carry;\n        carry = (t & 1) << 7;\n    }\n    k[0] ^= -hiBit & 0xe1; // if (hiBit) n ^= 0xe1000000000000000000000000000000;\n    return k;\n}\nconst estimateWindow = (bytes) => {\n    if (bytes > 64 * 1024)\n        return 8;\n    if (bytes > 1024)\n        return 4;\n    return 2;\n};\nclass GHASH {\n    // We select bits per window adaptively based on expectedLength\n    constructor(key, expectedLength) {\n        this.blockLen = BLOCK_SIZE;\n        this.outputLen = BLOCK_SIZE;\n        this.s0 = 0;\n        this.s1 = 0;\n        this.s2 = 0;\n        this.s3 = 0;\n        this.finished = false;\n        key = toBytes(key);\n        abytes(key, 16);\n        const kView = createView(key);\n        let k0 = kView.getUint32(0, false);\n        let k1 = kView.getUint32(4, false);\n        let k2 = kView.getUint32(8, false);\n        let k3 = kView.getUint32(12, false);\n        // generate table of doubled keys (half of montgomery ladder)\n        const doubles = [];\n        for (let i = 0; i < 128; i++) {\n            doubles.push({ s0: swapLE(k0), s1: swapLE(k1), s2: swapLE(k2), s3: swapLE(k3) });\n            ({ s0: k0, s1: k1, s2: k2, s3: k3 } = mul2(k0, k1, k2, k3));\n        }\n        const W = estimateWindow(expectedLength || 1024);\n        if (![1, 2, 4, 8].includes(W))\n            throw new Error('ghash: invalid window size, expected 2, 4 or 8');\n        this.W = W;\n        const bits = 128; // always 128 bits;\n        const windows = bits / W;\n        const windowSize = (this.windowSize = 2 ** W);\n        const items = [];\n        // Create precompute table for window of W bits\n        for (let w = 0; w < windows; w++) {\n            // truth table: 00, 01, 10, 11\n            for (let byte = 0; byte < windowSize; byte++) {\n                // prettier-ignore\n                let s0 = 0, s1 = 0, s2 = 0, s3 = 0;\n                for (let j = 0; j < W; j++) {\n                    const bit = (byte >>> (W - j - 1)) & 1;\n                    if (!bit)\n                        continue;\n                    const { s0: d0, s1: d1, s2: d2, s3: d3 } = doubles[W * w + j];\n                    (s0 ^= d0), (s1 ^= d1), (s2 ^= d2), (s3 ^= d3);\n                }\n                items.push({ s0, s1, s2, s3 });\n            }\n        }\n        this.t = items;\n    }\n    _updateBlock(s0, s1, s2, s3) {\n        (s0 ^= this.s0), (s1 ^= this.s1), (s2 ^= this.s2), (s3 ^= this.s3);\n        const { W, t, windowSize } = this;\n        // prettier-ignore\n        let o0 = 0, o1 = 0, o2 = 0, o3 = 0;\n        const mask = (1 << W) - 1; // 2**W will kill performance.\n        let w = 0;\n        for (const num of [s0, s1, s2, s3]) {\n            for (let bytePos = 0; bytePos < 4; bytePos++) {\n                const byte = (num >>> (8 * bytePos)) & 0xff;\n                for (let bitPos = 8 / W - 1; bitPos >= 0; bitPos--) {\n                    const bit = (byte >>> (W * bitPos)) & mask;\n                    const { s0: e0, s1: e1, s2: e2, s3: e3 } = t[w * windowSize + bit];\n                    (o0 ^= e0), (o1 ^= e1), (o2 ^= e2), (o3 ^= e3);\n                    w += 1;\n                }\n            }\n        }\n        this.s0 = o0;\n        this.s1 = o1;\n        this.s2 = o2;\n        this.s3 = o3;\n    }\n    update(data) {\n        data = toBytes(data);\n        aexists(this);\n        const b32 = u32(data);\n        const blocks = Math.floor(data.length / BLOCK_SIZE);\n        const left = data.length % BLOCK_SIZE;\n        for (let i = 0; i < blocks; i++) {\n            this._updateBlock(b32[i * 4 + 0], b32[i * 4 + 1], b32[i * 4 + 2], b32[i * 4 + 3]);\n        }\n        if (left) {\n            ZEROS16.set(data.subarray(blocks * BLOCK_SIZE));\n            this._updateBlock(ZEROS32[0], ZEROS32[1], ZEROS32[2], ZEROS32[3]);\n            clean(ZEROS32); // clean tmp buffer\n        }\n        return this;\n    }\n    destroy() {\n        const { t } = this;\n        // clean precompute table\n        for (const elm of t) {\n            (elm.s0 = 0), (elm.s1 = 0), (elm.s2 = 0), (elm.s3 = 0);\n        }\n    }\n    digestInto(out) {\n        aexists(this);\n        aoutput(out, this);\n        this.finished = true;\n        const { s0, s1, s2, s3 } = this;\n        const o32 = u32(out);\n        o32[0] = s0;\n        o32[1] = s1;\n        o32[2] = s2;\n        o32[3] = s3;\n        return out;\n    }\n    digest() {\n        const res = new Uint8Array(BLOCK_SIZE);\n        this.digestInto(res);\n        this.destroy();\n        return res;\n    }\n}\nclass Polyval extends GHASH {\n    constructor(key, expectedLength) {\n        key = toBytes(key);\n        const ghKey = _toGHASHKey(copyBytes(key));\n        super(ghKey, expectedLength);\n        clean(ghKey);\n    }\n    update(data) {\n        data = toBytes(data);\n        aexists(this);\n        const b32 = u32(data);\n        const left = data.length % BLOCK_SIZE;\n        const blocks = Math.floor(data.length / BLOCK_SIZE);\n        for (let i = 0; i < blocks; i++) {\n            this._updateBlock(swapLE(b32[i * 4 + 3]), swapLE(b32[i * 4 + 2]), swapLE(b32[i * 4 + 1]), swapLE(b32[i * 4 + 0]));\n        }\n        if (left) {\n            ZEROS16.set(data.subarray(blocks * BLOCK_SIZE));\n            this._updateBlock(swapLE(ZEROS32[3]), swapLE(ZEROS32[2]), swapLE(ZEROS32[1]), swapLE(ZEROS32[0]));\n            clean(ZEROS32);\n        }\n        return this;\n    }\n    digestInto(out) {\n        aexists(this);\n        aoutput(out, this);\n        this.finished = true;\n        // tmp ugly hack\n        const { s0, s1, s2, s3 } = this;\n        const o32 = u32(out);\n        o32[0] = s0;\n        o32[1] = s1;\n        o32[2] = s2;\n        o32[3] = s3;\n        return out.reverse();\n    }\n}\nfunction wrapConstructorWithKey(hashCons) {\n    const hashC = (msg, key) => hashCons(key, msg.length).update(toBytes(msg)).digest();\n    const tmp = hashCons(new Uint8Array(16), 0);\n    hashC.outputLen = tmp.outputLen;\n    hashC.blockLen = tmp.blockLen;\n    hashC.create = (key, expectedLength) => hashCons(key, expectedLength);\n    return hashC;\n}\n/** GHash MAC for AES-GCM. */\nexport const ghash = wrapConstructorWithKey((key, expectedLength) => new GHASH(key, expectedLength));\n/** Polyval MAC for AES-SIV. */\nexport const polyval = wrapConstructorWithKey((key, expectedLength) => new Polyval(key, expectedLength));\n//# sourceMappingURL=_polyval.js.map","var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n  for (var name in all)\n    __defProp(target, name, { get: all[name], enumerable: true });\n};\n\n// src/sm2/index.ts\nvar sm2_exports = {};\n__export(sm2_exports, {\n  EmptyArray: () => EmptyArray,\n  arrayToHex: () => arrayToHex,\n  arrayToUtf8: () => arrayToUtf8,\n  calculateSharedKey: () => calculateSharedKey,\n  comparePublicKeyHex: () => comparePublicKeyHex,\n  compressPublicKeyHex: () => compressPublicKeyHex,\n  doDecrypt: () => doDecrypt,\n  doEncrypt: () => doEncrypt,\n  doSignature: () => doSignature,\n  doVerifySignature: () => doVerifySignature,\n  generateKeyPairHex: () => generateKeyPairHex,\n  getHash: () => getHash,\n  getPoint: () => getPoint,\n  getPublicKeyFromPrivateKey: () => getPublicKeyFromPrivateKey,\n  getZ: () => getZ,\n  hexToArray: () => hexToArray,\n  initRNGPool: () => initRNGPool,\n  leftPad: () => leftPad,\n  precomputePublicKey: () => precomputePublicKey,\n  utf8ToHex: () => utf8ToHex,\n  verifyPublicKey: () => verifyPublicKey\n});\n\n// src/sm2/asn1.ts\nimport * as utils from \"@noble/curves/abstract/utils\";\n\n// src/sm2/bn.ts\nvar ZERO = BigInt(0);\nvar ONE = BigInt(1);\nvar TWO = BigInt(2);\nvar THREE = BigInt(3);\n\n// src/sm2/asn1.ts\nfunction bigintToValue(bigint) {\n  let h = bigint.toString(16);\n  if (h[0] !== \"-\") {\n    if (h.length % 2 === 1)\n      h = \"0\" + h;\n    else if (!h.match(/^[0-7]/))\n      h = \"00\" + h;\n  } else {\n    h = h.substring(1);\n    let len = h.length;\n    if (len % 2 === 1)\n      len += 1;\n    else if (!h.match(/^[0-7]/))\n      len += 2;\n    let maskString = \"\";\n    for (let i = 0; i < len; i++)\n      maskString += \"f\";\n    let mask = utils.hexToNumber(maskString);\n    let output = (mask ^ bigint) + ONE;\n    h = output.toString(16).replace(/^-/, \"\");\n  }\n  return h;\n}\nvar ASN1Object = class {\n  constructor(tlv = null, t = \"00\", l = \"00\", v = \"\") {\n    this.tlv = tlv;\n    this.t = t;\n    this.l = l;\n    this.v = v;\n  }\n  /**\n   * 获取 der 编码比特流16进制串\n   */\n  getEncodedHex() {\n    if (!this.tlv) {\n      this.v = this.getValue();\n      this.l = this.getLength();\n      this.tlv = this.t + this.l + this.v;\n    }\n    return this.tlv;\n  }\n  getLength() {\n    const n = this.v.length / 2;\n    let nHex = n.toString(16);\n    if (nHex.length % 2 === 1)\n      nHex = \"0\" + nHex;\n    if (n < 128) {\n      return nHex;\n    } else {\n      const head = 128 + nHex.length / 2;\n      return head.toString(16) + nHex;\n    }\n  }\n  getValue() {\n    return \"\";\n  }\n};\nvar DERInteger = class extends ASN1Object {\n  constructor(bigint) {\n    super();\n    this.t = \"02\";\n    if (bigint)\n      this.v = bigintToValue(bigint);\n  }\n  getValue() {\n    return this.v;\n  }\n};\nvar DEROctetString = class extends ASN1Object {\n  constructor(s) {\n    super();\n    this.s = s;\n    this.t = \"04\";\n    if (s)\n      this.v = s.toLowerCase();\n  }\n  hV = \"\";\n  getValue() {\n    return this.v;\n  }\n};\nvar DERSequence = class extends ASN1Object {\n  constructor(asn1Array) {\n    super();\n    this.asn1Array = asn1Array;\n  }\n  t = \"30\";\n  getValue() {\n    this.v = this.asn1Array.map((asn1Object) => asn1Object.getEncodedHex()).join(\"\");\n    return this.v;\n  }\n};\nfunction getLenOfL(str, start) {\n  if (+str[start + 2] < 8)\n    return 1;\n  const encoded = str.slice(start + 2, start + 6);\n  const headHex = encoded.slice(0, 2);\n  const head = parseInt(headHex, 16);\n  const nHexLength = (head - 128) * 2;\n  return nHexLength;\n}\nfunction getL(str, start) {\n  const len = getLenOfL(str, start);\n  const l = str.substring(start + 2, start + 2 + len * 2);\n  if (!l)\n    return -1;\n  const bigint = +l[0] < 8 ? utils.hexToNumber(l) : utils.hexToNumber(l.substring(2));\n  return +bigint.toString();\n}\nfunction getStartOfV(str, start) {\n  const len = getLenOfL(str, start);\n  return start + (len + 1) * 2;\n}\nfunction encodeDer(r, s) {\n  const derR = new DERInteger(r);\n  const derS = new DERInteger(s);\n  const derSeq = new DERSequence([derR, derS]);\n  return derSeq.getEncodedHex();\n}\nfunction encodeEnc(x2, y, hash, cipher) {\n  const derX = new DERInteger(x2);\n  const derY = new DERInteger(y);\n  const derHash = new DEROctetString(hash);\n  const derCipher = new DEROctetString(cipher);\n  const derSeq = new DERSequence([derX, derY, derHash, derCipher]);\n  return derSeq.getEncodedHex();\n}\nfunction decodeDer(input) {\n  const start = getStartOfV(input, 0);\n  const vIndexR = getStartOfV(input, start);\n  const lR = getL(input, start);\n  const vR = input.substring(vIndexR, vIndexR + lR * 2);\n  const nextStart = vIndexR + vR.length;\n  const vIndexS = getStartOfV(input, nextStart);\n  const lS = getL(input, nextStart);\n  const vS = input.substring(vIndexS, vIndexS + lS * 2);\n  const r = utils.hexToNumber(vR);\n  const s = utils.hexToNumber(vS);\n  return { r, s };\n}\nfunction decodeEnc(input) {\n  function extractSequence(input2, start2) {\n    const vIndex = getStartOfV(input2, start2);\n    const length = getL(input2, start2);\n    const value = input2.substring(vIndex, vIndex + length * 2);\n    const nextStart = vIndex + value.length;\n    return { value, nextStart };\n  }\n  const start = getStartOfV(input, 0);\n  const { value: vR, nextStart: startS } = extractSequence(input, start);\n  const { value: vS, nextStart: startHash } = extractSequence(input, startS);\n  const { value: hash, nextStart: startCipher } = extractSequence(input, startHash);\n  const { value: cipher } = extractSequence(input, startCipher);\n  const x2 = utils.hexToNumber(vR);\n  const y = utils.hexToNumber(vS);\n  return { x: x2, y, hash, cipher };\n}\n\n// src/sm2/utils.ts\nimport * as utils2 from \"@noble/curves/abstract/utils\";\n\n// src/sm2/ec.ts\nimport { weierstrass } from \"@noble/curves/abstract/weierstrass\";\nimport { Field } from \"@noble/curves/abstract/modular\";\n\n// src/sm2/rng.ts\nvar DEFAULT_PRNG_POOL_SIZE = 16384;\nvar prngPool = new Uint8Array(0);\nvar _syncCrypto;\nasync function initRNGPool() {\n  if (\"crypto\" in globalThis) {\n    _syncCrypto = globalThis.crypto;\n    return;\n  }\n  if (prngPool.length > DEFAULT_PRNG_POOL_SIZE / 2)\n    return;\n  if (\"wx\" in globalThis && \"getRandomValues\" in globalThis.wx) {\n    prngPool = await new Promise((r) => {\n      wx.getRandomValues({\n        length: DEFAULT_PRNG_POOL_SIZE,\n        success(res) {\n          r(new Uint8Array(res.randomValues));\n        }\n      });\n    });\n  } else {\n    try {\n      if (globalThis.crypto) {\n        _syncCrypto = globalThis.crypto;\n      } else {\n        const crypto = await import(\n          /* webpackIgnore: true */\n          \"crypto\"\n        );\n        _syncCrypto = crypto.webcrypto;\n      }\n      const array = new Uint8Array(DEFAULT_PRNG_POOL_SIZE);\n      _syncCrypto.getRandomValues(array);\n      prngPool = array;\n    } catch (error) {\n      throw new Error(\"no available csprng, abort.\");\n    }\n  }\n}\ninitRNGPool();\nfunction consumePool(length) {\n  if (prngPool.length > length) {\n    const prng = prngPool.slice(0, length);\n    prngPool = prngPool.slice(length);\n    initRNGPool();\n    return prng;\n  } else {\n    throw new Error(\"random number pool is not ready or insufficient, prevent getting too long random values or too often.\");\n  }\n}\nfunction randomBytes(length = 0) {\n  const array = new Uint8Array(length);\n  if (_syncCrypto) {\n    return _syncCrypto.getRandomValues(array);\n  } else {\n    const result = consumePool(length);\n    return result;\n  }\n}\n\n// src/sm3/utils.ts\nvar u8a = (a) => a instanceof Uint8Array;\nvar createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\nvar isLE = new Uint8Array(new Uint32Array([287454020]).buffer)[0] === 68;\nif (!isLE)\n  throw new Error(\"Non little-endian hardware is not supported\");\nvar hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, \"0\"));\nfunction bytesToHex(bytes) {\n  if (!u8a(bytes))\n    throw new Error(\"Uint8Array expected\");\n  let hex = \"\";\n  for (let i = 0; i < bytes.length; i++) {\n    hex += hexes[bytes[i]];\n  }\n  return hex;\n}\nfunction utf8ToBytes(str) {\n  if (typeof str !== \"string\")\n    throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str));\n}\nfunction toBytes(data) {\n  if (typeof data === \"string\")\n    data = utf8ToBytes(data);\n  if (!u8a(data))\n    throw new Error(`expected Uint8Array, got ${typeof data}`);\n  return data;\n}\nvar Hash = class {\n  // Safe version that clones internal state\n  clone() {\n    return this._cloneInto();\n  }\n};\nfunction wrapConstructor(hashCons) {\n  const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n  const tmp2 = hashCons();\n  hashC.outputLen = tmp2.outputLen;\n  hashC.blockLen = tmp2.blockLen;\n  hashC.create = () => hashCons();\n  return hashC;\n}\n\n// src/sm2/sm3.ts\nvar BoolA = (A, B, C) => A & B | A & C | B & C;\nvar BoolB = (A, B, C) => A ^ B ^ C;\nvar BoolC = (A, B, C) => A & B | ~A & C;\nfunction setBigUint64(view, byteOffset, value, isLE2) {\n  if (typeof view.setBigUint64 === \"function\")\n    return view.setBigUint64(byteOffset, value, isLE2);\n  const _32n = BigInt(32);\n  const _u32_max = BigInt(4294967295);\n  const wh = Number(value >> _32n & _u32_max);\n  const wl = Number(value & _u32_max);\n  const h = isLE2 ? 4 : 0;\n  const l = isLE2 ? 0 : 4;\n  view.setUint32(byteOffset + h, wh, isLE2);\n  view.setUint32(byteOffset + l, wl, isLE2);\n}\nfunction rotl(x2, n) {\n  const s = n & 31;\n  return x2 << s | x2 >>> 32 - s;\n}\nfunction P0(X) {\n  return X ^ rotl(X, 9) ^ rotl(X, 17);\n}\nfunction P1(X) {\n  return X ^ rotl(X, 15) ^ rotl(X, 23);\n}\nvar SHA2 = class extends Hash {\n  constructor(blockLen, outputLen, padOffset, isLE2) {\n    super();\n    this.blockLen = blockLen;\n    this.outputLen = outputLen;\n    this.padOffset = padOffset;\n    this.isLE = isLE2;\n    this.buffer = new Uint8Array(blockLen);\n    this.view = createView(this.buffer);\n  }\n  // For partial updates less than block size\n  buffer;\n  view;\n  finished = false;\n  length = 0;\n  pos = 0;\n  destroyed = false;\n  update(data) {\n    const { view, buffer, blockLen } = this;\n    data = toBytes(data);\n    const len = data.length;\n    for (let pos = 0; pos < len; ) {\n      const take = Math.min(blockLen - this.pos, len - pos);\n      if (take === blockLen) {\n        const dataView = createView(data);\n        for (; blockLen <= len - pos; pos += blockLen)\n          this.process(dataView, pos);\n        continue;\n      }\n      buffer.set(data.subarray(pos, pos + take), this.pos);\n      this.pos += take;\n      pos += take;\n      if (this.pos === blockLen) {\n        this.process(view, 0);\n        this.pos = 0;\n      }\n    }\n    this.length += data.length;\n    this.roundClean();\n    return this;\n  }\n  digestInto(out) {\n    this.finished = true;\n    const { buffer, view, blockLen, isLE: isLE2 } = this;\n    let { pos } = this;\n    buffer[pos++] = 128;\n    this.buffer.subarray(pos).fill(0);\n    if (this.padOffset > blockLen - pos) {\n      this.process(view, 0);\n      pos = 0;\n    }\n    for (let i = pos; i < blockLen; i++)\n      buffer[i] = 0;\n    setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE2);\n    this.process(view, 0);\n    const oview = createView(out);\n    const len = this.outputLen;\n    if (len % 4)\n      throw new Error(\"_sha2: outputLen should be aligned to 32bit\");\n    const outLen = len / 4;\n    const state = this.get();\n    if (outLen > state.length)\n      throw new Error(\"_sha2: outputLen bigger than state\");\n    for (let i = 0; i < outLen; i++)\n      oview.setUint32(4 * i, state[i], isLE2);\n  }\n  digest() {\n    const { buffer, outputLen } = this;\n    this.digestInto(buffer);\n    const res = buffer.slice(0, outputLen);\n    this.destroy();\n    return res;\n  }\n  _cloneInto(to) {\n    to ||= new this.constructor();\n    to.set(...this.get());\n    const { blockLen, buffer, length, finished, destroyed, pos } = this;\n    to.length = length;\n    to.pos = pos;\n    to.finished = finished;\n    to.destroyed = destroyed;\n    if (length % blockLen)\n      to.buffer.set(buffer);\n    return to;\n  }\n};\nvar IV = new Uint32Array([1937774191, 1226093241, 388252375, 3666478592, 2842636476, 372324522, 3817729613, 2969243214]);\nvar SM3_W = new Uint32Array(68);\nvar SM3_M = new Uint32Array(64);\nvar T1 = 2043430169;\nvar T2 = 2055708042;\nvar SM3 = class extends SHA2 {\n  // We cannot use array here since array allows indexing by variable\n  // which means optimizer/compiler cannot use registers.\n  A = IV[0] | 0;\n  B = IV[1] | 0;\n  C = IV[2] | 0;\n  D = IV[3] | 0;\n  E = IV[4] | 0;\n  F = IV[5] | 0;\n  G = IV[6] | 0;\n  H = IV[7] | 0;\n  constructor() {\n    super(64, 32, 8, false);\n  }\n  get() {\n    const { A, B, C, D, E, F, G, H } = this;\n    return [A, B, C, D, E, F, G, H];\n  }\n  // prettier-ignore\n  set(A, B, C, D, E, F, G, H) {\n    this.A = A | 0;\n    this.B = B | 0;\n    this.C = C | 0;\n    this.D = D | 0;\n    this.E = E | 0;\n    this.F = F | 0;\n    this.G = G | 0;\n    this.H = H | 0;\n  }\n  process(view, offset) {\n    for (let i = 0; i < 16; i++, offset += 4)\n      SM3_W[i] = view.getUint32(offset, false);\n    for (let i = 16; i < 68; i++) {\n      SM3_W[i] = P1(SM3_W[i - 16] ^ SM3_W[i - 9] ^ rotl(SM3_W[i - 3], 15)) ^ rotl(SM3_W[i - 13], 7) ^ SM3_W[i - 6];\n    }\n    for (let i = 0; i < 64; i++) {\n      SM3_M[i] = SM3_W[i] ^ SM3_W[i + 4];\n    }\n    let { A, B, C, D, E, F, G, H } = this;\n    for (let j = 0; j < 64; j++) {\n      let small = j >= 0 && j <= 15;\n      let T = small ? T1 : T2;\n      let SS1 = rotl(rotl(A, 12) + E + rotl(T, j), 7);\n      let SS2 = SS1 ^ rotl(A, 12);\n      let TT1 = (small ? BoolB(A, B, C) : BoolA(A, B, C)) + D + SS2 + SM3_M[j] | 0;\n      let TT2 = (small ? BoolB(E, F, G) : BoolC(E, F, G)) + H + SS1 + SM3_W[j] | 0;\n      D = C;\n      C = rotl(B, 9);\n      B = A;\n      A = TT1;\n      H = G;\n      G = rotl(F, 19);\n      F = E;\n      E = P0(TT2);\n    }\n    A = A ^ this.A | 0;\n    B = B ^ this.B | 0;\n    C = C ^ this.C | 0;\n    D = D ^ this.D | 0;\n    E = E ^ this.E | 0;\n    F = F ^ this.F | 0;\n    G = G ^ this.G | 0;\n    H = H ^ this.H | 0;\n    this.set(A, B, C, D, E, F, G, H);\n  }\n  roundClean() {\n    SM3_W.fill(0);\n  }\n  destroy() {\n    this.set(0, 0, 0, 0, 0, 0, 0, 0);\n    this.buffer.fill(0);\n  }\n};\nvar sm3 = wrapConstructor(() => new SM3());\n\n// src/sm2/hmac.ts\nvar HMAC = class extends Hash {\n  oHash;\n  iHash;\n  blockLen;\n  outputLen;\n  finished = false;\n  destroyed = false;\n  constructor(hash, _key) {\n    super();\n    const key = toBytes(_key);\n    this.iHash = hash.create();\n    if (typeof this.iHash.update !== \"function\")\n      throw new Error(\"Expected instance of class which extends utils.Hash\");\n    this.blockLen = this.iHash.blockLen;\n    this.outputLen = this.iHash.outputLen;\n    const blockLen = this.blockLen;\n    const pad = new Uint8Array(blockLen);\n    pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n    for (let i = 0; i < pad.length; i++)\n      pad[i] ^= 54;\n    this.iHash.update(pad);\n    this.oHash = hash.create();\n    for (let i = 0; i < pad.length; i++)\n      pad[i] ^= 54 ^ 92;\n    this.oHash.update(pad);\n    pad.fill(0);\n  }\n  update(buf) {\n    this.iHash.update(buf);\n    return this;\n  }\n  digestInto(out) {\n    this.finished = true;\n    this.iHash.digestInto(out);\n    this.oHash.update(out);\n    this.oHash.digestInto(out);\n    this.destroy();\n  }\n  digest() {\n    const out = new Uint8Array(this.oHash.outputLen);\n    this.digestInto(out);\n    return out;\n  }\n  _cloneInto(to) {\n    to ||= Object.create(Object.getPrototypeOf(this), {});\n    const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n    to = to;\n    to.finished = finished;\n    to.destroyed = destroyed;\n    to.blockLen = blockLen;\n    to.outputLen = outputLen;\n    to.oHash = oHash._cloneInto(to.oHash);\n    to.iHash = iHash._cloneInto(to.iHash);\n    return to;\n  }\n  destroy() {\n    this.destroyed = true;\n    this.oHash.destroy();\n    this.iHash.destroy();\n  }\n};\nvar hmac = (hash, key, message) => new HMAC(hash, key).update(message).digest();\nhmac.create = (hash, key) => new HMAC(hash, key);\n\n// src/sm2/ec.ts\nimport { concatBytes } from \"@noble/curves/abstract/utils\";\nvar sm2Fp = Field(BigInt(\"115792089210356248756420345214020892766250353991924191454421193933289684991999\"));\nvar sm2Curve = weierstrass({\n  // sm2: short weierstrass.\n  a: BigInt(\"115792089210356248756420345214020892766250353991924191454421193933289684991996\"),\n  b: BigInt(\"18505919022281880113072981827955639221458448578012075254857346196103069175443\"),\n  Fp: sm2Fp,\n  h: ONE,\n  n: BigInt(\"115792089210356248756420345214020892766061623724957744567843809356293439045923\"),\n  Gx: BigInt(\"22963146547237050559479531362550074578802567295341616970375194840604139615431\"),\n  Gy: BigInt(\"85132369209828568825618990617112496413088388631904505083283536607588877201568\"),\n  hash: sm3,\n  hmac: (key, ...msgs) => hmac(sm3, key, concatBytes(...msgs)),\n  randomBytes\n});\nvar field = Field(BigInt(sm2Curve.CURVE.n));\n\n// src/sm2/utils.ts\nimport { mod } from \"@noble/curves/abstract/modular\";\nfunction generateKeyPairHex(str) {\n  const privateKey = str ? utils2.numberToBytesBE(mod(BigInt(str), ONE) + ONE, 32) : sm2Curve.utils.randomPrivateKey();\n  const publicKey = sm2Curve.getPublicKey(privateKey, false);\n  const privPad = leftPad(utils2.bytesToHex(privateKey), 64);\n  const pubPad = leftPad(utils2.bytesToHex(publicKey), 64);\n  return { privateKey: privPad, publicKey: pubPad };\n}\nfunction compressPublicKeyHex(s) {\n  if (s.length !== 130)\n    throw new Error(\"Invalid public key to compress\");\n  const len = (s.length - 2) / 2;\n  const xHex = s.substring(2, 2 + len);\n  const y = utils2.hexToNumber(s.substring(len + 2, len + len + 2));\n  let prefix = \"03\";\n  if (mod(y, TWO) === ZERO)\n    prefix = \"02\";\n  return prefix + xHex;\n}\nfunction utf8ToHex(input) {\n  const bytes = utils2.utf8ToBytes(input);\n  return utils2.bytesToHex(bytes);\n}\nfunction leftPad(input, num) {\n  if (input.length >= num)\n    return input;\n  return new Array(num - input.length + 1).join(\"0\") + input;\n}\nfunction arrayToHex(arr) {\n  return arr.map((item) => {\n    const hex = item.toString(16);\n    return hex.length === 1 ? \"0\" + hex : hex;\n  }).join(\"\");\n}\nfunction arrayToUtf8(arr) {\n  const str = [];\n  for (let i = 0, len = arr.length; i < len; i++) {\n    if (arr[i] >= 240 && arr[i] <= 247) {\n      str.push(String.fromCodePoint(((arr[i] & 7) << 18) + ((arr[i + 1] & 63) << 12) + ((arr[i + 2] & 63) << 6) + (arr[i + 3] & 63)));\n      i += 3;\n    } else if (arr[i] >= 224 && arr[i] <= 239) {\n      str.push(String.fromCodePoint(((arr[i] & 15) << 12) + ((arr[i + 1] & 63) << 6) + (arr[i + 2] & 63)));\n      i += 2;\n    } else if (arr[i] >= 192 && arr[i] <= 223) {\n      str.push(String.fromCodePoint(((arr[i] & 31) << 6) + (arr[i + 1] & 63)));\n      i++;\n    } else {\n      str.push(String.fromCodePoint(arr[i]));\n    }\n  }\n  return str.join(\"\");\n}\nfunction hexToArray(hexStr) {\n  let hexStrLength = hexStr.length;\n  if (hexStrLength % 2 !== 0) {\n    hexStr = leftPad(hexStr, hexStrLength + 1);\n  }\n  hexStrLength = hexStr.length;\n  const wordLength = hexStrLength / 2;\n  const words = new Uint8Array(wordLength);\n  for (let i = 0; i < wordLength; i++) {\n    words[i] = parseInt(hexStr.substring(i * 2, i * 2 + 2), 16);\n  }\n  return words;\n}\nfunction verifyPublicKey(publicKey) {\n  const point = sm2Curve.ProjectivePoint.fromHex(publicKey);\n  if (!point)\n    return false;\n  try {\n    point.assertValidity();\n    return true;\n  } catch (error) {\n    return false;\n  }\n}\nfunction comparePublicKeyHex(publicKey1, publicKey2) {\n  const point1 = sm2Curve.ProjectivePoint.fromHex(publicKey1);\n  if (!point1)\n    return false;\n  const point2 = sm2Curve.ProjectivePoint.fromHex(publicKey2);\n  if (!point2)\n    return false;\n  return point1.equals(point2);\n}\n\n// src/sm2/index.ts\nimport * as utils4 from \"@noble/curves/abstract/utils\";\n\n// src/sm2/kx.ts\nimport * as utils3 from \"@noble/curves/abstract/utils\";\nvar wPow2 = utils3.hexToNumber(\"80000000000000000000000000000000\");\nvar wPow2Sub1 = utils3.hexToNumber(\"7fffffffffffffffffffffffffffffff\");\nfunction hkdf(z, keylen) {\n  let msg = new Uint8Array(keylen);\n  let ct = 1;\n  let offset = 0;\n  let t = EmptyArray;\n  const ctShift = new Uint8Array(4);\n  const nextT = () => {\n    ctShift[0] = ct >> 24 & 255;\n    ctShift[1] = ct >> 16 & 255;\n    ctShift[2] = ct >> 8 & 255;\n    ctShift[3] = ct & 255;\n    t = sm3(utils3.concatBytes(z, ctShift));\n    ct++;\n    offset = 0;\n  };\n  nextT();\n  for (let i = 0, len = msg.length; i < len; i++) {\n    if (offset === t.length)\n      nextT();\n    msg[i] = t[offset++] & 255;\n  }\n  return msg;\n}\nfunction calculateSharedKey(keypairA, ephemeralKeypairA, publicKeyB, ephemeralPublicKeyB, sharedKeyLength, isRecipient = false, idA = \"1234567812345678\", idB = \"1234567812345678\") {\n  const RA = sm2Curve.ProjectivePoint.fromHex(ephemeralKeypairA.publicKey);\n  const RB = sm2Curve.ProjectivePoint.fromHex(ephemeralPublicKeyB);\n  const PB = sm2Curve.ProjectivePoint.fromHex(publicKeyB);\n  let ZA = getZ(keypairA.publicKey, idA);\n  let ZB = getZ(publicKeyB, idB);\n  if (isRecipient) {\n    [ZA, ZB] = [ZB, ZA];\n  }\n  const rA = utils3.hexToNumber(ephemeralKeypairA.privateKey);\n  const dA = utils3.hexToNumber(keypairA.privateKey);\n  const x1 = RA.x;\n  const x1_ = wPow2 + (x1 & wPow2Sub1);\n  const tA = field.add(dA, field.mulN(x1_, rA));\n  const x2 = RB.x;\n  const x2_ = field.add(wPow2, x2 & wPow2Sub1);\n  const U = RB.multiply(x2_).add(PB).multiply(tA);\n  const xU = hexToArray(leftPad(utils3.numberToHexUnpadded(U.x), 64));\n  const yU = hexToArray(leftPad(utils3.numberToHexUnpadded(U.y), 64));\n  const KA = hkdf(utils3.concatBytes(xU, yU, ZA, ZB), sharedKeyLength);\n  return KA;\n}\n\n// src/sm2/index.ts\nvar C1C2C3 = 0;\nvar EmptyArray = new Uint8Array();\nfunction doEncrypt(msg, publicKey, cipherMode = 1, options) {\n  const msgArr = typeof msg === \"string\" ? hexToArray(utf8ToHex(msg)) : Uint8Array.from(msg);\n  const publicKeyPoint = typeof publicKey === \"string\" ? sm2Curve.ProjectivePoint.fromHex(publicKey) : publicKey;\n  const keypair = generateKeyPairHex();\n  const k = utils4.hexToNumber(keypair.privateKey);\n  let c1 = keypair.publicKey;\n  if (c1.length > 128)\n    c1 = c1.substring(c1.length - 128);\n  const p = publicKeyPoint.multiply(k);\n  const x2 = hexToArray(leftPad(utils4.numberToHexUnpadded(p.x), 64));\n  const y2 = hexToArray(leftPad(utils4.numberToHexUnpadded(p.y), 64));\n  const c3 = bytesToHex(sm3(utils4.concatBytes(x2, msgArr, y2)));\n  xorCipherStream(x2, y2, msgArr);\n  const c2 = bytesToHex(msgArr);\n  if (options?.asn1) {\n    const point = sm2Curve.ProjectivePoint.fromHex(keypair.publicKey);\n    const encode = cipherMode === C1C2C3 ? encodeEnc(point.x, point.y, c2, c3) : encodeEnc(point.x, point.y, c3, c2);\n    return encode;\n  }\n  return cipherMode === C1C2C3 ? c1 + c2 + c3 : c1 + c3 + c2;\n}\nfunction xorCipherStream(x2, y2, msg) {\n  let ct = 1;\n  let offset = 0;\n  let t = EmptyArray;\n  const ctShift = new Uint8Array(4);\n  const nextT = () => {\n    ctShift[0] = ct >> 24 & 255;\n    ctShift[1] = ct >> 16 & 255;\n    ctShift[2] = ct >> 8 & 255;\n    ctShift[3] = ct & 255;\n    t = sm3(utils4.concatBytes(x2, y2, ctShift));\n    ct++;\n    offset = 0;\n  };\n  nextT();\n  for (let i = 0, len = msg.length; i < len; i++) {\n    if (offset === t.length)\n      nextT();\n    msg[i] ^= t[offset++] & 255;\n  }\n}\nfunction doDecrypt(encryptData, privateKey, cipherMode = 1, {\n  output = \"string\",\n  asn1 = false\n} = {}) {\n  const privateKeyInteger = utils4.hexToNumber(privateKey);\n  let c1;\n  let c2;\n  let c3;\n  if (asn1) {\n    const { x: x3, y, cipher, hash } = decodeEnc(encryptData);\n    c1 = sm2Curve.ProjectivePoint.fromAffine({ x: x3, y });\n    c3 = hash;\n    c2 = cipher;\n    if (cipherMode === C1C2C3) {\n      [c2, c3] = [c3, c2];\n    }\n  } else {\n    c1 = sm2Curve.ProjectivePoint.fromHex(\"04\" + encryptData.substring(0, 128));\n    c3 = encryptData.substring(128, 128 + 64);\n    c2 = encryptData.substring(128 + 64);\n    if (cipherMode === C1C2C3) {\n      c3 = encryptData.substring(encryptData.length - 64);\n      c2 = encryptData.substring(128, encryptData.length - 64);\n    }\n  }\n  const msg = hexToArray(c2);\n  const p = c1.multiply(privateKeyInteger);\n  const x2 = hexToArray(leftPad(utils4.numberToHexUnpadded(p.x), 64));\n  const y2 = hexToArray(leftPad(utils4.numberToHexUnpadded(p.y), 64));\n  xorCipherStream(x2, y2, msg);\n  const checkC3 = arrayToHex(Array.from(sm3(utils4.concatBytes(x2, msg, y2))));\n  if (checkC3 === c3.toLowerCase()) {\n    return output === \"array\" ? msg : arrayToUtf8(msg);\n  } else {\n    return output === \"array\" ? [] : \"\";\n  }\n}\nfunction doSignature(msg, privateKey, options = {}) {\n  let {\n    pointPool,\n    der,\n    hash,\n    publicKey,\n    userId\n  } = options;\n  let hashHex = typeof msg === \"string\" ? utf8ToHex(msg) : arrayToHex(Array.from(msg));\n  if (hash) {\n    publicKey = publicKey || getPublicKeyFromPrivateKey(privateKey);\n    hashHex = getHash(hashHex, publicKey, userId);\n  }\n  const dA = utils4.hexToNumber(privateKey);\n  const e = utils4.hexToNumber(hashHex);\n  let k = null;\n  let r = null;\n  let s = null;\n  do {\n    do {\n      let point;\n      if (pointPool && pointPool.length) {\n        point = pointPool.pop();\n      } else {\n        point = getPoint();\n      }\n      k = point.k;\n      r = field.add(e, point.x1);\n    } while (r === ZERO || r + k === sm2Curve.CURVE.n);\n    s = field.mul(field.inv(field.addN(dA, ONE)), field.subN(k, field.mulN(r, dA)));\n  } while (s === ZERO);\n  if (der)\n    return encodeDer(r, s);\n  return leftPad(utils4.numberToHexUnpadded(r), 64) + leftPad(utils4.numberToHexUnpadded(s), 64);\n}\nfunction doVerifySignature(msg, signHex, publicKey, options = {}) {\n  let hashHex;\n  const {\n    hash,\n    der,\n    userId\n  } = options;\n  const publicKeyHex = typeof publicKey === \"string\" ? publicKey : publicKey.toHex(false);\n  if (hash) {\n    hashHex = getHash(typeof msg === \"string\" ? utf8ToHex(msg) : msg, publicKeyHex, userId);\n  } else {\n    hashHex = typeof msg === \"string\" ? utf8ToHex(msg) : arrayToHex(Array.from(msg));\n  }\n  let r;\n  let s;\n  if (der) {\n    const decodeDerObj = decodeDer(signHex);\n    r = decodeDerObj.r;\n    s = decodeDerObj.s;\n  } else {\n    r = utils4.hexToNumber(signHex.substring(0, 64));\n    s = utils4.hexToNumber(signHex.substring(64));\n  }\n  const PA = typeof publicKey === \"string\" ? sm2Curve.ProjectivePoint.fromHex(publicKey) : publicKey;\n  const e = utils4.hexToNumber(hashHex);\n  const t = field.add(r, s);\n  if (t === ZERO)\n    return false;\n  const x1y1 = sm2Curve.ProjectivePoint.BASE.multiply(s).add(PA.multiply(t));\n  const R = field.add(e, x1y1.x);\n  return r === R;\n}\nfunction getZ(publicKey, userId = \"1234567812345678\") {\n  userId = utf8ToHex(userId);\n  const a = leftPad(utils4.numberToHexUnpadded(sm2Curve.CURVE.a), 64);\n  const b = leftPad(utils4.numberToHexUnpadded(sm2Curve.CURVE.b), 64);\n  const gx = leftPad(utils4.numberToHexUnpadded(sm2Curve.ProjectivePoint.BASE.x), 64);\n  const gy = leftPad(utils4.numberToHexUnpadded(sm2Curve.ProjectivePoint.BASE.y), 64);\n  let px;\n  let py;\n  if (publicKey.length === 128) {\n    px = publicKey.substring(0, 64);\n    py = publicKey.substring(64, 128);\n  } else {\n    const point = sm2Curve.ProjectivePoint.fromHex(publicKey);\n    px = leftPad(utils4.numberToHexUnpadded(point.x), 64);\n    py = leftPad(utils4.numberToHexUnpadded(point.y), 64);\n  }\n  const data = hexToArray(userId + a + b + gx + gy + px + py);\n  const entl = userId.length * 4;\n  const z = sm3(utils4.concatBytes(new Uint8Array([entl >> 8 & 255, entl & 255]), data));\n  return z;\n}\nfunction getHash(hashHex, publicKey, userId = \"1234567812345678\") {\n  const z = getZ(publicKey, userId);\n  return bytesToHex(sm3(utils4.concatBytes(z, typeof hashHex === \"string\" ? hexToArray(hashHex) : hashHex)));\n}\nfunction precomputePublicKey(publicKey, windowSize) {\n  const point = sm2Curve.ProjectivePoint.fromHex(publicKey);\n  return sm2Curve.utils.precompute(windowSize, point);\n}\nfunction getPublicKeyFromPrivateKey(privateKey) {\n  const pubKey = sm2Curve.getPublicKey(privateKey, false);\n  const pubPad = leftPad(utils4.bytesToHex(pubKey), 64);\n  return pubPad;\n}\nfunction getPoint() {\n  const keypair = generateKeyPairHex();\n  const PA = sm2Curve.ProjectivePoint.fromHex(keypair.publicKey);\n  const k = utils4.hexToNumber(keypair.privateKey);\n  return {\n    ...keypair,\n    k,\n    x1: PA.x\n  };\n}\n\n// src/sm3/index.ts\nfunction utf8ToArray(str) {\n  const arr = [];\n  for (let i = 0, len = str.length; i < len; i++) {\n    const point = str.codePointAt(i);\n    if (point <= 127) {\n      arr.push(point);\n    } else if (point <= 2047) {\n      arr.push(192 | point >>> 6);\n      arr.push(128 | point & 63);\n    } else if (point <= 55295 || point >= 57344 && point <= 65535) {\n      arr.push(224 | point >>> 12);\n      arr.push(128 | point >>> 6 & 63);\n      arr.push(128 | point & 63);\n    } else if (point >= 65536 && point <= 1114111) {\n      i++;\n      arr.push(240 | point >>> 18 & 28);\n      arr.push(128 | point >>> 12 & 63);\n      arr.push(128 | point >>> 6 & 63);\n      arr.push(128 | point & 63);\n    } else {\n      arr.push(point);\n      throw new Error(\"input is not supported\");\n    }\n  }\n  return new Uint8Array(arr);\n}\nfunction sm32(input, options) {\n  input = typeof input === \"string\" ? utf8ToArray(input) : input;\n  if (options) {\n    const mode = options.mode || \"hmac\";\n    if (mode !== \"hmac\")\n      throw new Error(\"invalid mode\");\n    let key = options.key;\n    if (!key)\n      throw new Error(\"invalid key\");\n    key = typeof key === \"string\" ? hexToArray(key) : key;\n    return bytesToHex(hmac(sm3, key, input));\n  }\n  return bytesToHex(sm3(input));\n}\n\n// src/sm4/index.ts\nvar sm4_exports = {};\n__export(sm4_exports, {\n  decrypt: () => decrypt,\n  encrypt: () => encrypt,\n  sm4: () => sm4\n});\nimport { ghash } from \"@noble/ciphers/_polyval\";\nimport { createView as createView2, setBigUint64 as setBigUint642 } from \"@noble/ciphers/utils\";\nvar DECRYPT = 0;\nvar ROUND = 32;\nvar BLOCK = 16;\nvar Sbox = Uint8Array.from([\n  214,\n  144,\n  233,\n  254,\n  204,\n  225,\n  61,\n  183,\n  22,\n  182,\n  20,\n  194,\n  40,\n  251,\n  44,\n  5,\n  43,\n  103,\n  154,\n  118,\n  42,\n  190,\n  4,\n  195,\n  170,\n  68,\n  19,\n  38,\n  73,\n  134,\n  6,\n  153,\n  156,\n  66,\n  80,\n  244,\n  145,\n  239,\n  152,\n  122,\n  51,\n  84,\n  11,\n  67,\n  237,\n  207,\n  172,\n  98,\n  228,\n  179,\n  28,\n  169,\n  201,\n  8,\n  232,\n  149,\n  128,\n  223,\n  148,\n  250,\n  117,\n  143,\n  63,\n  166,\n  71,\n  7,\n  167,\n  252,\n  243,\n  115,\n  23,\n  186,\n  131,\n  89,\n  60,\n  25,\n  230,\n  133,\n  79,\n  168,\n  104,\n  107,\n  129,\n  178,\n  113,\n  100,\n  218,\n  139,\n  248,\n  235,\n  15,\n  75,\n  112,\n  86,\n  157,\n  53,\n  30,\n  36,\n  14,\n  94,\n  99,\n  88,\n  209,\n  162,\n  37,\n  34,\n  124,\n  59,\n  1,\n  33,\n  120,\n  135,\n  212,\n  0,\n  70,\n  87,\n  159,\n  211,\n  39,\n  82,\n  76,\n  54,\n  2,\n  231,\n  160,\n  196,\n  200,\n  158,\n  234,\n  191,\n  138,\n  210,\n  64,\n  199,\n  56,\n  181,\n  163,\n  247,\n  242,\n  206,\n  249,\n  97,\n  21,\n  161,\n  224,\n  174,\n  93,\n  164,\n  155,\n  52,\n  26,\n  85,\n  173,\n  147,\n  50,\n  48,\n  245,\n  140,\n  177,\n  227,\n  29,\n  246,\n  226,\n  46,\n  130,\n  102,\n  202,\n  96,\n  192,\n  41,\n  35,\n  171,\n  13,\n  83,\n  78,\n  111,\n  213,\n  219,\n  55,\n  69,\n  222,\n  253,\n  142,\n  47,\n  3,\n  255,\n  106,\n  114,\n  109,\n  108,\n  91,\n  81,\n  141,\n  27,\n  175,\n  146,\n  187,\n  221,\n  188,\n  127,\n  17,\n  217,\n  92,\n  65,\n  31,\n  16,\n  90,\n  216,\n  10,\n  193,\n  49,\n  136,\n  165,\n  205,\n  123,\n  189,\n  45,\n  116,\n  208,\n  18,\n  184,\n  229,\n  180,\n  176,\n  137,\n  105,\n  151,\n  74,\n  12,\n  150,\n  119,\n  126,\n  101,\n  185,\n  241,\n  9,\n  197,\n  110,\n  198,\n  132,\n  24,\n  240,\n  125,\n  236,\n  58,\n  220,\n  77,\n  32,\n  121,\n  238,\n  95,\n  62,\n  215,\n  203,\n  57,\n  72\n]);\nvar CK = new Uint32Array([\n  462357,\n  472066609,\n  943670861,\n  1415275113,\n  1886879365,\n  2358483617,\n  2830087869,\n  3301692121,\n  3773296373,\n  4228057617,\n  404694573,\n  876298825,\n  1347903077,\n  1819507329,\n  2291111581,\n  2762715833,\n  3234320085,\n  3705924337,\n  4177462797,\n  337322537,\n  808926789,\n  1280531041,\n  1752135293,\n  2223739545,\n  2695343797,\n  3166948049,\n  3638552301,\n  4110090761,\n  269950501,\n  741554753,\n  1213159005,\n  1684763257\n]);\nfunction byteSub(a) {\n  return (Sbox[a >>> 24 & 255] & 255) << 24 | (Sbox[a >>> 16 & 255] & 255) << 16 | (Sbox[a >>> 8 & 255] & 255) << 8 | Sbox[a & 255] & 255;\n}\nvar x = new Uint32Array(4);\nvar tmp = new Uint32Array(4);\nfunction sms4Crypt(input, output, roundKey) {\n  let x0 = 0, x1 = 0, x2 = 0, x3 = 0, tmp0 = 0, tmp1 = 0, tmp2 = 0, tmp3 = 0;\n  tmp0 = input[0] & 255;\n  tmp1 = input[1] & 255;\n  tmp2 = input[2] & 255;\n  tmp3 = input[3] & 255;\n  x0 = tmp0 << 24 | tmp1 << 16 | tmp2 << 8 | tmp3;\n  tmp0 = input[4] & 255;\n  tmp1 = input[5] & 255;\n  tmp2 = input[6] & 255;\n  tmp3 = input[7] & 255;\n  x1 = tmp0 << 24 | tmp1 << 16 | tmp2 << 8 | tmp3;\n  tmp0 = input[8] & 255;\n  tmp1 = input[9] & 255;\n  tmp2 = input[10] & 255;\n  tmp3 = input[11] & 255;\n  x2 = tmp0 << 24 | tmp1 << 16 | tmp2 << 8 | tmp3;\n  tmp0 = input[12] & 255;\n  tmp1 = input[13] & 255;\n  tmp2 = input[14] & 255;\n  tmp3 = input[15] & 255;\n  x3 = tmp0 << 24 | tmp1 << 16 | tmp2 << 8 | tmp3;\n  for (let r = 0; r < 32; r += 4) {\n    tmp0 = x1 ^ x2 ^ x3 ^ roundKey[r];\n    tmp0 = byteSub(tmp0);\n    x0 ^= tmp0 ^ (tmp0 << 2 | tmp0 >>> 30) ^ (tmp0 << 10 | tmp0 >>> 22) ^ (tmp0 << 18 | tmp0 >>> 14) ^ (tmp0 << 24 | tmp0 >>> 8);\n    tmp1 = x2 ^ x3 ^ x0 ^ roundKey[r + 1];\n    tmp1 = byteSub(tmp1);\n    x1 ^= tmp1 ^ (tmp1 << 2 | tmp1 >>> 30) ^ (tmp1 << 10 | tmp1 >>> 22) ^ (tmp1 << 18 | tmp1 >>> 14) ^ (tmp1 << 24 | tmp1 >>> 8);\n    tmp2 = x3 ^ x0 ^ x1 ^ roundKey[r + 2];\n    tmp2 = byteSub(tmp2);\n    x2 ^= tmp2 ^ (tmp2 << 2 | tmp2 >>> 30) ^ (tmp2 << 10 | tmp2 >>> 22) ^ (tmp2 << 18 | tmp2 >>> 14) ^ (tmp2 << 24 | tmp2 >>> 8);\n    tmp3 = x0 ^ x1 ^ x2 ^ roundKey[r + 3];\n    tmp3 = byteSub(tmp3);\n    x3 ^= tmp3 ^ (tmp3 << 2 | tmp3 >>> 30) ^ (tmp3 << 10 | tmp3 >>> 22) ^ (tmp3 << 18 | tmp3 >>> 14) ^ (tmp3 << 24 | tmp3 >>> 8);\n  }\n  output[0] = x3 >>> 24 & 255;\n  output[1] = x3 >>> 16 & 255;\n  output[2] = x3 >>> 8 & 255;\n  output[3] = x3 & 255;\n  output[4] = x2 >>> 24 & 255;\n  output[5] = x2 >>> 16 & 255;\n  output[6] = x2 >>> 8 & 255;\n  output[7] = x2 & 255;\n  output[8] = x1 >>> 24 & 255;\n  output[9] = x1 >>> 16 & 255;\n  output[10] = x1 >>> 8 & 255;\n  output[11] = x1 & 255;\n  output[12] = x0 >>> 24 & 255;\n  output[13] = x0 >>> 16 & 255;\n  output[14] = x0 >>> 8 & 255;\n  output[15] = x0 & 255;\n}\nfunction sms4KeyExt(key, roundKey, cryptFlag) {\n  let x0 = 0, x1 = 0, x2 = 0, x3 = 0, mid = 0;\n  x0 = (key[0] & 255) << 24 | (key[1] & 255) << 16 | (key[2] & 255) << 8 | key[3] & 255;\n  x1 = (key[4] & 255) << 24 | (key[5] & 255) << 16 | (key[6] & 255) << 8 | key[7] & 255;\n  x2 = (key[8] & 255) << 24 | (key[9] & 255) << 16 | (key[10] & 255) << 8 | key[11] & 255;\n  x3 = (key[12] & 255) << 24 | (key[13] & 255) << 16 | (key[14] & 255) << 8 | key[15] & 255;\n  x0 ^= 2746333894;\n  x1 ^= 1453994832;\n  x2 ^= 1736282519;\n  x3 ^= 2993693404;\n  for (let r = 0; r < 32; r += 4) {\n    mid = x1 ^ x2 ^ x3 ^ CK[r + 0];\n    mid = byteSub(mid);\n    x0 ^= mid ^ (mid << 13 | mid >>> 19) ^ (mid << 23 | mid >>> 9);\n    roundKey[r + 0] = x0;\n    mid = x2 ^ x3 ^ x0 ^ CK[r + 1];\n    mid = byteSub(mid);\n    x1 ^= mid ^ (mid << 13 | mid >>> 19) ^ (mid << 23 | mid >>> 9);\n    roundKey[r + 1] = x1;\n    mid = x3 ^ x0 ^ x1 ^ CK[r + 2];\n    mid = byteSub(mid);\n    x2 ^= mid ^ (mid << 13 | mid >>> 19) ^ (mid << 23 | mid >>> 9);\n    roundKey[r + 2] = x2;\n    mid = x0 ^ x1 ^ x2 ^ CK[r + 3];\n    mid = byteSub(mid);\n    x3 ^= mid ^ (mid << 13 | mid >>> 19) ^ (mid << 23 | mid >>> 9);\n    roundKey[r + 3] = x3;\n  }\n  if (cryptFlag === DECRYPT) {\n    for (let r = 0; r < 16; r++) {\n      [roundKey[r], roundKey[31 - r]] = [roundKey[31 - r], roundKey[r]];\n    }\n  }\n}\nfunction incrementCounter(counter) {\n  for (let i = counter.length - 1; i >= 0; i--) {\n    counter[i]++;\n    if (counter[i] !== 0)\n      break;\n  }\n}\nfunction sm4Gcm(inArray, key, ivArray, aadArray, cryptFlag, tagArray) {\n  const tagLength = 16;\n  function deriveKeys() {\n    const roundKey2 = new Uint32Array(ROUND);\n    sms4KeyExt(key, roundKey2, 1);\n    const authKey = new Uint8Array(16).fill(0);\n    const h2 = new Uint8Array(16);\n    sms4Crypt(authKey, h2, roundKey2);\n    let j02;\n    if (ivArray.length === 12) {\n      j02 = new Uint8Array(16);\n      j02.set(ivArray, 0);\n      j02[15] = 1;\n    } else {\n      const g = ghash.create(h2);\n      g.update(ivArray);\n      const lenIv = new Uint8Array(16);\n      const view = createView2(lenIv);\n      setBigUint642(view, 8, BigInt(ivArray.length * 8), false);\n      g.update(lenIv);\n      j02 = g.digest();\n    }\n    const counter2 = new Uint8Array(j02);\n    incrementCounter(counter2);\n    const tagMask2 = new Uint8Array(16);\n    sms4Crypt(j02, tagMask2, roundKey2);\n    return { roundKey: roundKey2, h: h2, j0: j02, counter: counter2, tagMask: tagMask2 };\n  }\n  function computeTag(h2, data) {\n    const aadLength = aadArray.length;\n    const dataLength = data.length;\n    const g = ghash.create(h2);\n    if (aadLength > 0) {\n      g.update(aadArray);\n    }\n    g.update(data);\n    const lenBlock = new Uint8Array(16);\n    const view = createView2(lenBlock);\n    setBigUint642(view, 0, BigInt(aadLength * 8), false);\n    setBigUint642(view, 8, BigInt(dataLength * 8), false);\n    g.update(lenBlock);\n    return g.digest();\n  }\n  const { roundKey, h, j0, counter, tagMask } = deriveKeys();\n  if (cryptFlag === DECRYPT && tagArray) {\n    const calculatedTag = computeTag(h, inArray);\n    for (let i = 0; i < 16; i++) {\n      calculatedTag[i] ^= tagMask[i];\n    }\n    let tagMatch = 0;\n    for (let i = 0; i < 16; i++) {\n      tagMatch |= calculatedTag[i] ^ tagArray[i];\n    }\n    if (tagMatch !== 0) {\n      throw new Error(\"authentication tag mismatch\");\n    }\n  }\n  const outArray = new Uint8Array(inArray.length);\n  let point = 0;\n  let restLen = inArray.length;\n  while (restLen >= BLOCK) {\n    const blockOut = new Uint8Array(BLOCK);\n    sms4Crypt(counter, blockOut, roundKey);\n    for (let i = 0; i < BLOCK && i < restLen; i++) {\n      outArray[point + i] = inArray[point + i] ^ blockOut[i];\n    }\n    incrementCounter(counter);\n    point += BLOCK;\n    restLen -= BLOCK;\n  }\n  if (restLen > 0) {\n    const blockOut = new Uint8Array(BLOCK);\n    sms4Crypt(counter, blockOut, roundKey);\n    for (let i = 0; i < restLen; i++) {\n      outArray[point + i] = inArray[point + i] ^ blockOut[i];\n    }\n  }\n  if (cryptFlag !== DECRYPT) {\n    const calculatedTag = computeTag(h, outArray);\n    for (let i = 0; i < 16; i++) {\n      calculatedTag[i] ^= tagMask[i];\n    }\n    return { output: outArray, tag: calculatedTag };\n  }\n  return { output: outArray };\n}\nvar blockOutput = new Uint8Array(16);\nfunction sm4(inArray, key, cryptFlag, options = {}) {\n  let {\n    padding = \"pkcs#7\",\n    mode,\n    iv = new Uint8Array(16),\n    output,\n    associatedData,\n    outputTag,\n    tag\n  } = options;\n  if (mode === \"gcm\") {\n    const keyArray = typeof key === \"string\" ? hexToArray(key) : Uint8Array.from(key);\n    const ivArray = typeof iv === \"string\" ? hexToArray(iv) : Uint8Array.from(iv);\n    const aadArray = associatedData ? typeof associatedData === \"string\" ? hexToArray(associatedData) : Uint8Array.from(associatedData) : new Uint8Array(0);\n    let inputArray;\n    if (typeof inArray === \"string\") {\n      if (cryptFlag !== DECRYPT) {\n        inputArray = utf8ToArray(inArray);\n      } else {\n        inputArray = hexToArray(inArray);\n      }\n    } else {\n      inputArray = Uint8Array.from(inArray);\n    }\n    const tagArray = tag ? typeof tag === \"string\" ? hexToArray(tag) : Uint8Array.from(tag) : void 0;\n    const result = sm4Gcm(inputArray, keyArray, ivArray, aadArray, cryptFlag, tagArray);\n    if (output === \"array\") {\n      if (outputTag && cryptFlag !== DECRYPT) {\n        return result;\n      }\n      return result.output;\n    } else {\n      if (outputTag && cryptFlag !== DECRYPT) {\n        return {\n          output: bytesToHex(result.output),\n          tag: result.tag ? bytesToHex(result.tag) : void 0\n        };\n      }\n      if (cryptFlag !== DECRYPT) {\n        return {\n          output: bytesToHex(result.output),\n          tag: result.tag ? bytesToHex(result.tag) : void 0\n        };\n      } else {\n        return arrayToUtf8(result.output);\n      }\n    }\n  }\n  if (mode === \"cbc\") {\n    if (typeof iv === \"string\")\n      iv = hexToArray(iv);\n    if (iv.length !== 128 / 8) {\n      throw new Error(\"iv is invalid\");\n    }\n  }\n  if (typeof key === \"string\")\n    key = hexToArray(key);\n  if (key.length !== 128 / 8) {\n    throw new Error(\"key is invalid\");\n  }\n  if (typeof inArray === \"string\") {\n    if (cryptFlag !== DECRYPT) {\n      inArray = utf8ToArray(inArray);\n    } else {\n      inArray = hexToArray(inArray);\n    }\n  } else {\n    inArray = Uint8Array.from(inArray);\n  }\n  if ((padding === \"pkcs#5\" || padding === \"pkcs#7\") && cryptFlag !== DECRYPT) {\n    const paddingCount = BLOCK - inArray.length % BLOCK;\n    const newArray = new Uint8Array(inArray.length + paddingCount);\n    newArray.set(inArray, 0);\n    for (let i = 0; i < paddingCount; i++)\n      newArray[inArray.length + i] = paddingCount;\n    inArray = newArray;\n  }\n  const roundKey = new Uint32Array(ROUND);\n  sms4KeyExt(key, roundKey, cryptFlag);\n  let outArray = new Uint8Array(inArray.length);\n  let lastVector = iv;\n  let restLen = inArray.length;\n  let point = 0;\n  while (restLen >= BLOCK) {\n    const input = inArray.subarray(point, point + 16);\n    if (mode === \"cbc\") {\n      for (let i = 0; i < BLOCK; i++) {\n        if (cryptFlag !== DECRYPT) {\n          input[i] ^= lastVector[i];\n        }\n      }\n    }\n    sms4Crypt(input, blockOutput, roundKey);\n    for (let i = 0; i < BLOCK; i++) {\n      if (mode === \"cbc\") {\n        if (cryptFlag === DECRYPT) {\n          blockOutput[i] ^= lastVector[i];\n        }\n      }\n      outArray[point + i] = blockOutput[i];\n    }\n    if (mode === \"cbc\") {\n      if (cryptFlag !== DECRYPT) {\n        lastVector = blockOutput;\n      } else {\n        lastVector = input;\n      }\n    }\n    restLen -= BLOCK;\n    point += BLOCK;\n  }\n  if ((padding === \"pkcs#5\" || padding === \"pkcs#7\") && cryptFlag === DECRYPT) {\n    const len = outArray.length;\n    const paddingCount = outArray[len - 1];\n    for (let i = 1; i <= paddingCount; i++) {\n      if (outArray[len - i] !== paddingCount)\n        throw new Error(\"padding is invalid\");\n    }\n    outArray = outArray.slice(0, len - paddingCount);\n  }\n  if (output !== \"array\") {\n    if (cryptFlag !== DECRYPT) {\n      return bytesToHex(outArray);\n    } else {\n      return arrayToUtf8(outArray);\n    }\n  } else {\n    return outArray;\n  }\n}\nfunction encrypt(inArray, key, options = {}) {\n  return sm4(inArray, key, 1, options);\n}\nfunction decrypt(inArray, key, options = {}) {\n  return sm4(inArray, key, 0, options);\n}\nexport {\n  sm2_exports as sm2,\n  sm32 as sm3,\n  sm4_exports as sm4\n};\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n","/**\n * @module Cipher\n */\n\nimport { sm2, sm3, sm4 } from \"sm-crypto-v2\"\n\n/**\n *  国密 sm2\n */\nexport function useSm2() {\n\treturn sm2\n}\n\n/**\n * 国密 sm3 加密\n * @param {string} msg - 密码信息\n * @param {Object} [options={}]\n * @return {*}\n */\nexport function useSm3(msg, options) {\n\treturn sm3(msg, options) // 杂凑\n}\n\n/**\n * 国密 sm4 加密\n * @param {string} msg - 密码信息\n * @param {string} key - 秘钥\n * @param {Object} [options={}]\n * @return {Uint8Array}\n */\nexport function useSm4Encrypt(msg, key, options) {\n\treturn sm4.encrypt(msg, key, options)\n}\n\n/**\n * 国密 sm4 解密\n * @param {string} encryptData - 加密信息\n * @param {string} key - 秘钥\n * @param {Object} [options={}]\n * @return {Uint8Array}\n */\nexport function useSm4Decrypt(encryptData, key, options) {\n\treturn sm4.encrypt(encryptData, key, options)\n}\n","/**\n * @module Datetime\n */\n\nimport dayjs from \"dayjs\"\n\n/**\n * 根据格式创建 Dayjs 对象\n * @param {string|number} date - 日期字符\n * @param {string} [format=null] - 日期格式\n * @return {dayjs.Dayjs}\n */\nexport function useDayjs(date, format) {\n\tif (date && /^\\d+$/.test(date) && String(date).length <= 10) {\n\t\tdate = parseInt(`${date}000`)\n\t}\n\treturn format ? dayjs(date, format) : dayjs(date)\n}\n\n/**\n * 格式化日期\n * @param {dayjs.Dayjs|Date} date - 日期对象\n * @param {string} [format=YYYY-MM-DD HH:mm] - 日期格式\n * @return {string}\n */\nexport function useDateFormat(date, format) {\n\tif (!date) {\n\t\treturn \"\"\n\t}\n\n\tif (!dayjs.isDayjs(date)) {\n\t\tdate = useDayjs(date)\n\t}\n\n\treturn date.format(format || \"YYYY-MM-DD HH:mm\")\n}\n\n/**\n * 获取日期的 Unix 时间戳\n * @param {dayjs.Dayjs|Date} date - 日期对象\n * @return {number|string}\n */\nexport function useDateUnix(date) {\n\tif (!date) {\n\t\treturn \"\"\n\t}\n\tif (!dayjs.isDayjs(date)) {\n\t\tdate = useDayjs(date)\n\t}\n\n\treturn date.unix()\n}\n","/**\n * @module Network\n */\n\nimport axios from \"axios\"\n\n/**\n * 请求返回状态码\n * @property {string} STATUS.STATE_CODE_SUCCESS  `SUCCESS` 成功\n * @property {string} STATUS.STATE_CODE_FAIL  `FAIL` 失败\n * @property {string} STATUS.STATE_CODE_NOT_FOUND  `NOT_FOUND` 找不到资源\n * @property {string} STATUS.STATE_CODE_INFO_NOT_COMPLETE  `INCOMPLETE` 信息不完整\n * @property {string} STATUS.STATE_CODE_NOT_ALLOWED  `NOT_ALLOWED` 无权限\n */\nexport const STATUS = {\n\tSTATE_CODE_SUCCESS: \"SUCCESS\", // 成功\n\tSTATE_CODE_FAIL: \"FAIL\", // 失败\n\tSTATE_CODE_NOT_FOUND: \"NOT_FOUND\", // 找不到资源\n\tSTATE_CODE_INFO_NOT_COMPLETE: \"INCOMPLETE\", // 信息不完整\n\tSTATE_CODE_NOT_ALLOWED: \"NOT_ALLOWED\", //没有权限\n}\n\n/**\n * STATUS 适配器，内部使用\n * @param status\n * @private\n */\nexport function _configStatus(status) {\n\tObject.keys(status).forEach((key) => {\n\t\tSTATUS[key] = status[key]\n\t})\n}\n\n/**\n * 通用 AJAX 请求\n * @param {Object} [fetcher] - 用于存储请求状态的对象\n * @returns {{post(*=, *=, *=): Promise, get(*=, *=): Promise}}\n */\nexport function useFetch(fetcher) {\n\tif (!fetcher) {\n\t\tfetcher = {}\n\t}\n\tfetcher.loading = true\n\n\treturn {\n\t\t/**\n\t\t * get请求\n\t\t * @param url\n\t\t * @param {?Object} [config] - axios config\n\t\t * @returns {Promise}\n\t\t */\n\t\tget(url, config) {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\taxios\n\t\t\t\t\t.get(url, config)\n\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\tresolve(res)\n\t\t\t\t\t})\n\t\t\t\t\t.catch((err) => {\n\t\t\t\t\t\treject(err)\n\t\t\t\t\t})\n\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\tfetcher.loading = false\n\t\t\t\t\t})\n\t\t\t})\n\t\t},\n\t\t/**\n\t\t * post请求\n\t\t * @param {string} url\n\t\t * @param {?Object} [data]\n\t\t * @param {?Object} [config] - axios config\n\t\t * @returns {Promise}\n\t\t */\n\t\tpost(url, data, config) {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\taxios\n\t\t\t\t\t.post(url, data, config)\n\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\tresolve(res)\n\t\t\t\t\t})\n\t\t\t\t\t.catch((err) => {\n\t\t\t\t\t\treject(err)\n\t\t\t\t\t})\n\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\tfetcher.loading = false\n\t\t\t\t\t})\n\t\t\t})\n\t\t},\n\t}\n}\n\n/**\n * 分页请求\n * @param {object} pagination 分页对象\n * @param {string} pagination.uri 请求地址\n * @param {object} [pagination.params] 请求参数\n * @param {number} [pagination.page] 当前页码\n * @param {string} pagination.finishedText 加载完毕文本\n * @param {boolean} pagination.loading 加载状态\n * @param {boolean} pagination.finished 加载完毕\n * @param {boolean} pagination.error 是否错误\n * @param {string} pagination.errorText 错误文本\n * @param {boolean} pagination.empty 是否无内容\n * @param {array} pagination.items 分页数据\n *\n * @param {boolean} refresh 是否刷新\n * @param {function} [process] 数据处理函数\n *\n * @return {object} pagination 分页对象\n *\n */\nexport async function usePage(pagination, refresh, process) {\n\tpagination.finishedText = pagination.finishedText || \"加载完毕\"\n\tpagination.loading = true\n\n\tif (!pagination.uri) {\n\t\tconsole.error(\"URI is required in pagination\")\n\t\treturn pagination\n\t}\n\n\tlet res = {}\n\ttry {\n\t\tres = await axios.get(pagination.uri, {\n\t\t\tparams: { ...(pagination.params || {}), page: refresh || !pagination.page ? 1 : pagination.page + 1 },\n\t\t})\n\t} catch (e) {\n\t\tpagination.loading = false\n\t\tpagination.finished = false\n\t\tpagination.error = true\n\t\treturn pagination\n\t}\n\n\tif (res.status !== STATUS.STATE_CODE_SUCCESS) {\n\t\tpagination.loading = false\n\t\tpagination.error = true\n\t\tpagination.errorText = res.result\n\t\treturn pagination\n\t}\n\n\tlet result\n\n\tif (process) {\n\t\tresult = process(res)\n\t} else {\n\t\tresult = res.result\n\t}\n\n\tlet items = result.data\n\n\tif (!refresh && pagination.items) {\n\t\titems = pagination.items.concat(items)\n\t}\n\n\tconst currentPage = result.current_page || result.current || result.page || 1\n\tconst lastPage = result.last_page || result.lastPage || result.pages || 0\n\tconst totalSize = result.total_size || result.totalSize || result.total || 0\n\n\tpagination.loading = false\n\tpagination.error = false\n\tpagination.page = currentPage\n\tpagination.items = items\n\tpagination.finished = lastPage === 0 || lastPage === currentPage\n\tpagination.empty = totalSize === 0\n\n\treturn pagination\n}\n\nexport default {\n\tSTATUS,\n\tuseFetch,\n\tusePage,\n}\n","/**\n * @module Form\n */\n\nimport { cloneDeep, isArray, isBoolean, isFunction, isObject, isString, isUndefined } from \"lodash-es\"\nimport { message } from \"ant-design-vue\"\nimport { STATUS } from \"./network\"\nimport dayjs from \"dayjs\"\n\nconst { STATE_CODE_FAIL, STATE_CODE_INFO_NOT_COMPLETE, STATE_CODE_NOT_FOUND, STATE_CODE_NOT_ALLOWED, STATE_CODE_SUCCESS } = STATUS\n\n/**\n * 创建一个隐藏的表单\n *\n * @param {Object} options\n * @param {string} options.url - 请求地址\n * @param {Object} options.data  - 发送的数据\n * @param {string} [options.method=post] - 请求方法\n * @param {string} [options.csrfToken=null] - CSRF Token\n * @returns {HTMLFormElement}\n */\nexport function useHiddenForm(options) {\n\tconst { url, csrfToken } = options\n\tlet { method, data } = options\n\n\tmethod = method || \"post\"\n\tdata = data || {}\n\n\tconst form = document.createElement(\"form\")\n\tform.action = url\n\tform.method = method\n\tform.target = \"_blank\"\n\tform.style.display = \"none\"\n\n\tObject.keys(data).forEach((key) => {\n\t\tconst input = document.createElement(\"input\")\n\t\tinput.type = \"hidden\"\n\t\tinput.name = key\n\t\tinput.value = data[key]\n\t\tform.appendChild(input)\n\t})\n\n\tif (!csrfToken) {\n\t\tconst input = document.createElement(\"input\")\n\t\tinput.type = \"hidden\"\n\t\tinput.name = \"_token\"\n\t\tinput.value = document.querySelector('meta[name=\"csrf-token\"]')?.getAttribute(\"content\")\n\t\tform.appendChild(input)\n\t}\n\n\tdocument.body.appendChild(form)\n\n\treturn form\n}\n\n/**\n * 处理请求结果\n *\n * @param {object} res 请求结果\n * @param {string} res.status 请求结果状态\n * @param {*} res.result 请求结果信息\n * @param {Object.<string, string|function>} ops 状态的处理对象\n */\nexport function useProcessStatus(res, ops) {\n\tconst { status } = res\n\tconst msg = res.result\n\tconst predefined = {}\n\tpredefined.default = \"请求失败, 请检查数据并重试\"\n\tpredefined[STATE_CODE_FAIL] = \"系统错误，请稍候再试\"\n\tpredefined[STATE_CODE_NOT_FOUND] = \"请求的内容不存在\"\n\tpredefined[STATE_CODE_INFO_NOT_COMPLETE] = \"信息不完整\"\n\tpredefined[STATE_CODE_NOT_ALLOWED] = \"没有权限\"\n\n\t// 有几个常用的自定义名称\n\tconst special = {\n\t\t[STATE_CODE_SUCCESS]: \"success\",\n\t}\n\n\tconst op = ops[status] || ops[special[status]] || predefined[status] || predefined.def\n\n\tif (isString(op)) {\n\t\tif (status === STATE_CODE_SUCCESS) {\n\t\t\tmessage.success(op)\n\t\t} else {\n\t\t\tmessage.error(msg || op)\n\t\t}\n\t} else if (isFunction(op)) {\n\t\top()\n\t}\n}\n\n/**\n * 处理正确请求结果\n *\n * @param {object} res 请求结果\n * @param {string} res.status 请求结果状态\n * @param {*} res.result 请求结果信息\n * @param {string|function} success 状态的处理对象\n */\nexport function useProcessStatusSuccess(res, success) {\n\tuseProcessStatus(res, { success })\n}\n\n/**\n * 处理表单提交失败\n * @param {*} e\n */\nexport function useFormFail(e) {\n\tif (e && e.errorFields) {\n\t\te.errorFields.forEach((item) => {\n\t\t\tmessage.error(item.errors.join(\" \"))\n\t\t})\n\t} else if (!(e && e.response)) {\n\t\tmessage.error(\"请检查填写项\")\n\t}\n}\n\n/**\n * 表单布局\n * @property {Object} formLabel.commonLabelCol `{ span: 8, xxl: 6 }`\n * @property {Object} formLabel.commonWrapperCol `{ span: 12, xxl: 14 }`\n * @property {Object} formLabel.commonWrapperOffset `{ xs: { offset: 8, span: 12 }, xxl: { offset: 6, span: 14 } }`\n * @property {Object} formLabel.commonLabelFullCol `{ span: 8, xxl: 6 }`\n * @property {Object} formLabel.commonWrapperFullCol `{ span: 16, xxl: 18 }`\n * @property {Object} formLabel.commonWrapperFullOffset `{ xs: { offset: 8, span: 16 }, xxl: { offset: 6, span: 18 } }`\n * @property {Object} formLabel.commonLabelPartCol `{ span: 4, xxl: 3 }`\n * @property {Object} formLabel.commonWrapperPartCol `{ span: 20, xxl: 21 }`\n * @property {Object} formLabel.commonWrapperPartOffset `{ xs: { offset: 4, span: 20 }, xxl: { offset: 3, span: 21 } }`\n */\nexport const formLabel = {\n\tcommonLabelCol: { span: 8, xxl: 6 },\n\tcommonWrapperCol: { span: 12, xxl: 14 },\n\tcommonWrapperOffset: { xs: { offset: 8, span: 12 }, xxl: { offset: 6, span: 14 } },\n\tcommonLabelFullCol: { span: 8, xxl: 6 },\n\tcommonWrapperFullCol: { span: 16, xxl: 18 },\n\tcommonWrapperFullOffset: { xs: { offset: 8, span: 16 }, xxl: { offset: 6, span: 18 } },\n\tcommonLabelPartCol: { span: 4, xxl: 3 },\n\tcommonWrapperPartCol: { span: 20, xxl: 21 },\n\tcommonWrapperPartOffset: { xs: { offset: 4, span: 20 }, xxl: { offset: 3, span: 21 } },\n}\n\n/**\n * 处理表单数据\n * @param {Object} form\n * @param {Object} [format] 需要处理的类型\n * @param {boolean|string|Function} [format.date] `true`: 转成时间戳，`string`: 为 Format 格式, 如 `\"YYYY-MM-DD\"`, `function`: 自定义处理函数, 参数为 dayjs 对象\n * @param {boolean} [format.boolean] 布尔值处理, 如果开启则 `true` 转成 1, `false` 转成 0\n * @param {string|Function} [format.attachment] `string`: 附件字段名, `function`: 自定义处理函数, 参数为附件对象\n * @return {Object}\n */\nexport function useFormFormat(form, format) {\n\t//必须先 Copy form, 否则会改变 vm model 里的引用值而导致出错\n\tconst newForm = cloneDeep(form)\n\tformat = format || {}\n\tconst formatter = (obj) => {\n\t\tfor (let key in obj) {\n\t\t\t//日期处理\n\n\t\t\tlet date\n\t\t\tif (dayjs.isDayjs(obj[key])) {\n\t\t\t\tdate = obj[key]\n\t\t\t} else if (Object.prototype.toString.call(obj[key]) === \"[object Date]\") {\n\t\t\t\tdate = dayjs(obj[key])\n\t\t\t}\n\n\t\t\tif (date && format.date) {\n\t\t\t\tif (isString(format.date)) {\n\t\t\t\t\tobj[key] = date.format(format.date)\n\t\t\t\t} else if (isFunction(format.date)) {\n\t\t\t\t\tobj[key] = format.date(date)\n\t\t\t\t} else {\n\t\t\t\t\tobj[key] = obj[key].unix()\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t//布尔值处理\n\t\t\tif (isBoolean(obj[key]) && format.boolean) {\n\t\t\t\tif (format.boolean === true) {\n\t\t\t\t\tobj[key] = obj[key] ? 1 : 0\n\t\t\t\t} else if (Array.isArray(format.boolean)) {\n\t\t\t\t\tobj[key] = obj[key] ? format.boolean?.[0] || 1 : format.boolean?.[1] || 0\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t//附件处理\n\t\t\tif (format.attachment) {\n\t\t\t\tconst checker = format.attachment\n\t\t\t\tif (isObject(obj[key]) && obj[key]._type === \"file\" && isString(checker) && !isUndefined(obj[key][checker])) {\n\t\t\t\t\tobj[key] = obj[key][checker]\n\t\t\t\t\tcontinue\n\t\t\t\t} else if (isObject(obj[key]) && obj[key]._type === \"file\" && isFunction(checker)) {\n\t\t\t\t\tobj[key] = checker(obj[key])\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//数组处理\n\t\t\tif (isArray(obj[key])) {\n\t\t\t\tobj[key] = formatter(obj[key])\n\t\t\t}\n\t\t}\n\n\t\treturn obj\n\t}\n\n\treturn formatter(newForm)\n}\n\nexport default {\n\tuseHiddenForm,\n\tuseProcessStatus,\n\tuseProcessStatusSuccess,\n\tuseFormFail,\n\tuseFormFormat,\n\tformLabel,\n}\n","/**\n * @module Uitls\n */\n\nimport { find, flatMapDeep, isNull, isUndefined, reduce } from \"lodash-es\"\n\n/**\n * 从 options 中根据 value 获取 label\n * @param {string|number} value - 值\n * @param {Array} options - 选项\n * @return {string}\n */\nexport function useLabelFromOptionsValue(value, options) {\n\tif (!options) {\n\t\treturn \"\"\n\t}\n\tconst option = options.find((option) => option.value === value)\n\treturn option ? option.label : \"\"\n}\n\n/**\n * 从嵌套的 options 中根据 value 获取 label, 如 [1, 3] => [\"东\", \"南\"]\n *\n * @param {Array} options - 嵌套的选项\n * @param {Array} values - 需要查找的值\n * @param {Object} [adapter={value: \"value\",label: \"label\",children: \"children\"}] - 选项适配器\n * @return Array\n */\nexport function useFindLabelsInValues(options, values, adapter) {\n\tadapter = adapter || {\n\t\tvalue: \"value\",\n\t\tlabel: \"label\",\n\t\tchildren: \"children\",\n\t}\n\n\tconst labels = []\n\n\tfunction recursiveSearch(node) {\n\t\tif (values.includes(node[adapter.value])) {\n\t\t\tlabels.push(node[adapter.label])\n\t\t}\n\n\t\tif (node[adapter.children]?.length) {\n\t\t\tnode[adapter.children].forEach((child) => {\n\t\t\t\trecursiveSearch(child)\n\t\t\t})\n\t\t}\n\t}\n\n\toptions.forEach((item) => {\n\t\trecursiveSearch(item)\n\t})\n\n\treturn labels\n}\n\n/**\n * 从 options 为 [{label: \"\", value: \"\", children: []] 样式的多层数组中，根据所给的 value 递归找出该 option\n * @param {Array} options\n * @param {Number|String} value\n * @param {Object} [adapter]\n * @return {Object|null}\n */\nexport function useFindOptionByValue(options, value, adapter) {\n\tadapter = adapter || {\n\t\tvalue: \"value\",\n\t\tlabel: \"label\",\n\t\tchildren: \"children\",\n\t}\n\n\t// 遍历 options 数组\n\tfor (let option of options) {\n\t\t// 如果当前 option 的 value 匹配目标值，则返回当前 option\n\t\tif (option[adapter.value] === value) {\n\t\t\treturn option\n\t\t}\n\t\t// 如果当前 option 有子选项\n\t\tif (option[adapter.children] && option[adapter.children].length) {\n\t\t\t// 递归搜索子选项数组\n\t\t\tconst foundOption = useFindOptionByValue(option[adapter.children], value, adapter)\n\t\t\t// 如果找到了匹配的子选项，则返回\n\t\t\tif (foundOption) {\n\t\t\t\treturn foundOption\n\t\t\t}\n\t\t}\n\t}\n\t// 如果未找到匹配的选项，则返回 null\n\treturn null\n}\n\n/**\n * 从嵌套的 options 中根据 value 获取 label 路径, 如地区路径: [440000, 440100, 440113] => [\"广东省\", \"广州市\", \" 番禺区\"]\n * @param {Array} options - 嵌套的选项\n * @param {Array} path - 需要查找的值的路径数组\n * @param {Object} [adapter={value: \"value\",label: \"label\",children: \"children\"}] - 选项适配器\n * @return Array\n */\nexport function useFindLabelsFromPath(options, path, adapter) {\n\tadapter = adapter || {\n\t\tvalue: \"value\",\n\t\tlabel: \"label\",\n\t\tchildren: \"children\",\n\t}\n\n\tconst labels = []\n\treduce(\n\t\tpath,\n\t\t(acc, value) => {\n\t\t\tconst item = find(acc, { [adapter.value]: value })\n\t\t\tif (item) {\n\t\t\t\tlabels.push(item[adapter.label])\n\t\t\t\treturn item[adapter.children]\n\t\t\t}\n\t\t},\n\t\toptions,\n\t)\n\treturn labels\n}\n\n/**\n * 从嵌套的 options 中根据 value 获取 label 路径, 如地区路径: 440113 => [\"广东省\", \"广州市\", \" 番禺区\"]\n * @param options\n * @param value\n * @param adapter\n * @return {*}\n */\nexport function useFindParentLabels(options, value, adapter) {\n\tadapter = adapter || {\n\t\tvalue: \"value\",\n\t\tlabel: \"label\",\n\t\tchildren: \"children\",\n\t}\n\n\tconst labels = []\n\n\tfunction findParentLabels(options, value, labels) {\n\t\tfor (const option of options) {\n\t\t\tif (option[adapter.value] === value) {\n\t\t\t\tlabels.unshift(option[adapter.label])\n\t\t\t\tbreak\n\t\t\t} else if (option[adapter.children]) {\n\t\t\t\tconst childResult = findParentLabels(option[adapter.children], value, labels)\n\t\t\t\tif (childResult.length > 0) {\n\t\t\t\t\tlabels.unshift(option[adapter.label])\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn labels\n\t}\n\n\treturn findParentLabels(options, value, labels)\n}\n\n/**\n * 从嵌套的 options 中根据 value 获取整个 values 路径, 如地区路径: 440113 => [440000, 440100, 440113]\n * @param options\n * @param value\n * @param adapter\n * @return {*}\n */\nexport function useFindParentValues(options, value, adapter) {\n\tadapter = adapter || {\n\t\tvalue: \"value\",\n\t\tlabel: \"label\",\n\t\tchildren: \"children\",\n\t}\n\n\tconst values = []\n\n\tfunction findParentValues(options, value, values) {\n\t\tfor (const option of options) {\n\t\t\tif (option[adapter.value] === value) {\n\t\t\t\tvalues.unshift(option[adapter.value])\n\t\t\t\tbreak\n\t\t\t} else if (option[adapter.children]) {\n\t\t\t\tconst childResult = findParentValues(option[adapter.children], value, values)\n\t\t\t\tif (childResult.length > 0) {\n\t\t\t\t\tvalues.unshift(option[adapter.value])\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn values\n\t}\n\n\treturn findParentValues(options, value, values)\n}\n\n/**\n * let obj = {\n *     \"name\": \"西学楼1号\",\n *     \"parent\": {\n *         \"name\": \"学生宿舍\",\n *         \"parent\": {\n *             \"name\": \"宿舍区域\",\n *         }\n *     }\n * }\n * useFindPropertyRecursive(obj, 'name', 'parent') // [\"西学楼1号\", \"学生宿舍\", \"宿舍区域\"]\n *\n * 从嵌套的对象中递归获取某个属性\n * @param {Object} item 获取对象\n * @param {String} propertyKey 想获取的属性名称\n * @param {String} nestedKey 嵌套的属性\n * @return Array\n */\nexport function useFindPropertyRecursive(item, propertyKey, nestedKey) {\n\treturn flatMapDeep(item, (value, key) => {\n\t\tif (key === propertyKey) {\n\t\t\treturn value\n\t\t}\n\t\tif (key === nestedKey) {\n\t\t\treturn useFindPropertyRecursive(value, propertyKey, nestedKey)\n\t\t}\n\t\treturn []\n\t})\n}\n\nconst localCacheSession = {}\nconst localSession = {\n\tsetItem(key, value) {\n\t\tlocalCacheSession[key] = value\n\t},\n\tgetItem(key) {\n\t\treturn localCacheSession[key]\n\t},\n\tremoveItem(key) {\n\t\tdelete localCacheSession[key]\n\t},\n}\n\nwindow._printCache = () => {\n\tconsole.log(JSON.parse(JSON.stringify(localCacheSession, null, 2)))\n}\n\n/**\n * 用于储存缓存的值\n * @param {*} key 缓存的 key\n * @param {*} [sessionType] 缓存的类型，默认为内存缓存\n * @returns get(默认值) 获取缓存的值，set(键, 值) 设置缓存的值\n */\nexport function useCache(key, sessionType) {\n\tconst cacheSession = sessionType || localSession\n\tconst shouldTransform = !!sessionType // 如果是 localStorage 之类的，则需要转换一下\n\treturn {\n\t\tget(defaultValue) {\n\t\t\tconst value = cacheSession.getItem(key)\n\t\t\tif (isNull(value) || isUndefined(value)) {\n\t\t\t\treturn defaultValue\n\t\t\t}\n\t\t\treturn shouldTransform ? JSON.parse(value) : value\n\t\t},\n\t\tset(value) {\n\t\t\tcacheSession.setItem(key, shouldTransform ? JSON.stringify(value) : value)\n\t\t},\n\t\tremove() {\n\t\t\tcacheSession.removeItem(key)\n\t\t},\n\t}\n}\n"],"names":["_0n","_1n","_2n","u8a","a","hexes","v","i","bytesToHex","bytes","hex","numberToHexUnpadded","num","hexToNumber","hexToBytes","len","array","j","hexByte","byte","bytesToNumberBE","bytesToNumberLE","numberToBytesBE","n","numberToBytesLE","numberToVarBytesBE","ensureBytes","title","expectedLength","res","e","concatBytes","arrays","r","sum","pad","equalBytes","b1","b2","utf8ToBytes","str","bitLen","bitGet","pos","bitSet","value","bitMask","u8n","data","u8fr","arr","createHmacDrbg","hashLen","qByteLen","hmacFn","k","reset","h","b","reseed","seed","gen","out","sl","pred","validatorFns","val","object","validateObject","validators","optValidators","checkField","fieldName","type","isOptional","checkVal","_3n","_4n","_5n","_8n","mod","result","pow","power","modulo","invert","number","x","u","q","m","tonelliShanks","P","legendreC","Q","S","Z","p1div4","Fp","root","Q1div2","t2","ge","FpSqrt","c1","n2","nv","FIELD_FIELDS","validateField","field","initial","opts","map","FpPow","f","p","d","FpInvertBatch","nums","tmp","lastMultiplied","acc","inverted","nLength","nBitLength","_nBitLength","nByteLength","Field","ORDER","isLE","redef","BITS","BYTES","sqrtP","lhs","rhs","lst","c","hashToPrivateScalar","hash","groupOrder","minLen","wNAF","bits","constTimeNegate","condition","item","neg","W","windows","windowSize","elm","points","base","window","precomputes","mask","maxNumber","shiftBy","offset","wbits","offset1","offset2","cond1","cond2","precomputesMap","transform","comp","validateBasic","curve","validatePointOpts","ut.validateObject","endo","b2n","h2b","ut","DER","E","l","sBytes","s","rBytesLeft","sig","slice","shl","rhl","rl","weierstrassPoints","CURVE","toBytes","point","isCompressed","ut.concatBytes","fromBytes","tail","y","weierstrassEquation","x2","x3","isWithinCurveOrder","assertGE","normPrivateKeyToScalar","key","lengths","wrapPrivateKey","ut.bytesToHex","ut.bytesToNumberBE","mod.mod","pointPrecomputes","assertPrjPoint","other","Point","px","py","pz","is0","toInv","privateKey","left","right","X1","Y1","Z1","X2","Y2","Z2","U1","U2","b3","X3","Y3","Z3","t0","t1","t3","t4","t5","wnaf","I","k1neg","k1","k2neg","k2","k1p","k2p","scalar","fake","f1p","f2p","G","mul","iz","z","ax","ay","zz","cofactor","isTorsionFree","clearCofactor","_bits","validateOpts","weierstrass","curveDef","CURVE_ORDER","compressedLen","uncompressedLen","isValidFieldElement","modN","invN","mod.invert","cat","head","y2","isYOdd","numToNByteStr","ut.numberToBytesBE","isBiggerThanHalfOrder","HALF","normalizeS","slcNum","from","to","Signature","recovery","msgHash","rec","bits2int_modN","radj","prefix","R","ir","u1","u2","ut.hexToBytes","utils","rand","mod.hashToPrivateScalar","getPublicKey","isProbPub","getSharedSecret","privateA","publicB","bits2int","delta","ORDER_MASK","ut.bitMask","int2octets","prepSig","defaultSigOpts","randomBytes","lowS","prehash","ent","h1int","seedArgs","k2sig","kBytes","ik","normS","defaultVerOpts","sign","privKey","C","ut.createHmacDrbg","verify","signature","publicKey","sg","_sig","derError","error","is","_a","isBytes","abytes","aexists","instance","checkFinished","aoutput","min","u32","createView","copyBytes","setBigUint64","view","byteOffset","_32n","_u32_max","wh","wl","clean","BLOCK_SIZE","ZEROS16","ZEROS32","POLY","mul2","s0","s1","s2","s3","hiBit","swapLE","_toGHASHKey","carry","t","estimateWindow","GHASH","kView","k0","k3","doubles","items","d0","d1","d2","d3","o0","o1","o2","o3","w","bytePos","bitPos","bit","e0","e1","e2","e3","b32","blocks","o32","Polyval","ghKey","wrapConstructorWithKey","hashCons","hashC","msg","ghash","__defProp","__export","target","all","name","sm2_exports","EmptyArray","arrayToHex","arrayToUtf8","calculateSharedKey","comparePublicKeyHex","compressPublicKeyHex","doDecrypt","doEncrypt","doSignature","doVerifySignature","generateKeyPairHex","getHash","getPoint","getPublicKeyFromPrivateKey","getZ","hexToArray","initRNGPool","leftPad","precomputePublicKey","utf8ToHex","verifyPublicKey","ZERO","ONE","TWO","bigintToValue","bigint","maskString","utils.hexToNumber","ASN1Object","tlv","nHex","DERInteger","DEROctetString","__publicField","DERSequence","asn1Array","asn1Object","getLenOfL","start","headHex","getL","getStartOfV","encodeDer","derR","derS","encodeEnc","cipher","derX","derY","derHash","derCipher","decodeDer","input","vIndexR","lR","vR","nextStart","vIndexS","lS","vS","decodeEnc","extractSequence","input2","start2","vIndex","length","startS","startHash","startCipher","DEFAULT_PRNG_POOL_SIZE","prngPool","_syncCrypto","consumePool","prng","Hash","wrapConstructor","tmp2","BoolA","A","B","BoolB","BoolC","isLE2","rotl","P0","X","P1","SHA2","blockLen","outputLen","padOffset","buffer","take","dataView","oview","outLen","state","finished","destroyed","IV","SM3_W","SM3_M","T1","T2","SM3","D","F","H","small","T","SS1","SS2","TT1","TT2","sm3","HMAC","_key","buf","oHash","iHash","hmac","message","sm2Fp","sm2Curve","msgs","utils2.numberToBytesBE","privPad","utils2.bytesToHex","pubPad","xHex","utils2.hexToNumber","utils2.utf8ToBytes","hexStr","hexStrLength","wordLength","words","publicKey1","publicKey2","point1","point2","wPow2","utils3.hexToNumber","wPow2Sub1","hkdf","keylen","ct","ctShift","nextT","utils3.concatBytes","keypairA","ephemeralKeypairA","publicKeyB","ephemeralPublicKeyB","sharedKeyLength","isRecipient","idA","idB","RA","RB","PB","ZA","ZB","rA","dA","x1","x1_","tA","x2_","U","xU","utils3.numberToHexUnpadded","yU","C1C2C3","cipherMode","options","msgArr","publicKeyPoint","keypair","utils4.hexToNumber","utils4.numberToHexUnpadded","c3","utils4.concatBytes","xorCipherStream","c2","encryptData","output","asn1","privateKeyInteger","pointPool","der","userId","hashHex","signHex","publicKeyHex","decodeDerObj","PA","x1y1","gx","gy","entl","pubKey","utils4.bytesToHex","utf8ToArray","sm32","sm4_exports","decrypt","encrypt","sm4","DECRYPT","ROUND","BLOCK","Sbox","CK","byteSub","sms4Crypt","roundKey","x0","tmp0","tmp1","tmp3","sms4KeyExt","cryptFlag","mid","incrementCounter","counter","sm4Gcm","inArray","ivArray","aadArray","tagArray","deriveKeys","roundKey2","authKey","h2","j02","g","lenIv","createView2","setBigUint642","counter2","tagMask2","computeTag","aadLength","dataLength","lenBlock","tagMask","calculatedTag","tagMatch","outArray","restLen","blockOut","blockOutput","padding","mode","iv","associatedData","outputTag","tag","keyArray","inputArray","paddingCount","newArray","lastVector","useSm2","sm2","useSm3","useSm4Encrypt","useSm4Decrypt","useDayjs","date","format","dayjs","useDateFormat","useDateUnix","STATUS","_configStatus","status","useFetch","fetcher","url","config","resolve","reject","axios","err","usePage","pagination","refresh","process","currentPage","lastPage","totalSize","STATE_CODE_FAIL","STATE_CODE_INFO_NOT_COMPLETE","STATE_CODE_NOT_FOUND","STATE_CODE_NOT_ALLOWED","STATE_CODE_SUCCESS","useHiddenForm","csrfToken","method","form","useProcessStatus","ops","predefined","special","op","isString","isFunction","useProcessStatusSuccess","success","useFormFail","formLabel","useFormFormat","newForm","cloneDeep","formatter","obj","isBoolean","_b","checker","isObject","isUndefined","isArray","useLabelFromOptionsValue","option","useFindLabelsInValues","values","adapter","labels","recursiveSearch","node","child","useFindOptionByValue","foundOption","useFindLabelsFromPath","path","reduce","find","useFindParentLabels","findParentLabels","useFindParentValues","findParentValues","useFindPropertyRecursive","propertyKey","nestedKey","flatMapDeep","localCacheSession","localSession","useCache","sessionType","cacheSession","shouldTransform","defaultValue","isNull"],"mappings":"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,EAC3ClM,GAAWogB,GAAKN,GAAK5T,EAAK8P,CAAK,CAAC,CAC3C,CACE,OAAOhc,GAAW8f,GAAI9D,CAAK,CAAC,CAC9B,CAGA,IAAIwJ,GAAc,CAAE,EACpBjN,GAASiN,GAAa,CACpB,QAAS,IAAMC,GACf,QAAS,IAAMC,GACf,IAAK,IAAMC,EACb,CAAC,EAGD,IAAIC,EAAU,EACVC,GAAQ,GACRC,EAAQ,GACRC,GAAO,WAAW,KAAK,CACzB,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,GACA,IACA,GACA,IACA,GACA,IACA,GACA,EACA,GACA,IACA,IACA,IACA,GACA,IACA,EACA,IACA,IACA,GACA,GACA,GACA,GACA,IACA,EACA,IACA,IACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,GACA,IACA,IACA,GACA,IACA,IACA,EACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,GACA,EACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,GACA,GACA,GACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,GACA,IACA,GACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,GACA,GACA,IACA,GACA,EACA,GACA,IACA,IACA,IACA,EACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,GACA,EACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,GACA,IACA,IACA,IACA,GACA,IACA,IACA,GACA,GACA,GACA,IACA,IACA,GACA,GACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,GACA,IACA,IACA,IACA,GACA,IACA,GACA,GACA,IACA,GACA,GACA,GACA,IACA,IACA,IACA,GACA,GACA,IACA,IACA,IACA,GACA,EACA,IACA,IACA,IACA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","x_google_ignoreList":[0,1,2,3,4,5,6,7]}