import { __commonJS } from "./chunk-GFT2G5UO.js"; // node_modules/jsbn/index.js var require_jsbn = __commonJS({ "node_modules/jsbn/index.js"(exports, module) { (function() { var dbits; var canary = 244837814094590; var j_lm = (canary & 16777215) == 15715070; function BigInteger(a, b, c) { if (a != null) if ("number" == typeof a) this.fromNumber(a, b, c); else if (b == null && "string" != typeof a) this.fromString(a, 256); else this.fromString(a, b); } function nbi() { return new BigInteger(null); } function am1(i, x, w, j, c, n) { while (--n >= 0) { var v = x * this[i++] + w[j] + c; c = Math.floor(v / 67108864); w[j++] = v & 67108863; } return c; } function am2(i, x, w, j, c, n) { var xl = x & 32767, xh = x >> 15; while (--n >= 0) { var l = this[i] & 32767; var h = this[i++] >> 15; var m = xh * l + h * xl; l = xl * l + ((m & 32767) << 15) + w[j] + (c & 1073741823); c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30); w[j++] = l & 1073741823; } return c; } function am3(i, x, w, j, c, n) { var xl = x & 16383, xh = x >> 14; while (--n >= 0) { var l = this[i] & 16383; var h = this[i++] >> 14; var m = xh * l + h * xl; l = xl * l + ((m & 16383) << 14) + w[j] + c; c = (l >> 28) + (m >> 14) + xh * h; w[j++] = l & 268435455; } return c; } var inBrowser = typeof navigator !== "undefined"; if (inBrowser && j_lm && navigator.appName == "Microsoft Internet Explorer") { BigInteger.prototype.am = am2; dbits = 30; } else if (inBrowser && j_lm && navigator.appName != "Netscape") { BigInteger.prototype.am = am1; dbits = 26; } else { BigInteger.prototype.am = am3; dbits = 28; } BigInteger.prototype.DB = dbits; BigInteger.prototype.DM = (1 << dbits) - 1; BigInteger.prototype.DV = 1 << dbits; var BI_FP = 52; BigInteger.prototype.FV = Math.pow(2, BI_FP); BigInteger.prototype.F1 = BI_FP - dbits; BigInteger.prototype.F2 = 2 * dbits - BI_FP; var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"; var BI_RC = new Array(); var rr, vv; rr = "0".charCodeAt(0); for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv; rr = "a".charCodeAt(0); for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv; rr = "A".charCodeAt(0); for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv; function int2char(n) { return BI_RM.charAt(n); } function intAt(s, i) { var c = BI_RC[s.charCodeAt(i)]; return c == null ? -1 : c; } function bnpCopyTo(r) { for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]; r.t = this.t; r.s = this.s; } function bnpFromInt(x) { this.t = 1; this.s = x < 0 ? -1 : 0; if (x > 0) this[0] = x; else if (x < -1) this[0] = x + this.DV; else this.t = 0; } function nbv(i) { var r = nbi(); r.fromInt(i); return r; } function bnpFromString(s, b) { var k; if (b == 16) k = 4; else if (b == 8) k = 3; else if (b == 256) k = 8; else if (b == 2) k = 1; else if (b == 32) k = 5; else if (b == 4) k = 2; else { this.fromRadix(s, b); return; } this.t = 0; this.s = 0; var i = s.length, mi = false, sh = 0; while (--i >= 0) { var x = k == 8 ? s[i] & 255 : intAt(s, i); if (x < 0) { if (s.charAt(i) == "-") mi = true; continue; } mi = false; if (sh == 0) this[this.t++] = x; else if (sh + k > this.DB) { this[this.t - 1] |= (x & (1 << this.DB - sh) - 1) << sh; this[this.t++] = x >> this.DB - sh; } else this[this.t - 1] |= x << sh; sh += k; if (sh >= this.DB) sh -= this.DB; } if (k == 8 && (s[0] & 128) != 0) { this.s = -1; if (sh > 0) this[this.t - 1] |= (1 << this.DB - sh) - 1 << sh; } this.clamp(); if (mi) BigInteger.ZERO.subTo(this, this); } function bnpClamp() { var c = this.s & this.DM; while (this.t > 0 && this[this.t - 1] == c) --this.t; } function bnToString(b) { if (this.s < 0) return "-" + this.negate().toString(b); var k; if (b == 16) k = 4; else if (b == 8) k = 3; else if (b == 2) k = 1; else if (b == 32) k = 5; else if (b == 4) k = 2; else return this.toRadix(b); var km = (1 << k) - 1, d, m = false, r = "", i = this.t; var p = this.DB - i * this.DB % k; if (i-- > 0) { if (p < this.DB && (d = this[i] >> p) > 0) { m = true; r = int2char(d); } while (i >= 0) { if (p < k) { d = (this[i] & (1 << p) - 1) << k - p; d |= this[--i] >> (p += this.DB - k); } else { d = this[i] >> (p -= k) & km; if (p <= 0) { p += this.DB; --i; } } if (d > 0) m = true; if (m) r += int2char(d); } } return m ? r : "0"; } function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this, r); return r; } function bnAbs() { return this.s < 0 ? this.negate() : this; } function bnCompareTo(a) { var r = this.s - a.s; if (r != 0) return r; var i = this.t; r = i - a.t; if (r != 0) return this.s < 0 ? -r : r; while (--i >= 0) if ((r = this[i] - a[i]) != 0) return r; return 0; } function nbits(x) { var r = 1, t2; if ((t2 = x >>> 16) != 0) { x = t2; r += 16; } if ((t2 = x >> 8) != 0) { x = t2; r += 8; } if ((t2 = x >> 4) != 0) { x = t2; r += 4; } if ((t2 = x >> 2) != 0) { x = t2; r += 2; } if ((t2 = x >> 1) != 0) { x = t2; r += 1; } return r; } function bnBitLength() { if (this.t <= 0) return 0; return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ this.s & this.DM); } function bnpDLShiftTo(n, r) { var i; for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]; for (i = n - 1; i >= 0; --i) r[i] = 0; r.t = this.t + n; r.s = this.s; } function bnpDRShiftTo(n, r) { for (var i = n; i < this.t; ++i) r[i - n] = this[i]; r.t = Math.max(this.t - n, 0); r.s = this.s; } function bnpLShiftTo(n, r) { var bs = n % this.DB; var cbs = this.DB - bs; var bm = (1 << cbs) - 1; var ds = Math.floor(n / this.DB), c = this.s << bs & this.DM, i; for (i = this.t - 1; i >= 0; --i) { r[i + ds + 1] = this[i] >> cbs | c; c = (this[i] & bm) << bs; } for (i = ds - 1; i >= 0; --i) r[i] = 0; r[ds] = c; r.t = this.t + ds + 1; r.s = this.s; r.clamp(); } function bnpRShiftTo(n, r) { r.s = this.s; var ds = Math.floor(n / this.DB); if (ds >= this.t) { r.t = 0; return; } var bs = n % this.DB; var cbs = this.DB - bs; var bm = (1 << bs) - 1; r[0] = this[ds] >> bs; for (var i = ds + 1; i < this.t; ++i) { r[i - ds - 1] |= (this[i] & bm) << cbs; r[i - ds] = this[i] >> bs; } if (bs > 0) r[this.t - ds - 1] |= (this.s & bm) << cbs; r.t = this.t - ds; r.clamp(); } function bnpSubTo(a, r) { var i = 0, c = 0, m = Math.min(a.t, this.t); while (i < m) { c += this[i] - a[i]; r[i++] = c & this.DM; c >>= this.DB; } if (a.t < this.t) { c -= a.s; while (i < this.t) { c += this[i]; r[i++] = c & this.DM; c >>= this.DB; } c += this.s; } else { c += this.s; while (i < a.t) { c -= a[i]; r[i++] = c & this.DM; c >>= this.DB; } c -= a.s; } r.s = c < 0 ? -1 : 0; if (c < -1) r[i++] = this.DV + c; else if (c > 0) r[i++] = c; r.t = i; r.clamp(); } function bnpMultiplyTo(a, r) { var x = this.abs(), y = a.abs(); var i = x.t; r.t = i + y.t; while (--i >= 0) r[i] = 0; for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t); r.s = 0; r.clamp(); if (this.s != a.s) BigInteger.ZERO.subTo(r, r); } function bnpSquareTo(r) { var x = this.abs(); var i = r.t = 2 * x.t; while (--i >= 0) r[i] = 0; for (i = 0; i < x.t - 1; ++i) { var c = x.am(i, x[i], r, 2 * i, 0, 1); if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) { r[i + x.t] -= x.DV; r[i + x.t + 1] = 1; } } if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1); r.s = 0; r.clamp(); } function bnpDivRemTo(m, q, r) { var pm = m.abs(); if (pm.t <= 0) return; var pt = this.abs(); if (pt.t < pm.t) { if (q != null) q.fromInt(0); if (r != null) this.copyTo(r); return; } if (r == null) r = nbi(); var y = nbi(), ts = this.s, ms = m.s; var nsh = this.DB - nbits(pm[pm.t - 1]); if (nsh > 0) { pm.lShiftTo(nsh, y); pt.lShiftTo(nsh, r); } else { pm.copyTo(y); pt.copyTo(r); } var ys = y.t; var y0 = y[ys - 1]; if (y0 == 0) return; var yt = y0 * (1 << this.F1) + (ys > 1 ? y[ys - 2] >> this.F2 : 0); var d1 = this.FV / yt, d2 = (1 << this.F1) / yt, e = 1 << this.F2; var i = r.t, j = i - ys, t2 = q == null ? nbi() : q; y.dlShiftTo(j, t2); if (r.compareTo(t2) >= 0) { r[r.t++] = 1; r.subTo(t2, r); } BigInteger.ONE.dlShiftTo(ys, t2); t2.subTo(y, y); while (y.t < ys) y[y.t++] = 0; while (--j >= 0) { var qd = r[--i] == y0 ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2); if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { y.dlShiftTo(j, t2); r.subTo(t2, r); while (r[i] < --qd) r.subTo(t2, r); } } if (q != null) { r.drShiftTo(ys, q); if (ts != ms) BigInteger.ZERO.subTo(q, q); } r.t = ys; r.clamp(); if (nsh > 0) r.rShiftTo(nsh, r); if (ts < 0) BigInteger.ZERO.subTo(r, r); } function bnMod(a) { var r = nbi(); this.abs().divRemTo(a, null, r); if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r); return r; } function Classic(m) { this.m = m; } function cConvert(x) { if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m); else return x; } function cRevert(x) { return x; } function cReduce(x) { x.divRemTo(this.m, null, x); } function cMulTo(x, y, r) { x.multiplyTo(y, r); this.reduce(r); } function cSqrTo(x, r) { x.squareTo(r); this.reduce(r); } Classic.prototype.convert = cConvert; Classic.prototype.revert = cRevert; Classic.prototype.reduce = cReduce; Classic.prototype.mulTo = cMulTo; Classic.prototype.sqrTo = cSqrTo; function bnpInvDigit() { if (this.t < 1) return 0; var x = this[0]; if ((x & 1) == 0) return 0; var y = x & 3; y = y * (2 - (x & 15) * y) & 15; y = y * (2 - (x & 255) * y) & 255; y = y * (2 - ((x & 65535) * y & 65535)) & 65535; y = y * (2 - x * y % this.DV) % this.DV; return y > 0 ? this.DV - y : -y; } function Montgomery(m) { this.m = m; this.mp = m.invDigit(); this.mpl = this.mp & 32767; this.mph = this.mp >> 15; this.um = (1 << m.DB - 15) - 1; this.mt2 = 2 * m.t; } function montConvert(x) { var r = nbi(); x.abs().dlShiftTo(this.m.t, r); r.divRemTo(this.m, null, r); if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r); return r; } function montRevert(x) { var r = nbi(); x.copyTo(r); this.reduce(r); return r; } function montReduce(x) { while (x.t <= this.mt2) x[x.t++] = 0; for (var i = 0; i < this.m.t; ++i) { var j = x[i] & 32767; var u0 = j * this.mpl + ((j * this.mph + (x[i] >> 15) * this.mpl & this.um) << 15) & x.DM; j = i + this.m.t; x[j] += this.m.am(0, u0, x, i, 0, this.m.t); while (x[j] >= x.DV) { x[j] -= x.DV; x[++j]++; } } x.clamp(); x.drShiftTo(this.m.t, x); if (x.compareTo(this.m) >= 0) x.subTo(this.m, x); } function montSqrTo(x, r) { x.squareTo(r); this.reduce(r); } function montMulTo(x, y, r) { x.multiplyTo(y, r); this.reduce(r); } Montgomery.prototype.convert = montConvert; Montgomery.prototype.revert = montRevert; Montgomery.prototype.reduce = montReduce; Montgomery.prototype.mulTo = montMulTo; Montgomery.prototype.sqrTo = montSqrTo; function bnpIsEven() { return (this.t > 0 ? this[0] & 1 : this.s) == 0; } function bnpExp(e, z2) { if (e > 4294967295 || e < 1) return BigInteger.ONE; var r = nbi(), r2 = nbi(), g = z2.convert(this), i = nbits(e) - 1; g.copyTo(r); while (--i >= 0) { z2.sqrTo(r, r2); if ((e & 1 << i) > 0) z2.mulTo(r2, g, r); else { var t2 = r; r = r2; r2 = t2; } } return z2.revert(r); } function bnModPowInt(e, m) { var z2; if (e < 256 || m.isEven()) z2 = new Classic(m); else z2 = new Montgomery(m); return this.exp(e, z2); } BigInteger.prototype.copyTo = bnpCopyTo; BigInteger.prototype.fromInt = bnpFromInt; BigInteger.prototype.fromString = bnpFromString; BigInteger.prototype.clamp = bnpClamp; BigInteger.prototype.dlShiftTo = bnpDLShiftTo; BigInteger.prototype.drShiftTo = bnpDRShiftTo; BigInteger.prototype.lShiftTo = bnpLShiftTo; BigInteger.prototype.rShiftTo = bnpRShiftTo; BigInteger.prototype.subTo = bnpSubTo; BigInteger.prototype.multiplyTo = bnpMultiplyTo; BigInteger.prototype.squareTo = bnpSquareTo; BigInteger.prototype.divRemTo = bnpDivRemTo; BigInteger.prototype.invDigit = bnpInvDigit; BigInteger.prototype.isEven = bnpIsEven; BigInteger.prototype.exp = bnpExp; BigInteger.prototype.toString = bnToString; BigInteger.prototype.negate = bnNegate; BigInteger.prototype.abs = bnAbs; BigInteger.prototype.compareTo = bnCompareTo; BigInteger.prototype.bitLength = bnBitLength; BigInteger.prototype.mod = bnMod; BigInteger.prototype.modPowInt = bnModPowInt; BigInteger.ZERO = nbv(0); BigInteger.ONE = nbv(1); function bnClone() { var r = nbi(); this.copyTo(r); return r; } function bnIntValue() { if (this.s < 0) { if (this.t == 1) return this[0] - this.DV; else if (this.t == 0) return -1; } else if (this.t == 1) return this[0]; else if (this.t == 0) return 0; return (this[1] & (1 << 32 - this.DB) - 1) << this.DB | this[0]; } function bnByteValue() { return this.t == 0 ? this.s : this[0] << 24 >> 24; } function bnShortValue() { return this.t == 0 ? this.s : this[0] << 16 >> 16; } function bnpChunkSize(r) { return Math.floor(Math.LN2 * this.DB / Math.log(r)); } function bnSigNum() { if (this.s < 0) return -1; else if (this.t <= 0 || this.t == 1 && this[0] <= 0) return 0; else return 1; } function bnpToRadix(b) { if (b == null) b = 10; if (this.signum() == 0 || b < 2 || b > 36) return "0"; var cs = this.chunkSize(b); var a = Math.pow(b, cs); var d = nbv(a), y = nbi(), z2 = nbi(), r = ""; this.divRemTo(d, y, z2); while (y.signum() > 0) { r = (a + z2.intValue()).toString(b).substr(1) + r; y.divRemTo(d, y, z2); } return z2.intValue().toString(b) + r; } function bnpFromRadix(s, b) { this.fromInt(0); if (b == null) b = 10; var cs = this.chunkSize(b); var d = Math.pow(b, cs), mi = false, j = 0, w = 0; for (var i = 0; i < s.length; ++i) { var x = intAt(s, i); if (x < 0) { if (s.charAt(i) == "-" && this.signum() == 0) mi = true; continue; } w = b * w + x; if (++j >= cs) { this.dMultiply(d); this.dAddOffset(w, 0); j = 0; w = 0; } } if (j > 0) { this.dMultiply(Math.pow(b, j)); this.dAddOffset(w, 0); } if (mi) BigInteger.ZERO.subTo(this, this); } function bnpFromNumber(a, b, c) { if ("number" == typeof b) { if (a < 2) this.fromInt(1); else { this.fromNumber(a, c); if (!this.testBit(a - 1)) this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, this); if (this.isEven()) this.dAddOffset(1, 0); while (!this.isProbablePrime(b)) { this.dAddOffset(2, 0); if (this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a - 1), this); } } } else { var x = new Array(), t2 = a & 7; x.length = (a >> 3) + 1; b.nextBytes(x); if (t2 > 0) x[0] &= (1 << t2) - 1; else x[0] = 0; this.fromString(x, 256); } } function bnToByteArray() { var i = this.t, r = new Array(); r[0] = this.s; var p = this.DB - i * this.DB % 8, d, k = 0; if (i-- > 0) { if (p < this.DB && (d = this[i] >> p) != (this.s & this.DM) >> p) r[k++] = d | this.s << this.DB - p; while (i >= 0) { if (p < 8) { d = (this[i] & (1 << p) - 1) << 8 - p; d |= this[--i] >> (p += this.DB - 8); } else { d = this[i] >> (p -= 8) & 255; if (p <= 0) { p += this.DB; --i; } } if ((d & 128) != 0) d |= -256; if (k == 0 && (this.s & 128) != (d & 128)) ++k; if (k > 0 || d != this.s) r[k++] = d; } } return r; } function bnEquals(a) { return this.compareTo(a) == 0; } function bnMin(a) { return this.compareTo(a) < 0 ? this : a; } function bnMax(a) { return this.compareTo(a) > 0 ? this : a; } function bnpBitwiseTo(a, op, r) { var i, f, m = Math.min(a.t, this.t); for (i = 0; i < m; ++i) r[i] = op(this[i], a[i]); if (a.t < this.t) { f = a.s & this.DM; for (i = m; i < this.t; ++i) r[i] = op(this[i], f); r.t = this.t; } else { f = this.s & this.DM; for (i = m; i < a.t; ++i) r[i] = op(f, a[i]); r.t = a.t; } r.s = op(this.s, a.s); r.clamp(); } function op_and(x, y) { return x & y; } function bnAnd(a) { var r = nbi(); this.bitwiseTo(a, op_and, r); return r; } function op_or(x, y) { return x | y; } function bnOr(a) { var r = nbi(); this.bitwiseTo(a, op_or, r); return r; } function op_xor(x, y) { return x ^ y; } function bnXor(a) { var r = nbi(); this.bitwiseTo(a, op_xor, r); return r; } function op_andnot(x, y) { return x & ~y; } function bnAndNot(a) { var r = nbi(); this.bitwiseTo(a, op_andnot, r); return r; } function bnNot() { var r = nbi(); for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]; r.t = this.t; r.s = ~this.s; return r; } function bnShiftLeft(n) { var r = nbi(); if (n < 0) this.rShiftTo(-n, r); else this.lShiftTo(n, r); return r; } function bnShiftRight(n) { var r = nbi(); if (n < 0) this.lShiftTo(-n, r); else this.rShiftTo(n, r); return r; } function lbit(x) { if (x == 0) return -1; var r = 0; if ((x & 65535) == 0) { x >>= 16; r += 16; } if ((x & 255) == 0) { x >>= 8; r += 8; } if ((x & 15) == 0) { x >>= 4; r += 4; } if ((x & 3) == 0) { x >>= 2; r += 2; } if ((x & 1) == 0) ++r; return r; } function bnGetLowestSetBit() { for (var i = 0; i < this.t; ++i) if (this[i] != 0) return i * this.DB + lbit(this[i]); if (this.s < 0) return this.t * this.DB; return -1; } function cbit(x) { var r = 0; while (x != 0) { x &= x - 1; ++r; } return r; } function bnBitCount() { var r = 0, x = this.s & this.DM; for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x); return r; } function bnTestBit(n) { var j = Math.floor(n / this.DB); if (j >= this.t) return this.s != 0; return (this[j] & 1 << n % this.DB) != 0; } function bnpChangeBit(n, op) { var r = BigInteger.ONE.shiftLeft(n); this.bitwiseTo(r, op, r); return r; } function bnSetBit(n) { return this.changeBit(n, op_or); } function bnClearBit(n) { return this.changeBit(n, op_andnot); } function bnFlipBit(n) { return this.changeBit(n, op_xor); } function bnpAddTo(a, r) { var i = 0, c = 0, m = Math.min(a.t, this.t); while (i < m) { c += this[i] + a[i]; r[i++] = c & this.DM; c >>= this.DB; } if (a.t < this.t) { c += a.s; while (i < this.t) { c += this[i]; r[i++] = c & this.DM; c >>= this.DB; } c += this.s; } else { c += this.s; while (i < a.t) { c += a[i]; r[i++] = c & this.DM; c >>= this.DB; } c += a.s; } r.s = c < 0 ? -1 : 0; if (c > 0) r[i++] = c; else if (c < -1) r[i++] = this.DV + c; r.t = i; r.clamp(); } function bnAdd(a) { var r = nbi(); this.addTo(a, r); return r; } function bnSubtract(a) { var r = nbi(); this.subTo(a, r); return r; } function bnMultiply(a) { var r = nbi(); this.multiplyTo(a, r); return r; } function bnSquare() { var r = nbi(); this.squareTo(r); return r; } function bnDivide(a) { var r = nbi(); this.divRemTo(a, r, null); return r; } function bnRemainder(a) { var r = nbi(); this.divRemTo(a, null, r); return r; } function bnDivideAndRemainder(a) { var q = nbi(), r = nbi(); this.divRemTo(a, q, r); return new Array(q, r); } function bnpDMultiply(n) { this[this.t] = this.am(0, n - 1, this, 0, 0, this.t); ++this.t; this.clamp(); } function bnpDAddOffset(n, w) { if (n == 0) return; while (this.t <= w) this[this.t++] = 0; this[w] += n; while (this[w] >= this.DV) { this[w] -= this.DV; if (++w >= this.t) this[this.t++] = 0; ++this[w]; } } function NullExp() { } function nNop(x) { return x; } function nMulTo(x, y, r) { x.multiplyTo(y, r); } function nSqrTo(x, r) { x.squareTo(r); } NullExp.prototype.convert = nNop; NullExp.prototype.revert = nNop; NullExp.prototype.mulTo = nMulTo; NullExp.prototype.sqrTo = nSqrTo; function bnPow(e) { return this.exp(e, new NullExp()); } function bnpMultiplyLowerTo(a, n, r) { var i = Math.min(this.t + a.t, n); r.s = 0; r.t = i; while (i > 0) r[--i] = 0; var j; for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t); for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i); r.clamp(); } function bnpMultiplyUpperTo(a, n, r) { --n; var i = r.t = this.t + a.t - n; r.s = 0; while (--i >= 0) r[i] = 0; for (i = Math.max(n - this.t, 0); i < a.t; ++i) r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n); r.clamp(); r.drShiftTo(1, r); } function Barrett(m) { this.r2 = nbi(); this.q3 = nbi(); BigInteger.ONE.dlShiftTo(2 * m.t, this.r2); this.mu = this.r2.divide(m); this.m = m; } function barrettConvert(x) { if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m); else if (x.compareTo(this.m) < 0) return x; else { var r = nbi(); x.copyTo(r); this.reduce(r); return r; } } function barrettRevert(x) { return x; } function barrettReduce(x) { x.drShiftTo(this.m.t - 1, this.r2); if (x.t > this.m.t + 1) { x.t = this.m.t + 1; x.clamp(); } this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3); this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2); while (x.compareTo(this.r2) < 0) x.dAddOffset(1, this.m.t + 1); x.subTo(this.r2, x); while (x.compareTo(this.m) >= 0) x.subTo(this.m, x); } function barrettSqrTo(x, r) { x.squareTo(r); this.reduce(r); } function barrettMulTo(x, y, r) { x.multiplyTo(y, r); this.reduce(r); } Barrett.prototype.convert = barrettConvert; Barrett.prototype.revert = barrettRevert; Barrett.prototype.reduce = barrettReduce; Barrett.prototype.mulTo = barrettMulTo; Barrett.prototype.sqrTo = barrettSqrTo; function bnModPow(e, m) { var i = e.bitLength(), k, r = nbv(1), z2; if (i <= 0) return r; else if (i < 18) k = 1; else if (i < 48) k = 3; else if (i < 144) k = 4; else if (i < 768) k = 5; else k = 6; if (i < 8) z2 = new Classic(m); else if (m.isEven()) z2 = new Barrett(m); else z2 = new Montgomery(m); var g = new Array(), n = 3, k1 = k - 1, km = (1 << k) - 1; g[1] = z2.convert(this); if (k > 1) { var g2 = nbi(); z2.sqrTo(g[1], g2); while (n <= km) { g[n] = nbi(); z2.mulTo(g2, g[n - 2], g[n]); n += 2; } } var j = e.t - 1, w, is1 = true, r2 = nbi(), t2; i = nbits(e[j]) - 1; while (j >= 0) { if (i >= k1) w = e[j] >> i - k1 & km; else { w = (e[j] & (1 << i + 1) - 1) << k1 - i; if (j > 0) w |= e[j - 1] >> this.DB + i - k1; } n = k; while ((w & 1) == 0) { w >>= 1; --n; } if ((i -= n) < 0) { i += this.DB; --j; } if (is1) { g[w].copyTo(r); is1 = false; } else { while (n > 1) { z2.sqrTo(r, r2); z2.sqrTo(r2, r); n -= 2; } if (n > 0) z2.sqrTo(r, r2); else { t2 = r; r = r2; r2 = t2; } z2.mulTo(r2, g[w], r); } while (j >= 0 && (e[j] & 1 << i) == 0) { z2.sqrTo(r, r2); t2 = r; r = r2; r2 = t2; if (--i < 0) { i = this.DB - 1; --j; } } } return z2.revert(r); } function bnGCD(a) { var x = this.s < 0 ? this.negate() : this.clone(); var y = a.s < 0 ? a.negate() : a.clone(); if (x.compareTo(y) < 0) { var t2 = x; x = y; y = t2; } var i = x.getLowestSetBit(), g = y.getLowestSetBit(); if (g < 0) return x; if (i < g) g = i; if (g > 0) { x.rShiftTo(g, x); y.rShiftTo(g, y); } while (x.signum() > 0) { if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x); if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y); if (x.compareTo(y) >= 0) { x.subTo(y, x); x.rShiftTo(1, x); } else { y.subTo(x, y); y.rShiftTo(1, y); } } if (g > 0) y.lShiftTo(g, y); return y; } function bnpModInt(n) { if (n <= 0) return 0; var d = this.DV % n, r = this.s < 0 ? n - 1 : 0; if (this.t > 0) if (d == 0) r = this[0] % n; else for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n; return r; } function bnModInverse(m) { var ac = m.isEven(); if (this.isEven() && ac || m.signum() == 0) return BigInteger.ZERO; var u = m.clone(), v = this.clone(); var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1); while (u.signum() != 0) { while (u.isEven()) { u.rShiftTo(1, u); if (ac) { if (!a.isEven() || !b.isEven()) { a.addTo(this, a); b.subTo(m, b); } a.rShiftTo(1, a); } else if (!b.isEven()) b.subTo(m, b); b.rShiftTo(1, b); } while (v.isEven()) { v.rShiftTo(1, v); if (ac) { if (!c.isEven() || !d.isEven()) { c.addTo(this, c); d.subTo(m, d); } c.rShiftTo(1, c); } else if (!d.isEven()) d.subTo(m, d); d.rShiftTo(1, d); } if (u.compareTo(v) >= 0) { u.subTo(v, u); if (ac) a.subTo(c, a); b.subTo(d, b); } else { v.subTo(u, v); if (ac) c.subTo(a, c); d.subTo(b, d); } } if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO; if (d.compareTo(m) >= 0) return d.subtract(m); if (d.signum() < 0) d.addTo(m, d); else return d; if (d.signum() < 0) return d.add(m); else return d; } var lowprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]; var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]; function bnIsProbablePrime(t2) { var i, x = this.abs(); if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) { for (i = 0; i < lowprimes.length; ++i) if (x[0] == lowprimes[i]) return true; return false; } if (x.isEven()) return false; i = 1; while (i < lowprimes.length) { var m = lowprimes[i], j = i + 1; while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]; m = x.modInt(m); while (i < j) if (m % lowprimes[i++] == 0) return false; } return x.millerRabin(t2); } function bnpMillerRabin(t2) { var n1 = this.subtract(BigInteger.ONE); var k = n1.getLowestSetBit(); if (k <= 0) return false; var r = n1.shiftRight(k); t2 = t2 + 1 >> 1; if (t2 > lowprimes.length) t2 = lowprimes.length; var a = nbi(); for (var i = 0; i < t2; ++i) { a.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]); var y = a.modPow(r, this); if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) { var j = 1; while (j++ < k && y.compareTo(n1) != 0) { y = y.modPowInt(2, this); if (y.compareTo(BigInteger.ONE) == 0) return false; } if (y.compareTo(n1) != 0) return false; } } return true; } BigInteger.prototype.chunkSize = bnpChunkSize; BigInteger.prototype.toRadix = bnpToRadix; BigInteger.prototype.fromRadix = bnpFromRadix; BigInteger.prototype.fromNumber = bnpFromNumber; BigInteger.prototype.bitwiseTo = bnpBitwiseTo; BigInteger.prototype.changeBit = bnpChangeBit; BigInteger.prototype.addTo = bnpAddTo; BigInteger.prototype.dMultiply = bnpDMultiply; BigInteger.prototype.dAddOffset = bnpDAddOffset; BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo; BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo; BigInteger.prototype.modInt = bnpModInt; BigInteger.prototype.millerRabin = bnpMillerRabin; BigInteger.prototype.clone = bnClone; BigInteger.prototype.intValue = bnIntValue; BigInteger.prototype.byteValue = bnByteValue; BigInteger.prototype.shortValue = bnShortValue; BigInteger.prototype.signum = bnSigNum; BigInteger.prototype.toByteArray = bnToByteArray; BigInteger.prototype.equals = bnEquals; BigInteger.prototype.min = bnMin; BigInteger.prototype.max = bnMax; BigInteger.prototype.and = bnAnd; BigInteger.prototype.or = bnOr; BigInteger.prototype.xor = bnXor; BigInteger.prototype.andNot = bnAndNot; BigInteger.prototype.not = bnNot; BigInteger.prototype.shiftLeft = bnShiftLeft; BigInteger.prototype.shiftRight = bnShiftRight; BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit; BigInteger.prototype.bitCount = bnBitCount; BigInteger.prototype.testBit = bnTestBit; BigInteger.prototype.setBit = bnSetBit; BigInteger.prototype.clearBit = bnClearBit; BigInteger.prototype.flipBit = bnFlipBit; BigInteger.prototype.add = bnAdd; BigInteger.prototype.subtract = bnSubtract; BigInteger.prototype.multiply = bnMultiply; BigInteger.prototype.divide = bnDivide; BigInteger.prototype.remainder = bnRemainder; BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder; BigInteger.prototype.modPow = bnModPow; BigInteger.prototype.modInverse = bnModInverse; BigInteger.prototype.pow = bnPow; BigInteger.prototype.gcd = bnGCD; BigInteger.prototype.isProbablePrime = bnIsProbablePrime; BigInteger.prototype.square = bnSquare; BigInteger.prototype.Barrett = Barrett; var rng_state; var rng_pool; var rng_pptr; function rng_seed_int(x) { rng_pool[rng_pptr++] ^= x & 255; rng_pool[rng_pptr++] ^= x >> 8 & 255; rng_pool[rng_pptr++] ^= x >> 16 & 255; rng_pool[rng_pptr++] ^= x >> 24 & 255; if (rng_pptr >= rng_psize) rng_pptr -= rng_psize; } function rng_seed_time() { rng_seed_int((/* @__PURE__ */ new Date()).getTime()); } if (rng_pool == null) { rng_pool = new Array(); rng_pptr = 0; var t; if (typeof window !== "undefined" && window.crypto) { if (window.crypto.getRandomValues) { var ua = new Uint8Array(32); window.crypto.getRandomValues(ua); for (t = 0; t < 32; ++t) rng_pool[rng_pptr++] = ua[t]; } else if (navigator.appName == "Netscape" && navigator.appVersion < "5") { var z = window.crypto.random(32); for (t = 0; t < z.length; ++t) rng_pool[rng_pptr++] = z.charCodeAt(t) & 255; } } while (rng_pptr < rng_psize) { t = Math.floor(65536 * Math.random()); rng_pool[rng_pptr++] = t >>> 8; rng_pool[rng_pptr++] = t & 255; } rng_pptr = 0; rng_seed_time(); } function rng_get_byte() { if (rng_state == null) { rng_seed_time(); rng_state = prng_newstate(); rng_state.init(rng_pool); for (rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) rng_pool[rng_pptr] = 0; rng_pptr = 0; } return rng_state.next(); } function rng_get_bytes(ba) { var i; for (i = 0; i < ba.length; ++i) ba[i] = rng_get_byte(); } function SecureRandom() { } SecureRandom.prototype.nextBytes = rng_get_bytes; function Arcfour() { this.i = 0; this.j = 0; this.S = new Array(); } function ARC4init(key) { var i, j, t2; for (i = 0; i < 256; ++i) this.S[i] = i; j = 0; for (i = 0; i < 256; ++i) { j = j + this.S[i] + key[i % key.length] & 255; t2 = this.S[i]; this.S[i] = this.S[j]; this.S[j] = t2; } this.i = 0; this.j = 0; } function ARC4next() { var t2; this.i = this.i + 1 & 255; this.j = this.j + this.S[this.i] & 255; t2 = this.S[this.i]; this.S[this.i] = this.S[this.j]; this.S[this.j] = t2; return this.S[t2 + this.S[this.i] & 255]; } Arcfour.prototype.init = ARC4init; Arcfour.prototype.next = ARC4next; function prng_newstate() { return new Arcfour(); } var rng_psize = 256; if (typeof exports !== "undefined") { exports = module.exports = { default: BigInteger, BigInteger, SecureRandom }; } else { this.jsbn = { BigInteger, SecureRandom }; } }).call(exports); } }); // node_modules/sm-crypto/src/sm2/asn1.js var require_asn1 = __commonJS({ "node_modules/sm-crypto/src/sm2/asn1.js"(exports, module) { var { BigInteger } = require_jsbn(); function bigintToValue(bigint) { let h = bigint.toString(16); if (h[0] !== "-") { if (h.length % 2 === 1) h = "0" + h; else if (!h.match(/^[0-7]/)) h = "00" + h; } else { h = h.substr(1); let len = h.length; if (len % 2 === 1) len += 1; else if (!h.match(/^[0-7]/)) len += 2; let mask = ""; for (let i = 0; i < len; i++) mask += "f"; mask = new BigInteger(mask, 16); h = mask.xor(bigint).add(BigInteger.ONE); h = h.toString(16).replace(/^-/, ""); } return h; } var ASN1Object = class { constructor() { this.tlv = null; this.t = "00"; this.l = "00"; this.v = ""; } /** * 获取 der 编码比特流16进制串 */ getEncodedHex() { if (!this.tlv) { this.v = this.getValue(); this.l = this.getLength(); this.tlv = this.t + this.l + this.v; } return this.tlv; } getLength() { const n = this.v.length / 2; let nHex = n.toString(16); if (nHex.length % 2 === 1) nHex = "0" + nHex; if (n < 128) { return nHex; } else { const head = 128 + nHex.length / 2; return head.toString(16) + nHex; } } getValue() { return ""; } }; var DERInteger = class extends ASN1Object { constructor(bigint) { super(); this.t = "02"; if (bigint) this.v = bigintToValue(bigint); } getValue() { return this.v; } }; var DERSequence = class extends ASN1Object { constructor(asn1Array) { super(); this.t = "30"; this.asn1Array = asn1Array; } getValue() { this.v = this.asn1Array.map((asn1Object) => asn1Object.getEncodedHex()).join(""); return this.v; } }; function getLenOfL(str, start) { if (+str[start + 2] < 8) return 1; return +str.substr(start + 2, 2) & 127 + 1; } function getL(str, start) { const len = getLenOfL(str, start); const l = str.substr(start + 2, len * 2); if (!l) return -1; const bigint = +l[0] < 8 ? new BigInteger(l, 16) : new BigInteger(l.substr(2), 16); return bigint.intValue(); } function getStartOfV(str, start) { const len = getLenOfL(str, start); return start + (len + 1) * 2; } module.exports = { /** * ASN.1 der 编码,针对 sm2 签名 */ encodeDer(r, s) { const derR = new DERInteger(r); const derS = new DERInteger(s); const derSeq = new DERSequence([derR, derS]); return derSeq.getEncodedHex(); }, /** * 解析 ASN.1 der,针对 sm2 验签 */ decodeDer(input) { const start = getStartOfV(input, 0); const vIndexR = getStartOfV(input, start); const lR = getL(input, start); const vR = input.substr(vIndexR, lR * 2); const nextStart = vIndexR + vR.length; const vIndexS = getStartOfV(input, nextStart); const lS = getL(input, nextStart); const vS = input.substr(vIndexS, lS * 2); const r = new BigInteger(vR, 16); const s = new BigInteger(vS, 16); return { r, s }; } }; } }); // node_modules/sm-crypto/src/sm2/ec.js var require_ec = __commonJS({ "node_modules/sm-crypto/src/sm2/ec.js"(exports, module) { var { BigInteger } = require_jsbn(); var TWO = new BigInteger("2"); var THREE = new BigInteger("3"); var ECFieldElementFp = class _ECFieldElementFp { constructor(q, x) { this.x = x; this.q = q; } /** * 判断相等 */ equals(other) { if (other === this) return true; return this.q.equals(other.q) && this.x.equals(other.x); } /** * 返回具体数值 */ toBigInteger() { return this.x; } /** * 取反 */ negate() { return new _ECFieldElementFp(this.q, this.x.negate().mod(this.q)); } /** * 相加 */ add(b) { return new _ECFieldElementFp(this.q, this.x.add(b.toBigInteger()).mod(this.q)); } /** * 相减 */ subtract(b) { return new _ECFieldElementFp(this.q, this.x.subtract(b.toBigInteger()).mod(this.q)); } /** * 相乘 */ multiply(b) { return new _ECFieldElementFp(this.q, this.x.multiply(b.toBigInteger()).mod(this.q)); } /** * 相除 */ divide(b) { return new _ECFieldElementFp(this.q, this.x.multiply(b.toBigInteger().modInverse(this.q)).mod(this.q)); } /** * 平方 */ square() { return new _ECFieldElementFp(this.q, this.x.square().mod(this.q)); } }; var ECPointFp = class _ECPointFp { constructor(curve, x, y, z) { this.curve = curve; this.x = x; this.y = y; this.z = z == null ? BigInteger.ONE : z; this.zinv = null; } getX() { if (this.zinv === null) this.zinv = this.z.modInverse(this.curve.q); return this.curve.fromBigInteger(this.x.toBigInteger().multiply(this.zinv).mod(this.curve.q)); } getY() { if (this.zinv === null) this.zinv = this.z.modInverse(this.curve.q); return this.curve.fromBigInteger(this.y.toBigInteger().multiply(this.zinv).mod(this.curve.q)); } /** * 判断相等 */ equals(other) { if (other === this) return true; if (this.isInfinity()) return other.isInfinity(); if (other.isInfinity()) return this.isInfinity(); const u = other.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(other.z)).mod(this.curve.q); if (!u.equals(BigInteger.ZERO)) return false; const v = other.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(other.z)).mod(this.curve.q); return v.equals(BigInteger.ZERO); } /** * 是否是无穷远点 */ isInfinity() { if (this.x === null && this.y === null) return true; return this.z.equals(BigInteger.ZERO) && !this.y.toBigInteger().equals(BigInteger.ZERO); } /** * 取反,x 轴对称点 */ negate() { return new _ECPointFp(this.curve, this.x, this.y.negate(), this.z); } /** * 相加 * * 标准射影坐标系: * * λ1 = x1 * z2 * λ2 = x2 * z1 * λ3 = λ1 − λ2 * λ4 = y1 * z2 * λ5 = y2 * z1 * λ6 = λ4 − λ5 * λ7 = λ1 + λ2 * λ8 = z1 * z2 * λ9 = λ3^2 * λ10 = λ3 * λ9 * λ11 = λ8 * λ6^2 − λ7 * λ9 * x3 = λ3 * λ11 * y3 = λ6 * (λ9 * λ1 − λ11) − λ4 * λ10 * z3 = λ10 * λ8 */ add(b) { if (this.isInfinity()) return b; if (b.isInfinity()) return this; const x1 = this.x.toBigInteger(); const y1 = this.y.toBigInteger(); const z1 = this.z; const x2 = b.x.toBigInteger(); const y2 = b.y.toBigInteger(); const z2 = b.z; const q = this.curve.q; const w1 = x1.multiply(z2).mod(q); const w2 = x2.multiply(z1).mod(q); const w3 = w1.subtract(w2); const w4 = y1.multiply(z2).mod(q); const w5 = y2.multiply(z1).mod(q); const w6 = w4.subtract(w5); if (BigInteger.ZERO.equals(w3)) { if (BigInteger.ZERO.equals(w6)) { return this.twice(); } return this.curve.infinity; } const w7 = w1.add(w2); const w8 = z1.multiply(z2).mod(q); const w9 = w3.square().mod(q); const w10 = w3.multiply(w9).mod(q); const w11 = w8.multiply(w6.square()).subtract(w7.multiply(w9)).mod(q); const x3 = w3.multiply(w11).mod(q); const y3 = w6.multiply(w9.multiply(w1).subtract(w11)).subtract(w4.multiply(w10)).mod(q); const z3 = w10.multiply(w8).mod(q); return new _ECPointFp(this.curve, this.curve.fromBigInteger(x3), this.curve.fromBigInteger(y3), z3); } /** * 自加 * * 标准射影坐标系: * * λ1 = 3 * x1^2 + a * z1^2 * λ2 = 2 * y1 * z1 * λ3 = y1^2 * λ4 = λ3 * x1 * z1 * λ5 = λ2^2 * λ6 = λ1^2 − 8 * λ4 * x3 = λ2 * λ6 * y3 = λ1 * (4 * λ4 − λ6) − 2 * λ5 * λ3 * z3 = λ2 * λ5 */ twice() { if (this.isInfinity()) return this; if (!this.y.toBigInteger().signum()) return this.curve.infinity; const x1 = this.x.toBigInteger(); const y1 = this.y.toBigInteger(); const z1 = this.z; const q = this.curve.q; const a = this.curve.a.toBigInteger(); const w1 = x1.square().multiply(THREE).add(a.multiply(z1.square())).mod(q); const w2 = y1.shiftLeft(1).multiply(z1).mod(q); const w3 = y1.square().mod(q); const w4 = w3.multiply(x1).multiply(z1).mod(q); const w5 = w2.square().mod(q); const w6 = w1.square().subtract(w4.shiftLeft(3)).mod(q); const x3 = w2.multiply(w6).mod(q); const y3 = w1.multiply(w4.shiftLeft(2).subtract(w6)).subtract(w5.shiftLeft(1).multiply(w3)).mod(q); const z3 = w2.multiply(w5).mod(q); return new _ECPointFp(this.curve, this.curve.fromBigInteger(x3), this.curve.fromBigInteger(y3), z3); } /** * 倍点计算 */ multiply(k) { if (this.isInfinity()) return this; if (!k.signum()) return this.curve.infinity; const k3 = k.multiply(THREE); const neg = this.negate(); let Q = this; for (let i = k3.bitLength() - 2; i > 0; i--) { Q = Q.twice(); const k3Bit = k3.testBit(i); const kBit = k.testBit(i); if (k3Bit !== kBit) { Q = Q.add(k3Bit ? this : neg); } } return Q; } }; var ECCurveFp = class { constructor(q, a, b) { this.q = q; this.a = this.fromBigInteger(a); this.b = this.fromBigInteger(b); this.infinity = new ECPointFp(this, null, null); } /** * 判断两个椭圆曲线是否相等 */ equals(other) { if (other === this) return true; return this.q.equals(other.q) && this.a.equals(other.a) && this.b.equals(other.b); } /** * 生成椭圆曲线域元素 */ fromBigInteger(x) { return new ECFieldElementFp(this.q, x); } /** * 解析 16 进制串为椭圆曲线点 */ decodePointHex(s) { switch (parseInt(s.substr(0, 2), 16)) { case 0: return this.infinity; case 2: case 3: const x = this.fromBigInteger(new BigInteger(s.substr(2), 16)); let y = this.fromBigInteger(x.multiply(x.square()).add( x.multiply(this.a) ).add(this.b).toBigInteger().modPow( this.q.divide(new BigInteger("4")).add(BigInteger.ONE), this.q )); if (!y.toBigInteger().mod(TWO).equals(new BigInteger(s.substr(0, 2), 16).subtract(TWO))) { y = y.negate(); } return new ECPointFp(this, x, y); case 4: case 6: case 7: const len = (s.length - 2) / 2; const xHex = s.substr(2, len); const yHex = s.substr(len + 2, len); return new ECPointFp(this, this.fromBigInteger(new BigInteger(xHex, 16)), this.fromBigInteger(new BigInteger(yHex, 16))); default: return null; } } }; module.exports = { ECPointFp, ECCurveFp }; } }); // node_modules/sm-crypto/src/sm2/utils.js var require_utils = __commonJS({ "node_modules/sm-crypto/src/sm2/utils.js"(exports, module) { var { BigInteger, SecureRandom } = require_jsbn(); var { ECCurveFp } = require_ec(); var rng = new SecureRandom(); var { curve, G, n } = generateEcparam(); function getGlobalCurve() { return curve; } function generateEcparam() { const p = new BigInteger("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF", 16); const a = new BigInteger("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC", 16); const b = new BigInteger("28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93", 16); const curve2 = new ECCurveFp(p, a, b); const gxHex = "32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7"; const gyHex = "BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0"; const G2 = curve2.decodePointHex("04" + gxHex + gyHex); const n2 = new BigInteger("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123", 16); return { curve: curve2, G: G2, n: n2 }; } function generateKeyPairHex(a, b, c) { const random = a ? new BigInteger(a, b, c) : new BigInteger(n.bitLength(), rng); const d = random.mod(n.subtract(BigInteger.ONE)).add(BigInteger.ONE); const privateKey = leftPad(d.toString(16), 64); const P = G.multiply(d); const Px = leftPad(P.getX().toBigInteger().toString(16), 64); const Py = leftPad(P.getY().toBigInteger().toString(16), 64); const publicKey = "04" + Px + Py; return { privateKey, publicKey }; } function compressPublicKeyHex(s) { if (s.length !== 130) throw new Error("Invalid public key to compress"); const len = (s.length - 2) / 2; const xHex = s.substr(2, len); const y = new BigInteger(s.substr(len + 2, len), 16); let prefix = "03"; if (y.mod(new BigInteger("2")).equals(BigInteger.ZERO)) prefix = "02"; return prefix + xHex; } function utf8ToHex(input) { input = unescape(encodeURIComponent(input)); const length = input.length; const words = []; for (let i = 0; i < length; i++) { words[i >>> 2] |= (input.charCodeAt(i) & 255) << 24 - i % 4 * 8; } const hexChars = []; for (let i = 0; i < length; i++) { const bite = words[i >>> 2] >>> 24 - i % 4 * 8 & 255; hexChars.push((bite >>> 4).toString(16)); hexChars.push((bite & 15).toString(16)); } return hexChars.join(""); } function leftPad(input, num) { if (input.length >= num) return input; return new Array(num - input.length + 1).join("0") + input; } function arrayToHex(arr) { return arr.map((item) => { item = item.toString(16); return item.length === 1 ? "0" + item : item; }).join(""); } function arrayToUtf8(arr) { const words = []; let j = 0; for (let i = 0; i < arr.length * 2; i += 2) { words[i >>> 3] |= parseInt(arr[j], 10) << 24 - i % 8 * 4; j++; } try { const latin1Chars = []; for (let i = 0; i < arr.length; i++) { const bite = words[i >>> 2] >>> 24 - i % 4 * 8 & 255; latin1Chars.push(String.fromCharCode(bite)); } return decodeURIComponent(escape(latin1Chars.join(""))); } catch (e) { throw new Error("Malformed UTF-8 data"); } } function hexToArray(hexStr) { const words = []; let hexStrLength = hexStr.length; if (hexStrLength % 2 !== 0) { hexStr = leftPad(hexStr, hexStrLength + 1); } hexStrLength = hexStr.length; for (let i = 0; i < hexStrLength; i += 2) { words.push(parseInt(hexStr.substr(i, 2), 16)); } return words; } function verifyPublicKey(publicKey) { const point = curve.decodePointHex(publicKey); if (!point) return false; const x = point.getX(); const y = point.getY(); return y.square().equals(x.multiply(x.square()).add(x.multiply(curve.a)).add(curve.b)); } function comparePublicKeyHex(publicKey1, publicKey2) { const point1 = curve.decodePointHex(publicKey1); if (!point1) return false; const point2 = curve.decodePointHex(publicKey2); if (!point2) return false; return point1.equals(point2); } module.exports = { getGlobalCurve, generateEcparam, generateKeyPairHex, compressPublicKeyHex, utf8ToHex, leftPad, arrayToHex, arrayToUtf8, hexToArray, verifyPublicKey, comparePublicKeyHex }; } }); // node_modules/sm-crypto/src/sm2/sm3.js var require_sm3 = __commonJS({ "node_modules/sm-crypto/src/sm2/sm3.js"(exports, module) { var W = new Uint32Array(68); var M = new Uint32Array(64); function rotl(x, n) { const s = n & 31; return x << s | x >>> 32 - s; } function xor(x, y) { const result = []; for (let i = x.length - 1; i >= 0; i--) result[i] = (x[i] ^ y[i]) & 255; return result; } function P0(X) { return X ^ rotl(X, 9) ^ rotl(X, 17); } function P1(X) { return X ^ rotl(X, 15) ^ rotl(X, 23); } function sm3(array) { let len = array.length * 8; let k = len % 512; k = k >= 448 ? 512 - k % 448 - 1 : 448 - k - 1; const kArr = new Array((k - 7) / 8); const lenArr = new Array(8); for (let i = 0, len2 = kArr.length; i < len2; i++) kArr[i] = 0; for (let i = 0, len2 = lenArr.length; i < len2; i++) lenArr[i] = 0; len = len.toString(2); for (let i = 7; i >= 0; i--) { if (len.length > 8) { const start = len.length - 8; lenArr[i] = parseInt(len.substr(start), 2); len = len.substr(0, start); } else if (len.length > 0) { lenArr[i] = parseInt(len, 2); len = ""; } } const m = new Uint8Array([...array, 128, ...kArr, ...lenArr]); const dataView = new DataView(m.buffer, 0); const n = m.length / 64; const V = new Uint32Array([1937774191, 1226093241, 388252375, 3666478592, 2842636476, 372324522, 3817729613, 2969243214]); for (let i = 0; i < n; i++) { W.fill(0); M.fill(0); const start = 16 * i; for (let j = 0; j < 16; j++) { W[j] = dataView.getUint32((start + j) * 4, false); } for (let j = 16; j < 68; j++) { W[j] = P1(W[j - 16] ^ W[j - 9] ^ rotl(W[j - 3], 15)) ^ rotl(W[j - 13], 7) ^ W[j - 6]; } for (let j = 0; j < 64; j++) { M[j] = W[j] ^ W[j + 4]; } const T1 = 2043430169; const T2 = 2055708042; let A = V[0]; let B = V[1]; let C = V[2]; let D = V[3]; let E = V[4]; let F = V[5]; let G = V[6]; let H = V[7]; let SS1; let SS2; let TT1; let TT2; let T; for (let j = 0; j < 64; j++) { T = j >= 0 && j <= 15 ? T1 : T2; SS1 = rotl(rotl(A, 12) + E + rotl(T, j), 7); SS2 = SS1 ^ rotl(A, 12); TT1 = (j >= 0 && j <= 15 ? A ^ B ^ C : A & B | A & C | B & C) + D + SS2 + M[j]; TT2 = (j >= 0 && j <= 15 ? E ^ F ^ G : E & F | ~E & G) + H + SS1 + W[j]; D = C; C = rotl(B, 9); B = A; A = TT1; H = G; G = rotl(F, 19); F = E; E = P0(TT2); } V[0] ^= A; V[1] ^= B; V[2] ^= C; V[3] ^= D; V[4] ^= E; V[5] ^= F; V[6] ^= G; V[7] ^= H; } const result = []; for (let i = 0, len2 = V.length; i < len2; i++) { const word = V[i]; result.push((word & 4278190080) >>> 24, (word & 16711680) >>> 16, (word & 65280) >>> 8, word & 255); } return result; } var blockLen = 64; var iPad = new Uint8Array(blockLen); var oPad = new Uint8Array(blockLen); for (let i = 0; i < blockLen; i++) { iPad[i] = 54; oPad[i] = 92; } function hmac(input, key) { if (key.length > blockLen) key = sm3(key); while (key.length < blockLen) key.push(0); const iPadKey = xor(key, iPad); const oPadKey = xor(key, oPad); const hash = sm3([...iPadKey, ...input]); return sm3([...oPadKey, ...hash]); } module.exports = { sm3, hmac }; } }); // node_modules/sm-crypto/src/sm2/index.js var require_sm2 = __commonJS({ "node_modules/sm-crypto/src/sm2/index.js"(exports, module) { var { BigInteger } = require_jsbn(); var { encodeDer, decodeDer } = require_asn1(); var _ = require_utils(); var sm3 = require_sm3().sm3; var { G, curve, n } = _.generateEcparam(); var C1C2C3 = 0; function doEncrypt(msg, publicKey, cipherMode = 1) { msg = typeof msg === "string" ? _.hexToArray(_.utf8ToHex(msg)) : Array.prototype.slice.call(msg); publicKey = _.getGlobalCurve().decodePointHex(publicKey); const keypair = _.generateKeyPairHex(); const k = new BigInteger(keypair.privateKey, 16); let c1 = keypair.publicKey; if (c1.length > 128) c1 = c1.substr(c1.length - 128); const p = publicKey.multiply(k); const x2 = _.hexToArray(_.leftPad(p.getX().toBigInteger().toRadix(16), 64)); const y2 = _.hexToArray(_.leftPad(p.getY().toBigInteger().toRadix(16), 64)); const c3 = _.arrayToHex(sm3([].concat(x2, msg, y2))); let ct = 1; let offset = 0; let t = []; const z = [].concat(x2, y2); const nextT = () => { t = sm3([...z, ct >> 24 & 255, ct >> 16 & 255, ct >> 8 & 255, ct & 255]); ct++; offset = 0; }; nextT(); for (let i = 0, len = msg.length; i < len; i++) { if (offset === t.length) nextT(); msg[i] ^= t[offset++] & 255; } const c2 = _.arrayToHex(msg); return cipherMode === C1C2C3 ? c1 + c2 + c3 : c1 + c3 + c2; } function doDecrypt(encryptData, privateKey, cipherMode = 1, { output = "string" } = {}) { privateKey = new BigInteger(privateKey, 16); let c3 = encryptData.substr(128, 64); let c2 = encryptData.substr(128 + 64); if (cipherMode === C1C2C3) { c3 = encryptData.substr(encryptData.length - 64); c2 = encryptData.substr(128, encryptData.length - 128 - 64); } const msg = _.hexToArray(c2); const c1 = _.getGlobalCurve().decodePointHex("04" + encryptData.substr(0, 128)); const p = c1.multiply(privateKey); const x2 = _.hexToArray(_.leftPad(p.getX().toBigInteger().toRadix(16), 64)); const y2 = _.hexToArray(_.leftPad(p.getY().toBigInteger().toRadix(16), 64)); let ct = 1; let offset = 0; let t = []; const z = [].concat(x2, y2); const nextT = () => { t = sm3([...z, ct >> 24 & 255, ct >> 16 & 255, ct >> 8 & 255, ct & 255]); ct++; offset = 0; }; nextT(); for (let i = 0, len = msg.length; i < len; i++) { if (offset === t.length) nextT(); msg[i] ^= t[offset++] & 255; } const checkC3 = _.arrayToHex(sm3([].concat(x2, msg, y2))); if (checkC3 === c3.toLowerCase()) { return output === "array" ? msg : _.arrayToUtf8(msg); } else { return output === "array" ? [] : ""; } } function doSignature(msg, privateKey, { pointPool, der, hash, publicKey, userId } = {}) { let hashHex = typeof msg === "string" ? _.utf8ToHex(msg) : _.arrayToHex(msg); if (hash) { publicKey = publicKey || getPublicKeyFromPrivateKey(privateKey); hashHex = getHash(hashHex, publicKey, userId); } const dA = new BigInteger(privateKey, 16); const e = new BigInteger(hashHex, 16); let k = null; let r = null; let s = null; do { do { let point; if (pointPool && pointPool.length) { point = pointPool.pop(); } else { point = getPoint(); } k = point.k; r = e.add(point.x1).mod(n); } while (r.equals(BigInteger.ZERO) || r.add(k).equals(n)); s = dA.add(BigInteger.ONE).modInverse(n).multiply(k.subtract(r.multiply(dA))).mod(n); } while (s.equals(BigInteger.ZERO)); if (der) return encodeDer(r, s); return _.leftPad(r.toString(16), 64) + _.leftPad(s.toString(16), 64); } function doVerifySignature(msg, signHex, publicKey, { der, hash, userId } = {}) { let hashHex = typeof msg === "string" ? _.utf8ToHex(msg) : _.arrayToHex(msg); if (hash) { hashHex = getHash(hashHex, publicKey, userId); } let r; let s; if (der) { const decodeDerObj = decodeDer(signHex); r = decodeDerObj.r; s = decodeDerObj.s; } else { r = new BigInteger(signHex.substring(0, 64), 16); s = new BigInteger(signHex.substring(64), 16); } const PA = curve.decodePointHex(publicKey); const e = new BigInteger(hashHex, 16); const t = r.add(s).mod(n); if (t.equals(BigInteger.ZERO)) return false; const x1y1 = G.multiply(s).add(PA.multiply(t)); const R = e.add(x1y1.getX().toBigInteger()).mod(n); return r.equals(R); } function getHash(hashHex, publicKey, userId = "1234567812345678") { userId = _.utf8ToHex(userId); const a = _.leftPad(G.curve.a.toBigInteger().toRadix(16), 64); const b = _.leftPad(G.curve.b.toBigInteger().toRadix(16), 64); const gx = _.leftPad(G.getX().toBigInteger().toRadix(16), 64); const gy = _.leftPad(G.getY().toBigInteger().toRadix(16), 64); let px; let py; if (publicKey.length === 128) { px = publicKey.substr(0, 64); py = publicKey.substr(64, 64); } else { const point = G.curve.decodePointHex(publicKey); px = _.leftPad(point.getX().toBigInteger().toRadix(16), 64); py = _.leftPad(point.getY().toBigInteger().toRadix(16), 64); } const data = _.hexToArray(userId + a + b + gx + gy + px + py); const entl = userId.length * 4; data.unshift(entl & 255); data.unshift(entl >> 8 & 255); const z = sm3(data); return _.arrayToHex(sm3(z.concat(_.hexToArray(hashHex)))); } function getPublicKeyFromPrivateKey(privateKey) { const PA = G.multiply(new BigInteger(privateKey, 16)); const x = _.leftPad(PA.getX().toBigInteger().toString(16), 64); const y = _.leftPad(PA.getY().toBigInteger().toString(16), 64); return "04" + x + y; } function getPoint() { const keypair = _.generateKeyPairHex(); const PA = curve.decodePointHex(keypair.publicKey); keypair.k = new BigInteger(keypair.privateKey, 16); keypair.x1 = PA.getX().toBigInteger(); return keypair; } module.exports = { generateKeyPairHex: _.generateKeyPairHex, compressPublicKeyHex: _.compressPublicKeyHex, comparePublicKeyHex: _.comparePublicKeyHex, doEncrypt, doDecrypt, doSignature, doVerifySignature, getPublicKeyFromPrivateKey, getPoint, verifyPublicKey: _.verifyPublicKey }; } }); // node_modules/sm-crypto/src/sm3/index.js var require_sm32 = __commonJS({ "node_modules/sm-crypto/src/sm3/index.js"(exports, module) { var { sm3, hmac } = require_sm3(); function leftPad(input, num) { if (input.length >= num) return input; return new Array(num - input.length + 1).join("0") + input; } function ArrayToHex(arr) { return arr.map((item) => { item = item.toString(16); return item.length === 1 ? "0" + item : item; }).join(""); } function hexToArray(hexStr) { const words = []; let hexStrLength = hexStr.length; if (hexStrLength % 2 !== 0) { hexStr = leftPad(hexStr, hexStrLength + 1); } hexStrLength = hexStr.length; for (let i = 0; i < hexStrLength; i += 2) { words.push(parseInt(hexStr.substr(i, 2), 16)); } return words; } function utf8ToArray(str) { const arr = []; for (let i = 0, len = str.length; i < len; i++) { const point = str.codePointAt(i); if (point <= 127) { arr.push(point); } else if (point <= 2047) { arr.push(192 | point >>> 6); arr.push(128 | point & 63); } else if (point <= 55295 || point >= 57344 && point <= 65535) { arr.push(224 | point >>> 12); arr.push(128 | point >>> 6 & 63); arr.push(128 | point & 63); } else if (point >= 65536 && point <= 1114111) { i++; arr.push(240 | point >>> 18 & 28); arr.push(128 | point >>> 12 & 63); arr.push(128 | point >>> 6 & 63); arr.push(128 | point & 63); } else { arr.push(point); throw new Error("input is not supported"); } } return arr; } module.exports = function(input, options) { input = typeof input === "string" ? utf8ToArray(input) : Array.prototype.slice.call(input); if (options) { const mode = options.mode || "hmac"; if (mode !== "hmac") throw new Error("invalid mode"); let key = options.key; if (!key) throw new Error("invalid key"); key = typeof key === "string" ? hexToArray(key) : Array.prototype.slice.call(key); return ArrayToHex(hmac(input, key)); } return ArrayToHex(sm3(input)); }; } }); // node_modules/sm-crypto/src/sm4/index.js var require_sm4 = __commonJS({ "node_modules/sm-crypto/src/sm4/index.js"(exports, module) { var DECRYPT = 0; var ROUND = 32; var BLOCK = 16; var Sbox = [ 214, 144, 233, 254, 204, 225, 61, 183, 22, 182, 20, 194, 40, 251, 44, 5, 43, 103, 154, 118, 42, 190, 4, 195, 170, 68, 19, 38, 73, 134, 6, 153, 156, 66, 80, 244, 145, 239, 152, 122, 51, 84, 11, 67, 237, 207, 172, 98, 228, 179, 28, 169, 201, 8, 232, 149, 128, 223, 148, 250, 117, 143, 63, 166, 71, 7, 167, 252, 243, 115, 23, 186, 131, 89, 60, 25, 230, 133, 79, 168, 104, 107, 129, 178, 113, 100, 218, 139, 248, 235, 15, 75, 112, 86, 157, 53, 30, 36, 14, 94, 99, 88, 209, 162, 37, 34, 124, 59, 1, 33, 120, 135, 212, 0, 70, 87, 159, 211, 39, 82, 76, 54, 2, 231, 160, 196, 200, 158, 234, 191, 138, 210, 64, 199, 56, 181, 163, 247, 242, 206, 249, 97, 21, 161, 224, 174, 93, 164, 155, 52, 26, 85, 173, 147, 50, 48, 245, 140, 177, 227, 29, 246, 226, 46, 130, 102, 202, 96, 192, 41, 35, 171, 13, 83, 78, 111, 213, 219, 55, 69, 222, 253, 142, 47, 3, 255, 106, 114, 109, 108, 91, 81, 141, 27, 175, 146, 187, 221, 188, 127, 17, 217, 92, 65, 31, 16, 90, 216, 10, 193, 49, 136, 165, 205, 123, 189, 45, 116, 208, 18, 184, 229, 180, 176, 137, 105, 151, 74, 12, 150, 119, 126, 101, 185, 241, 9, 197, 110, 198, 132, 24, 240, 125, 236, 58, 220, 77, 32, 121, 238, 95, 62, 215, 203, 57, 72 ]; var CK = [ 462357, 472066609, 943670861, 1415275113, 1886879365, 2358483617, 2830087869, 3301692121, 3773296373, 4228057617, 404694573, 876298825, 1347903077, 1819507329, 2291111581, 2762715833, 3234320085, 3705924337, 4177462797, 337322537, 808926789, 1280531041, 1752135293, 2223739545, 2695343797, 3166948049, 3638552301, 4110090761, 269950501, 741554753, 1213159005, 1684763257 ]; function hexToArray(str) { const arr = []; for (let i = 0, len = str.length; i < len; i += 2) { arr.push(parseInt(str.substr(i, 2), 16)); } return arr; } function ArrayToHex(arr) { return arr.map((item) => { item = item.toString(16); return item.length === 1 ? "0" + item : item; }).join(""); } function utf8ToArray(str) { const arr = []; for (let i = 0, len = str.length; i < len; i++) { const point = str.codePointAt(i); if (point <= 127) { arr.push(point); } else if (point <= 2047) { arr.push(192 | point >>> 6); arr.push(128 | point & 63); } else if (point <= 55295 || point >= 57344 && point <= 65535) { arr.push(224 | point >>> 12); arr.push(128 | point >>> 6 & 63); arr.push(128 | point & 63); } else if (point >= 65536 && point <= 1114111) { i++; arr.push(240 | point >>> 18 & 28); arr.push(128 | point >>> 12 & 63); arr.push(128 | point >>> 6 & 63); arr.push(128 | point & 63); } else { arr.push(point); throw new Error("input is not supported"); } } return arr; } function arrayToUtf8(arr) { const str = []; for (let i = 0, len = arr.length; i < len; i++) { if (arr[i] >= 240 && arr[i] <= 247) { str.push(String.fromCodePoint(((arr[i] & 7) << 18) + ((arr[i + 1] & 63) << 12) + ((arr[i + 2] & 63) << 6) + (arr[i + 3] & 63))); i += 3; } else if (arr[i] >= 224 && arr[i] <= 239) { str.push(String.fromCodePoint(((arr[i] & 15) << 12) + ((arr[i + 1] & 63) << 6) + (arr[i + 2] & 63))); i += 2; } else if (arr[i] >= 192 && arr[i] <= 223) { str.push(String.fromCodePoint(((arr[i] & 31) << 6) + (arr[i + 1] & 63))); i++; } else { str.push(String.fromCodePoint(arr[i])); } } return str.join(""); } function rotl(x, n) { const s = n & 31; return x << s | x >>> 32 - s; } function byteSub(a) { return (Sbox[a >>> 24 & 255] & 255) << 24 | (Sbox[a >>> 16 & 255] & 255) << 16 | (Sbox[a >>> 8 & 255] & 255) << 8 | Sbox[a & 255] & 255; } function l1(b) { return b ^ rotl(b, 2) ^ rotl(b, 10) ^ rotl(b, 18) ^ rotl(b, 24); } function l2(b) { return b ^ rotl(b, 13) ^ rotl(b, 23); } function sms4Crypt(input, output, roundKey) { const x = new Array(4); const tmp = new Array(4); for (let i = 0; i < 4; i++) { tmp[0] = input[4 * i] & 255; tmp[1] = input[4 * i + 1] & 255; tmp[2] = input[4 * i + 2] & 255; tmp[3] = input[4 * i + 3] & 255; x[i] = tmp[0] << 24 | tmp[1] << 16 | tmp[2] << 8 | tmp[3]; } for (let r = 0, mid; r < 32; r += 4) { mid = x[1] ^ x[2] ^ x[3] ^ roundKey[r + 0]; x[0] ^= l1(byteSub(mid)); mid = x[2] ^ x[3] ^ x[0] ^ roundKey[r + 1]; x[1] ^= l1(byteSub(mid)); mid = x[3] ^ x[0] ^ x[1] ^ roundKey[r + 2]; x[2] ^= l1(byteSub(mid)); mid = x[0] ^ x[1] ^ x[2] ^ roundKey[r + 3]; x[3] ^= l1(byteSub(mid)); } for (let j = 0; j < 16; j += 4) { output[j] = x[3 - j / 4] >>> 24 & 255; output[j + 1] = x[3 - j / 4] >>> 16 & 255; output[j + 2] = x[3 - j / 4] >>> 8 & 255; output[j + 3] = x[3 - j / 4] & 255; } } function sms4KeyExt(key, roundKey, cryptFlag) { const x = new Array(4); const tmp = new Array(4); for (let i = 0; i < 4; i++) { tmp[0] = key[0 + 4 * i] & 255; tmp[1] = key[1 + 4 * i] & 255; tmp[2] = key[2 + 4 * i] & 255; tmp[3] = key[3 + 4 * i] & 255; x[i] = tmp[0] << 24 | tmp[1] << 16 | tmp[2] << 8 | tmp[3]; } x[0] ^= 2746333894; x[1] ^= 1453994832; x[2] ^= 1736282519; x[3] ^= 2993693404; for (let r = 0, mid; r < 32; r += 4) { mid = x[1] ^ x[2] ^ x[3] ^ CK[r + 0]; roundKey[r + 0] = x[0] ^= l2(byteSub(mid)); mid = x[2] ^ x[3] ^ x[0] ^ CK[r + 1]; roundKey[r + 1] = x[1] ^= l2(byteSub(mid)); mid = x[3] ^ x[0] ^ x[1] ^ CK[r + 2]; roundKey[r + 2] = x[2] ^= l2(byteSub(mid)); mid = x[0] ^ x[1] ^ x[2] ^ CK[r + 3]; roundKey[r + 3] = x[3] ^= l2(byteSub(mid)); } if (cryptFlag === DECRYPT) { for (let r = 0, mid; r < 16; r++) { mid = roundKey[r]; roundKey[r] = roundKey[31 - r]; roundKey[31 - r] = mid; } } } function sm4(inArray, key, cryptFlag, { padding = "pkcs#7", mode, iv = [], output = "string" } = {}) { if (mode === "cbc") { if (typeof iv === "string") iv = hexToArray(iv); if (iv.length !== 128 / 8) { throw new Error("iv is invalid"); } } if (typeof key === "string") key = hexToArray(key); if (key.length !== 128 / 8) { throw new Error("key is invalid"); } if (typeof inArray === "string") { if (cryptFlag !== DECRYPT) { inArray = utf8ToArray(inArray); } else { inArray = hexToArray(inArray); } } else { inArray = [...inArray]; } if ((padding === "pkcs#5" || padding === "pkcs#7") && cryptFlag !== DECRYPT) { const paddingCount = BLOCK - inArray.length % BLOCK; for (let i = 0; i < paddingCount; i++) inArray.push(paddingCount); } const roundKey = new Array(ROUND); sms4KeyExt(key, roundKey, cryptFlag); const outArray = []; let lastVector = iv; let restLen = inArray.length; let point = 0; while (restLen >= BLOCK) { const input = inArray.slice(point, point + 16); const output2 = new Array(16); if (mode === "cbc") { for (let i = 0; i < BLOCK; i++) { if (cryptFlag !== DECRYPT) { input[i] ^= lastVector[i]; } } } sms4Crypt(input, output2, roundKey); for (let i = 0; i < BLOCK; i++) { if (mode === "cbc") { if (cryptFlag === DECRYPT) { output2[i] ^= lastVector[i]; } } outArray[point + i] = output2[i]; } if (mode === "cbc") { if (cryptFlag !== DECRYPT) { lastVector = output2; } else { lastVector = input; } } restLen -= BLOCK; point += BLOCK; } if ((padding === "pkcs#5" || padding === "pkcs#7") && cryptFlag === DECRYPT) { const len = outArray.length; const paddingCount = outArray[len - 1]; for (let i = 1; i <= paddingCount; i++) { if (outArray[len - i] !== paddingCount) throw new Error("padding is invalid"); } outArray.splice(len - paddingCount, paddingCount); } if (output !== "array") { if (cryptFlag !== DECRYPT) { return ArrayToHex(outArray); } else { return arrayToUtf8(outArray); } } else { return outArray; } } module.exports = { encrypt(inArray, key, options) { return sm4(inArray, key, 1, options); }, decrypt(inArray, key, options) { return sm4(inArray, key, 0, options); } }; } }); // node_modules/sm-crypto/src/index.js var require_src = __commonJS({ "node_modules/sm-crypto/src/index.js"(exports, module) { module.exports = { sm2: require_sm2(), sm3: require_sm32(), sm4: require_sm4() }; } }); export default require_src(); //# sourceMappingURL=sm-crypto.js.map