js rsa

$0=undefined;



var py = "0123456789abcdefghijklmnopqrstuvwxyz";
function v0(t) {
    return py.charAt(t)
}
function hy(t, e) {
    return t & e
}
function vs(t, e) {
    return t | e
}
function xc(t, e) {
    return t ^ e
}
function wc(t, e) {
    return t & ~e
}
function vy(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 gy(t) {
    for (var e = 0; t != 0; )
        t &= t - 1,
        ++e;
    return e
};


var Tc = function() {
    function t(e) {
        this.m = e,
        this.mp = e.invDigit(),
        this.mpl = this.mp & 32767,
        this.mph = this.mp >> 15,
        this.um = (1 << e.DB - 15) - 1,
        this.mt2 = 2 * e.t
    }
    return t.prototype.convert = function(e) {
        var r = Me();
        return e.abs().dlShiftTo(this.m.t, r),
        r.divRemTo(this.m, null, r),
        e.s < 0 && r.compareTo(Ce.ZERO) > 0 && this.m.subTo(r, r),
        r
    }
    ,
    t.prototype.revert = function(e) {
        var r = Me();
        return e.copyTo(r),
        this.reduce(r),
        r
    }
    ,
    t.prototype.reduce = function(e) {
        for (; e.t <= this.mt2; )
            e[e.t++] = 0;
        for (var r = 0; r < this.m.t; ++r) {
            var n = e[r] & 32767
              , s = n * this.mpl + ((n * this.mph + (e[r] >> 15) * this.mpl & this.um) << 15) & e.DM;
            for (n = r + this.m.t,
            e[n] += this.m.am(0, s, e, r, 0, this.m.t); e[n] >= e.DV; )
                e[n] -= e.DV,
                e[++n]++
        }
        e.clamp(),
        e.drShiftTo(this.m.t, e),
        e.compareTo(this.m) >= 0 && e.subTo(this.m, e)
    }
    ,
    t.prototype.mulTo = function(e, r, n) {
        e.multiplyTo(r, n),
        this.reduce(n)
    }
    ,
    t.prototype.sqrTo = function(e, r) {
        e.squareTo(r),
        this.reduce(r)
    }
    ,
    t
}();


function getRandomValues(arr) {
    for (var i = 0; i < arr.length; i++) {
    arr[i] = Math.floor(Math.random() * 256);
  }
}





var Sy = function() {
    function t() {
        this.i = 0,
        this.j = 0,
        this.S = []
    }
    return t.prototype.init = function(e) {
        var r, n, s;
        for (r = 0; r < 256; ++r)
            this.S[r] = r;
        for (n = 0,
        r = 0; r < 256; ++r)
            n = n + this.S[r] + e[r % e.length] & 255,
            s = this.S[r],
            this.S[r] = this.S[n],
            this.S[n] = s;
        this.i = 0,
        this.j = 0
    }
    ,
    t.prototype.next = function() {
        var e;
        return this.i = this.i + 1 & 255,
        this.j = this.j + this.S[this.i] & 255,
        e = this.S[this.i],
        this.S[this.i] = this.S[this.j],
        this.S[this.j] = e,
        this.S[e + this.S[this.i] & 255]
    }
    ,
    t
}();
function Ty() {
    return new Sy
}

var Pd = 256, ms, R0 = null, Kt;
if (R0 == null) {
    R0 = [],
    Kt = 0;
    var ys = void 0;
    if (true) {
        var ra = new Uint32Array(256);
        for (getRandomValues(ra),
        ys = 0; ys < ra.length; ++ys)
            R0[Kt++] = ra[ys] & 255
    }

};

function By() {
    if (ms == null) {
        for (ms = Ty(); Kt < Pd; ) {
            var t = Math.floor(65536 * Math.random());
            R0[Kt++] = t & 255
        }
        for (ms.init(R0),
        Kt = 0; Kt < R0.length; ++Kt)
            R0[Kt] = 0;
        Kt = 0
    }
    return ms.next()
}

var ko = function() {
    function t() {}
    return t.prototype.nextBytes = function(e) {
        for (var r = 0; r < e.length; ++r)
            e[r] = By()
    }
    ,
    t
}();
function My(t, e) {
    if (e < t.length + 22)
        return console.error("Message too long for RSA"),
        null;
    for (var r = e - t.length - 6, n = "", s = 0; s < r; s += 2)
        n += "ff";
    var i = "0001" + n + "00" + t;
    return Ke(i, 16)
}
function zy(t, e) {
    if (e < t.length + 11)
        return console.error("Message too long for RSA"),
        null;
    for (var r = [], n = t.length - 1; n >= 0 && e > 0; ) {
        var s = t.charCodeAt(n--);
        s < 128 ? r[--e] = s : s > 127 && s < 2048 ? (r[--e] = s & 63 | 128,
        r[--e] = s >> 6 | 192) : (r[--e] = s & 63 | 128,
        r[--e] = s >> 6 & 63 | 128,
        r[--e] = s >> 12 | 224)
    }
    r[--e] = 0;
    for (var i = new ko, a = []; e > 2; ) {
        for (a[0] = 0; a[0] == 0; )
            i.nextBytes(a);
        r[--e] = a[0]
    }

    
    r[--e] = 2;
    r[--e] = 0;
  

  return new Ce(r)
}

var ky = function() {
    var t = function(e, r) {
        return t = Object.setPrototypeOf || {
            __proto__: []
        }instanceof Array && function(n, s) {
            n.__proto__ = s
        }
        || function(n, s) {
            for (var i in s)
                Object.prototype.hasOwnProperty.call(s, i) && (n[i] = s[i])
        }
        ,
        t(e, r)
    };
    return function(e, r) {
        if (typeof r != "function" && r !== null)
            throw new TypeError("Class extends value " + String(r) + " is not a constructor or null");
        t(e, r);
        function n() {
            this.constructor = e
        }
        e.prototype = r === null ? Object.create(r) : (n.prototype = r.prototype,
        new n)
    }
}();;





var kr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
  , Md = "=";
function ei(t) {
    var e, r, n = "";
    for (e = 0; e + 3 <= t.length; e += 3)
        r = parseInt(t.substring(e, e + 3), 16),
        n += kr.charAt(r >> 6) + kr.charAt(r & 63);
    for (e + 1 == t.length ? (r = parseInt(t.substring(e, e + 1), 16),
    n += kr.charAt(r << 2)) : e + 2 == t.length && (r = parseInt(t.substring(e, e + 2), 16),
    n += kr.charAt(r >> 2) + kr.charAt((r & 3) << 4)); (n.length & 3) > 0; )
        n += Md;
    return n
};


var Ti = [], tn, qt;
tn = "0".charCodeAt(0);
for (qt = 0; qt <= 9; ++qt)
    Ti[tn++] = qt;
tn = "a".charCodeAt(0);
for (qt = 10; qt < 36; ++qt)
    Ti[tn++] = qt;
tn = "A".charCodeAt(0);
for (qt = 10; qt < 36; ++qt)
    Ti[tn++] = qt;


function Mc(t, e) {
    var r = Ti[t.charCodeAt(e)];
    return r ?? -1
}

var Ce = function() {
    function t(e, r, n) {
        e != null && (typeof e == "number" ? this.fromNumber(e, r, n) : r == null && typeof e != "string" ? this.fromString(e, 256) : this.fromString(e, r))
    }
    return t.prototype.toString = function(e) {
        if (this.s < 0)
            return "-" + this.negate().toString(e);
        var r;
        if (e == 16)
            r = 4;
        else if (e == 8)
            r = 3;
        else if (e == 2)
            r = 1;
        else if (e == 32)
            r = 5;
        else if (e == 4)
            r = 2;
        else
            return this.toRadix(e);
        var n = (1 << r) - 1, s, i = !1, a = "", o = this.t, l = this.DB - o * this.DB % r;
        if (o-- > 0)
            for (l < this.DB && (s = this[o] >> l) > 0 && (i = !0,
            a = v0(s)); o >= 0; )
                l < r ? (s = (this[o] & (1 << l) - 1) << r - l,
                s |= this[--o] >> (l += this.DB - r)) : (s = this[o] >> (l -= r) & n,
                l <= 0 && (l += this.DB,
                --o)),
                s > 0 && (i = !0),
                i && (a += v0(s));
        return i ? a : "0"
    }
    ,
    t.prototype.negate = function() {
        var e = Me();
        return t.ZERO.subTo(this, e),
        e
    }
    ,
    t.prototype.abs = function() {
        return this.s < 0 ? this.negate() : this
    }
    ,
    t.prototype.compareTo = function(e) {
        var r = this.s - e.s;
        if (r != 0)
            return r;
        var n = this.t;
        if (r = n - e.t,
        r != 0)
            return this.s < 0 ? -r : r;
        for (; --n >= 0; )
            if ((r = this[n] - e[n]) != 0)
                return r;
        return 0
    }
    ,
    t.prototype.bitLength = function() {
        return this.t <= 0 ? 0 : this.DB * (this.t - 1) + gs(this[this.t - 1] ^ this.s & this.DM)
    }
    ,
    t.prototype.mod = function(e) {
        var r = Me();
        return this.abs().divRemTo(e, null, r),
        this.s < 0 && r.compareTo(t.ZERO) > 0 && e.subTo(r, r),
        r
    }
    ,
    t.prototype.modPowInt = function(e, r) {
        var n;
        return e < 256 || r.isEven() ? n = new Sc(r) : n = new Tc(r),
        this.exp(e, n)
    }
    ,
    t.prototype.clone = function() {
        var e = Me();
        return this.copyTo(e),
        e
    }
    ,
    t.prototype.intValue = function() {
        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]
    }
    ,
    t.prototype.byteValue = function() {
        return this.t == 0 ? this.s : this[0] << 24 >> 24
    }
    ,
    t.prototype.shortValue = function() {
        return this.t == 0 ? this.s : this[0] << 16 >> 16
    }
    ,
    t.prototype.signum = function() {
        return this.s < 0 ? -1 : this.t <= 0 || this.t == 1 && this[0] <= 0 ? 0 : 1
    }
    ,
    t.prototype.toByteArray = function() {
        var e = this.t
          , r = [];
        r[0] = this.s;
        var n = this.DB - e * this.DB % 8, s, i = 0;
        if (e-- > 0)
            for (n < this.DB && (s = this[e] >> n) != (this.s & this.DM) >> n && (r[i++] = s | this.s << this.DB - n); e >= 0; )
                n < 8 ? (s = (this[e] & (1 << n) - 1) << 8 - n,
                s |= this[--e] >> (n += this.DB - 8)) : (s = this[e] >> (n -= 8) & 255,
                n <= 0 && (n += this.DB,
                --e)),
                s & 128 && (s |= -256),
                i == 0 && (this.s & 128) != (s & 128) && ++i,
                (i > 0 || s != this.s) && (r[i++] = s);
        return r
    }
    ,
    t.prototype.equals = function(e) {
        return this.compareTo(e) == 0
    }
    ,
    t.prototype.min = function(e) {
        return this.compareTo(e) < 0 ? this : e
    }
    ,
    t.prototype.max = function(e) {
        return this.compareTo(e) > 0 ? this : e
    }
    ,
    t.prototype.and = function(e) {
        var r = Me();
        return this.bitwiseTo(e, hy, r),
        r
    }
    ,
    t.prototype.or = function(e) {
        var r = Me();
        return this.bitwiseTo(e, vs, r),
        r
    }
    ,
    t.prototype.xor = function(e) {
        var r = Me();
        return this.bitwiseTo(e, xc, r),
        r
    }
    ,
    t.prototype.andNot = function(e) {
        var r = Me();
        return this.bitwiseTo(e, wc, r),
        r
    }
    ,
    t.prototype.not = function() {
        for (var e = Me(), r = 0; r < this.t; ++r)
            e[r] = this.DM & ~this[r];
        return e.t = this.t,
        e.s = ~this.s,
        e
    }
    ,
    t.prototype.shiftLeft = function(e) {
        var r = Me();
        return e < 0 ? this.rShiftTo(-e, r) : this.lShiftTo(e, r),
        r
    }
    ,
    t.prototype.shiftRight = function(e) {
        var r = Me();
        return e < 0 ? this.lShiftTo(-e, r) : this.rShiftTo(e, r),
        r
    }
    ,
    t.prototype.getLowestSetBit = function() {
        for (var e = 0; e < this.t; ++e)
            if (this[e] != 0)
                return e * this.DB + vy(this[e]);
        return this.s < 0 ? this.t * this.DB : -1
    }
    ,
    t.prototype.bitCount = function() {
        for (var e = 0, r = this.s & this.DM, n = 0; n < this.t; ++n)
            e += gy(this[n] ^ r);
        return e
    }
    ,
    t.prototype.testBit = function(e) {
        var r = Math.floor(e / this.DB);
        return r >= this.t ? this.s != 0 : (this[r] & 1 << e % this.DB) != 0
    }
    ,
    t.prototype.setBit = function(e) {
        return this.changeBit(e, vs)
    }
    ,
    t.prototype.clearBit = function(e) {
        return this.changeBit(e, wc)
    }
    ,
    t.prototype.flipBit = function(e) {
        return this.changeBit(e, xc)
    }
    ,
    t.prototype.add = function(e) {
        var r = Me();
        return this.addTo(e, r),
        r
    }
    ,
    t.prototype.subtract = function(e) {
        var r = Me();
        return this.subTo(e, r),
        r
    }
    ,
    t.prototype.multiply = function(e) {
        var r = Me();
        return this.multiplyTo(e, r),
        r
    }
    ,
    t.prototype.divide = function(e) {
        var r = Me();
        return this.divRemTo(e, r, null),
        r
    }
    ,
    t.prototype.remainder = function(e) {
        var r = Me();
        return this.divRemTo(e, null, r),
        r
    }
    ,
    t.prototype.divideAndRemainder = function(e) {
        var r = Me()
          , n = Me();
        return this.divRemTo(e, r, n),
        [r, n]
    }
    ,
    t.prototype.modPow = function(e, r) {
        var n = e.bitLength(), s, i = O0(1), a;
        if (n <= 0)
            return i;
        n < 18 ? s = 1 : n < 48 ? s = 3 : n < 144 ? s = 4 : n < 768 ? s = 5 : s = 6,
        n < 8 ? a = new Sc(r) : r.isEven() ? a = new Cy(r) : a = new Tc(r);
        var o = []
          , l = 3
          , c = s - 1
          , u = (1 << s) - 1;
        if (o[1] = a.convert(this),
        s > 1) {
            var d = Me();
            for (a.sqrTo(o[1], d); l <= u; )
                o[l] = Me(),
                a.mulTo(d, o[l - 2], o[l]),
                l += 2
        }
        var f = e.t - 1, p, g = !0, h = Me(), y;
        for (n = gs(e[f]) - 1; f >= 0; ) {
            for (n >= c ? p = e[f] >> n - c & u : (p = (e[f] & (1 << n + 1) - 1) << c - n,
            f > 0 && (p |= e[f - 1] >> this.DB + n - c)),
            l = s; !(p & 1); )
                p >>= 1,
                --l;
            if ((n -= l) < 0 && (n += this.DB,
            --f),
            g)
                o[p].copyTo(i),
                g = !1;
            else {
                for (; l > 1; )
                    a.sqrTo(i, h),
                    a.sqrTo(h, i),
                    l -= 2;
                l > 0 ? a.sqrTo(i, h) : (y = i,
                i = h,
                h = y),
                a.mulTo(h, o[p], i)
            }
            for (; f >= 0 && !(e[f] & 1 << n); )
                a.sqrTo(i, h),
                y = i,
                i = h,
                h = y,
                --n < 0 && (n = this.DB - 1,
                --f)
        }
        return a.revert(i)
    }
    ,
    t.prototype.modInverse = function(e) {
        var r = e.isEven();
        if (this.isEven() && r || e.signum() == 0)
            return t.ZERO;
        for (var n = e.clone(), s = this.clone(), i = O0(1), a = O0(0), o = O0(0), l = O0(1); n.signum() != 0; ) {
            for (; n.isEven(); )
                n.rShiftTo(1, n),
                r ? ((!i.isEven() || !a.isEven()) && (i.addTo(this, i),
                a.subTo(e, a)),
                i.rShiftTo(1, i)) : a.isEven() || a.subTo(e, a),
                a.rShiftTo(1, a);
            for (; s.isEven(); )
                s.rShiftTo(1, s),
                r ? ((!o.isEven() || !l.isEven()) && (o.addTo(this, o),
                l.subTo(e, l)),
                o.rShiftTo(1, o)) : l.isEven() || l.subTo(e, l),
                l.rShiftTo(1, l);
            n.compareTo(s) >= 0 ? (n.subTo(s, n),
            r && i.subTo(o, i),
            a.subTo(l, a)) : (s.subTo(n, s),
            r && o.subTo(i, o),
            l.subTo(a, l))
        }
        if (s.compareTo(t.ONE) != 0)
            return t.ZERO;
        if (l.compareTo(e) >= 0)
            return l.subtract(e);
        if (l.signum() < 0)
            l.addTo(e, l);
        else
            return l;
        return l.signum() < 0 ? l.add(e) : l
    }
    ,
    t.prototype.pow = function(e) {
        return this.exp(e, new Ey)
    }
    ,
    t.prototype.gcd = function(e) {
        var r = this.s < 0 ? this.negate() : this.clone()
          , n = e.s < 0 ? e.negate() : e.clone();
        if (r.compareTo(n) < 0) {
            var s = r;
            r = n,
            n = s
        }
        var i = r.getLowestSetBit()
          , a = n.getLowestSetBit();
        if (a < 0)
            return r;
        for (i < a && (a = i),
        a > 0 && (r.rShiftTo(a, r),
        n.rShiftTo(a, n)); r.signum() > 0; )
            (i = r.getLowestSetBit()) > 0 && r.rShiftTo(i, r),
            (i = n.getLowestSetBit()) > 0 && n.rShiftTo(i, n),
            r.compareTo(n) >= 0 ? (r.subTo(n, r),
            r.rShiftTo(1, r)) : (n.subTo(r, n),
            n.rShiftTo(1, n));
        return a > 0 && n.lShiftTo(a, n),
        n
    }
    ,
    t.prototype.isProbablePrime = function(e) {
        var r, n = this.abs();
        if (n.t == 1 && n[0] <= mt[mt.length - 1]) {
            for (r = 0; r < mt.length; ++r)
                if (n[0] == mt[r])
                    return !0;
            return !1
        }
        if (n.isEven())
            return !1;
        for (r = 1; r < mt.length; ) {
            for (var s = mt[r], i = r + 1; i < mt.length && s < Ay; )
                s *= mt[i++];
            for (s = n.modInt(s); r < i; )
                if (s % mt[r++] == 0)
                    return !1
        }
        return n.millerRabin(e)
    }
    ,
    t.prototype.copyTo = function(e) {
        for (var r = this.t - 1; r >= 0; --r)
            e[r] = this[r];
        e.t = this.t,
        e.s = this.s
    }
    ,
    t.prototype.fromInt = function(e) {
        this.t = 1,
        this.s = e < 0 ? -1 : 0,
        e > 0 ? this[0] = e : e < -1 ? this[0] = e + this.DV : this.t = 0
    }
    ,
    t.prototype.fromString = function(e, r) {
        var n;
        if (r == 16)
            n = 4;
        else if (r == 8)
            n = 3;
        else if (r == 256)
            n = 8;
        else if (r == 2)
            n = 1;
        else if (r == 32)
            n = 5;
        else if (r == 4)
            n = 2;
        else {
            this.fromRadix(e, r);
            return
        }
        this.t = 0,
        this.s = 0;
        for (var s = e.length, i = !1, a = 0; --s >= 0; ) {
            var o = n == 8 ? +e[s] & 255 : Mc(e, s);
            if (o < 0) {
                e.charAt(s) == "-" && (i = !0);
                continue
            }
            i = !1,
            a == 0 ? this[this.t++] = o : a + n > this.DB ? (this[this.t - 1] |= (o & (1 << this.DB - a) - 1) << a,
            this[this.t++] = o >> this.DB - a) : this[this.t - 1] |= o << a,
            a += n,
            a >= this.DB && (a -= this.DB)
        }
        n == 8 && +e[0] & 128 && (this.s = -1,
        a > 0 && (this[this.t - 1] |= (1 << this.DB - a) - 1 << a)),
        this.clamp(),
        i && t.ZERO.subTo(this, this)
    }
    ,
    t.prototype.clamp = function() {
        for (var e = this.s & this.DM; this.t > 0 && this[this.t - 1] == e; )
            --this.t
    }
    ,
    t.prototype.dlShiftTo = function(e, r) {
        var n;
        for (n = this.t - 1; n >= 0; --n)
            r[n + e] = this[n];
        for (n = e - 1; n >= 0; --n)
            r[n] = 0;
        r.t = this.t + e,
        r.s = this.s
    }
    ,
    t.prototype.drShiftTo = function(e, r) {
        for (var n = e; n < this.t; ++n)
            r[n - e] = this[n];
        r.t = Math.max(this.t - e, 0),
        r.s = this.s
    }
    ,
    t.prototype.lShiftTo = function(e, r) {
        for (var n = e % this.DB, s = this.DB - n, i = (1 << s) - 1, a = Math.floor(e / this.DB), o = this.s << n & this.DM, l = this.t - 1; l >= 0; --l)
            r[l + a + 1] = this[l] >> s | o,
            o = (this[l] & i) << n;
        for (var l = a - 1; l >= 0; --l)
            r[l] = 0;
        r[a] = o,
        r.t = this.t + a + 1,
        r.s = this.s,
        r.clamp()
    }
    ,
    t.prototype.rShiftTo = function(e, r) {
        r.s = this.s;
        var n = Math.floor(e / this.DB);
        if (n >= this.t) {
            r.t = 0;
            return
        }
        var s = e % this.DB
          , i = this.DB - s
          , a = (1 << s) - 1;
        r[0] = this[n] >> s;
        for (var o = n + 1; o < this.t; ++o)
            r[o - n - 1] |= (this[o] & a) << i,
            r[o - n] = this[o] >> s;
        s > 0 && (r[this.t - n - 1] |= (this.s & a) << i),
        r.t = this.t - n,
        r.clamp()
    }
    ,
    t.prototype.subTo = function(e, r) {
        for (var n = 0, s = 0, i = Math.min(e.t, this.t); n < i; )
            s += this[n] - e[n],
            r[n++] = s & this.DM,
            s >>= this.DB;
        if (e.t < this.t) {
            for (s -= e.s; n < this.t; )
                s += this[n],
                r[n++] = s & this.DM,
                s >>= this.DB;
            s += this.s
        } else {
            for (s += this.s; n < e.t; )
                s -= e[n],
                r[n++] = s & this.DM,
                s >>= this.DB;
            s -= e.s
        }
        r.s = s < 0 ? -1 : 0,
        s < -1 ? r[n++] = this.DV + s : s > 0 && (r[n++] = s),
        r.t = n,
        r.clamp()
    }
    ,
    t.prototype.multiplyTo = function(e, r) {
        var n = this.abs()
          , s = e.abs()
          , i = n.t;
        for (r.t = i + s.t; --i >= 0; )
            r[i] = 0;
        for (i = 0; i < s.t; ++i)
            r[i + n.t] = n.am(0, s[i], r, i, 0, n.t);
        r.s = 0,
        r.clamp(),
        this.s != e.s && t.ZERO.subTo(r, r)
    }
    ,
    t.prototype.squareTo = function(e) {
        for (var r = this.abs(), n = e.t = 2 * r.t; --n >= 0; )
            e[n] = 0;
        for (n = 0; n < r.t - 1; ++n) {
            var s = r.am(n, r[n], e, 2 * n, 0, 1);
            (e[n + r.t] += r.am(n + 1, 2 * r[n], e, 2 * n + 1, s, r.t - n - 1)) >= r.DV && (e[n + r.t] -= r.DV,
            e[n + r.t + 1] = 1)
        }
        e.t > 0 && (e[e.t - 1] += r.am(n, r[n], e, 2 * n, 0, 1)),
        e.s = 0,
        e.clamp()
    }
    ,
    t.prototype.divRemTo = function(e, r, n) {
        var s = e.abs();
        if (!(s.t <= 0)) {
            var i = this.abs();
            if (i.t < s.t) {
                r != null && r.fromInt(0),
                n != null && this.copyTo(n);
                return
            }
            n == null && (n = Me());
            var a = Me()
              , o = this.s
              , l = e.s
              , c = this.DB - gs(s[s.t - 1]);
            c > 0 ? (s.lShiftTo(c, a),
            i.lShiftTo(c, n)) : (s.copyTo(a),
            i.copyTo(n));
            var u = a.t
              , d = a[u - 1];
            if (d != 0) {
                var f = d * (1 << this.F1) + (u > 1 ? a[u - 2] >> this.F2 : 0)
                  , p = this.FV / f
                  , g = (1 << this.F1) / f
                  , h = 1 << this.F2
                  , y = n.t
                  , b = y - u
                  , v = r ?? Me();
                for (a.dlShiftTo(b, v),
                n.compareTo(v) >= 0 && (n[n.t++] = 1,
                n.subTo(v, n)),
                t.ONE.dlShiftTo(u, v),
                v.subTo(a, a); a.t < u; )
                    a[a.t++] = 0;
                for (; --b >= 0; ) {
                    var m = n[--y] == d ? this.DM : Math.floor(n[y] * p + (n[y - 1] + h) * g);
                    if ((n[y] += a.am(0, m, n, b, 0, u)) < m)
                        for (a.dlShiftTo(b, v),
                        n.subTo(v, n); n[y] < --m; )
                            n.subTo(v, n)
                }
                r != null && (n.drShiftTo(u, r),
                o != l && t.ZERO.subTo(r, r)),
                n.t = u,
                n.clamp(),
                c > 0 && n.rShiftTo(c, n),
                o < 0 && t.ZERO.subTo(n, n)
            }
        }
    }
    ,
    t.prototype.invDigit = function() {
        if (this.t < 1)
            return 0;
        var e = this[0];
        if (!(e & 1))
            return 0;
        var r = e & 3;
        return r = r * (2 - (e & 15) * r) & 15,
        r = r * (2 - (e & 255) * r) & 255,
        r = r * (2 - ((e & 65535) * r & 65535)) & 65535,
        r = r * (2 - e * r % this.DV) % this.DV,
        r > 0 ? this.DV - r : -r
    }
    ,
    t.prototype.isEven = function() {
        return (this.t > 0 ? this[0] & 1 : this.s) == 0
    }
    ,
    t.prototype.exp = function(e, r) {
        if (e > 4294967295 || e < 1)
            return t.ONE;
        var n = Me()
          , s = Me()
          , i = r.convert(this)
          , a = gs(e) - 1;
        for (i.copyTo(n); --a >= 0; )
            if (r.sqrTo(n, s),
            (e & 1 << a) > 0)
                r.mulTo(s, i, n);
            else {
                var o = n;
                n = s,
                s = o
            }
        return r.revert(n)
    }
    ,
    t.prototype.chunkSize = function(e) {
        return Math.floor(Math.LN2 * this.DB / Math.log(e))
    }
    ,
    t.prototype.toRadix = function(e) {
        if (e == null && (e = 10),
        this.signum() == 0 || e < 2 || e > 36)
            return "0";
        var r = this.chunkSize(e)
          , n = Math.pow(e, r)
          , s = O0(n)
          , i = Me()
          , a = Me()
          , o = "";
        for (this.divRemTo(s, i, a); i.signum() > 0; )
            o = (n + a.intValue()).toString(e).substr(1) + o,
            i.divRemTo(s, i, a);
        return a.intValue().toString(e) + o
    }
    ,
    t.prototype.fromRadix = function(e, r) {
        this.fromInt(0),
        r == null && (r = 10);
        for (var n = this.chunkSize(r), s = Math.pow(r, n), i = !1, a = 0, o = 0, l = 0; l < e.length; ++l) {
            var c = Mc(e, l);
            if (c < 0) {
                e.charAt(l) == "-" && this.signum() == 0 && (i = !0);
                continue
            }
            o = r * o + c,
            ++a >= n && (this.dMultiply(s),
            this.dAddOffset(o, 0),
            a = 0,
            o = 0)
        }
        a > 0 && (this.dMultiply(Math.pow(r, a)),
        this.dAddOffset(o, 0)),
        i && t.ZERO.subTo(this, this)
    }
    ,
    t.prototype.fromNumber = function(e, r, n) {
        if (typeof r == "number")
            if (e < 2)
                this.fromInt(1);
            else
                for (this.fromNumber(e, n),
                this.testBit(e - 1) || this.bitwiseTo(t.ONE.shiftLeft(e - 1), vs, this),
                this.isEven() && this.dAddOffset(1, 0); !this.isProbablePrime(r); )
                    this.dAddOffset(2, 0),
                    this.bitLength() > e && this.subTo(t.ONE.shiftLeft(e - 1), this);
        else {
            var s = []
              , i = e & 7;
            s.length = (e >> 3) + 1,
            r.nextBytes(s),
            i > 0 ? s[0] &= (1 << i) - 1 : s[0] = 0,
            this.fromString(s, 256)
        }
    }
    ,
    t.prototype.bitwiseTo = function(e, r, n) {
        var s, i, a = Math.min(e.t, this.t);
        for (s = 0; s < a; ++s)
            n[s] = r(this[s], e[s]);
        if (e.t < this.t) {
            for (i = e.s & this.DM,
            s = a; s < this.t; ++s)
                n[s] = r(this[s], i);
            n.t = this.t
        } else {
            for (i = this.s & this.DM,
            s = a; s < e.t; ++s)
                n[s] = r(i, e[s]);
            n.t = e.t
        }
        n.s = r(this.s, e.s),
        n.clamp()
    }
    ,
    t.prototype.changeBit = function(e, r) {
        var n = t.ONE.shiftLeft(e);
        return this.bitwiseTo(n, r, n),
        n
    }
    ,
    t.prototype.addTo = function(e, r) {
        for (var n = 0, s = 0, i = Math.min(e.t, this.t); n < i; )
            s += this[n] + e[n],
            r[n++] = s & this.DM,
            s >>= this.DB;
        if (e.t < this.t) {
            for (s += e.s; n < this.t; )
                s += this[n],
                r[n++] = s & this.DM,
                s >>= this.DB;
            s += this.s
        } else {
            for (s += this.s; n < e.t; )
                s += e[n],
                r[n++] = s & this.DM,
                s >>= this.DB;
            s += e.s
        }
        r.s = s < 0 ? -1 : 0,
        s > 0 ? r[n++] = s : s < -1 && (r[n++] = this.DV + s),
        r.t = n,
        r.clamp()
    }
    ,
    t.prototype.dMultiply = function(e) {
        this[this.t] = this.am(0, e - 1, this, 0, 0, this.t),
        ++this.t,
        this.clamp()
    }
    ,
    t.prototype.dAddOffset = function(e, r) {
        if (e != 0) {
            for (; this.t <= r; )
                this[this.t++] = 0;
            for (this[r] += e; this[r] >= this.DV; )
                this[r] -= this.DV,
                ++r >= this.t && (this[this.t++] = 0),
                ++this[r]
        }
    }
    ,
    t.prototype.multiplyLowerTo = function(e, r, n) {
        var s = Math.min(this.t + e.t, r);
        for (n.s = 0,
        n.t = s; s > 0; )
            n[--s] = 0;
        for (var i = n.t - this.t; s < i; ++s)
            n[s + this.t] = this.am(0, e[s], n, s, 0, this.t);
        for (var i = Math.min(e.t, r); s < i; ++s)
            this.am(0, e[s], n, s, 0, r - s);
        n.clamp()
    }
    ,
    t.prototype.multiplyUpperTo = function(e, r, n) {
        --r;
        var s = n.t = this.t + e.t - r;
        for (n.s = 0; --s >= 0; )
            n[s] = 0;
        for (s = Math.max(r - this.t, 0); s < e.t; ++s)
            n[this.t + s - r] = this.am(r - s, e[s], n, 0, 0, this.t + s - r);
        n.clamp(),
        n.drShiftTo(1, n)
    }
    ,
    t.prototype.modInt = function(e) {
        if (e <= 0)
            return 0;
        var r = this.DV % e
          , n = this.s < 0 ? e - 1 : 0;
        if (this.t > 0)
            if (r == 0)
                n = this[0] % e;
            else
                for (var s = this.t - 1; s >= 0; --s)
                    n = (r * n + this[s]) % e;
        return n
    }
    ,
    t.prototype.millerRabin = function(e) {
        var r = this.subtract(t.ONE)
          , n = r.getLowestSetBit();
        if (n <= 0)
            return !1;
        var s = r.shiftRight(n);
        e = e + 1 >> 1,
        e > mt.length && (e = mt.length);
        for (var i = Me(), a = 0; a < e; ++a) {
            i.fromInt(mt[Math.floor(Math.random() * mt.length)]);
            var o = i.modPow(s, this);
            if (o.compareTo(t.ONE) != 0 && o.compareTo(r) != 0) {
                for (var l = 1; l++ < n && o.compareTo(r) != 0; )
                    if (o = o.modPowInt(2, this),
                    o.compareTo(t.ONE) == 0)
                        return !1;
                if (o.compareTo(r) != 0)
                    return !1
            }
        }
        return !0
    }
    ,
    t.prototype.square = function() {
        var e = Me();
        return this.squareTo(e),
        e
    }
    ,
    t.prototype.gcda = function(e, r) {
        var n = this.s < 0 ? this.negate() : this.clone()
          , s = e.s < 0 ? e.negate() : e.clone();
        if (n.compareTo(s) < 0) {
            var i = n;
            n = s,
            s = i
        }
        var a = n.getLowestSetBit()
          , o = s.getLowestSetBit();
        if (o < 0) {
            r(n);
            return
        }
        a < o && (o = a),
        o > 0 && (n.rShiftTo(o, n),
        s.rShiftTo(o, s));
        var l = function() {
            (a = n.getLowestSetBit()) > 0 && n.rShiftTo(a, n),
            (a = s.getLowestSetBit()) > 0 && s.rShiftTo(a, s),
            n.compareTo(s) >= 0 ? (n.subTo(s, n),
            n.rShiftTo(1, n)) : (s.subTo(n, s),
            s.rShiftTo(1, s)),
            n.signum() > 0 ? setTimeout(l, 0) : (o > 0 && s.lShiftTo(o, s),
            setTimeout(function() {
                r(s)
            }, 0))
        };
        setTimeout(l, 10)
    }
    ,
    t.prototype.fromNumberAsync = function(e, r, n, s) {
        if (typeof r == "number")
            if (e < 2)
                this.fromInt(1);
            else {
                this.fromNumber(e, n),
                this.testBit(e - 1) || this.bitwiseTo(t.ONE.shiftLeft(e - 1), vs, this),
                this.isEven() && this.dAddOffset(1, 0);
                var i = this
                  , a = function() {
                    i.dAddOffset(2, 0),
                    i.bitLength() > e && i.subTo(t.ONE.shiftLeft(e - 1), i),
                    i.isProbablePrime(r) ? setTimeout(function() {
                        s()
                    }, 0) : setTimeout(a, 0)
                };
                setTimeout(a, 0)
            }
        else {
            var o = []
              , l = e & 7;
            o.length = (e >> 3) + 1,
            r.nextBytes(o),
            l > 0 ? o[0] &= (1 << l) - 1 : o[0] = 0,
            this.fromString(o, 256)
        }
    }
    ,
    t
}();


Ce.prototype.am = function(e, r, n, s, i, a) {
    for (var o = r & 16383, l = r >> 14; --a >= 0; ) {
        var c = this[e] & 16383
          , u = this[e++] >> 14
          , d = l * c + u * o;
        c = o * c + ((d & 16383) << 14) + n[s] + i,
        i = (c >> 28) + (d >> 14) + l * u,
        n[s++] = c & 268435455
    }
    return i
}

var q0 = 28;
Ce.prototype.DB = q0;
Ce.prototype.DM = (1 << q0) - 1;
Ce.prototype.DV = 1 << q0;
var Il = 52;
Ce.prototype.FV = Math.pow(2, Il);
Ce.prototype.F1 = Il - q0;
Ce.prototype.F2 = 2 * q0 - Il;




function Me() {
    return new Ce(null)
};

function O0(t) {
    var e = Me();
    return e.fromInt(t),
    e
};

Ce.ZERO = O0(0);
Ce.ONE = O0(1);



function gs(t) {
    var e = 1, r;
    return (r = t >>> 16) != 0 && (t = r,
    e += 16),
    (r = t >> 8) != 0 && (t = r,
    e += 8),
    (r = t >> 4) != 0 && (t = r,
    e += 4),
    (r = t >> 2) != 0 && (t = r,
    e += 2),
    (r = t >> 1) != 0 && (t = r,
    e += 1),
    e
};


function Ke(t, e) {
    return new Ce(t,e)
};

var Ec = function() {
    function t(e) {
        var r = e.get();
        if (this.tagClass = r >> 6,
        this.tagConstructed = (r & 32) !== 0,
        this.tagNumber = r & 31,
        this.tagNumber == 31) {
            var n = new xn;
            do
                r = e.get(),
                n.mulAdd(128, r & 127);
            while (r & 128);
            this.tagNumber = n.simplify()
        }
    }
    return t.prototype.isUniversal = function() {
        return this.tagClass === 0
    }
    ,
    t.prototype.isEOC = function() {
        return this.tagClass === 0 && this.tagNumber === 0
    }
    ,
    t
}();


var ta = function() {
    function t(e, r) {
        this.hexDigits = "0123456789ABCDEF",
        e instanceof t ? (this.enc = e.enc,
        this.pos = e.pos) : (this.enc = e,
        this.pos = r)
    }
    return t.prototype.get = function(e) {
        if (e === void 0 && (e = this.pos++),
        e >= this.enc.length)
            throw new Error("Requesting byte offset " + e + " on a stream of length " + this.enc.length);
        return typeof this.enc == "string" ? this.enc.charCodeAt(e) : this.enc[e]
    }
    ,
    t.prototype.hexByte = function(e) {
        return this.hexDigits.charAt(e >> 4 & 15) + this.hexDigits.charAt(e & 15)
    }
    ,
    t.prototype.hexDump = function(e, r, n) {
        for (var s = "", i = e; i < r; ++i)
            if (s += this.hexByte(this.get(i)),
            n !== !0)
                switch (i & 15) {
                case 7:
                    s += "  ";
                    break;
                case 15:
                    s += `
`;
                    break;
                default:
                    s += " "
                }
        return s
    }
    ,
    t.prototype.isASCII = function(e, r) {
        for (var n = e; n < r; ++n) {
            var s = this.get(n);
            if (s < 32 || s > 176)
                return !1
        }
        return !0
    }
    ,
    t.prototype.parseStringISO = function(e, r) {
        for (var n = "", s = e; s < r; ++s)
            n += String.fromCharCode(this.get(s));
        return n
    }
    ,
    t.prototype.parseStringUTF = function(e, r) {
        for (var n = "", s = e; s < r; ) {
            var i = this.get(s++);
            i < 128 ? n += String.fromCharCode(i) : i > 191 && i < 224 ? n += String.fromCharCode((i & 31) << 6 | this.get(s++) & 63) : n += String.fromCharCode((i & 15) << 12 | (this.get(s++) & 63) << 6 | this.get(s++) & 63)
        }
        return n
    }
    ,
    t.prototype.parseStringBMP = function(e, r) {
        for (var n = "", s, i, a = e; a < r; )
            s = this.get(a++),
            i = this.get(a++),
            n += String.fromCharCode(s << 8 | i);
        return n
    }
    ,
    t.prototype.parseTime = function(e, r, n) {
        var s = this.parseStringISO(e, r)
          , i = (n ? yy : by).exec(s);
        return i ? (n && (i[1] = +i[1],
        i[1] += +i[1] < 70 ? 2e3 : 1900),
        s = i[1] + "-" + i[2] + "-" + i[3] + " " + i[4],
        i[5] && (s += ":" + i[5],
        i[6] && (s += ":" + i[6],
        i[7] && (s += "." + i[7]))),
        i[8] && (s += " UTC",
        i[8] != "Z" && (s += i[8],
        i[9] && (s += ":" + i[9]))),
        s) : "Unrecognized time: " + s
    }
    ,
    t.prototype.parseInteger = function(e, r) {
        for (var n = this.get(e), s = n > 127, i = s ? 255 : 0, a, o = ""; n == i && ++e < r; )
            n = this.get(e);
        if (a = r - e,
        a === 0)
            return s ? -1 : 0;
        if (a > 4) {
            for (o = n,
            a <<= 3; !((+o ^ i) & 128); )
                o = +o << 1,
                --a;
            o = "(" + a + ` bit)
`
        }
        s && (n = n - 256);
        for (var l = new xn(n), c = e + 1; c < r; ++c)
            l.mulAdd(256, this.get(c));
        return o + l.toString()
    }
    ,
    t.prototype.parseBitString = function(e, r, n) {
        for (var s = this.get(e), i = (r - e - 1 << 3) - s, a = "(" + i + ` bit)
`, o = "", l = e + 1; l < r; ++l) {
            for (var c = this.get(l), u = l == r - 1 ? s : 0, d = 7; d >= u; --d)
                o += c >> d & 1 ? "1" : "0";
            if (o.length > n)
                return a + jr(o, n)
        }
        return a + o
    }
    ,
    t.prototype.parseOctetString = function(e, r, n) {
        if (this.isASCII(e, r))
            return jr(this.parseStringISO(e, r), n);
        var s = r - e
          , i = "(" + s + ` byte)
`;
        n /= 2,
        s > n && (r = e + n);
        for (var a = e; a < r; ++a)
            i += this.hexByte(this.get(a));
        return s > n && (i += zd),
        i
    }
    ,
    t.prototype.parseOID = function(e, r, n) {
        for (var s = "", i = new xn, a = 0, o = e; o < r; ++o) {
            var l = this.get(o);
            if (i.mulAdd(128, l & 127),
            a += 7,
            !(l & 128)) {
                if (s === "")
                    if (i = i.simplify(),
                    i instanceof xn)
                        i.sub(80),
                        s = "2." + i.toString();
                    else {
                        var c = i < 80 ? i < 40 ? 0 : 1 : 2;
                        s = c + "." + (i - c * 40)
                    }
                else
                    s += "." + i.toString();
                if (s.length > n)
                    return jr(s, n);
                i = new xn,
                a = 0
            }
        }
        return a > 0 && (s += ".incomplete"),
        s
    }
    ,
    t
}();


var xy = function() {
    function t(e, r, n, s, i) {
        if (!(s instanceof Ec))
            throw new Error("Invalid tag value.");
        this.stream = e,
        this.header = r,
        this.length = n,
        this.tag = s,
        this.sub = i
    }
    return t.prototype.typeName = function() {
        switch (this.tag.tagClass) {
        case 0:
            switch (this.tag.tagNumber) {
            case 0:
                return "EOC";
            case 1:
                return "BOOLEAN";
            case 2:
                return "INTEGER";
            case 3:
                return "BIT_STRING";
            case 4:
                return "OCTET_STRING";
            case 5:
                return "NULL";
            case 6:
                return "OBJECT_IDENTIFIER";
            case 7:
                return "ObjectDescriptor";
            case 8:
                return "EXTERNAL";
            case 9:
                return "REAL";
            case 10:
                return "ENUMERATED";
            case 11:
                return "EMBEDDED_PDV";
            case 12:
                return "UTF8String";
            case 16:
                return "SEQUENCE";
            case 17:
                return "SET";
            case 18:
                return "NumericString";
            case 19:
                return "PrintableString";
            case 20:
                return "TeletexString";
            case 21:
                return "VideotexString";
            case 22:
                return "IA5String";
            case 23:
                return "UTCTime";
            case 24:
                return "GeneralizedTime";
            case 25:
                return "GraphicString";
            case 26:
                return "VisibleString";
            case 27:
                return "GeneralString";
            case 28:
                return "UniversalString";
            case 30:
                return "BMPString"
            }
            return "Universal_" + this.tag.tagNumber.toString();
        case 1:
            return "Application_" + this.tag.tagNumber.toString();
        case 2:
            return "[" + this.tag.tagNumber.toString() + "]";
        case 3:
            return "Private_" + this.tag.tagNumber.toString()
        }
    }
    ,
    t.prototype.content = function(e) {
        if (this.tag === void 0)
            return null;
        e === void 0 && (e = 1 / 0);
        var r = this.posContent()
          , n = Math.abs(this.length);
        if (!this.tag.isUniversal())
            return this.sub !== null ? "(" + this.sub.length + " elem)" : this.stream.parseOctetString(r, r + n, e);
        switch (this.tag.tagNumber) {
        case 1:
            return this.stream.get(r) === 0 ? "false" : "true";
        case 2:
            return this.stream.parseInteger(r, r + n);
        case 3:
            return this.sub ? "(" + this.sub.length + " elem)" : this.stream.parseBitString(r, r + n, e);
        case 4:
            return this.sub ? "(" + this.sub.length + " elem)" : this.stream.parseOctetString(r, r + n, e);
        case 6:
            return this.stream.parseOID(r, r + n, e);
        case 16:
        case 17:
            return this.sub !== null ? "(" + this.sub.length + " elem)" : "(no elem)";
        case 12:
            return jr(this.stream.parseStringUTF(r, r + n), e);
        case 18:
        case 19:
        case 20:
        case 21:
        case 22:
        case 26:
            return jr(this.stream.parseStringISO(r, r + n), e);
        case 30:
            return jr(this.stream.parseStringBMP(r, r + n), e);
        case 23:
        case 24:
            return this.stream.parseTime(r, r + n, this.tag.tagNumber == 23)
        }
        return null
    }
    ,
    t.prototype.toString = function() {
        return this.typeName() + "@" + this.stream.pos + "[header:" + this.header + ",length:" + this.length + ",sub:" + (this.sub === null ? "null" : this.sub.length) + "]"
    }
    ,
    t.prototype.toPrettyString = function(e) {
        e === void 0 && (e = "");
        var r = e + this.typeName() + " @" + this.stream.pos;
        if (this.length >= 0 && (r += "+"),
        r += this.length,
        this.tag.tagConstructed ? r += " (constructed)" : this.tag.isUniversal() && (this.tag.tagNumber == 3 || this.tag.tagNumber == 4) && this.sub !== null && (r += " (encapsulates)"),
        r += `
`,
        this.sub !== null) {
            e += "  ";
            for (var n = 0, s = this.sub.length; n < s; ++n)
                r += this.sub[n].toPrettyString(e)
        }
        return r
    }
    ,
    t.prototype.posStart = function() {
        return this.stream.pos
    }
    ,
    t.prototype.posContent = function() {
        return this.stream.pos + this.header
    }
    ,
    t.prototype.posEnd = function() {
        return this.stream.pos + this.header + Math.abs(this.length)
    }
    ,
    t.prototype.toHexString = function() {
        return this.stream.hexDump(this.posStart(), this.posEnd(), !0)
    }
    ,
    t.decodeLength = function(e) {
        var r = e.get()
          , n = r & 127;
        if (n == r)
            return n;
        if (n > 6)
            throw new Error("Length over 48 bits not supported at position " + (e.pos - 1));
        if (n === 0)
            return null;
        r = 0;
        for (var s = 0; s < n; ++s)
            r = r * 256 + e.get();
        return r
    }
    ,
    t.prototype.getHexStringValue = function() {
        var e = this.toHexString()
          , r = this.header * 2
          , n = this.length * 2;
        return e.substr(r, n)
    }
    ,
    t.decode = function(e) {
        var r;
        e instanceof ta ? r = e : r = new ta(e,0);
        var n = new ta(r)
          , s = new Ec(r)
          , i = t.decodeLength(r)
          , a = r.pos
          , o = a - n.pos
          , l = null
          , c = function() {
            var d = [];
            if (i !== null) {
                for (var f = a + i; r.pos < f; )
                    d[d.length] = t.decode(r);
                if (r.pos != f)
                    throw new Error("Content size is not correct for container starting at offset " + a)
            } else
                try {
                    for (; ; ) {
                        var p = t.decode(r);
                        if (p.tag.isEOC())
                            break;
                        d[d.length] = p
                    }
                    i = a - r.pos
                } catch (g) {
                    throw new Error("Exception while decoding undefined length content: " + g)
                }
            return d
        };
        if (s.tagConstructed)
            l = c();
        else if (s.isUniversal() && (s.tagNumber == 3 || s.tagNumber == 4))
            try {
                if (s.tagNumber == 3 && r.get() != 0)
                    throw new Error("BIT STRINGs with unused bits cannot encapsulate.");
                l = c();
                for (var u = 0; u < l.length; ++u)
                    if (l[u].tag.isEOC())
                        throw new Error("EOC is not supposed to be actual content.")
            } catch {
                l = null
            }
        if (l === null) {
            if (i === null)
                throw new Error("We can't skip over an invalid tag with undefined length at offset " + a);
            r.pos = a + Math.abs(i)
        }
        return new t(n,o,i,s,l)
    }
    ,
    t
}();






var Oo = {
    decode: function(t) {
        var e;
        if ($0 === void 0) {
            var r = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
              , n = `= \f
\r     \u2028\u2029`;
            for ($0 = Object.create(null),
            e = 0; e < 64; ++e)
                $0[r.charAt(e)] = e;
            for ($0["-"] = 62,
            $0._ = 63,
            e = 0; e < n.length; ++e)
                $0[n.charAt(e)] = -1
        }
        var s = []
          , i = 0
          , a = 0;
        for (e = 0; e < t.length; ++e) {
            var o = t.charAt(e);
            if (o == "=")
                break;
            if (o = $0[o],
            o != -1) {
                if (o === void 0)
                    throw new Error("Illegal character at offset " + e);
                i |= o,
                ++a >= 4 ? (s[s.length] = i >> 16,
                s[s.length] = i >> 8 & 255,
                s[s.length] = i & 255,
                i = 0,
                a = 0) : i <<= 6
            }
        }
        switch (a) {
        case 1:
            throw new Error("Base64 encoding incomplete: at least 2 bits missing");
        case 2:
            s[s.length] = i >> 10;
            break;
        case 3:
            s[s.length] = i >> 16,
            s[s.length] = i >> 8 & 255;
            break
        }
        return s
    },
    re: /-----BEGIN [^-]+-----([A-Za-z0-9+\/=\s]+)-----END [^-]+-----|begin-base64[^\n]+\n([A-Za-z0-9+\/=\s]+)====/,
    unarmor: function(t) {
        var e = Oo.re.exec(t);
        if (e)
            if (e[1])
                t = e[1];
            else if (e[2])
                t = e[2];
            else
                throw new Error("RegExp out of sync");
        return Oo.decode(t)
    }
};



var Py = function() {
    function t() {
        this.n = null,
        this.e = 0,
        this.d = null,
        this.p = null,
        this.q = null,
        this.dmp1 = null,
        this.dmq1 = null,
        this.coeff = null
    }
    return t.prototype.doPublic = function(e) {
        return e.modPowInt(this.e, this.n)
    }
    ,
    t.prototype.doPrivate = function(e) {
        if (this.p == null || this.q == null)
            return e.modPow(this.d, this.n);
        for (var r = e.mod(this.p).modPow(this.dmp1, this.p), n = e.mod(this.q).modPow(this.dmq1, this.q); r.compareTo(n) < 0; )
            r = r.add(this.p);
        return r.subtract(n).multiply(this.coeff).mod(this.p).multiply(this.q).add(n)
    }
    ,
    t.prototype.setPublic = function(e, r) {
        e != null && r != null && e.length > 0 && r.length > 0 ? (this.n = Ke(e, 16),
        this.e = parseInt(r, 16)) : console.error("Invalid RSA public key")
    }
    ,
    t.prototype.encrypt = function(e) {
        var r = this.n.bitLength() + 7 >> 3;
         var n = zy(e, r);

       
 
        if (n == null)
            return null;
        var s = this.doPublic(n);
        if (s == null)
            return null;
        for (var i = s.toString(16), a = i.length, o = 0; o < r * 2 - a; o++)
            i = "0" + i;
        return i
    }
    ,
    t.prototype.setPrivate = function(e, r, n) {
        e != null && r != null && e.length > 0 && r.length > 0 ? (this.n = Ke(e, 16),
        this.e = parseInt(r, 16),
        this.d = Ke(n, 16)) : console.error("Invalid RSA private key")
    }
    ,
    t.prototype.setPrivateEx = function(e, r, n, s, i, a, o, l) {
        e != null && r != null && e.length > 0 && r.length > 0 ? (this.n = Ke(e, 16),
        this.e = parseInt(r, 16),
        this.d = Ke(n, 16),
        this.p = Ke(s, 16),
        this.q = Ke(i, 16),
        this.dmp1 = Ke(a, 16),
        this.dmq1 = Ke(o, 16),
        this.coeff = Ke(l, 16)) : console.error("Invalid RSA private key")
    }
    ,
    t.prototype.generate = function(e, r) {
        var n = new ko
          , s = e >> 1;
        this.e = parseInt(r, 16);
        for (var i = new Ce(r,16); ; ) {
            for (; this.p = new Ce(e - s,1,n),
            !(this.p.subtract(Ce.ONE).gcd(i).compareTo(Ce.ONE) == 0 && this.p.isProbablePrime(10)); )
                ;
            for (; this.q = new Ce(s,1,n),
            !(this.q.subtract(Ce.ONE).gcd(i).compareTo(Ce.ONE) == 0 && this.q.isProbablePrime(10)); )
                ;
            if (this.p.compareTo(this.q) <= 0) {
                var a = this.p;
                this.p = this.q,
                this.q = a
            }
            var o = this.p.subtract(Ce.ONE)
              , l = this.q.subtract(Ce.ONE)
              , c = o.multiply(l);
            if (c.gcd(i).compareTo(Ce.ONE) == 0) {
                this.n = this.p.multiply(this.q),
                this.d = i.modInverse(c),
                this.dmp1 = this.d.mod(o),
                this.dmq1 = this.d.mod(l),
                this.coeff = this.q.modInverse(this.p);
                break
            }
        }
    }
    ,
    t.prototype.decrypt = function(e) {
        var r = Ke(e, 16)
          , n = this.doPrivate(r);
        return n == null ? null : Iy(n, this.n.bitLength() + 7 >> 3)
    }
    ,
    t.prototype.generateAsync = function(e, r, n) {
        var s = new ko
          , i = e >> 1;
        this.e = parseInt(r, 16);
        var a = new Ce(r,16)
          , o = this
          , l = function() {
            var c = function() {
                if (o.p.compareTo(o.q) <= 0) {
                    var f = o.p;
                    o.p = o.q,
                    o.q = f
                }
                var p = o.p.subtract(Ce.ONE)
                  , g = o.q.subtract(Ce.ONE)
                  , h = p.multiply(g);
                h.gcd(a).compareTo(Ce.ONE) == 0 ? (o.n = o.p.multiply(o.q),
                o.d = a.modInverse(h),
                o.dmp1 = o.d.mod(p),
                o.dmq1 = o.d.mod(g),
                o.coeff = o.q.modInverse(o.p),
                setTimeout(function() {
                    n()
                }, 0)) : setTimeout(l, 0)
            }
              , u = function() {
                o.q = Me(),
                o.q.fromNumberAsync(i, 1, s, function() {
                    o.q.subtract(Ce.ONE).gcda(a, function(f) {
                        f.compareTo(Ce.ONE) == 0 && o.q.isProbablePrime(10) ? setTimeout(c, 0) : setTimeout(u, 0)
                    })
                })
            }
              , d = function() {
                o.p = Me(),
                o.p.fromNumberAsync(e - i, 1, s, function() {
                    o.p.subtract(Ce.ONE).gcda(a, function(f) {
                        f.compareTo(Ce.ONE) == 0 && o.p.isProbablePrime(10) ? setTimeout(u, 0) : setTimeout(d, 0)
                    })
                })
            };
            setTimeout(d, 0)
        };
        setTimeout(l, 0)
    }
    ,
    t.prototype.sign = function(e, r, n) {
        var s = Dy(n)
          , i = s + r(e).toString()
          , a = My(i, this.n.bitLength() / 4);
        if (a == null)
            return null;
        var o = this.doPrivate(a);
        if (o == null)
            return null;
        var l = o.toString(16);
        return l.length & 1 ? "0" + l : l
    }
    ,
    t.prototype.verify = function(e, r, n) {
        var s = Ke(r, 16)
          , i = this.doPublic(s);
        if (i == null)
            return null;
        var a = i.toString(16).replace(/^1f+00/, "")
          , o = Oy(a);
        return o == n(e).toString()
    }
    ,
    t
}();




var zc = function(t) {
    ky(e, t);
    function e(r) {
        var n = t.call(this) || this;
        return r && (typeof r == "string" ? n.parseKey(r) : (e.hasPrivateKeyProperty(r) || e.hasPublicKeyProperty(r)) && n.parsePropertiesFrom(r)),
        n
    }
    return e.prototype.parseKey = function(r) {
        try {
            var n = 0
              , s = 0
              , i = /^\s*(?:[0-9A-Fa-f][0-9A-Fa-f]\s*)+$/
              , a = i.test(r) ? my.decode(r) : Oo.unarmor(r)
              , o = xy.decode(a);
            if (o.sub.length === 3 && (o = o.sub[2].sub[0]),
            o.sub.length === 9) {
                n = o.sub[1].getHexStringValue(),
                this.n = Ke(n, 16),
                s = o.sub[2].getHexStringValue(),
                this.e = parseInt(s, 16);
                var l = o.sub[3].getHexStringValue();
                this.d = Ke(l, 16);
                var c = o.sub[4].getHexStringValue();
                this.p = Ke(c, 16);
                var u = o.sub[5].getHexStringValue();
                this.q = Ke(u, 16);
                var d = o.sub[6].getHexStringValue();
                this.dmp1 = Ke(d, 16);
                var f = o.sub[7].getHexStringValue();
                this.dmq1 = Ke(f, 16);
                var p = o.sub[8].getHexStringValue();
                this.coeff = Ke(p, 16)
            } else if (o.sub.length === 2) {
                var g = o.sub[1]
                  , h = g.sub[0];
                n = h.sub[0].getHexStringValue(),
                this.n = Ke(n, 16),
                s = h.sub[1].getHexStringValue(),
                this.e = parseInt(s, 16)
            } else
                return !1;
            return !0
        } catch {
            return !1
        }
    }
    ,
    e.prototype.getPrivateBaseKey = function() {
        var r = {
            array: [new J.asn1.DERInteger({
                int: 0
            }), new J.asn1.DERInteger({
                bigint: this.n
            }), new J.asn1.DERInteger({
                int: this.e
            }), new J.asn1.DERInteger({
                bigint: this.d
            }), new J.asn1.DERInteger({
                bigint: this.p
            }), new J.asn1.DERInteger({
                bigint: this.q
            }), new J.asn1.DERInteger({
                bigint: this.dmp1
            }), new J.asn1.DERInteger({
                bigint: this.dmq1
            }), new J.asn1.DERInteger({
                bigint: this.coeff
            })]
        }
          , n = new J.asn1.DERSequence(r);
        return n.getEncodedHex()
    }
    ,
    e.prototype.getPrivateBaseKeyB64 = function() {
        return ei(this.getPrivateBaseKey())
    }
    ,
    e.prototype.getPublicBaseKey = function() {
        var r = new J.asn1.DERSequence({
            array: [new J.asn1.DERObjectIdentifier({
                oid: "1.2.840.113549.1.1.1"
            }), new J.asn1.DERNull]
        })
          , n = new J.asn1.DERSequence({
            array: [new J.asn1.DERInteger({
                bigint: this.n
            }), new J.asn1.DERInteger({
                int: this.e
            })]
        })
          , s = new J.asn1.DERBitString({
            hex: "00" + n.getEncodedHex()
        })
          , i = new J.asn1.DERSequence({
            array: [r, s]
        });
        return i.getEncodedHex()
    }
    ,
    e.prototype.getPublicBaseKeyB64 = function() {
        return ei(this.getPublicBaseKey())
    }
    ,
    e.wordwrap = function(r, n) {
        if (n = n || 64,
        !r)
            return r;
        var s = "(.{1," + n + `})( +|$
?)|(.{1,` + n + "})";
        return r.match(RegExp(s, "g")).join(`
`)
    }
    ,
    e.prototype.getPrivateKey = function() {
        var r = `-----BEGIN RSA PRIVATE KEY-----
`;
        return r += e.wordwrap(this.getPrivateBaseKeyB64()) + `
`,
        r += "-----END RSA PRIVATE KEY-----",
        r
    }
    ,
    e.prototype.getPublicKey = function() {
        var r = `-----BEGIN PUBLIC KEY-----
`;
        return r += e.wordwrap(this.getPublicBaseKeyB64()) + `
`,
        r += "-----END PUBLIC KEY-----",
        r
    }
    ,
    e.hasPublicKeyProperty = function(r) {
        return r = r || {},
        r.hasOwnProperty("n") && r.hasOwnProperty("e")
    }
    ,
    e.hasPrivateKeyProperty = function(r) {
        return r = r || {},
        r.hasOwnProperty("n") && r.hasOwnProperty("e") && r.hasOwnProperty("d") && r.hasOwnProperty("p") && r.hasOwnProperty("q") && r.hasOwnProperty("dmp1") && r.hasOwnProperty("dmq1") && r.hasOwnProperty("coeff")
    }
    ,
    e.prototype.parsePropertiesFrom = function(r) {
        this.n = r.n,
        this.e = r.e,
        r.hasOwnProperty("d") && (this.d = r.d,
        this.p = r.p,
        this.q = r.q,
        this.dmp1 = r.dmp1,
        this.dmq1 = r.dmq1,
        this.coeff = r.coeff)
    }
    ,
    e
}(Py);



var Ny = function() {
    function t(e) {
        e = e || {},
        this.default_key_size = e.default_key_size ? parseInt(e.default_key_size, 10) : 1024,
        this.default_public_exponent = e.default_public_exponent || "010001",
        this.log = e.log || !1,
        this.key = null
    }
    return t.prototype.setKey = function(e) {
        this.log && this.key && console.warn("A key was already set, overriding existing."),
        this.key = new zc(e)
    }
    ,
    t.prototype.setPrivateKey = function(e) {
        this.setKey(e)
    }
    ,
    t.prototype.setPublicKey = function(e) {
        this.setKey(e)
    }
    ,
    t.prototype.decrypt = function(e) {
        try {
            return this.getKey().decrypt(Ac(e))
        } catch {
            return !1
        }
    }
    ,
    t.prototype.encrypt = function(e) {
        try {
            return ei(this.getKey().encrypt(e))
        } catch {
            return !1
        }
    }
    ,
    t.prototype.sign = function(e, r, n) {
        try {
            return ei(this.getKey().sign(e, r, n))
        } catch {
            return !1
        }
    }
    ,
    t.prototype.verify = function(e, r, n) {
        try {
            return this.getKey().verify(e, Ac(r), n)
        } catch {
            return !1
        }
    }
    ,
    t.prototype.getKey = function(e) {
        if (!this.key) {
            if (this.key = new zc,
            e && {}.toString.call(e) === "[object Function]") {
                this.key.generateAsync(this.default_key_size, this.default_public_exponent, e);
                return
            }
            this.key.generate(this.default_key_size, this.default_public_exponent)
        }
        return this.key
    }
    ,
    t.prototype.getPrivateKey = function() {
        return this.getKey().getPrivateKey()
    }
    ,
    t.prototype.getPrivateKeyB64 = function() {
        return this.getKey().getPrivateBaseKeyB64()
    }
    ,
    t.prototype.getPublicKey = function() {
        return this.getKey().getPublicKey()
    }
    ,
    t.prototype.getPublicKeyB64 = function() {
        return this.getKey().getPublicBaseKeyB64()
    }
    ,
    t
}();




function Jo(t, e) {
    const r = new Ny({});
//     debugger;
    return r.setPublicKey(t),
    r.encrypt(e)
}




let t = '-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArbBaNEIC630Fg+SiPJPV\nDh3u/nOCsHzY3Rmi5x2qzYR4A116PzYHzKRKHf/4tfhZPNzu84zK2nBbZbBIKk4s\n8l//GwQ7ZqULjfduoWwo5QRi80ISaoC+7+tb3YMy/niiKfUd2725avwtJjJJ3PZ4\n26yjTQ9E4giOmJ0k7tI7gSOa3BbL5SuLMICwGvwOU3xdISKKaTwzkit3I4nVTzF3\nkYKG7PI3HEJhybI/IAl+GleksO6Zzf1P/l8j/oge5KITeJnC0QJtR8VGkW15pR0C\nf9IgTJZ34KGXEYkaVqnFO9YvMJjM5BYG80+pQCRCV0+rzHy5nNE93oOM3aZkMjE8\nmwIDAQAB\n-----END PUBLIC KEY-----';

let e = '123456';

let angdh = Jo(t,e);



console.log(angdh)

 

posted @ 2023-10-27 16:10  AngDH  阅读(32)  评论(0编辑  收藏  举报