js sm4 算法

 

 

var f=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function l(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function a(e){if(e.__esModule)return e;var r=e.default;if(typeof r=="function"){var o=function n(){if(this instanceof n){var t=[null];t.push.apply(t,arguments);var u=Function.bind.apply(r,t);return new u}return r.apply(this,arguments)};o.prototype=r.prototype}else o={};return Object.defineProperty(o,"__esModule",{value:!0}),Object.keys(e).forEach(function(n){var t=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(o,n,t.get?t:{enumerable:!0,get:function(){return e[n]}})}),o};



var zi = f;




var ot = {}
  , Vi = {
    get exports() {
        return ot
    },
    set exports(s) {
        ot = s
    }
};
(function(s, n) {
    (function() {
        var o, f = 0xdeadbeefcafe, u = (f & 16777215) == 15715070;
        function r(t, e, i) {
            t != null && (typeof t == "number" ? this.fromNumber(t, e, i) : e == null && typeof t != "string" ? this.fromString(t, 256) : this.fromString(t, e))
        }
        function l() {
            return new r(null)
        }
        function g(t, e, i, h, c, a) {
            for (; --a >= 0; ) {
                var x = e * this[t++] + i[h] + c;
                c = Math.floor(x / 67108864),
                i[h++] = x & 67108863
            }
            return c
        }
        function d(t, e, i, h, c, a) {
            for (var x = e & 32767, p = e >> 15; --a >= 0; ) {
                var S = this[t] & 32767
                  , q = this[t++] >> 15
                  , L = p * S + q * x;
                S = x * S + ((L & 32767) << 15) + i[h] + (c & 1073741823),
                c = (S >>> 30) + (L >>> 15) + p * q + (c >>> 30),
                i[h++] = S & 1073741823
            }
            return c
        }
        function m(t, e, i, h, c, a) {
            for (var x = e & 16383, p = e >> 14; --a >= 0; ) {
                var S = this[t] & 16383
                  , q = this[t++] >> 14
                  , L = p * S + q * x;
                S = x * S + ((L & 16383) << 14) + i[h] + c,
                c = (S >> 28) + (L >> 14) + p * q,
                i[h++] = S & 268435455
            }
            return c
        }
        var w = typeof navigator < "u";
        w && u && navigator.appName == "Microsoft Internet Explorer" ? (r.prototype.am = d,
        o = 30) : w && u && navigator.appName != "Netscape" ? (r.prototype.am = g,
        o = 26) : (r.prototype.am = m,
        o = 28),
        r.prototype.DB = o,
        r.prototype.DM = (1 << o) - 1,
        r.prototype.DV = 1 << o;
        var y = 52;
        r.prototype.FV = Math.pow(2, y),
        r.prototype.F1 = y - o,
        r.prototype.F2 = 2 * o - y;
        var b = "0123456789abcdefghijklmnopqrstuvwxyz", F = new Array, T, I;
        for (T = "0".charCodeAt(0),
        I = 0; I <= 9; ++I)
            F[T++] = I;
        for (T = "a".charCodeAt(0),
        I = 10; I < 36; ++I)
            F[T++] = I;
        for (T = "A".charCodeAt(0),
        I = 10; I < 36; ++I)
            F[T++] = I;
        function C(t) {
            return b.charAt(t)
        }
        function R(t, e) {
            var i = F[t.charCodeAt(e)];
            return i ?? -1
        }
        function B(t) {
            for (var e = this.t - 1; e >= 0; --e)
                t[e] = this[e];
            t.t = this.t,
            t.s = this.s
        }
        function $(t) {
            this.t = 1,
            this.s = t < 0 ? -1 : 0,
            t > 0 ? this[0] = t : t < -1 ? this[0] = t + this.DV : this.t = 0
        }
        function Z(t) {
            var e = l();
            return e.fromInt(t),
            e
        }
        function wt(t, e) {
            var i;
            if (e == 16)
                i = 4;
            else if (e == 8)
                i = 3;
            else if (e == 256)
                i = 8;
            else if (e == 2)
                i = 1;
            else if (e == 32)
                i = 5;
            else if (e == 4)
                i = 2;
            else {
                this.fromRadix(t, e);
                return
            }
            this.t = 0,
            this.s = 0;
            for (var h = t.length, c = !1, a = 0; --h >= 0; ) {
                var x = i == 8 ? t[h] & 255 : R(t, h);
                if (x < 0) {
                    t.charAt(h) == "-" && (c = !0);
                    continue
                }
                c = !1,
                a == 0 ? this[this.t++] = x : a + i > this.DB ? (this[this.t - 1] |= (x & (1 << this.DB - a) - 1) << a,
                this[this.t++] = x >> this.DB - a) : this[this.t - 1] |= x << a,
                a += i,
                a >= this.DB && (a -= this.DB)
            }
            i == 8 && t[0] & 128 && (this.s = -1,
            a > 0 && (this[this.t - 1] |= (1 << this.DB - a) - 1 << a)),
            this.clamp(),
            c && r.ZERO.subTo(this, this)
        }
        function Ft() {
            for (var t = this.s & this.DM; this.t > 0 && this[this.t - 1] == t; )
                --this.t
        }
        function ee(t) {
            if (this.s < 0)
                return "-" + this.negate().toString(t);
            var e;
            if (t == 16)
                e = 4;
            else if (t == 8)
                e = 3;
            else if (t == 2)
                e = 1;
            else if (t == 32)
                e = 5;
            else if (t == 4)
                e = 2;
            else
                return this.toRadix(t);
            var i = (1 << e) - 1, h, c = !1, a = "", x = this.t, p = this.DB - x * this.DB % e;
            if (x-- > 0)
                for (p < this.DB && (h = this[x] >> p) > 0 && (c = !0,
                a = C(h)); x >= 0; )
                    p < e ? (h = (this[x] & (1 << p) - 1) << e - p,
                    h |= this[--x] >> (p += this.DB - e)) : (h = this[x] >> (p -= e) & i,
                    p <= 0 && (p += this.DB,
                    --x)),
                    h > 0 && (c = !0),
                    c && (a += C(h));
            return c ? a : "0"
        }
        function ie() {
            var t = l();
            return r.ZERO.subTo(this, t),
            t
        }
        function ne() {
            return this.s < 0 ? this.negate() : this
        }
        function se(t) {
            var e = this.s - t.s;
            if (e != 0)
                return e;
            var i = this.t;
            if (e = i - t.t,
            e != 0)
                return this.s < 0 ? -e : e;
            for (; --i >= 0; )
                if ((e = this[i] - t[i]) != 0)
                    return e;
            return 0
        }
        function xt(t) {
            var e = 1, i;
            return (i = t >>> 16) != 0 && (t = i,
            e += 16),
            (i = t >> 8) != 0 && (t = i,
            e += 8),
            (i = t >> 4) != 0 && (t = i,
            e += 4),
            (i = t >> 2) != 0 && (t = i,
            e += 2),
            (i = t >> 1) != 0 && (t = i,
            e += 1),
            e
        }
        function re() {
            return this.t <= 0 ? 0 : this.DB * (this.t - 1) + xt(this[this.t - 1] ^ this.s & this.DM)
        }
        function oe(t, e) {
            var i;
            for (i = this.t - 1; i >= 0; --i)
                e[i + t] = this[i];
            for (i = t - 1; i >= 0; --i)
                e[i] = 0;
            e.t = this.t + t,
            e.s = this.s
        }
        function fe(t, e) {
            for (var i = t; i < this.t; ++i)
                e[i - t] = this[i];
            e.t = Math.max(this.t - t, 0),
            e.s = this.s
        }
        function he(t, e) {
            var i = t % this.DB, h = this.DB - i, c = (1 << h) - 1, a = Math.floor(t / this.DB), x = this.s << i & this.DM, p;
            for (p = this.t - 1; p >= 0; --p)
                e[p + a + 1] = this[p] >> h | x,
                x = (this[p] & c) << i;
            for (p = a - 1; p >= 0; --p)
                e[p] = 0;
            e[a] = x,
            e.t = this.t + a + 1,
            e.s = this.s,
            e.clamp()
        }
        function ue(t, e) {
            e.s = this.s;
            var i = Math.floor(t / this.DB);
            if (i >= this.t) {
                e.t = 0;
                return
            }
            var h = t % this.DB
              , c = this.DB - h
              , a = (1 << h) - 1;
            e[0] = this[i] >> h;
            for (var x = i + 1; x < this.t; ++x)
                e[x - i - 1] |= (this[x] & a) << c,
                e[x - i] = this[x] >> h;
            h > 0 && (e[this.t - i - 1] |= (this.s & a) << c),
            e.t = this.t - i,
            e.clamp()
        }
        function ce(t, e) {
            for (var i = 0, h = 0, c = Math.min(t.t, this.t); i < c; )
                h += this[i] - t[i],
                e[i++] = h & this.DM,
                h >>= this.DB;
            if (t.t < this.t) {
                for (h -= t.s; i < this.t; )
                    h += this[i],
                    e[i++] = h & this.DM,
                    h >>= this.DB;
                h += this.s
            } else {
                for (h += this.s; i < t.t; )
                    h -= t[i],
                    e[i++] = h & this.DM,
                    h >>= this.DB;
                h -= t.s
            }
            e.s = h < 0 ? -1 : 0,
            h < -1 ? e[i++] = this.DV + h : h > 0 && (e[i++] = h),
            e.t = i,
            e.clamp()
        }
        function le(t, e) {
            var i = this.abs()
              , h = t.abs()
              , c = i.t;
            for (e.t = c + h.t; --c >= 0; )
                e[c] = 0;
            for (c = 0; c < h.t; ++c)
                e[c + i.t] = i.am(0, h[c], e, c, 0, i.t);
            e.s = 0,
            e.clamp(),
            this.s != t.s && r.ZERO.subTo(e, e)
        }
        function ae(t) {
            for (var e = this.abs(), i = t.t = 2 * e.t; --i >= 0; )
                t[i] = 0;
            for (i = 0; i < e.t - 1; ++i) {
                var h = e.am(i, e[i], t, 2 * i, 0, 1);
                (t[i + e.t] += e.am(i + 1, 2 * e[i], t, 2 * i + 1, h, e.t - i - 1)) >= e.DV && (t[i + e.t] -= e.DV,
                t[i + e.t + 1] = 1)
            }
            t.t > 0 && (t[t.t - 1] += e.am(i, e[i], t, 2 * i, 0, 1)),
            t.s = 0,
            t.clamp()
        }
        function xe(t, e, i) {
            var h = t.abs();
            if (!(h.t <= 0)) {
                var c = this.abs();
                if (c.t < h.t) {
                    e != null && e.fromInt(0),
                    i != null && this.copyTo(i);
                    return
                }
                i == null && (i = l());
                var a = l()
                  , x = this.s
                  , p = t.s
                  , S = this.DB - xt(h[h.t - 1]);
                S > 0 ? (h.lShiftTo(S, a),
                c.lShiftTo(S, i)) : (h.copyTo(a),
                c.copyTo(i));
                var q = a.t
                  , L = a[q - 1];
                if (L != 0) {
                    var O = L * (1 << this.F1) + (q > 1 ? a[q - 2] >> this.F2 : 0)
                      , _ = this.FV / O
                      , dt = (1 << this.F1) / O
                      , V = 1 << this.F2
                      , k = i.t
                      , gt = k - q
                      , G = e ?? l();
                    for (a.dlShiftTo(gt, G),
                    i.compareTo(G) >= 0 && (i[i.t++] = 1,
                    i.subTo(G, i)),
                    r.ONE.dlShiftTo(q, G),
                    G.subTo(a, a); a.t < q; )
                        a[a.t++] = 0;
                    for (; --gt >= 0; ) {
                        var Dt = i[--k] == L ? this.DM : Math.floor(i[k] * _ + (i[k - 1] + V) * dt);
                        if ((i[k] += a.am(0, Dt, i, gt, 0, q)) < Dt)
                            for (a.dlShiftTo(gt, G),
                            i.subTo(G, i); i[k] < --Dt; )
                                i.subTo(G, i)
                    }
                    e != null && (i.drShiftTo(q, e),
                    x != p && r.ZERO.subTo(e, e)),
                    i.t = q,
                    i.clamp(),
                    S > 0 && i.rShiftTo(S, i),
                    x < 0 && r.ZERO.subTo(i, i)
                }
            }
        }
        function pe(t) {
            var e = l();
            return this.abs().divRemTo(t, null, e),
            this.s < 0 && e.compareTo(r.ZERO) > 0 && t.subTo(e, e),
            e
        }
        function Q(t) {
            this.m = t
        }
        function de(t) {
            return t.s < 0 || t.compareTo(this.m) >= 0 ? t.mod(this.m) : t
        }
        function ge(t) {
            return t
        }
        function me(t) {
            t.divRemTo(this.m, null, t)
        }
        function ye(t, e, i) {
            t.multiplyTo(e, i),
            this.reduce(i)
        }
        function ve(t, e) {
            t.squareTo(e),
            this.reduce(e)
        }
        Q.prototype.convert = de,
        Q.prototype.revert = ge,
        Q.prototype.reduce = me,
        Q.prototype.mulTo = ye,
        Q.prototype.sqrTo = ve;
        function be() {
            if (this.t < 1)
                return 0;
            var t = this[0];
            if (!(t & 1))
                return 0;
            var e = t & 3;
            return e = e * (2 - (t & 15) * e) & 15,
            e = e * (2 - (t & 255) * e) & 255,
            e = e * (2 - ((t & 65535) * e & 65535)) & 65535,
            e = e * (2 - t * e % this.DV) % this.DV,
            e > 0 ? this.DV - e : -e
        }
        function J(t) {
            this.m = t,
            this.mp = t.invDigit(),
            this.mpl = this.mp & 32767,
            this.mph = this.mp >> 15,
            this.um = (1 << t.DB - 15) - 1,
            this.mt2 = 2 * t.t
        }
        function Te(t) {
            var e = l();
            return t.abs().dlShiftTo(this.m.t, e),
            e.divRemTo(this.m, null, e),
            t.s < 0 && e.compareTo(r.ZERO) > 0 && this.m.subTo(e, e),
            e
        }
        function we(t) {
            var e = l();
            return t.copyTo(e),
            this.reduce(e),
            e
        }
        function Fe(t) {
            for (; t.t <= this.mt2; )
                t[t.t++] = 0;
            for (var e = 0; e < this.m.t; ++e) {
                var i = t[e] & 32767
                  , h = i * this.mpl + ((i * this.mph + (t[e] >> 15) * this.mpl & this.um) << 15) & t.DM;
                for (i = e + this.m.t,
                t[i] += this.m.am(0, h, t, e, 0, this.m.t); t[i] >= t.DV; )
                    t[i] -= t.DV,
                    t[++i]++
            }
            t.clamp(),
            t.drShiftTo(this.m.t, t),
            t.compareTo(this.m) >= 0 && t.subTo(this.m, t)
        }
        function Be(t, e) {
            t.squareTo(e),
            this.reduce(e)
        }
        function Se(t, e, i) {
            t.multiplyTo(e, i),
            this.reduce(i)
        }
        J.prototype.convert = Te,
        J.prototype.revert = we,
        J.prototype.reduce = Fe,
        J.prototype.mulTo = Se,
        J.prototype.sqrTo = Be;
        function Ie() {
            return (this.t > 0 ? this[0] & 1 : this.s) == 0
        }
        function De(t, e) {
            if (t > 4294967295 || t < 1)
                return r.ONE;
            var i = l()
              , h = l()
              , c = e.convert(this)
              , a = xt(t) - 1;
            for (c.copyTo(i); --a >= 0; )
                if (e.sqrTo(i, h),
                (t & 1 << a) > 0)
                    e.mulTo(h, c, i);
                else {
                    var x = i;
                    i = h,
                    h = x
                }
            return e.revert(i)
        }
        function qe(t, e) {
            var i;
            return t < 256 || e.isEven() ? i = new Q(e) : i = new J(e),
            this.exp(t, i)
        }
        r.prototype.copyTo = B,
        r.prototype.fromInt = $,
        r.prototype.fromString = wt,
        r.prototype.clamp = Ft,
        r.prototype.dlShiftTo = oe,
        r.prototype.drShiftTo = fe,
        r.prototype.lShiftTo = he,
        r.prototype.rShiftTo = ue,
        r.prototype.subTo = ce,
        r.prototype.multiplyTo = le,
        r.prototype.squareTo = ae,
        r.prototype.divRemTo = xe,
        r.prototype.invDigit = be,
        r.prototype.isEven = Ie,
        r.prototype.exp = De,
        r.prototype.toString = ee,
        r.prototype.negate = ie,
        r.prototype.abs = ne,
        r.prototype.compareTo = se,
        r.prototype.bitLength = re,
        r.prototype.mod = pe,
        r.prototype.modPowInt = qe,
        r.ZERO = Z(0),
        r.ONE = Z(1);
        function Ee() {
            var t = l();
            return this.copyTo(t),
            t
        }
        function Re() {
            if (this.s < 0) {
                if (this.t == 1)
                    return this[0] - this.DV;
                if (this.t == 0)
                    return -1
            } else {
                if (this.t == 1)
                    return this[0];
                if (this.t == 0)
                    return 0
            }
            return (this[1] & (1 << 32 - this.DB) - 1) << this.DB | this[0]
        }
        function Ae() {
            return this.t == 0 ? this.s : this[0] << 24 >> 24
        }
        function Pe() {
            return this.t == 0 ? this.s : this[0] << 16 >> 16
        }
        function Ce(t) {
            return Math.floor(Math.LN2 * this.DB / Math.log(t))
        }
        function Me() {
            return this.s < 0 ? -1 : this.t <= 0 || this.t == 1 && this[0] <= 0 ? 0 : 1
        }
        function Oe(t) {
            if (t == null && (t = 10),
            this.signum() == 0 || t < 2 || t > 36)
                return "0";
            var e = this.chunkSize(t)
              , i = Math.pow(t, e)
              , h = Z(i)
              , c = l()
              , a = l()
              , x = "";
            for (this.divRemTo(h, c, a); c.signum() > 0; )
                x = (i + a.intValue()).toString(t).substr(1) + x,
                c.divRemTo(h, c, a);
            return a.intValue().toString(t) + x
        }
        function He(t, e) {
            this.fromInt(0),
            e == null && (e = 10);
            for (var i = this.chunkSize(e), h = Math.pow(e, i), c = !1, a = 0, x = 0, p = 0; p < t.length; ++p) {
                var S = R(t, p);
                if (S < 0) {
                    t.charAt(p) == "-" && this.signum() == 0 && (c = !0);
                    continue
                }
                x = e * x + S,
                ++a >= i && (this.dMultiply(h),
                this.dAddOffset(x, 0),
                a = 0,
                x = 0)
            }
            a > 0 && (this.dMultiply(Math.pow(e, a)),
            this.dAddOffset(x, 0)),
            c && r.ZERO.subTo(this, this)
        }
        function Le(t, e, i) {
            if (typeof e == "number")
                if (t < 2)
                    this.fromInt(1);
                else
                    for (this.fromNumber(t, i),
                    this.testBit(t - 1) || this.bitwiseTo(r.ONE.shiftLeft(t - 1), Bt, this),
                    this.isEven() && this.dAddOffset(1, 0); !this.isProbablePrime(e); )
                        this.dAddOffset(2, 0),
                        this.bitLength() > t && this.subTo(r.ONE.shiftLeft(t - 1), this);
            else {
                var h = new Array
                  , c = t & 7;
                h.length = (t >> 3) + 1,
                e.nextBytes(h),
                c > 0 ? h[0] &= (1 << c) - 1 : h[0] = 0,
                this.fromString(h, 256)
            }
        }
        function Ne() {
            var t = this.t
              , e = new Array;
            e[0] = this.s;
            var i = this.DB - t * this.DB % 8, h, c = 0;
            if (t-- > 0)
                for (i < this.DB && (h = this[t] >> i) != (this.s & this.DM) >> i && (e[c++] = h | this.s << this.DB - i); t >= 0; )
                    i < 8 ? (h = (this[t] & (1 << i) - 1) << 8 - i,
                    h |= this[--t] >> (i += this.DB - 8)) : (h = this[t] >> (i -= 8) & 255,
                    i <= 0 && (i += this.DB,
                    --t)),
                    h & 128 && (h |= -256),
                    c == 0 && (this.s & 128) != (h & 128) && ++c,
                    (c > 0 || h != this.s) && (e[c++] = h);
            return e
        }
        function ze(t) {
            return this.compareTo(t) == 0
        }
        function Ve(t) {
            return this.compareTo(t) < 0 ? this : t
        }
        function ke(t) {
            return this.compareTo(t) > 0 ? this : t
        }
        function je(t, e, i) {
            var h, c, a = Math.min(t.t, this.t);
            for (h = 0; h < a; ++h)
                i[h] = e(this[h], t[h]);
            if (t.t < this.t) {
                for (c = t.s & this.DM,
                h = a; h < this.t; ++h)
                    i[h] = e(this[h], c);
                i.t = this.t
            } else {
                for (c = this.s & this.DM,
                h = a; h < t.t; ++h)
                    i[h] = e(c, t[h]);
                i.t = t.t
            }
            i.s = e(this.s, t.s),
            i.clamp()
        }
        function Ze(t, e) {
            return t & e
        }
        function $e(t) {
            var e = l();
            return this.bitwiseTo(t, Ze, e),
            e
        }
        function Bt(t, e) {
            return t | e
        }
        function _e(t) {
            var e = l();
            return this.bitwiseTo(t, Bt, e),
            e
        }
        function At(t, e) {
            return t ^ e
        }
        function Ge(t) {
            var e = l();
            return this.bitwiseTo(t, At, e),
            e
        }
        function Pt(t, e) {
            return t & ~e
        }
        function Ue(t) {
            var e = l();
            return this.bitwiseTo(t, Pt, e),
            e
        }
        function Ke() {
            for (var t = l(), e = 0; e < this.t; ++e)
                t[e] = this.DM & ~this[e];
            return t.t = this.t,
            t.s = ~this.s,
            t
        }
        function Ye(t) {
            var e = l();
            return t < 0 ? this.rShiftTo(-t, e) : this.lShiftTo(t, e),
            e
        }
        function Xe(t) {
            var e = l();
            return t < 0 ? this.lShiftTo(-t, e) : this.rShiftTo(t, e),
            e
        }
        function We(t) {
            if (t == 0)
                return -1;
            var e = 0;
            return t & 65535 || (t >>= 16,
            e += 16),
            t & 255 || (t >>= 8,
            e += 8),
            t & 15 || (t >>= 4,
            e += 4),
            t & 3 || (t >>= 2,
            e += 2),
            t & 1 || ++e,
            e
        }
        function Qe() {
            for (var t = 0; t < this.t; ++t)
                if (this[t] != 0)
                    return t * this.DB + We(this[t]);
            return this.s < 0 ? this.t * this.DB : -1
        }
        function Je(t) {
            for (var e = 0; t != 0; )
                t &= t - 1,
                ++e;
            return e
        }
        function ti() {
            for (var t = 0, e = this.s & this.DM, i = 0; i < this.t; ++i)
                t += Je(this[i] ^ e);
            return t
        }
        function ei(t) {
            var e = Math.floor(t / this.DB);
            return e >= this.t ? this.s != 0 : (this[e] & 1 << t % this.DB) != 0
        }
        function ii(t, e) {
            var i = r.ONE.shiftLeft(t);
            return this.bitwiseTo(i, e, i),
            i
        }
        function ni(t) {
            return this.changeBit(t, Bt)
        }
        function si(t) {
            return this.changeBit(t, Pt)
        }
        function ri(t) {
            return this.changeBit(t, At)
        }
        function oi(t, e) {
            for (var i = 0, h = 0, c = Math.min(t.t, this.t); i < c; )
                h += this[i] + t[i],
                e[i++] = h & this.DM,
                h >>= this.DB;
            if (t.t < this.t) {
                for (h += t.s; i < this.t; )
                    h += this[i],
                    e[i++] = h & this.DM,
                    h >>= this.DB;
                h += this.s
            } else {
                for (h += this.s; i < t.t; )
                    h += t[i],
                    e[i++] = h & this.DM,
                    h >>= this.DB;
                h += t.s
            }
            e.s = h < 0 ? -1 : 0,
            h > 0 ? e[i++] = h : h < -1 && (e[i++] = this.DV + h),
            e.t = i,
            e.clamp()
        }
        function fi(t) {
            var e = l();
            return this.addTo(t, e),
            e
        }
        function hi(t) {
            var e = l();
            return this.subTo(t, e),
            e
        }
        function ui(t) {
            var e = l();
            return this.multiplyTo(t, e),
            e
        }
        function ci() {
            var t = l();
            return this.squareTo(t),
            t
        }
        function li(t) {
            var e = l();
            return this.divRemTo(t, e, null),
            e
        }
        function ai(t) {
            var e = l();
            return this.divRemTo(t, null, e),
            e
        }
        function xi(t) {
            var e = l()
              , i = l();
            return this.divRemTo(t, e, i),
            new Array(e,i)
        }
        function pi(t) {
            this[this.t] = this.am(0, t - 1, this, 0, 0, this.t),
            ++this.t,
            this.clamp()
        }
        function di(t, e) {
            if (t != 0) {
                for (; this.t <= e; )
                    this[this.t++] = 0;
                for (this[e] += t; this[e] >= this.DV; )
                    this[e] -= this.DV,
                    ++e >= this.t && (this[this.t++] = 0),
                    ++this[e]
            }
        }
        function ut() {}
        function Ct(t) {
            return t
        }
        function gi(t, e, i) {
            t.multiplyTo(e, i)
        }
        function mi(t, e) {
            t.squareTo(e)
        }
        ut.prototype.convert = Ct,
        ut.prototype.revert = Ct,
        ut.prototype.mulTo = gi,
        ut.prototype.sqrTo = mi;
        function yi(t) {
            return this.exp(t, new ut)
        }
        function vi(t, e, i) {
            var h = Math.min(this.t + t.t, e);
            for (i.s = 0,
            i.t = h; h > 0; )
                i[--h] = 0;
            var c;
            for (c = i.t - this.t; h < c; ++h)
                i[h + this.t] = this.am(0, t[h], i, h, 0, this.t);
            for (c = Math.min(t.t, e); h < c; ++h)
                this.am(0, t[h], i, h, 0, e - h);
            i.clamp()
        }
        function bi(t, e, i) {
            --e;
            var h = i.t = this.t + t.t - e;
            for (i.s = 0; --h >= 0; )
                i[h] = 0;
            for (h = Math.max(e - this.t, 0); h < t.t; ++h)
                i[this.t + h - e] = this.am(e - h, t[h], i, 0, 0, this.t + h - e);
            i.clamp(),
            i.drShiftTo(1, i)
        }
        function tt(t) {
            this.r2 = l(),
            this.q3 = l(),
            r.ONE.dlShiftTo(2 * t.t, this.r2),
            this.mu = this.r2.divide(t),
            this.m = t
        }
        function Ti(t) {
            if (t.s < 0 || t.t > 2 * this.m.t)
                return t.mod(this.m);
            if (t.compareTo(this.m) < 0)
                return t;
            var e = l();
            return t.copyTo(e),
            this.reduce(e),
            e
        }
        function wi(t) {
            return t
        }
        function Fi(t) {
            for (t.drShiftTo(this.m.t - 1, this.r2),
            t.t > this.m.t + 1 && (t.t = this.m.t + 1,
            t.clamp()),
            this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3),
            this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2); t.compareTo(this.r2) < 0; )
                t.dAddOffset(1, this.m.t + 1);
            for (t.subTo(this.r2, t); t.compareTo(this.m) >= 0; )
                t.subTo(this.m, t)
        }
        function Bi(t, e) {
            t.squareTo(e),
            this.reduce(e)
        }
        function Si(t, e, i) {
            t.multiplyTo(e, i),
            this.reduce(i)
        }
        tt.prototype.convert = Ti,
        tt.prototype.revert = wi,
        tt.prototype.reduce = Fi,
        tt.prototype.mulTo = Si,
        tt.prototype.sqrTo = Bi;
        function Ii(t, e) {
            var i = t.bitLength(), h, c = Z(1), a;
            if (i <= 0)
                return c;
            i < 18 ? h = 1 : i < 48 ? h = 3 : i < 144 ? h = 4 : i < 768 ? h = 5 : h = 6,
            i < 8 ? a = new Q(e) : e.isEven() ? a = new tt(e) : a = new J(e);
            var x = new Array
              , p = 3
              , S = h - 1
              , q = (1 << h) - 1;
            if (x[1] = a.convert(this),
            h > 1) {
                var L = l();
                for (a.sqrTo(x[1], L); p <= q; )
                    x[p] = l(),
                    a.mulTo(L, x[p - 2], x[p]),
                    p += 2
            }
            var O = t.t - 1, _, dt = !0, V = l(), k;
            for (i = xt(t[O]) - 1; O >= 0; ) {
                for (i >= S ? _ = t[O] >> i - S & q : (_ = (t[O] & (1 << i + 1) - 1) << S - i,
                O > 0 && (_ |= t[O - 1] >> this.DB + i - S)),
                p = h; !(_ & 1); )
                    _ >>= 1,
                    --p;
                if ((i -= p) < 0 && (i += this.DB,
                --O),
                dt)
                    x[_].copyTo(c),
                    dt = !1;
                else {
                    for (; p > 1; )
                        a.sqrTo(c, V),
                        a.sqrTo(V, c),
                        p -= 2;
                    p > 0 ? a.sqrTo(c, V) : (k = c,
                    c = V,
                    V = k),
                    a.mulTo(V, x[_], c)
                }
                for (; O >= 0 && !(t[O] & 1 << i); )
                    a.sqrTo(c, V),
                    k = c,
                    c = V,
                    V = k,
                    --i < 0 && (i = this.DB - 1,
                    --O)
            }
            return a.revert(c)
        }
        function Di(t) {
            var e = this.s < 0 ? this.negate() : this.clone()
              , i = t.s < 0 ? t.negate() : t.clone();
            if (e.compareTo(i) < 0) {
                var h = e;
                e = i,
                i = h
            }
            var c = e.getLowestSetBit()
              , a = i.getLowestSetBit();
            if (a < 0)
                return e;
            for (c < a && (a = c),
            a > 0 && (e.rShiftTo(a, e),
            i.rShiftTo(a, i)); e.signum() > 0; )
                (c = e.getLowestSetBit()) > 0 && e.rShiftTo(c, e),
                (c = i.getLowestSetBit()) > 0 && i.rShiftTo(c, i),
                e.compareTo(i) >= 0 ? (e.subTo(i, e),
                e.rShiftTo(1, e)) : (i.subTo(e, i),
                i.rShiftTo(1, i));
            return a > 0 && i.lShiftTo(a, i),
            i
        }
        function qi(t) {
            if (t <= 0)
                return 0;
            var e = this.DV % t
              , i = this.s < 0 ? t - 1 : 0;
            if (this.t > 0)
                if (e == 0)
                    i = this[0] % t;
                else
                    for (var h = this.t - 1; h >= 0; --h)
                        i = (e * i + this[h]) % t;
            return i
        }
        function Ei(t) {
            var e = t.isEven();
            if (this.isEven() && e || t.signum() == 0)
                return r.ZERO;
            for (var i = t.clone(), h = this.clone(), c = Z(1), a = Z(0), x = Z(0), p = Z(1); i.signum() != 0; ) {
                for (; i.isEven(); )
                    i.rShiftTo(1, i),
                    e ? ((!c.isEven() || !a.isEven()) && (c.addTo(this, c),
                    a.subTo(t, a)),
                    c.rShiftTo(1, c)) : a.isEven() || a.subTo(t, a),
                    a.rShiftTo(1, a);
                for (; h.isEven(); )
                    h.rShiftTo(1, h),
                    e ? ((!x.isEven() || !p.isEven()) && (x.addTo(this, x),
                    p.subTo(t, p)),
                    x.rShiftTo(1, x)) : p.isEven() || p.subTo(t, p),
                    p.rShiftTo(1, p);
                i.compareTo(h) >= 0 ? (i.subTo(h, i),
                e && c.subTo(x, c),
                a.subTo(p, a)) : (h.subTo(i, h),
                e && x.subTo(c, x),
                p.subTo(a, p))
            }
            if (h.compareTo(r.ONE) != 0)
                return r.ZERO;
            if (p.compareTo(t) >= 0)
                return p.subtract(t);
            if (p.signum() < 0)
                p.addTo(t, p);
            else
                return p;
            return p.signum() < 0 ? p.add(t) : p
        }
        var A = [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]
          , Ri = (1 << 26) / A[A.length - 1];
        function Ai(t) {
            var e, i = this.abs();
            if (i.t == 1 && i[0] <= A[A.length - 1]) {
                for (e = 0; e < A.length; ++e)
                    if (i[0] == A[e])
                        return !0;
                return !1
            }
            if (i.isEven())
                return !1;
            for (e = 1; e < A.length; ) {
                for (var h = A[e], c = e + 1; c < A.length && h < Ri; )
                    h *= A[c++];
                for (h = i.modInt(h); e < c; )
                    if (h % A[e++] == 0)
                        return !1
            }
            return i.millerRabin(t)
        }
        function Pi(t) {
            var e = this.subtract(r.ONE)
              , i = e.getLowestSetBit();
            if (i <= 0)
                return !1;
            var h = e.shiftRight(i);
            t = t + 1 >> 1,
            t > A.length && (t = A.length);
            for (var c = l(), a = 0; a < t; ++a) {
                c.fromInt(A[Math.floor(Math.random() * A.length)]);
                var x = c.modPow(h, this);
                if (x.compareTo(r.ONE) != 0 && x.compareTo(e) != 0) {
                    for (var p = 1; p++ < i && x.compareTo(e) != 0; )
                        if (x = x.modPowInt(2, this),
                        x.compareTo(r.ONE) == 0)
                            return !1;
                    if (x.compareTo(e) != 0)
                        return !1
                }
            }
            return !0
        }
        r.prototype.chunkSize = Ce,
        r.prototype.toRadix = Oe,
        r.prototype.fromRadix = He,
        r.prototype.fromNumber = Le,
        r.prototype.bitwiseTo = je,
        r.prototype.changeBit = ii,
        r.prototype.addTo = oi,
        r.prototype.dMultiply = pi,
        r.prototype.dAddOffset = di,
        r.prototype.multiplyLowerTo = vi,
        r.prototype.multiplyUpperTo = bi,
        r.prototype.modInt = qi,
        r.prototype.millerRabin = Pi,
        r.prototype.clone = Ee,
        r.prototype.intValue = Re,
        r.prototype.byteValue = Ae,
        r.prototype.shortValue = Pe,
        r.prototype.signum = Me,
        r.prototype.toByteArray = Ne,
        r.prototype.equals = ze,
        r.prototype.min = Ve,
        r.prototype.max = ke,
        r.prototype.and = $e,
        r.prototype.or = _e,
        r.prototype.xor = Ge,
        r.prototype.andNot = Ue,
        r.prototype.not = Ke,
        r.prototype.shiftLeft = Ye,
        r.prototype.shiftRight = Xe,
        r.prototype.getLowestSetBit = Qe,
        r.prototype.bitCount = ti,
        r.prototype.testBit = ei,
        r.prototype.setBit = ni,
        r.prototype.clearBit = si,
        r.prototype.flipBit = ri,
        r.prototype.add = fi,
        r.prototype.subtract = hi,
        r.prototype.multiply = ui,
        r.prototype.divide = li,
        r.prototype.remainder = ai,
        r.prototype.divideAndRemainder = xi,
        r.prototype.modPow = Ii,
        r.prototype.modInverse = Ei,
        r.prototype.pow = yi,
        r.prototype.gcd = Di,
        r.prototype.isProbablePrime = Ai,
        r.prototype.square = ci,
        r.prototype.Barrett = tt;
        var pt, M, D;
        function Ci(t) {
            M[D++] ^= t & 255,
            M[D++] ^= t >> 8 & 255,
            M[D++] ^= t >> 16 & 255,
            M[D++] ^= t >> 24 & 255,
            D >= It && (D -= It)
        }
        function Mt() {
            Ci(new Date().getTime())
        }
        if (M == null) {
            M = new Array,
            D = 0;
            var z;
            if (typeof window < "u" && window.crypto) {
                if (window.crypto.getRandomValues) {
                    var Ot = new Uint8Array(32);
                    for (window.crypto.getRandomValues(Ot),
                    z = 0; z < 32; ++z)
                        M[D++] = Ot[z]
                } else if (navigator.appName == "Netscape" && navigator.appVersion < "5") {
                    var Ht = window.crypto.random(32);
                    for (z = 0; z < Ht.length; ++z)
                        M[D++] = Ht.charCodeAt(z) & 255
                }
            }
            for (; D < It; )
                z = Math.floor(65536 * Math.random()),
                M[D++] = z >>> 8,
                M[D++] = z & 255;
            D = 0,
            Mt()
        }
        function Mi() {
            if (pt == null) {
                for (Mt(),
                pt = Ni(),
                pt.init(M),
                D = 0; D < M.length; ++D)
                    M[D] = 0;
                D = 0
            }
            return pt.next()
        }
        function Oi(t) {
            var e;
            for (e = 0; e < t.length; ++e)
                t[e] = Mi()
        }
        function Lt() {}
        Lt.prototype.nextBytes = Oi;
        function St() {
            this.i = 0,
            this.j = 0,
            this.S = new Array
        }
        function Hi(t) {
            var e, i, h;
            for (e = 0; e < 256; ++e)
                this.S[e] = e;
            for (i = 0,
            e = 0; e < 256; ++e)
                i = i + this.S[e] + t[e % t.length] & 255,
                h = this.S[e],
                this.S[e] = this.S[i],
                this.S[i] = h;
            this.i = 0,
            this.j = 0
        }
        function Li() {
            var t;
            return this.i = this.i + 1 & 255,
            this.j = this.j + this.S[this.i] & 255,
            t = this.S[this.i],
            this.S[this.i] = this.S[this.j],
            this.S[this.j] = t,
            this.S[t + this.S[this.i] & 255]
        }
        St.prototype.init = Hi,
        St.prototype.next = Li;
        function Ni() {
            return new St
        }
        var It = 256;
        s.exports = {
            default: r,
            BigInteger: r,
            SecureRandom: Lt
        }
    }
    ).call(zi)
}
)(Vi);
const {BigInteger: ft} = ot;
function ki(s) {
    let n = s.toString(16);
    if (n[0] !== "-")
        n.length % 2 === 1 ? n = "0" + n : n.match(/^[0-7]/) || (n = "00" + n);
    else {
        n = n.substr(1);
        let o = n.length;
        o % 2 === 1 ? o += 1 : n.match(/^[0-7]/) || (o += 2);
        let f = "";
        for (let u = 0; u < o; u++)
            f += "f";
        f = new ft(f,16),
        n = f.xor(s).add(ft.ONE),
        n = n.toString(16).replace(/^-/, "")
    }
    return n
}
class _t {
    constructor() {
        this.tlv = null,
        this.t = "00",
        this.l = "00",
        this.v = ""
    }
    getEncodedHex() {
        return this.tlv || (this.v = this.getValue(),
        this.l = this.getLength(),
        this.tlv = this.t + this.l + this.v),
        this.tlv
    }
    getLength() {
        const n = this.v.length / 2;
        let o = n.toString(16);
        return o.length % 2 === 1 && (o = "0" + o),
        n < 128 ? o : (128 + o.length / 2).toString(16) + o
    }
    getValue() {
        return ""
    }
}
class Nt extends _t {
    constructor(n) {
        super(),
        this.t = "02",
        n && (this.v = ki(n))
    }
    getValue() {
        return this.v
    }
}
class ji extends _t {
    constructor(n) {
        super(),
        this.t = "30",
        this.asn1Array = n
    }
    getValue() {
        return this.v = this.asn1Array.map(n=>n.getEncodedHex()).join(""),
        this.v
    }
}
function Gt(s, n) {
    return +s[n + 2] < 8 ? 1 : +s.substr(n + 2, 2) & 127 + 1
}
function zt(s, n) {
    const o = Gt(s, n)
      , f = s.substr(n + 2, o * 2);
    return f ? (+f[0] < 8 ? new ft(f,16) : new ft(f.substr(2),16)).intValue() : -1
}
function qt(s, n) {
    const o = Gt(s, n);
    return n + (o + 1) * 2
}
var Zi = {
    encodeDer(s, n) {
        const o = new Nt(s)
          , f = new Nt(n);
        return new ji([o, f]).getEncodedHex()
    },
    decodeDer(s) {
        const n = qt(s, 0)
          , o = qt(s, n)
          , f = zt(s, n)
          , u = s.substr(o, f * 2)
          , r = o + u.length
          , l = qt(s, r)
          , g = zt(s, r)
          , d = s.substr(l, g * 2)
          , m = new ft(u,16)
          , w = new ft(d,16);
        return {
            r: m,
            s: w
        }
    }
};
const {BigInteger: P} = ot
  , Vt = new P("2")
  , kt = new P("3");
class Y {
    constructor(n, o) {
        this.x = o,
        this.q = n
    }
    equals(n) {
        return n === this ? !0 : this.q.equals(n.q) && this.x.equals(n.x)
    }
    toBigInteger() {
        return this.x
    }
    negate() {
        return new Y(this.q,this.x.negate().mod(this.q))
    }
    add(n) {
        return new Y(this.q,this.x.add(n.toBigInteger()).mod(this.q))
    }
    subtract(n) {
        return new Y(this.q,this.x.subtract(n.toBigInteger()).mod(this.q))
    }
    multiply(n) {
        return new Y(this.q,this.x.multiply(n.toBigInteger()).mod(this.q))
    }
    divide(n) {
        return new Y(this.q,this.x.multiply(n.toBigInteger().modInverse(this.q)).mod(this.q))
    }
    square() {
        return new Y(this.q,this.x.square().mod(this.q))
    }
}
class W {
    constructor(n, o, f, u) {
        this.curve = n,
        this.x = o,
        this.y = f,
        this.z = u ?? P.ONE,
        this.zinv = null
    }
    getX() {
        return this.zinv === null && (this.zinv = this.z.modInverse(this.curve.q)),
        this.curve.fromBigInteger(this.x.toBigInteger().multiply(this.zinv).mod(this.curve.q))
    }
    getY() {
        return this.zinv === null && (this.zinv = this.z.modInverse(this.curve.q)),
        this.curve.fromBigInteger(this.y.toBigInteger().multiply(this.zinv).mod(this.curve.q))
    }
    equals(n) {
        return n === this ? !0 : this.isInfinity() ? n.isInfinity() : n.isInfinity() ? this.isInfinity() : n.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(n.z)).mod(this.curve.q).equals(P.ZERO) ? n.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(n.z)).mod(this.curve.q).equals(P.ZERO) : !1
    }
    isInfinity() {
        return this.x === null && this.y === null ? !0 : this.z.equals(P.ZERO) && !this.y.toBigInteger().equals(P.ZERO)
    }
    negate() {
        return new W(this.curve,this.x,this.y.negate(),this.z)
    }
    add(n) {
        if (this.isInfinity())
            return n;
        if (n.isInfinity())
            return this;
        const o = this.x.toBigInteger()
          , f = this.y.toBigInteger()
          , u = this.z
          , r = n.x.toBigInteger()
          , l = n.y.toBigInteger()
          , g = n.z
          , d = this.curve.q
          , m = o.multiply(g).mod(d)
          , w = r.multiply(u).mod(d)
          , y = m.subtract(w)
          , b = f.multiply(g).mod(d)
          , F = l.multiply(u).mod(d)
          , T = b.subtract(F);
        if (P.ZERO.equals(y))
            return P.ZERO.equals(T) ? this.twice() : this.curve.infinity;
        const I = m.add(w)
          , C = u.multiply(g).mod(d)
          , R = y.square().mod(d)
          , B = y.multiply(R).mod(d)
          , $ = C.multiply(T.square()).subtract(I.multiply(R)).mod(d)
          , Z = y.multiply($).mod(d)
          , wt = T.multiply(R.multiply(m).subtract($)).subtract(b.multiply(B)).mod(d)
          , Ft = B.multiply(C).mod(d);
        return new W(this.curve,this.curve.fromBigInteger(Z),this.curve.fromBigInteger(wt),Ft)
    }
    twice() {
        if (this.isInfinity())
            return this;
        if (!this.y.toBigInteger().signum())
            return this.curve.infinity;
        const n = this.x.toBigInteger()
          , o = this.y.toBigInteger()
          , f = this.z
          , u = this.curve.q
          , r = this.curve.a.toBigInteger()
          , l = n.square().multiply(kt).add(r.multiply(f.square())).mod(u)
          , g = o.shiftLeft(1).multiply(f).mod(u)
          , d = o.square().mod(u)
          , m = d.multiply(n).multiply(f).mod(u)
          , w = g.square().mod(u)
          , y = l.square().subtract(m.shiftLeft(3)).mod(u)
          , b = g.multiply(y).mod(u)
          , F = l.multiply(m.shiftLeft(2).subtract(y)).subtract(w.shiftLeft(1).multiply(d)).mod(u)
          , T = g.multiply(w).mod(u);
        return new W(this.curve,this.curve.fromBigInteger(b),this.curve.fromBigInteger(F),T)
    }
    multiply(n) {
        if (this.isInfinity())
            return this;
        if (!n.signum())
            return this.curve.infinity;
        const o = n.multiply(kt)
          , f = this.negate();
        let u = this;
        for (let r = o.bitLength() - 2; r > 0; r--) {
            u = u.twice();
            const l = o.testBit(r)
              , g = n.testBit(r);
            l !== g && (u = u.add(l ? this : f))
        }
        return u
    }
}
let $i = class {
    constructor(n, o, f) {
        this.q = n,
        this.a = this.fromBigInteger(o),
        this.b = this.fromBigInteger(f),
        this.infinity = new W(this,null,null)
    }
    equals(n) {
        return n === this ? !0 : this.q.equals(n.q) && this.a.equals(n.a) && this.b.equals(n.b)
    }
    fromBigInteger(n) {
        return new Y(this.q,n)
    }
    decodePointHex(n) {
        switch (parseInt(n.substr(0, 2), 16)) {
        case 0:
            return this.infinity;
        case 2:
        case 3:
            const o = this.fromBigInteger(new P(n.substr(2),16));
            let f = this.fromBigInteger(o.multiply(o.square()).add(o.multiply(this.a)).add(this.b).toBigInteger().modPow(this.q.divide(new P("4")).add(P.ONE), this.q));
            return f.toBigInteger().mod(Vt).equals(new P(n.substr(0, 2),16).subtract(Vt)) || (f = f.negate()),
            new W(this,o,f);
        case 4:
        case 6:
        case 7:
            const u = (n.length - 2) / 2
              , r = n.substr(2, u)
              , l = n.substr(u + 2, u);
            return new W(this,this.fromBigInteger(new P(r,16)),this.fromBigInteger(new P(l,16)));
        default:
            return null
        }
    }
}
;
var _i = {
    ECPointFp: W,
    ECCurveFp: $i
};
const {BigInteger: j, SecureRandom: Gi} = ot
  , {ECCurveFp: Ui} = _i
  , Ki = new Gi
  , {curve: rt, G: Yi, n: jt} = Ut();
function Xi() {
    return rt
}
function Ut() {
    const s = new j("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF",16)
      , n = new j("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC",16)
      , o = new j("28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93",16)
      , f = new Ui(s,n,o)
      , u = "32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7"
      , r = "BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0"
      , l = f.decodePointHex("04" + u + r)
      , g = new j("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123",16);
    return {
        curve: f,
        G: l,
        n: g
    }
}
function Wi(s, n, o) {
    const u = (s ? new j(s,n,o) : new j(jt.bitLength(),Ki)).mod(jt.subtract(j.ONE)).add(j.ONE)
      , r = ct(u.toString(16), 64)
      , l = Yi.multiply(u)
      , g = ct(l.getX().toBigInteger().toString(16), 64)
      , d = ct(l.getY().toBigInteger().toString(16), 64)
      , m = "04" + g + d;
    return {
        privateKey: r,
        publicKey: m
    }
}
function Qi(s) {
    if (s.length !== 130)
        throw new Error("Invalid public key to compress");
    const n = (s.length - 2) / 2
      , o = s.substr(2, n)
      , f = new j(s.substr(n + 2, n),16);
    let u = "03";
    return f.mod(new j("2")).equals(j.ZERO) && (u = "02"),
    u + o
}
function Ji(s) {
    s = unescape(encodeURIComponent(s));
    const n = s.length
      , o = [];
    for (let u = 0; u < n; u++)
        o[u >>> 2] |= (s.charCodeAt(u) & 255) << 24 - u % 4 * 8;
    const f = [];
    for (let u = 0; u < n; u++) {
        const r = o[u >>> 2] >>> 24 - u % 4 * 8 & 255;
        f.push((r >>> 4).toString(16)),
        f.push((r & 15).toString(16))
    }
    return f.join("")
}
function ct(s, n) {
    return s.length >= n ? s : new Array(n - s.length + 1).join("0") + s
}
function tn(s) {
    return s.map(n=>(n = n.toString(16),
    n.length === 1 ? "0" + n : n)).join("")
}
function en(s) {
    const n = [];
    let o = 0;
    for (let f = 0; f < s.length * 2; f += 2)
        n[f >>> 3] |= parseInt(s[o], 10) << 24 - f % 8 * 4,
        o++;
    try {
        const f = [];
        for (let u = 0; u < s.length; u++) {
            const r = n[u >>> 2] >>> 24 - u % 4 * 8 & 255;
            f.push(String.fromCharCode(r))
        }
        return decodeURIComponent(escape(f.join("")))
    } catch {
        throw new Error("Malformed UTF-8 data")
    }
}
function nn(s) {
    const n = [];
    let o = s.length;
    o % 2 !== 0 && (s = ct(s, o + 1)),
    o = s.length;
    for (let f = 0; f < o; f += 2)
        n.push(parseInt(s.substr(f, 2), 16));
    return n
}
function sn(s) {
    const n = rt.decodePointHex(s);
    if (!n)
        return !1;
    const o = n.getX();
    return n.getY().square().equals(o.multiply(o.square()).add(o.multiply(rt.a)).add(rt.b))
}
function rn(s, n) {
    const o = rt.decodePointHex(s);
    if (!o)
        return !1;
    const f = rt.decodePointHex(n);
    return f ? o.equals(f) : !1
}
var on = {
    getGlobalCurve: Xi,
    generateEcparam: Ut,
    generateKeyPairHex: Wi,
    compressPublicKeyHex: Qi,
    utf8ToHex: Ji,
    leftPad: ct,
    arrayToHex: tn,
    arrayToUtf8: en,
    hexToArray: nn,
    verifyPublicKey: sn,
    comparePublicKeyHex: rn
};
function N(s, n) {
    const o = []
      , f = ~~(n / 8)
      , u = n % 8;
    for (let r = 0, l = s.length; r < l; r++)
        o[r] = (s[(r + f) % l] << u & 255) + (s[(r + f + 1) % l] >>> 8 - u & 255);
    return o
}
function E(s, n) {
    const o = [];
    for (let f = s.length - 1; f >= 0; f--)
        o[f] = (s[f] ^ n[f]) & 255;
    return o
}
function lt(s, n) {
    const o = [];
    for (let f = s.length - 1; f >= 0; f--)
        o[f] = s[f] & n[f] & 255;
    return o
}
function Rt(s, n) {
    const o = [];
    for (let f = s.length - 1; f >= 0; f--)
        o[f] = (s[f] | n[f]) & 255;
    return o
}
function U(s, n) {
    const o = [];
    let f = 0;
    for (let u = s.length - 1; u >= 0; u--) {
        const r = s[u] + n[u] + f;
        r > 255 ? (f = 1,
        o[u] = r & 255) : (f = 0,
        o[u] = r & 255)
    }
    return o
}
function fn(s) {
    const n = [];
    for (let o = s.length - 1; o >= 0; o--)
        n[o] = ~s[o] & 255;
    return n
}
function hn(s) {
    return E(E(s, N(s, 9)), N(s, 17))
}
function un(s) {
    return E(E(s, N(s, 15)), N(s, 23))
}
function cn(s, n, o, f) {
    return f >= 0 && f <= 15 ? E(E(s, n), o) : Rt(Rt(lt(s, n), lt(s, o)), lt(n, o))
}
function ln(s, n, o, f) {
    return f >= 0 && f <= 15 ? E(E(s, n), o) : Rt(lt(s, n), lt(fn(s), o))
}
function an(s, n) {
    const o = []
      , f = [];
    for (let B = 0; B < 16; B++) {
        const $ = B * 4;
        o.push(n.slice($, $ + 4))
    }
    for (let B = 16; B < 68; B++)
        o.push(E(E(un(E(E(o[B - 16], o[B - 9]), N(o[B - 3], 15))), N(o[B - 13], 7)), o[B - 6]));
    for (let B = 0; B < 64; B++)
        f.push(E(o[B], o[B + 4]));
    const u = [121, 204, 69, 25]
      , r = [122, 135, 157, 138];
    let l = s.slice(0, 4), g = s.slice(4, 8), d = s.slice(8, 12), m = s.slice(12, 16), w = s.slice(16, 20), y = s.slice(20, 24), b = s.slice(24, 28), F = s.slice(28, 32), T, I, C, R;
    for (let B = 0; B < 64; B++) {
        const $ = B >= 0 && B <= 15 ? u : r;
        T = N(U(U(N(l, 12), w), N($, B)), 7),
        I = E(T, N(l, 12)),
        C = U(U(U(cn(l, g, d, B), m), I), f[B]),
        R = U(U(U(ln(w, y, b, B), F), T), o[B]),
        m = d,
        d = N(g, 9),
        g = l,
        l = C,
        F = b,
        b = N(y, 19),
        y = w,
        w = hn(R)
    }
    return E([].concat(l, g, d, m, w, y, b, F), s)
}
function Tt(s) {
    let n = s.length * 8
      , o = n % 512;
    o = o >= 448 ? 512 - o % 448 - 1 : 448 - o - 1;
    const f = new Array((o - 7) / 8);
    for (let d = 0, m = f.length; d < m; d++)
        f[d] = 0;
    const u = [];
    n = n.toString(2);
    for (let d = 7; d >= 0; d--)
        if (n.length > 8) {
            const m = n.length - 8;
            u[d] = parseInt(n.substr(m), 2),
            n = n.substr(0, m)
        } else
            n.length > 0 ? (u[d] = parseInt(n, 2),
            n = "") : u[d] = 0;
    const r = [].concat(s, [128], f, u)
      , l = r.length / 64;
    let g = [115, 128, 22, 111, 73, 20, 178, 185, 23, 36, 66, 215, 218, 138, 6, 0, 169, 111, 48, 188, 22, 49, 56, 170, 227, 141, 238, 77, 176, 251, 14, 78];
    for (let d = 0; d < l; d++) {
        const m = 64 * d
          , w = r.slice(m, m + 64);
        g = an(g, w)
    }
    return g
}
const at = 64
  , Kt = new Array(at)
  , Yt = new Array(at);
for (let s = 0; s < at; s++)
    Kt[s] = 54,
    Yt[s] = 92;
function xn(s, n) {
    for (n.length > at && (n = Tt(n)); n.length < at; )
        n.push(0);
    let f = E(n, Kt).concat(s);
    return f = Tt(f),
    f = E(n, Yt).concat(f),
    f = Tt(f),
    f
}
var Xt = {
    sm3: Tt,
    hmac: xn
};
const {BigInteger: H} = ot
  , {encodeDer: pn, decodeDer: dn} = Zi
  , v = on
  , ht = Xt.sm3
  , {G: it, curve: Wt, n: nt} = v.generateEcparam()
  , Qt = 0;
function gn(s, n, o=1) {
    s = typeof s == "string" ? v.hexToArray(v.utf8ToHex(s)) : Array.prototype.slice.call(s),
    n = v.getGlobalCurve().decodePointHex(n);
    const f = v.generateKeyPairHex()
      , u = new H(f.privateKey,16);
    let r = f.publicKey;
    r.length > 128 && (r = r.substr(r.length - 128));
    const l = n.multiply(u)
      , g = v.hexToArray(v.leftPad(l.getX().toBigInteger().toRadix(16), 64))
      , d = v.hexToArray(v.leftPad(l.getY().toBigInteger().toRadix(16), 64))
      , m = v.arrayToHex(ht([].concat(g, s, d)));
    let w = 1
      , y = 0
      , b = [];
    const F = [].concat(g, d)
      , T = ()=>{
        b = ht([...F, w >> 24 & 255, w >> 16 & 255, w >> 8 & 255, w & 255]),
        w++,
        y = 0
    }
    ;
    T();
    for (let C = 0, R = s.length; C < R; C++)
        y === b.length && T(),
        s[C] ^= b[y++] & 255;
    const I = v.arrayToHex(s);
    return o === Qt ? r + I + m : r + m + I
}
function mn(s, n, o=1, {output: f="string"}={}) {
    n = new H(n,16);
    let u = s.substr(128, 64)
      , r = s.substr(128 + 64);
    o === Qt && (u = s.substr(s.length - 64),
    r = s.substr(128, s.length - 128 - 64));
    const l = v.hexToArray(r)
      , d = v.getGlobalCurve().decodePointHex("04" + s.substr(0, 128)).multiply(n)
      , m = v.hexToArray(v.leftPad(d.getX().toBigInteger().toRadix(16), 64))
      , w = v.hexToArray(v.leftPad(d.getY().toBigInteger().toRadix(16), 64));
    let y = 1
      , b = 0
      , F = [];
    const T = [].concat(m, w)
      , I = ()=>{
        F = ht([...T, y >> 24 & 255, y >> 16 & 255, y >> 8 & 255, y & 255]),
        y++,
        b = 0
    }
    ;
    I();
    for (let R = 0, B = l.length; R < B; R++)
        b === F.length && I(),
        l[R] ^= F[b++] & 255;
    return v.arrayToHex(ht([].concat(m, l, w))) === u.toLowerCase() ? f === "array" ? l : v.arrayToUtf8(l) : f === "array" ? [] : ""
}
function yn(s, n, {pointPool: o, der: f, hash: u, publicKey: r, userId: l}={}) {
    let g = typeof s == "string" ? v.utf8ToHex(s) : v.arrayToHex(s);
    u && (r = r || bn(n),
    g = Jt(g, r, l));
    const d = new H(n,16)
      , m = new H(g,16);
    let w = null
      , y = null
      , b = null;
    do {
        do {
            let F;
            o && o.length ? F = o.pop() : F = te(),
            w = F.k,
            y = m.add(F.x1).mod(nt)
        } while (y.equals(H.ZERO) || y.add(w).equals(nt));
        b = d.add(H.ONE).modInverse(nt).multiply(w.subtract(y.multiply(d))).mod(nt)
    } while (b.equals(H.ZERO));
    return f ? pn(y, b) : v.leftPad(y.toString(16), 64) + v.leftPad(b.toString(16), 64)
}
function vn(s, n, o, {der: f, hash: u, userId: r}={}) {
    let l = typeof s == "string" ? v.utf8ToHex(s) : v.arrayToHex(s);
    u && (l = Jt(l, o, r));
    let g, d;
    if (f) {
        const T = dn(n);
        g = T.r,
        d = T.s
    } else
        g = new H(n.substring(0, 64),16),
        d = new H(n.substring(64),16);
    const m = Wt.decodePointHex(o)
      , w = new H(l,16)
      , y = g.add(d).mod(nt);
    if (y.equals(H.ZERO))
        return !1;
    const b = it.multiply(d).add(m.multiply(y))
      , F = w.add(b.getX().toBigInteger()).mod(nt);
    return g.equals(F)
}
function Jt(s, n, o="1234567812345678") {
    o = v.utf8ToHex(o);
    const f = v.leftPad(it.curve.a.toBigInteger().toRadix(16), 64)
      , u = v.leftPad(it.curve.b.toBigInteger().toRadix(16), 64)
      , r = v.leftPad(it.getX().toBigInteger().toRadix(16), 64)
      , l = v.leftPad(it.getY().toBigInteger().toRadix(16), 64);
    let g, d;
    if (n.length === 128)
        g = n.substr(0, 64),
        d = n.substr(64, 64);
    else {
        const b = it.curve.decodePointHex(n);
        g = v.leftPad(b.getX().toBigInteger().toRadix(16), 64),
        d = v.leftPad(b.getY().toBigInteger().toRadix(16), 64)
    }
    const m = v.hexToArray(o + f + u + r + l + g + d)
      , w = o.length * 4;
    m.unshift(w & 255),
    m.unshift(w >> 8 & 255);
    const y = ht(m);
    return v.arrayToHex(ht(y.concat(v.hexToArray(s))))
}
function bn(s) {
    const n = it.multiply(new H(s,16))
      , o = v.leftPad(n.getX().toBigInteger().toString(16), 64)
      , f = v.leftPad(n.getY().toBigInteger().toString(16), 64);
    return "04" + o + f
}
function te() {
    const s = v.generateKeyPairHex()
      , n = Wt.decodePointHex(s.publicKey);
    return s.k = new H(s.privateKey,16),
    s.x1 = n.getX().toBigInteger(),
    s
}
var Tn = {
    generateKeyPairHex: v.generateKeyPairHex,
    compressPublicKeyHex: v.compressPublicKeyHex,
    comparePublicKeyHex: v.comparePublicKeyHex,
    doEncrypt: gn,
    doDecrypt: mn,
    doSignature: yn,
    doVerifySignature: vn,
    getPoint: te,
    verifyPublicKey: v.verifyPublicKey
};
const {sm3: wn, hmac: Fn} = Xt;
function Bn(s, n) {
    return s.length >= n ? s : new Array(n - s.length + 1).join("0") + s
}
function Zt(s) {
    return s.map(n=>(n = n.toString(16),
    n.length === 1 ? "0" + n : n)).join("")
}
function Sn(s) {
    const n = [];
    let o = s.length;
    o % 2 !== 0 && (s = Bn(s, o + 1)),
    o = s.length;
    for (let f = 0; f < o; f += 2)
        n.push(parseInt(s.substr(f, 2), 16));
    return n
}
function In(s) {
    const n = [];
    for (let o = 0, f = s.length; o < f; o++) {
        const u = s.codePointAt(o);
        if (u <= 127)
            n.push(u);
        else if (u <= 2047)
            n.push(192 | u >>> 6),
            n.push(128 | u & 63);
        else if (u <= 55295 || u >= 57344 && u <= 65535)
            n.push(224 | u >>> 12),
            n.push(128 | u >>> 6 & 63),
            n.push(128 | u & 63);
        else if (u >= 65536 && u <= 1114111)
            o++,
            n.push(240 | u >>> 18 & 28),
            n.push(128 | u >>> 12 & 63),
            n.push(128 | u >>> 6 & 63),
            n.push(128 | u & 63);
        else
            throw n.push(u),
            new Error("input is not supported")
    }
    return n
}
var Dn = function(s, n) {
    if (s = typeof s == "string" ? In(s) : Array.prototype.slice.call(s),
    n) {
        if ((n.mode || "hmac") !== "hmac")
            throw new Error("invalid mode");
        let f = n.key;
        if (!f)
            throw new Error("invalid key");
        return f = typeof f == "string" ? Sn(f) : Array.prototype.slice.call(f),
        Zt(Fn(s, f))
    }
    return Zt(wn(s))
};
const K = 0
  , qn = 32
  , et = 16
  , mt = [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]
  , yt = [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 Et(s) {
    const n = [];
    for (let o = 0, f = s.length; o < f; o += 2)
        n.push(parseInt(s.substr(o, 2), 16));
    return n
}
function En(s) {
    return s.map(n=>(n = n.toString(16),
    n.length === 1 ? "0" + n : n)).join("")
}
function Rn(s) {
    const n = [];
    for (let o = 0, f = s.length; o < f; o++) {
        const u = s.codePointAt(o);
        if (u <= 127)
            n.push(u);
        else if (u <= 2047)
            n.push(192 | u >>> 6),
            n.push(128 | u & 63);
        else if (u <= 55295 || u >= 57344 && u <= 65535)
            n.push(224 | u >>> 12),
            n.push(128 | u >>> 6 & 63),
            n.push(128 | u & 63);
        else if (u >= 65536 && u <= 1114111)
            o++,
            n.push(240 | u >>> 18 & 28),
            n.push(128 | u >>> 12 & 63),
            n.push(128 | u >>> 6 & 63),
            n.push(128 | u & 63);
        else
            throw n.push(u),
            new Error("input is not supported")
    }
    return n
}
function An(s) {
    const n = [];
    for (let o = 0, f = s.length; o < f; o++)
        s[o] >= 240 && s[o] <= 247 ? (n.push(String.fromCodePoint(((s[o] & 7) << 18) + ((s[o + 1] & 63) << 12) + ((s[o + 2] & 63) << 6) + (s[o + 3] & 63))),
        o += 3) : s[o] >= 224 && s[o] <= 239 ? (n.push(String.fromCodePoint(((s[o] & 15) << 12) + ((s[o + 1] & 63) << 6) + (s[o + 2] & 63))),
        o += 2) : s[o] >= 192 && s[o] <= 223 ? (n.push(String.fromCodePoint(((s[o] & 31) << 6) + (s[o + 1] & 63))),
        o++) : n.push(String.fromCodePoint(s[o]));
    return n.join("")
}
function st(s, n) {
    return s << n | s >>> 32 - n
}
function X(s) {
    return (mt[s >>> 24 & 255] & 255) << 24 | (mt[s >>> 16 & 255] & 255) << 16 | (mt[s >>> 8 & 255] & 255) << 8 | mt[s & 255] & 255
}
function vt(s) {
    return s ^ st(s, 2) ^ st(s, 10) ^ st(s, 18) ^ st(s, 24)
}
function bt(s) {
    return s ^ st(s, 13) ^ st(s, 23)
}
function Pn(s, n, o) {
    const f = new Array(4)
      , u = new Array(4);
    for (let r = 0; r < 4; r++)
        u[0] = s[4 * r] & 255,
        u[1] = s[4 * r + 1] & 255,
        u[2] = s[4 * r + 2] & 255,
        u[3] = s[4 * r + 3] & 255,
        f[r] = u[0] << 24 | u[1] << 16 | u[2] << 8 | u[3];
    for (let r = 0, l; r < 32; r += 4)
        l = f[1] ^ f[2] ^ f[3] ^ o[r + 0],
        f[0] ^= vt(X(l)),
        l = f[2] ^ f[3] ^ f[0] ^ o[r + 1],
        f[1] ^= vt(X(l)),
        l = f[3] ^ f[0] ^ f[1] ^ o[r + 2],
        f[2] ^= vt(X(l)),
        l = f[0] ^ f[1] ^ f[2] ^ o[r + 3],
        f[3] ^= vt(X(l));
    for (let r = 0; r < 16; r += 4)
        n[r] = f[3 - r / 4] >>> 24 & 255,
        n[r + 1] = f[3 - r / 4] >>> 16 & 255,
        n[r + 2] = f[3 - r / 4] >>> 8 & 255,
        n[r + 3] = f[3 - r / 4] & 255
}
function Cn(s, n, o) {
    const f = new Array(4)
      , u = new Array(4);
    for (let r = 0; r < 4; r++)
        u[0] = s[0 + 4 * r] & 255,
        u[1] = s[1 + 4 * r] & 255,
        u[2] = s[2 + 4 * r] & 255,
        u[3] = s[3 + 4 * r] & 255,
        f[r] = u[0] << 24 | u[1] << 16 | u[2] << 8 | u[3];
    f[0] ^= 2746333894,
    f[1] ^= 1453994832,
    f[2] ^= 1736282519,
    f[3] ^= 2993693404;
    for (let r = 0, l; r < 32; r += 4)
        l = f[1] ^ f[2] ^ f[3] ^ yt[r + 0],
        n[r + 0] = f[0] ^= bt(X(l)),
        l = f[2] ^ f[3] ^ f[0] ^ yt[r + 1],
        n[r + 1] = f[1] ^= bt(X(l)),
        l = f[3] ^ f[0] ^ f[1] ^ yt[r + 2],
        n[r + 2] = f[2] ^= bt(X(l)),
        l = f[0] ^ f[1] ^ f[2] ^ yt[r + 3],
        n[r + 3] = f[3] ^= bt(X(l));
    if (o === K)
        for (let r = 0, l; r < 16; r++)
            l = n[r],
            n[r] = n[31 - r],
            n[31 - r] = l
}
function $t(s, n, o, {padding: f="pkcs#7", mode: u, iv: r=[], output: l="string"}={}) {
    if (u === "cbc" && (typeof r == "string" && (r = Et(r)),
    r.length !== 128 / 8))
        throw new Error("iv is invalid");
    if (typeof n == "string" && (n = Et(n)),
    n.length !== 128 / 8)
        throw new Error("key is invalid");
    if (typeof s == "string" ? o !== K ? s = Rn(s) : s = Et(s) : s = [...s],
    (f === "pkcs#5" || f === "pkcs#7") && o !== K) {
        const b = et - s.length % et;
        for (let F = 0; F < b; F++)
            s.push(b)
    }
    const g = new Array(qn);
    Cn(n, g, o);
    const d = [];
    let m = r
      , w = s.length
      , y = 0;
    for (; w >= et; ) {
        const b = s.slice(y, y + 16)
          , F = new Array(16);
        if (u === "cbc")
            for (let T = 0; T < et; T++)
                o !== K && (b[T] ^= m[T]);
        Pn(b, F, g);
        for (let T = 0; T < et; T++)
            u === "cbc" && o === K && (F[T] ^= m[T]),
            d[y + T] = F[T];
        u === "cbc" && (o !== K ? m = F : m = b),
        w -= et,
        y += et
    }
    if ((f === "pkcs#5" || f === "pkcs#7") && o === K) {
        const b = d.length
          , F = d[b - 1];
        for (let T = 1; T <= F; T++)
            if (d[b - T] !== F)
                throw new Error("padding is invalid");
        d.splice(b - F, F)
    }
    return l !== "array" ? o !== K ? En(d) : An(d) : d
}
var Mn = {
    encrypt(s, n, o) {
        return $t(s, n, 1, o)
    },
    decrypt(s, n, o) {
        return $t(s, n, 0, o)
    }
}
  , Ln = {
    sm2: Tn,
    sm3: Dn,
    sm4: Mn
};
Ln;


var sm4 = Ln.sm4;








// ------------------







const plaintext = '97e925c4c8f5907ebe0097727336261e56c729398b167d32a71e3937fd052c356d99fac94044a50b676b1b6eba9caa23a596837384bdccbc3149102bf2901504e1da0bdbe3b1d7761e42ea26ed37f01653799dc6da00cf3d87f77632f5e6ce4ffabe80909bd67d8cd43570251a3dad7ee6a3023c03cf1e99ef123f51f56ba2e961b62e3161391ff62faecec02e7171601b9e0425cdcf85a8c5da4f19b1f27bb989cbe9d42873c3bd12e8391205a1e548be88bf4d02e2358749319fed9e99a4af3096df10dbb0ae6a8df20d77c76c69e8f76128ac234cde915f16bb14fdc39f610be791b61410649fd6516df6b20bdb2f8e3982a63ac62138639140dfae22924a0e5de67907a7e7c9e0756e6f5e65eb23ab8b67174b8e00aecc5026af5c45534e217d5e4c161e3eb137620de460877b95ffff43ebd4e907ba8aef0ceb510c88c79b64be72a7d15ca873d2d75beaf0f26236ae2073725000fb5c32cd312ac3e5fab8bc8ef6bd18847f3a852fa6b4a918780d234f3d805d0a7f29e30d7ccb8db8a691c47d05e1b0c0fa6831f2f1d2dabbbd9c1cff5413507d9d2a41a224fd147a23483412ade9bd23307d199f5125d4bfe7cbd7f8f46074c1f3c4cd0f642d48b9aa0d6d8f07eecc5a652c5472b7801c961f8f532c5e5a77076ff6e1d0e3a98ed564044bea416318d86621ffd10654edff16307f4957379b573f37482fd68a3f24203d74ac727bad3eb6924e89f4daa28f33a71c039a3d8f11bc8761c7fb1f8ce5506faa3b9925ba93c1d4039fd68f52cf38ae0ad9ef70de0e2d836de49f70010ec651b8d0e2be7b016cda953f51cb7775401f3634dd7f13e33a799ed748ad803cdf8ac1930631d8b59b293197c26f7702210f13487a2bddb7610c46ee61fd6648c72f61756c1d6929bb691ac6f0e08560fc9ff000a41cd3a6d9534f110454793c75efea176e814657fa0004ad41d3fcf783c339479331527e814e5e1eab54b9166a1d6055834f0f1537a2b6d3ce6ae13944399462eb1973650418b8416d08479276fa4c1af0bfa49dc167001a7bb1c6687d9ee14d305bb2b124cfafb6760aeeabafb686924e767005c23954478bead1c6d5197ca25815f5b47e9bc64c35262867f4fb41371722f96a20dc05d8a17ef5371e272768f54083bd97fedf36e8097ef0c55b317cf0107ad81142908cf61f5794a0eb923183f613528a12b3f8778df1e0360b124e316771504d3a631878b82ba4502058f80fbf175a4358853823b5f54d016493dcfbe0f311f4a4219c783616f9a6be66bf6a66793fbb7c3573f3d5989743c87a2411c1d90da9b53238e66986dc705bac5c1297fae3efd14966763d2fb492dd9d363ef029ecc2bea20285393a29f2873553d5c143e22dd2e6591dbc031d4bc6fe5be3ef4c139b24a4c47c0819f0aa5a95cd443b6161a05ee0529d12e94b45ab2b0d19215ebca9aa01cdb1d027fef545261549b65aca0506bb5ef8d512b072559efc8011f5e9fd9af9d9cb4939a7c7885760d204b54fb1b0eacb2c959956d3d40f186244b392a7964809b0c9039368da3bb3b6fa8c191c0251a567c2a3572054c535a9c223622edd49890f2889a867ccc7091198c9aa2b1769072a28940704a5d475a8e4c0fe3b331edc85a2c189a4a2b86b29d524e2759c8594cb334c3963c67bc7cd7b8bca2bbc02fca720f1c92a82f7e01506434da6247d2c1a9e398fc4eb7c471b2c7251ffc8fe55a083d95bc64fd00330a2b6c9325386d2564b0942dfb10f5dbdfeeb4a0e20fbc3e7ca993167aa484577bb2eadc08c3521731705cb10e1c4f841c807389071a4edceeea0b14fde1df2dbe5f888efd023315086dd8dd233b34700139dcce07fdbd43a56c85c9e8afec15ad0f05413e6ac240bcf064894d8358843c38649669157abcbfff44aa4fe89127381f653327ee76fea433089a2418e7607d4472af0316ff7b3bed2ecbe2b202ce1318e4abcef6d8686a7c7226e5f907d4367496676c682d7e22d3e4a6eeca93961bff58fbf9f944c95e13da63607d476246a25d561903c24b61693de307e863f24efc3758bfe0d4df8ee46eacf22289108e007a8f8adfe21469c3b130b7aca4080e8f1d4cc7abed0466214f1a974d802f5a8fb510f9d732bfa67eb5ef751db71dc017dc08a4be858dd12f2343f3c899feef54c93bbdb105b881e41588cb453a6240c325446668ce3289062e0045a25f109038ea6cd860e7e4b7d617d950d5fd91273005e9f09ae88a2c4f2e410eb923183f613528a12b3f8778df1e036f58add5699fdd147208b2c0428d53263f49733029b0fcc47c391d873eca76aa705eff383050a74dd5a287f8644493af9b6334f1651850ae64f70c215dd7a39e9d7f7ee5ecaf672412d087f6d3dd1efca1dda76d40fbb3b7b4ef3615f8ca02cf98b0f835094e2c05500cfdfb4d203ce19eb82749273eaceb49aa81a47acdd4ae097ba1a693f3041c541da0f8bd00b721e66292cdffdb2b07cfa9283e96b03752583714b2dcca12b6b20133a24372cbdd720fc5ca16d40106fd2a84c43b27d8a2cb9beb4db14fe8d73e8959bef545b1bd16a07e2be53e2ebb286ef9e06682963eaa4a104fd188c6a7fcce0f0b39e4535d871957354848eeed1823163c500ec110f53176f6ed3a1a5d38ec5529a42186c65e0ab3edbb27c9988f8f313d2058183d0fc62fdba16bd7978c8b672ac0798a617e54d3d3bf2f5efc777bde09b3bc8396234b05afcf36b8e0f8f86922648b8e296511f54da73b6e5793f28e4a0a0527c4e865e15a96408713efb410ce1161610f4d24ceaacf13f0db113feea718f881214b5447567536fe6d40c7920cb636552554ddf4d22bf5dccf2f21d270f9c59103a05692b55157341e18d9ab7eb6b9562752d5ebb4dc5eceee2c6f0203e21fcefce53cb90cc1c0abc52ddb43722a7bd2822aab6e8d143b49d6ab49a090e8caffed7b80267796e5540c596c3f95f092bdce5e085844e7b1c78e0558e38755d46fa6eccf2f4b9a64d60054a730cbb5ee4a6247a3d9057de8e720a68cb490a130f0f74d9bfee7095b753cf3f1aaae93a7fc18545261549b65aca0506bb5ef8d512b07240b5b12c42dc77b079dc48f81d8d1474c1a1d3e617559e41ed5390749c2489409603db5b36afe8d554863d281f140e2fb564a3a2896bc59ecabc3a38ce934a2cf23b385c3cad7216988487dead09b031fc68e2e5f24e0875f7298b1a4a5bba7f18cef8ec75c742810050faa2f347f0a1ef3f43e9b69a4dd72f4935d3361939f1d2a8b512a295071dd88df3e6799c32398db26ec591a4e266d302a5cfe4674a433a258263a9c3cebe066aeb4a64ed675206b8384963b642557c1df6334545f51e97c95f3b68ce6a9e2e2ff46a0cadd951e5ec2bed2cefbc62d016a434638e0dee9004a511121dd50c13fb3dbd899a5fb5c46ba1a56f14048318b1581c5cffaf0776367c1e5b062922b09a4e9e7634209e9934ed2fd94f4cb5afa265dc7fb17087d944cf3c13ac58162ea391e4f1ee01f3290fa3ea85351bfa13bbc63b03fefe3f18cef8ec75c742810050faa2f347f0a108ef69a1ef529ecbd68bd5151c261dcba24edf2d61b60d08c7207b46e4f2fdc7c62a1501d5fa47df3f6199b71cdf2df391fbfb2c60ccc6db89b8395fd60cb5f785444728eee562a3be9fb62f19998d3b37c17a819b06dc588f71fbff62d893253a6762f15892ec758727f354f3d646927840c0d8db252bf9fe8fe6fc5e2b77f9b597192476e187d1382df54ad3eabdbf15fd916d2761eb81195a76e8528bdce69fb0b9cb7a7eed34339d093a219c916e06b8384963b642557c1df6334545f51eaf859043c008162ef1894e0b9dc3696b8377145221825487a31220c5392c517c5912df200e94613e8fbb121a74f75420f94405abb85751d1f443bf6af52813e7a3cc6b2af737db0daac8b47e59e99ed8ef344b96ba727493501eff0ceeaa5a0755711272b899eea3f5d0135faebf56360ca78f3b5ca8c8d3771a07b46913d872d376a3685c9d2e582171bba42052a8bd963af86f788e8e9a1478dce7c3cf649edaa993aba21a0cdd5ec7e93a03bdef8317781d1ee231611c8a80da09d12f53eb369211cb9afed3833f083ab60f700bed030866c3fe372ec9b8f1c35611b5aafeea9cdfac58e803bbdc6c4c29b08c0a3d0eb3f8a811cc65575f528981d54e85534ed9e100c978f2ae90ebdf1edd55bd26cb960d8ca6af27120fa0a8528a8daadc98072efb8d94913452772ee0b3e25a308ecdd1e9e3fc85932447a1bbd8bbb3693f8de6a485e69c67bfd699a65a064a807afd1411352287e24bd41bb6a93cf1799af728c0f502313c679669e83c44b003d93ceca1c50e664933aba352fe9f74eae6eda44d7cfad15ee8ca2803d2cfbefb44698b3d63b98e33669019a7beb3a05961fa302d2557798c5a41f3bcc504234ad13c9e7a467f393c901508c41804ce39171d6b08f207ad35a589058c88e7a2418af905d828ac45d279953d4a6ebbee6b541e6b1ca95dfe5ce294fa37d2ec94c512d0ef12dcc04700ad383acdf78e5f00fd99bab5febf6dad29264fe37e47ee5264e6eb98f1428362af4e656be6861c76ffede186dc24e7771d505474cacf4471bc301f8d118245477783acf97ea66c11a66d414f1af56d7b77a56a1cfa160eac957a1799df7b6e65e4a13ee71c1e347b38c746e8ec620f1e1f16b7fd4b255c6649e4a5f5d717917065b9b07c45a02547811ae44ce26716163bd53fa9a5c4fe8f8d5461792ef5acf2425830749ad5b3bd7f8dbee32a7be2499d84ee92bf684bd146b6c91adcd2974dfab5be049d5d67d12279e6335f453ddc6e1b1cc1fee73a88369211cb9afed3833f083ab60f700bed030866c3fe372ec9b8f1c35611b5aafede4da8c5305d62f7877d64c393be087f24435a24b28d8361d9f86404fe784f2e54074a005f5bdea7a978a9d3eafe32efe54ca2376acc483bcbd7c4b28f801a30210eefab6e331b2a97f38401702fcb7a4328bee699904df15e697005c6ef1bd6b4e5fcfcf22979528b7744089ff723a351a19b724f27878b6d18a18693ff7ed6c0ffc072a3ef1f420408b46ebdf4bf0762ffb492a2e6b5ae84883ba3977bb31abd442e5970210b6fd1a5edb930f86cc3cd34be87d4d2d9fa40ca45a15a584b1731fc87e0f58efeba74e7b83c262a852bccb52fc098565077b346eaa6d4b212d4be55babafa68385639b12cee1da72742f5805e87c4f05754b28406f24fe3a502a68f7c171b42a6361f623573a0f736b870f84d6b363bada4dd6d3c6a529fa69b8d2980720097311fe6f66623719599fa03596c44dd72ff93f749ee058e13f5f4db10a65071ad215c8e2c3d9fb4af0daa4d828622c4066c03c9b9d809784a6f227d4d3f7e87033ef56913251cac96d0342f0bf4a5352c8312d8bdba274188b67471f0ce8dd55c19991d62906b1c9f62b0f4839d0ceec560fe059acc7329a497ab37ba73ec9a9990ddf04cf58d105cfd5d564b9b65f3a43f436be84a6ee1f8762b8d9d71dbe170c9caeeb78e5dd7b7b15e9c38902501440f718a9a390ba8ee71867878ae17c7c77ab7d4e7cffe219df3eef2065adcc0db753c43aec20af37a3e027202a2549ae8276cc81744f988475bcda06725621d4e958690b1bbc7af6c5d9404cc026788fdbef55b1951211739b687e21b2c07ba3864e395dae7b0ca5d852ea3f92996505cb8f31f28ed9329bc81eac9d7a12180ef87961f2d4ec8db4f7640543cc1b22fea9c877e76de349daa575b36ba83fca0b896d3805179132933f4197431d36057a38b3b89e17733e3635c8e19137c43e0bd6da8af3512c258931153c31657dfa01f98b73e2a8374434b08f99620ce5a3686136dfc2f83892857e007cfca2afce8af41f459a02afca427abde74ac35dc5060add20a87375ca22dd75eefa036b1e61aed314f13c48161151834bbcf2558971815f897a97a2a7c85631ef11e2b66e0d44f03b558f6acd3eaaf6875a20dfdd73140e76302d9927c9032d85e27e480d882c24bce934b42b36f1ecf6b36b533f9501263587146798607e23089358c378dec89ca693691ed3f04705cc3d8e2c2febe9f4155b972c01409b14d6953fbc8db2f80584550dc04217949325b33869a327be981e6307edd16062f31dd31bec19fd45de8fc4d06658f2fef39d4ffc9339b5ba2fecd96b7e87320f5dcf6fb8412ef177e90b12eabb933978989f81c2c4abc5c3f3e12b5a14a340afae7140cda0bf44bfb8cf3751e93bbcad4d04e87028673887e8ffdf1c1078979bad3cab5558417fc8569f157e8c9dbede98935ecf9b9012464534a43f7aaef10277d0425ebf26c368d35b296f2f6a19b82d63957b765899d1b1c503fa02b107e450848891b68cd8eac2cc3a09653976598d5ae1b80a98f03eff7ebf6a44f1117e62c7740f4e168f6b818e2745ef4f5f6786d60059907cd1a50a8d6942573dd739cdeffe79d36a971ab60be579ca85b0bff488d27fbad68c778339573f16c59b27cc6827493c41a5902095922c23545f6f58361300e07521ffac73164329724db60a4063aec0c5370c3e82fb1dcb20e6a6fe4f50a4fb2157b898e38ebe7af0546ea8182ebec05b55b30dcbb98c4fd53fcfd7dee180da43a04d85453426bf344886e88f3f79746e6b0a1bac5aeef30008bfc18cb2eaf44dcea0f9814139b72000214b8dbee5df2717599cd791af6222be7590456fdf0aaa15cac4288707615abdf45e4895ae2fbc51cefe5beccedda3ec8e6dcd78174cfaf03bd3df6850ec855fde936f601ef5f34d74e2955a4eab4306f10812b6ceef888eb5f8de6b1a242dd21fddda29cbe92cac48fa19dbd101e9e1d70a42049c82fc669528a4bdd31d9373140ecced4f365cd7ef61c757267d59c8b7f181b643f22f7ab0a91315c5b0ebb756d1941912d1060cc25f8908cce4a7e42e0c13d74ac727bad3eb6924e89f4daa28f330db1c683b732d2df2c34476b9889cdcb16e6f68e103123e47677677cbe600593be71ac2e6eff37cd14cb398fb80ee4eb777e14d161e52e8c741273739ef7c622cf5fd5cf6f142210e057eb23830b522959dbaba3b93cee6867873cebc8cb24e0e6a3023c03cf1e99ef123f51f56ba2e91c197fefe5b5f12bb79ab71e33b7290b57458c451841ba84d6bce952b4ea91d4c064c7e706a31ffa41029b1e18ed057694e2db1b1bc4c48d6b9b2cf87a90e178504338d74805f7b86ac55dad4ec6699e5af210dae2a112e297744caa8b5d502466855c8437c58a5a85b23528866e5d6d0bb13a139cfd858bc4314ca39873fb5f1d6055834f0f1537a2b6d3ce6ae13944399462eb1973650418b8416d084792766730ca75d26bb2e4b3dc994dd931610da6b6a5737b54a29678dd5465116557c9626429b8c0a8bcf27ae046787187d05304faab4610f226fc3b8434191d6b160492db69680a7b773f4b8733082dadddc880de47a8e1d5506c0b4388aa9941ef4a9d4e3ebdfedfd2b193be3d63b1646ae4f4d308aff3bcca814b2989d0569751a86e3fc43e7b542653a6b3cf5142326c0c10c7afecf8c8355bbba94969bfdb37e8d50efe0e014f89b2e2ab505b21b1524655f47a40a9c322e3eb9024468f0f8082f83da5ebff6b61db2e5e24d81e349aaa08901d458bc04b5a0b1b5991e23536b1586ec7583199e8674e734b5272db8f31ed57590cd0ce08983d130622f05391542bf9f31c08ecc2994ee9647b65259b1ab12728ecf1d342264af89ac1838f84666025349de9b29299daaffa7ea09a32a8298816a5c37f665884c19a983dc4b6cecc93c5749f3962ba729b6f060d4bdf411600778deb6e0c2763181f9f493d2e71aae0da5a1261f519a8bf4a40354811cc164143679d644827e2aa8218dcf28d5dfa426e4e9622f6c4a576f9a34e97377fb72a94892b74fc7e500d182ccd05291b00ae9fffc1aeca26773b9d8e43aefb90e528dd4c0400e390648f120b5fcf1f63bd3f5d99951604b49b4f43791f725dc31093d7a9a300e559dbc1bfaf1a83891563c6d2400224ecf45cd774d293535845cb5aedcdacbffc7b5eaa2941d82b58ebba367aeb118c0a8019a73a9897e659cf05e9c447dab58a9ac65eeb816fccf93eb314c2290728cc680120e1f475e77ff6b61c78624d82f2562c7f848581dcf98be47c3b2e11236cdc5200f083474965b8b89eff266d23fe8fff5f6866a3042e6b14c2ad88811673187a4366fe279fb19f2558859d0e6c2d0cab0902a778b9dc0abbcf2558971815f897a97a2a7c85631ef11e2b66e0d44f03b558f6acd3eaaf68aaf7c472da37f279b1345416f6b01c05d8bdd224214073ec744a55ce9508933311663a4f183f789608427273208d78bde628edf8c3dce879de6929b98c466107b840c4f6c4b90b8d4d630a82b4d7b6e72a06ff6fdb8660c08b51f1f104ae0fe6fab9723fd2b30253b4fece7d756d3799850512ee71db29b85495d46045a46f835f84999c33f5658165d3cc875c8d2ba880add5acc53943a8b960d7c788bb892b85e49d56a5b719733673ccb83f06059712ac33759bed8af3ba724d60dd3fc3390b8278d2f87f9d0e789f57214ff1ba8399b237c31aee30f1079f9cce113ac50420c246d6551e9782a29da77aa2e0743770469712c6f075dedfa02e1033bb9ccc6ebbbe31bf9d02d392cd2531d8d1afe0c6fa762acb5363148d03910dfb3695ff270ca120a8bca128bb8f04aab493057528421c5a64f62dfee567604257c57956c60b3260749e840d6ef93773779834b9c61323e7b84136c6ba401c1b3439aa322eb9e668b3ee77e18b6083a6e367d53f9ff000a41cd3a6d9534f110454793c756abfd6098f007839f3067c02f4466c1ac33c442a43d1a6e71a2f75d2adc29cc6d6d332c2eb1e3b7a5e743105c6445e43a9001ca23fbae26bc0891245bbf7003a5a6db068b4baa6c1f703870340e7cd7b8c944dfac31f43160a1bb397c692f25b441656f100888c22e92de6c7ec028c844b979d2fae17d171f0abd93e5e84124f51144c1bc9d53b8f48c861ec09eb26e0620bd837f4d0cab090b0ba89b3f3ea7cb151a43be2252407d5681926e4184fd4a181d635e3f9b690eede5fc122fc0e248d9427e158812106fea6ff8ef6331ffc84be0e30e5f90ef78e7c834366b4ece342959c836e99def3824c9e46b9da0261b8ab99bb28c66cd1e13af8df6e5462a2823260e413fdc13976aa89b16cf3c31fb855ec8c67ffbc41fd91454b498a9fcfe3de920b294b741b09f509c0d80c24352535eba1576c1b165ab002206ae7f537a2238c88fa60a3524fc5cad2c07351826a19b2e2645cbb4eac378aae26c6bfad8eac49e753e58c7a572a889b66cecdd5';
const key = '594d4f4777673873555149415a333738';




const result = sm4.decrypt(plaintext, key, {
                    padding:  "pkcs#5",
                    mode: void 0,
                    iv:  void 0
                });




                result;

 

posted @ 2023-04-16 11:42  AngDH  阅读(64)  评论(0编辑  收藏  举报