声明
本文仅供学习参考,如有侵权可私信本人删除,请勿用于其他途径,违者后果自负!
如果觉得文章对你有所帮助,可以给博主点击关注和收藏哦!
前言
目标网站:aHR0cHM6Ly9obnNieWIuaGFpbmFuLmdvdi5jbi8jL25ld3MtbW9kdWxlP3dlYnNpdGU9MQ==
接口:Z2dmdy92MS91bmlmaWVk
前几天看了一篇博文是关于本网站逆向内容,大佬使用的python还原了加密过程。 海南社保服务平台解密逆向分析 正好学习一下国密SM4.
参数分析
打开F12抓包,解密内容是response的返回值。
全局搜索encData
参数,将出现的所有部分打上断点。
直接定位到了加密地方,加密函数是O
对象的encrypt
函数,O则在上方能够轻易找到,并且告知是sm4加密。
O = n("5044").sm4;
很明显了,剩下内容即可选择使用python还原。 在这里我选择的是扣代码,感兴趣的小伙伴可以接着向下看。
扣代码
通过O对象的赋值,可以判断大概率是一个webpack打包的js文件, 所以直接在该行下断点,验证一下。
分发器无疑,由于网站处理的比较简单,所以将加载模块拿下来就可以直接运行获取结果了。
var xxxx;
(function (e) {
var n = {}
, i = {
index: 0
};
function o(t) {
if (n[t])
return n[t].exports;
var i = n[t] = {
i: t,
l: !1,
exports: {}
};
return e[t].call(i.exports, i, i.exports, o),
i.l = !0,
i.exports
}
xxxx = o;
}
)({
5044: function (e, t, n) {
e.exports = {
sm2: n("731b"),
sm3: n("0b7b"),
sm4: n("8262")
}
},
"731b": function (e, t, n) {
var i = n("f33e")
, r = i.BigInteger
, o = n("d714")
, a = o.encodeDer
, s = o.decodeDer
, l = n("cd73")
, c = n("a511")
, u = n("ad6e")
, f = u.generateEcparam()
, d = f.G
, h = f.curve
, p = f.n
, g = 0;
function b(e, t) {
var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 1
, i = new c;
e = u.hexToArray(u.parseUtf8StringToHex(e)),
t.length > 128 && (t = t.substr(t.length - 128));
var r = t.substr(0, 64)
, o = t.substr(64);
t = i.createPoint(r, o);
var a = i.initEncipher(t);
i.encryptBlock(e);
var s = u.arrayToHex(e)
, l = new Array(32);
return i.doFinal(l),
l = u.arrayToHex(l),
n === g ? a + s + l : a + l + s
}
function m(e, t) {
var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 1
, i = new c;
t = new r(t, 16);
var o = e.substr(0, 64)
, a = e.substr(0 + o.length, 64)
, s = o.length + a.length
, l = e.substr(s, 64)
, f = e.substr(s + 64);
n === g && (l = e.substr(e.length - 64),
f = e.substr(s, e.length - s - 64));
var d = u.hexToArray(f)
, h = i.createPoint(o, a);
i.initDecipher(t, h),
i.decryptBlock(d);
var p = new Array(32);
i.doFinal(p);
var b = u.arrayToHex(p) === l;
if (b) {
var m = u.arrayToUtf8(d);
return m
}
return ""
}
function v(e, t) {
var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}
, i = n.pointPool
, o = n.der
, s = n.hash
, l = n.publicKey
, c = n.userId
, f = "string" === typeof e ? u.parseUtf8StringToHex(e) : u.parseArrayBufferToHex(e);
s && (l = l || k(t),
f = A(f, l, c));
var d = new r(t, 16)
, h = new r(f, 16)
, g = null
, b = null
, m = null;
do {
do {
var v = void 0;
v = i && i.length ? i.pop() : x(),
g = v.k,
b = h.add(v.x1).mod(p)
} while (b.equals(r.ZERO) || b.add(g).equals(p));
m = d.add(r.ONE).modInverse(p).multiply(g.subtract(b.multiply(d))).mod(p)
} while (m.equals(r.ZERO));
return o ? a(b, m) : u.leftPad(b.toString(16), 64) + u.leftPad(m.toString(16), 64)
}
function j(e, t, n) {
var i, o, a = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, l = a.der, c = a.hash,
f = a.userId, g = "string" === typeof e ? u.parseUtf8StringToHex(e) : u.parseArrayBufferToHex(e);
if (c && (g = A(g, n, f)),
l) {
var b = s(t);
i = b.r,
o = b.s
} else
i = new r(t.substring(0, 64), 16),
o = new r(t.substring(64), 16);
var m = h.decodePointHex(n)
, v = new r(g, 16)
, j = i.add(o).mod(p);
if (j.equals(r.ZERO))
return !1;
var k = d.multiply(o).add(m.multiply(j))
, x = v.add(k.getX().toBigInteger()).mod(p);
return i.equals(x)
}
function A(e, t) {
var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : "1234567812345678"
, i = new l
, r = (new l).getZ(d, t.substr(2, 128), n)
, o = u.hexToArray(u.arrayToHex(r).toString())
, a = e
, s = u.hexToArray(a)
, c = new Array(i.getDigestSize());
return i.blockUpdate(o, 0, o.length),
i.blockUpdate(s, 0, s.length),
i.doFinal(c, 0),
u.arrayToHex(c).toString()
}
function k(e) {
var t = d.multiply(new r(e, 16))
, n = u.leftPad(t.getX().toBigInteger().toString(16), 64)
, i = u.leftPad(t.getY().toBigInteger().toString(16), 64);
return "04" + n + i
}
function x() {
var e = u.generateKeyPairHex()
, t = h.decodePointHex(e.publicKey);
return e.k = new r(e.privateKey, 16),
e.x1 = t.getX().toBigInteger(),
e
}
e.exports = {
generateKeyPairHex: u.generateKeyPairHex,
doEncrypt: b,
doDecrypt: m,
doSignature: v,
doVerifySignature: j,
getPoint: x
}
},
"0b7b": function (e, t, n) {
function i(e, t) {
return e.length >= t ? e : new Array(t - e.length + 1).join("0") + e
}
function r(e) {
for (var t = 8, n = "", r = 0; r < e.length / t; r++)
n += i(parseInt(e.substr(r * t, t), 2).toString(16), 2);
return n
}
function o(e) {
for (var t = 2, n = "", r = 0; r < e.length / t; r++)
n += i(parseInt(e.substr(r * t, t), 16).toString(2), 8);
return n
}
function a(e) {
for (var t = "", n = 0, r = e.length; n < r; n++) {
var o = e[n];
t += i(o.codePointAt(0).toString(2), 8)
}
return t
}
function s(e, t) {
return e.substring(t % e.length) + e.substr(0, t % e.length)
}
function l(e, t, n) {
for (var i, r = e || "", o = t || "", a = [], s = r.length - 1; s >= 0; s--)
i = n(r[s], o[s], i),
a[s] = i[0];
return a.join("")
}
function c(e, t) {
return l(e, t, (function (e, t) {
return [e === t ? "0" : "1"]
}
))
}
function u(e, t) {
return l(e, t, (function (e, t) {
return ["1" === e && "1" === t ? "1" : "0"]
}
))
}
function f(e, t) {
return l(e, t, (function (e, t) {
return ["1" === e || "1" === t ? "1" : "0"]
}
))
}
function d(e, t) {
var n = l(e, t, (function (e, t, n) {
var i = n ? n[1] : "0";
return e !== t ? ["0" === i ? "1" : "0", i] : [i, e]
}
));
return n
}
function h(e) {
return l(e, void 0, (function (e) {
return ["1" === e ? "0" : "1"]
}
))
}
function p(e) {
return function () {
for (var t = arguments.length, n = new Array(t), i = 0; i < t; i++)
n[i] = arguments[i];
return n.reduce((function (t, n) {
return e(t, n)
}
))
}
}
function g(e) {
return p(c)(e, s(e, 9), s(e, 17))
}
function b(e) {
return p(c)(e, s(e, 15), s(e, 23))
}
function m(e, t, n, i) {
return i >= 0 && i <= 15 ? p(c)(e, t, n) : p(f)(u(e, t), u(e, n), u(t, n))
}
function v(e, t, n, i) {
return i >= 0 && i <= 15 ? p(c)(e, t, n) : f(u(e, t), u(h(e), n))
}
function j(e) {
return o(e >= 0 && e <= 15 ? "79cc4519" : "7a879d8a")
}
function A(e, t) {
for (var n = 32, i = [], r = [], o = 0; o < 16; o++)
i.push(t.substr(o * n, n));
for (var a = 16; a < 68; a++)
i.push(p(c)(b(p(c)(i[a - 16], i[a - 9], s(i[a - 3], 15))), s(i[a - 13], 7), i[a - 6]));
for (var l = 0; l < 64; l++)
r.push(c(i[l], i[l + 4]));
for (var u = [], f = 0; f < 8; f++)
u.push(e.substr(f * n, n));
for (var h, A, k, x, y = u[0], C = u[1], _ = u[2], w = u[3], I = u[4], S = u[5], O = u[6], M = u[7], E = 0; E < 64; E++)
h = s(p(d)(s(y, 12), I, s(j(E), E)), 7),
A = c(h, s(y, 12)),
k = p(d)(m(y, C, _, E), w, A, r[E]),
x = p(d)(v(I, S, O, E), M, h, i[E]),
w = _,
_ = s(C, 9),
C = y,
y = k,
M = O,
O = s(S, 19),
S = I,
I = g(x);
return c([y, C, _, w, I, S, O, M].join(""), e)
}
e.exports = function (e) {
var t = a(e)
, n = t.length
, s = n % 512;
s = s >= 448 ? 512 - s % 448 - 1 : 448 - s - 1;
for (var l = "".concat(t, "1").concat(i("", s)).concat(i(n.toString(2), 64)).toString(), c = (n + s + 65) / 512, u = o("7380166f4914b2b9172442d7da8a0600a96f30bc163138aae38dee4db0fb0e4e"), f = 0; f <= c - 1; f++) {
var d = l.substr(512 * f, 512);
u = A(u, d)
}
return r(u)
}
},
8262: function (e, t) {
function n(e) {
return a(e) || o(e) || r(e) || i()
}
function i() {
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
}
function r(e, t) {
if (e) {
if ("string" === typeof e)
return s(e, t);
var n = Object.prototype.toString.call(e).slice(8, -1);
return "Object" === n && e.constructor && (n = e.constructor.name),
"Map" === n || "Set" === n ? Array.from(e) : "Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? s(e, t) : void 0
}
}
function o(e) {
if ("undefined" !== typeof Symbol && null != e[Symbol.iterator] || null != e["@@iterator"])
return Array.from(e)
}
function a(e) {
if (Array.isArray(e))
return s(e)
}
function s(e, t) {
(null == t || t > e.length) && (t = e.length);
for (var n = 0, i = new Array(t); n < t; n++)
i[n] = e[n];
return i
}
var l = 0
, c = 32
, u = 16
,
f = [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]
,
d = [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 h(e) {
for (var t = [], n = 0, i = e.length; n < i; n += 2)
t.push(parseInt(e.substr(n, 2), 16));
return t
}
function p(e) {
return e.map((function (e) {
return e = e.toString(16),
1 === e.length ? "0" + e : e
}
)).join("")
}
function g(e) {
for (var t = [], n = 0, i = e.length; n < i; n++) {
var r = e.charCodeAt(n);
r <= 127 ? t.push(r) : r <= 2047 ? (t.push(192 | r >>> 6),
t.push(128 | 63 & r)) : (t.push(224 | r >>> 12),
t.push(128 | r >>> 6 & 63),
t.push(128 | 63 & r))
}
return t
}
function b(e) {
for (var t = [], n = 0, i = e.length; n < i; n++)
e[n] >= 224 && e[n] <= 239 ? (t.push(String.fromCharCode(((15 & e[n]) << 12) + ((63 & e[n + 1]) << 6) + (63 & e[n + 2]))),
n += 2) : e[n] >= 192 && e[n] <= 223 ? (t.push(String.fromCharCode(((31 & e[n]) << 6) + (63 & e[n + 1]))),
n++) : t.push(String.fromCharCode(e[n]));
return t.join("")
}
function m(e, t) {
return e << t | e >>> 32 - t
}
function v(e) {
return (255 & f[e >>> 24 & 255]) << 24 | (255 & f[e >>> 16 & 255]) << 16 | (255 & f[e >>> 8 & 255]) << 8 | 255 & f[255 & e]
}
function j(e) {
return e ^ m(e, 2) ^ m(e, 10) ^ m(e, 18) ^ m(e, 24)
}
function A(e) {
return e ^ m(e, 13) ^ m(e, 23)
}
function k(e, t, n) {
for (var i = new Array(4), r = new Array(4), o = 0; o < 4; o++)
r[0] = 255 & e[0 + 4 * o],
r[1] = 255 & e[1 + 4 * o],
r[2] = 255 & e[2 + 4 * o],
r[3] = 255 & e[3 + 4 * o],
i[o] = r[0] << 24 | r[1] << 16 | r[2] << 8 | r[3];
for (var a, s = 0; s < 32; s += 4)
a = i[1] ^ i[2] ^ i[3] ^ n[s + 0],
i[0] ^= j(v(a)),
a = i[2] ^ i[3] ^ i[0] ^ n[s + 1],
i[1] ^= j(v(a)),
a = i[3] ^ i[0] ^ i[1] ^ n[s + 2],
i[2] ^= j(v(a)),
a = i[0] ^ i[1] ^ i[2] ^ n[s + 3],
i[3] ^= j(v(a));
for (var l = 0; l < 16; l += 4)
t[l] = i[3 - l / 4] >>> 24 & 255,
t[l + 1] = i[3 - l / 4] >>> 16 & 255,
t[l + 2] = i[3 - l / 4] >>> 8 & 255,
t[l + 3] = 255 & i[3 - l / 4]
}
function x(e, t, n) {
for (var i = new Array(4), r = new Array(4), o = 0; o < 4; o++)
r[0] = 255 & e[0 + 4 * o],
r[1] = 255 & e[1 + 4 * o],
r[2] = 255 & e[2 + 4 * o],
r[3] = 255 & e[3 + 4 * o],
i[o] = r[0] << 24 | r[1] << 16 | r[2] << 8 | r[3];
i[0] ^= 2746333894,
i[1] ^= 1453994832,
i[2] ^= 1736282519,
i[3] ^= 2993693404;
for (var a, s = 0; s < 32; s += 4)
a = i[1] ^ i[2] ^ i[3] ^ d[s + 0],
t[s + 0] = i[0] ^= A(v(a)),
a = i[2] ^ i[3] ^ i[0] ^ d[s + 1],
t[s + 1] = i[1] ^= A(v(a)),
a = i[3] ^ i[0] ^ i[1] ^ d[s + 2],
t[s + 2] = i[2] ^= A(v(a)),
a = i[0] ^ i[1] ^ i[2] ^ d[s + 3],
t[s + 3] = i[3] ^= A(v(a));
if (n === l)
for (var c, u = 0; u < 16; u++)
c = t[u],
t[u] = t[31 - u],
t[31 - u] = c
}
function y(e, t, i) {
var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}
, o = r.padding
, a = void 0 === o ? "pkcs#5" : o
, s = (r.mode,
r.output)
, f = void 0 === s ? "string" : s;
if ("string" === typeof t && (t = h(t)),
16 !== t.length)
throw new Error("key is invalid");
if (e = "string" === typeof e ? i !== l ? g(e) : h(e) : n(e),
"pkcs#5" === a && i !== l)
for (var d = u - e.length % u, m = 0; m < d; m++)
e.push(d);
var v = new Array(c);
x(t, v, i);
var j = []
, A = e.length
, y = 0;
while (A >= u) {
var C = e.slice(y, y + 16)
, _ = new Array(16);
k(C, _, v);
for (var w = 0; w < u; w++)
j[y + w] = _[w];
A -= u,
y += u
}
if ("pkcs#5" === a && i === l) {
var I = j[j.length - 1];
j.splice(j.length - I, I)
}
return "array" !== f ? i !== l ? p(j) : b(j) : j
}
e.exports = {
encrypt: function (e, t, n) {
return y(e, t, 1, n)
},
decrypt: function (e, t, n) {
return y(e, t, 0, n)
},
utf8ToArray: function (e) {
return g(e)
}
}
},
"f33e": function (e, t, n) {
(function () {
var t, n = 0xdeadbeefcafe, i = 15715070 == (16777215 & n);
function r(e, t, n) {
null != e && ("number" == typeof e ? this.fromNumber(e, t, n) : null == t && "string" != typeof e ? this.fromString(e, 256) : this.fromString(e, t))
}
function o() {
return new r(null)
}
function a(e, t, n, i, r, o) {
while (--o >= 0) {
var a = t * this[e++] + n[i] + r;
r = Math.floor(a / 67108864), n[i++] = 67108863 & a
}
return r
}
function s(e, t, n, i, r, o) {
var a = 32767 & t, s = t >> 15;
while (--o >= 0) {
var l = 32767 & this[e], c = this[e++] >> 15, u = s * l + c * a;
l = a * l + ((32767 & u) << 15) + n[i] + (1073741823 & r), r = (l >>> 30) + (u >>> 15) + s * c + (r >>> 30), n[i++] = 1073741823 & l
}
return r
}
function l(e, t, n, i, r, o) {
var a = 16383 & t, s = t >> 14;
while (--o >= 0) {
var l = 16383 & this[e], c = this[e++] >> 14, u = s * l + c * a;
l = a * l + ((16383 & u) << 14) + n[i] + r, r = (l >> 28) + (u >> 14) + s * c, n[i++] = 268435455 & l
}
return r
}
var c = "undefined" !== typeof navigator;
c && i && "Microsoft Internet Explorer" == navigator.appName ? (r.prototype.am = s, t = 30) : c && i && "Netscape" != navigator.appName ? (r.prototype.am = a, t = 26) : (r.prototype.am = l, t = 28), r.prototype.DB = t, r.prototype.DM = (1 << t) - 1, r.prototype.DV = 1 << t;
var u = 52;
r.prototype.FV = Math.pow(2, u), r.prototype.F1 = u - t, r.prototype.F2 = 2 * t - u;
var f, d, h = "0123456789abcdefghijklmnopqrstuvwxyz", p = new Array;
for (f = "0".charCodeAt(0), d = 0; d <= 9; ++d) p[f++] = d;
for (f = "a".charCodeAt(0), d = 10; d < 36; ++d) p[f++] = d;
for (f = "A".charCodeAt(0), d = 10; d < 36; ++d) p[f++] = d;
function g(e) {
return h.charAt(e)
}
function b(e, t) {
var n = p[e.charCodeAt(t)];
return null == n ? -1 : n
}
function m(e) {
for (var t = this.t - 1; t >= 0; --t) e[t] = this[t];
e.t = this.t, e.s = this.s
}
function v(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
}
function j(e) {
var t = o();
return t.fromInt(e), t
}
function A(e, t) {
var n;
if (16 == t) n = 4; else if (8 == t) n = 3; else if (256 == t) n = 8; else if (2 == t) n = 1; else if (32 == t) n = 5; else {
if (4 != t) return void this.fromRadix(e, t);
n = 2
}
this.t = 0, this.s = 0;
var i = e.length, o = !1, a = 0;
while (--i >= 0) {
var s = 8 == n ? 255 & e[i] : b(e, i);
s < 0 ? "-" == e.charAt(i) && (o = !0) : (o = !1, 0 == a ? this[this.t++] = s : a + n > this.DB ? (this[this.t - 1] |= (s & (1 << this.DB - a) - 1) << a, this[this.t++] = s >> this.DB - a) : this[this.t - 1] |= s << a, a += n, a >= this.DB && (a -= this.DB))
}
8 == n && 0 != (128 & e[0]) && (this.s = -1, a > 0 && (this[this.t - 1] |= (1 << this.DB - a) - 1 << a)), this.clamp(), o && r.ZERO.subTo(this, this)
}
function k() {
var e = this.s & this.DM;
while (this.t > 0 && this[this.t - 1] == e) --this.t
}
function x(e) {
if (this.s < 0) return "-" + this.negate().toString(e);
var t;
if (16 == e) t = 4; else if (8 == e) t = 3; else if (2 == e) t = 1; else if (32 == e) t = 5; else {
if (4 != e) return this.toRadix(e);
t = 2
}
var n, i = (1 << t) - 1, r = !1, o = "", a = this.t, s = this.DB - a * this.DB % t;
if (a-- > 0) {
s < this.DB && (n = this[a] >> s) > 0 && (r = !0, o = g(n));
while (a >= 0) s < t ? (n = (this[a] & (1 << s) - 1) << t - s, n |= this[--a] >> (s += this.DB - t)) : (n = this[a] >> (s -= t) & i, s <= 0 && (s += this.DB, --a)), n > 0 && (r = !0), r && (o += g(n))
}
return r ? o : "0"
}
function y() {
var e = o();
return r.ZERO.subTo(this, e), e
}
function C() {
return this.s < 0 ? this.negate() : this
}
function _(e) {
var t = this.s - e.s;
if (0 != t) return t;
var n = this.t;
if (t = n - e.t, 0 != t) return this.s < 0 ? -t : t;
while (--n >= 0) if (0 != (t = this[n] - e[n])) return t;
return 0
}
function w(e) {
var t, n = 1;
return 0 != (t = e >>> 16) && (e = t, n += 16), 0 != (t = e >> 8) && (e = t, n += 8), 0 != (t = e >> 4) && (e = t, n += 4), 0 != (t = e >> 2) && (e = t, n += 2), 0 != (t = e >> 1) && (e = t, n += 1), n
}
function I() {
return this.t <= 0 ? 0 : this.DB * (this.t - 1) + w(this[this.t - 1] ^ this.s & this.DM)
}
function S(e, t) {
var n;
for (n = this.t - 1; n >= 0; --n) t[n + e] = this[n];
for (n = e - 1; n >= 0; --n) t[n] = 0;
t.t = this.t + e, t.s = this.s
}
function O(e, t) {
for (var n = e; n < this.t; ++n) t[n - e] = this[n];
t.t = Math.max(this.t - e, 0), t.s = this.s
}
function M(e, t) {
var n, i = e % this.DB, r = this.DB - i, o = (1 << r) - 1, a = Math.floor(e / this.DB),
s = this.s << i & this.DM;
for (n = this.t - 1; n >= 0; --n) t[n + a + 1] = this[n] >> r | s, s = (this[n] & o) << i;
for (n = a - 1; n >= 0; --n) t[n] = 0;
t[a] = s, t.t = this.t + a + 1, t.s = this.s, t.clamp()
}
function E(e, t) {
t.s = this.s;
var n = Math.floor(e / this.DB);
if (n >= this.t) t.t = 0; else {
var i = e % this.DB, r = this.DB - i, o = (1 << i) - 1;
t[0] = this[n] >> i;
for (var a = n + 1; a < this.t; ++a) t[a - n - 1] |= (this[a] & o) << r, t[a - n] = this[a] >> i;
i > 0 && (t[this.t - n - 1] |= (this.s & o) << r), t.t = this.t - n, t.clamp()
}
}
function T(e, t) {
var n = 0, i = 0, r = Math.min(e.t, this.t);
while (n < r) i += this[n] - e[n], t[n++] = i & this.DM, i >>= this.DB;
if (e.t < this.t) {
i -= e.s;
while (n < this.t) i += this[n], t[n++] = i & this.DM, i >>= this.DB;
i += this.s
} else {
i += this.s;
while (n < e.t) i -= e[n], t[n++] = i & this.DM, i >>= this.DB;
i -= e.s
}
t.s = i < 0 ? -1 : 0, i < -1 ? t[n++] = this.DV + i : i > 0 && (t[n++] = i), t.t = n, t.clamp()
}
function D(e, t) {
var n = this.abs(), i = e.abs(), o = n.t;
t.t = o + i.t;
while (--o >= 0) t[o] = 0;
for (o = 0; o < i.t; ++o) t[o + n.t] = n.am(0, i[o], t, o, 0, n.t);
t.s = 0, t.clamp(), this.s != e.s && r.ZERO.subTo(t, t)
}
function F(e) {
var t = this.abs(), n = e.t = 2 * t.t;
while (--n >= 0) e[n] = 0;
for (n = 0; n < t.t - 1; ++n) {
var i = t.am(n, t[n], e, 2 * n, 0, 1);
(e[n + t.t] += t.am(n + 1, 2 * t[n], e, 2 * n + 1, i, t.t - n - 1)) >= t.DV && (e[n + t.t] -= t.DV, e[n + t.t + 1] = 1)
}
e.t > 0 && (e[e.t - 1] += t.am(n, t[n], e, 2 * n, 0, 1)), e.s = 0, e.clamp()
}
function P(e, t, n) {
var i = e.abs();
if (!(i.t <= 0)) {
var a = this.abs();
if (a.t < i.t) return null != t && t.fromInt(0), void (null != n && this.copyTo(n));
null == n && (n = o());
var s = o(), l = this.s, c = e.s, u = this.DB - w(i[i.t - 1]);
u > 0 ? (i.lShiftTo(u, s), a.lShiftTo(u, n)) : (i.copyTo(s), a.copyTo(n));
var f = s.t, d = s[f - 1];
if (0 != d) {
var h = d * (1 << this.F1) + (f > 1 ? s[f - 2] >> this.F2 : 0), p = this.FV / h,
g = (1 << this.F1) / h, b = 1 << this.F2, m = n.t, v = m - f, j = null == t ? o() : t;
s.dlShiftTo(v, j), n.compareTo(j) >= 0 && (n[n.t++] = 1, n.subTo(j, n)), r.ONE.dlShiftTo(f, j), j.subTo(s, s);
while (s.t < f) s[s.t++] = 0;
while (--v >= 0) {
var A = n[--m] == d ? this.DM : Math.floor(n[m] * p + (n[m - 1] + b) * g);
if ((n[m] += s.am(0, A, n, v, 0, f)) < A) {
s.dlShiftTo(v, j), n.subTo(j, n);
while (n[m] < --A) n.subTo(j, n)
}
}
null != t && (n.drShiftTo(f, t), l != c && r.ZERO.subTo(t, t)), n.t = f, n.clamp(), u > 0 && n.rShiftTo(u, n), l < 0 && r.ZERO.subTo(n, n)
}
}
}
function B(e) {
var t = o();
return this.abs().divRemTo(e, null, t), this.s < 0 && t.compareTo(r.ZERO) > 0 && e.subTo(t, t), t
}
function N(e) {
this.m = e
}
function L(e) {
return e.s < 0 || e.compareTo(this.m) >= 0 ? e.mod(this.m) : e
}
function H(e) {
return e
}
function R(e) {
e.divRemTo(this.m, null, e)
}
function Y(e, t, n) {
e.multiplyTo(t, n), this.reduce(n)
}
function z(e, t) {
e.squareTo(t), this.reduce(t)
}
function V() {
if (this.t < 1) return 0;
var e = this[0];
if (0 == (1 & e)) return 0;
var t = 3 & e;
return t = t * (2 - (15 & e) * t) & 15, t = t * (2 - (255 & e) * t) & 255, t = t * (2 - ((65535 & e) * t & 65535)) & 65535, t = t * (2 - e * t % this.DV) % this.DV, t > 0 ? this.DV - t : -t
}
function G(e) {
this.m = e, this.mp = e.invDigit(), this.mpl = 32767 & this.mp, this.mph = this.mp >> 15, this.um = (1 << e.DB - 15) - 1, this.mt2 = 2 * e.t
}
function W(e) {
var t = o();
return e.abs().dlShiftTo(this.m.t, t), t.divRemTo(this.m, null, t), e.s < 0 && t.compareTo(r.ZERO) > 0 && this.m.subTo(t, t), t
}
function K(e) {
var t = o();
return e.copyTo(t), this.reduce(t), t
}
function U(e) {
while (e.t <= this.mt2) e[e.t++] = 0;
for (var t = 0; t < this.m.t; ++t) {
var n = 32767 & e[t],
i = n * this.mpl + ((n * this.mph + (e[t] >> 15) * this.mpl & this.um) << 15) & e.DM;
n = t + this.m.t, e[n] += this.m.am(0, i, e, t, 0, this.m.t);
while (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)
}
function Q(e, t) {
e.squareTo(t), this.reduce(t)
}
function J(e, t, n) {
e.multiplyTo(t, n), this.reduce(n)
}
function X() {
return 0 == (this.t > 0 ? 1 & this[0] : this.s)
}
function q(e, t) {
if (e > 4294967295 || e < 1) return r.ONE;
var n = o(), i = o(), a = t.convert(this), s = w(e) - 1;
a.copyTo(n);
while (--s >= 0) if (t.sqrTo(n, i), (e & 1 << s) > 0) t.mulTo(i, a, n); else {
var l = n;
n = i, i = l
}
return t.revert(n)
}
function Z(e, t) {
var n;
return n = e < 256 || t.isEven() ? new N(t) : new G(t), this.exp(e, n)
}
function $() {
var e = o();
return this.copyTo(e), e
}
function ee() {
if (this.s < 0) {
if (1 == this.t) return this[0] - this.DV;
if (0 == this.t) return -1
} else {
if (1 == this.t) return this[0];
if (0 == this.t) return 0
}
return (this[1] & (1 << 32 - this.DB) - 1) << this.DB | this[0]
}
function te() {
return 0 == this.t ? this.s : this[0] << 24 >> 24
}
function ne() {
return 0 == this.t ? this.s : this[0] << 16 >> 16
}
function ie(e) {
return Math.floor(Math.LN2 * this.DB / Math.log(e))
}
function re() {
return this.s < 0 ? -1 : this.t <= 0 || 1 == this.t && this[0] <= 0 ? 0 : 1
}
function oe(e) {
if (null == e && (e = 10), 0 == this.signum() || e < 2 || e > 36) return "0";
var t = this.chunkSize(e), n = Math.pow(e, t), i = j(n), r = o(), a = o(), s = "";
this.divRemTo(i, r, a);
while (r.signum() > 0) s = (n + a.intValue()).toString(e).substr(1) + s, r.divRemTo(i, r, a);
return a.intValue().toString(e) + s
}
function ae(e, t) {
this.fromInt(0), null == t && (t = 10);
for (var n = this.chunkSize(t), i = Math.pow(t, n), o = !1, a = 0, s = 0, l = 0; l < e.length; ++l) {
var c = b(e, l);
c < 0 ? "-" == e.charAt(l) && 0 == this.signum() && (o = !0) : (s = t * s + c, ++a >= n && (this.dMultiply(i), this.dAddOffset(s, 0), a = 0, s = 0))
}
a > 0 && (this.dMultiply(Math.pow(t, a)), this.dAddOffset(s, 0)), o && r.ZERO.subTo(this, this)
}
function se(e, t, n) {
if ("number" == typeof t) if (e < 2) this.fromInt(1); else {
this.fromNumber(e, n), this.testBit(e - 1) || this.bitwiseTo(r.ONE.shiftLeft(e - 1), ge, this), this.isEven() && this.dAddOffset(1, 0);
while (!this.isProbablePrime(t)) this.dAddOffset(2, 0), this.bitLength() > e && this.subTo(r.ONE.shiftLeft(e - 1), this)
} else {
var i = new Array, o = 7 & e;
i.length = 1 + (e >> 3), t.nextBytes(i), o > 0 ? i[0] &= (1 << o) - 1 : i[0] = 0, this.fromString(i, 256)
}
}
function le() {
var e = this.t, t = new Array;
t[0] = this.s;
var n, i = this.DB - e * this.DB % 8, r = 0;
if (e-- > 0) {
i < this.DB && (n = this[e] >> i) != (this.s & this.DM) >> i && (t[r++] = n | this.s << this.DB - i);
while (e >= 0) i < 8 ? (n = (this[e] & (1 << i) - 1) << 8 - i, n |= this[--e] >> (i += this.DB - 8)) : (n = this[e] >> (i -= 8) & 255, i <= 0 && (i += this.DB, --e)), 0 != (128 & n) && (n |= -256), 0 == r && (128 & this.s) != (128 & n) && ++r, (r > 0 || n != this.s) && (t[r++] = n)
}
return t
}
function ce(e) {
return 0 == this.compareTo(e)
}
function ue(e) {
return this.compareTo(e) < 0 ? this : e
}
function fe(e) {
return this.compareTo(e) > 0 ? this : e
}
function de(e, t, n) {
var i, r, o = Math.min(e.t, this.t);
for (i = 0; i < o; ++i) n[i] = t(this[i], e[i]);
if (e.t < this.t) {
for (r = e.s & this.DM, i = o; i < this.t; ++i) n[i] = t(this[i], r);
n.t = this.t
} else {
for (r = this.s & this.DM, i = o; i < e.t; ++i) n[i] = t(r, e[i]);
n.t = e.t
}
n.s = t(this.s, e.s), n.clamp()
}
function he(e, t) {
return e & t
}
function pe(e) {
var t = o();
return this.bitwiseTo(e, he, t), t
}
function ge(e, t) {
return e | t
}
function be(e) {
var t = o();
return this.bitwiseTo(e, ge, t), t
}
function me(e, t) {
return e ^ t
}
function ve(e) {
var t = o();
return this.bitwiseTo(e, me, t), t
}
function je(e, t) {
return e & ~t
}
function Ae(e) {
var t = o();
return this.bitwiseTo(e, je, t), t
}
function ke() {
for (var e = o(), t = 0; t < this.t; ++t) e[t] = this.DM & ~this[t];
return e.t = this.t, e.s = ~this.s, e
}
function xe(e) {
var t = o();
return e < 0 ? this.rShiftTo(-e, t) : this.lShiftTo(e, t), t
}
function ye(e) {
var t = o();
return e < 0 ? this.lShiftTo(-e, t) : this.rShiftTo(e, t), t
}
function Ce(e) {
if (0 == e) return -1;
var t = 0;
return 0 == (65535 & e) && (e >>= 16, t += 16), 0 == (255 & e) && (e >>= 8, t += 8), 0 == (15 & e) && (e >>= 4, t += 4), 0 == (3 & e) && (e >>= 2, t += 2), 0 == (1 & e) && ++t, t
}
function _e() {
for (var e = 0; e < this.t; ++e) if (0 != this[e]) return e * this.DB + Ce(this[e]);
return this.s < 0 ? this.t * this.DB : -1
}
function we(e) {
var t = 0;
while (0 != e) e &= e - 1, ++t;
return t
}
function Ie() {
for (var e = 0, t = this.s & this.DM, n = 0; n < this.t; ++n) e += we(this[n] ^ t);
return e
}
function Se(e) {
var t = Math.floor(e / this.DB);
return t >= this.t ? 0 != this.s : 0 != (this[t] & 1 << e % this.DB)
}
function Oe(e, t) {
var n = r.ONE.shiftLeft(e);
return this.bitwiseTo(n, t, n), n
}
function Me(e) {
return this.changeBit(e, ge)
}
function Ee(e) {
return this.changeBit(e, je)
}
function Te(e) {
return this.changeBit(e, me)
}
function De(e, t) {
var n = 0, i = 0, r = Math.min(e.t, this.t);
while (n < r) i += this[n] + e[n], t[n++] = i & this.DM, i >>= this.DB;
if (e.t < this.t) {
i += e.s;
while (n < this.t) i += this[n], t[n++] = i & this.DM, i >>= this.DB;
i += this.s
} else {
i += this.s;
while (n < e.t) i += e[n], t[n++] = i & this.DM, i >>= this.DB;
i += e.s
}
t.s = i < 0 ? -1 : 0, i > 0 ? t[n++] = i : i < -1 && (t[n++] = this.DV + i), t.t = n, t.clamp()
}
function Fe(e) {
var t = o();
return this.addTo(e, t), t
}
function Pe(e) {
var t = o();
return this.subTo(e, t), t
}
function Be(e) {
var t = o();
return this.multiplyTo(e, t), t
}
function Ne() {
var e = o();
return this.squareTo(e), e
}
function Le(e) {
var t = o();
return this.divRemTo(e, t, null), t
}
function He(e) {
var t = o();
return this.divRemTo(e, null, t), t
}
function Re(e) {
var t = o(), n = o();
return this.divRemTo(e, t, n), new Array(t, n)
}
function Ye(e) {
this[this.t] = this.am(0, e - 1, this, 0, 0, this.t), ++this.t, this.clamp()
}
function ze(e, t) {
if (0 != e) {
while (this.t <= t) this[this.t++] = 0;
this[t] += e;
while (this[t] >= this.DV) this[t] -= this.DV, ++t >= this.t && (this[this.t++] = 0), ++this[t]
}
}
function Ve() {
}
function Ge(e) {
return e
}
function We(e, t, n) {
e.multiplyTo(t, n)
}
function Ke(e, t) {
e.squareTo(t)
}
function Ue(e) {
return this.exp(e, new Ve)
}
function Qe(e, t, n) {
var i, r = Math.min(this.t + e.t, t);
n.s = 0, n.t = r;
while (r > 0) n[--r] = 0;
for (i = n.t - this.t; r < i; ++r) n[r + this.t] = this.am(0, e[r], n, r, 0, this.t);
for (i = Math.min(e.t, t); r < i; ++r) this.am(0, e[r], n, r, 0, t - r);
n.clamp()
}
function Je(e, t, n) {
--t;
var i = n.t = this.t + e.t - t;
n.s = 0;
while (--i >= 0) n[i] = 0;
for (i = Math.max(t - this.t, 0); i < e.t; ++i) n[this.t + i - t] = this.am(t - i, e[i], n, 0, 0, this.t + i - t);
n.clamp(), n.drShiftTo(1, n)
}
function Xe(e) {
this.r2 = o(), this.q3 = o(), r.ONE.dlShiftTo(2 * e.t, this.r2), this.mu = this.r2.divide(e), this.m = e
}
function qe(e) {
if (e.s < 0 || e.t > 2 * this.m.t) return e.mod(this.m);
if (e.compareTo(this.m) < 0) return e;
var t = o();
return e.copyTo(t), this.reduce(t), t
}
function Ze(e) {
return e
}
function $e(e) {
e.drShiftTo(this.m.t - 1, this.r2), e.t > this.m.t + 1 && (e.t = this.m.t + 1, e.clamp()), this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3), this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2);
while (e.compareTo(this.r2) < 0) e.dAddOffset(1, this.m.t + 1);
e.subTo(this.r2, e);
while (e.compareTo(this.m) >= 0) e.subTo(this.m, e)
}
function et(e, t) {
e.squareTo(t), this.reduce(t)
}
function tt(e, t, n) {
e.multiplyTo(t, n), this.reduce(n)
}
function nt(e, t) {
var n, i, r = e.bitLength(), a = j(1);
if (r <= 0) return a;
n = r < 18 ? 1 : r < 48 ? 3 : r < 144 ? 4 : r < 768 ? 5 : 6, i = r < 8 ? new N(t) : t.isEven() ? new Xe(t) : new G(t);
var s = new Array, l = 3, c = n - 1, u = (1 << n) - 1;
if (s[1] = i.convert(this), n > 1) {
var f = o();
i.sqrTo(s[1], f);
while (l <= u) s[l] = o(), i.mulTo(f, s[l - 2], s[l]), l += 2
}
var d, h, p = e.t - 1, g = !0, b = o();
r = w(e[p]) - 1;
while (p >= 0) {
r >= c ? d = e[p] >> r - c & u : (d = (e[p] & (1 << r + 1) - 1) << c - r, p > 0 && (d |= e[p - 1] >> this.DB + r - c)), l = n;
while (0 == (1 & d)) d >>= 1, --l;
if ((r -= l) < 0 && (r += this.DB, --p), g) s[d].copyTo(a), g = !1; else {
while (l > 1) i.sqrTo(a, b), i.sqrTo(b, a), l -= 2;
l > 0 ? i.sqrTo(a, b) : (h = a, a = b, b = h), i.mulTo(b, s[d], a)
}
while (p >= 0 && 0 == (e[p] & 1 << r)) i.sqrTo(a, b), h = a, a = b, b = h, --r < 0 && (r = this.DB - 1, --p)
}
return i.revert(a)
}
function it(e) {
var t = this.s < 0 ? this.negate() : this.clone(), n = e.s < 0 ? e.negate() : e.clone();
if (t.compareTo(n) < 0) {
var i = t;
t = n, n = i
}
var r = t.getLowestSetBit(), o = n.getLowestSetBit();
if (o < 0) return t;
r < o && (o = r), o > 0 && (t.rShiftTo(o, t), n.rShiftTo(o, n));
while (t.signum() > 0) (r = t.getLowestSetBit()) > 0 && t.rShiftTo(r, t), (r = n.getLowestSetBit()) > 0 && n.rShiftTo(r, n), t.compareTo(n) >= 0 ? (t.subTo(n, t), t.rShiftTo(1, t)) : (n.subTo(t, n), n.rShiftTo(1, n));
return o > 0 && n.lShiftTo(o, n), n
}
function rt(e) {
if (e <= 0) return 0;
var t = this.DV % e, n = this.s < 0 ? e - 1 : 0;
if (this.t > 0) if (0 == t) n = this[0] % e; else for (var i = this.t - 1; i >= 0; --i) n = (t * n + this[i]) % e;
return n
}
function ot(e) {
var t = e.isEven();
if (this.isEven() && t || 0 == e.signum()) return r.ZERO;
var n = e.clone(), i = this.clone(), o = j(1), a = j(0), s = j(0), l = j(1);
while (0 != n.signum()) {
while (n.isEven()) n.rShiftTo(1, n), t ? (o.isEven() && a.isEven() || (o.addTo(this, o), a.subTo(e, a)), o.rShiftTo(1, o)) : a.isEven() || a.subTo(e, a), a.rShiftTo(1, a);
while (i.isEven()) i.rShiftTo(1, i), t ? (s.isEven() && l.isEven() || (s.addTo(this, s), l.subTo(e, l)), s.rShiftTo(1, s)) : l.isEven() || l.subTo(e, l), l.rShiftTo(1, l);
n.compareTo(i) >= 0 ? (n.subTo(i, n), t && o.subTo(s, o), a.subTo(l, a)) : (i.subTo(n, i), t && s.subTo(o, s), l.subTo(a, l))
}
return 0 != i.compareTo(r.ONE) ? r.ZERO : l.compareTo(e) >= 0 ? l.subtract(e) : l.signum() < 0 ? (l.addTo(e, l), l.signum() < 0 ? l.add(e) : l) : l
}
N.prototype.convert = L, N.prototype.revert = H, N.prototype.reduce = R, N.prototype.mulTo = Y, N.prototype.sqrTo = z, G.prototype.convert = W, G.prototype.revert = K, G.prototype.reduce = U, G.prototype.mulTo = J, G.prototype.sqrTo = Q, r.prototype.copyTo = m, r.prototype.fromInt = v, r.prototype.fromString = A, r.prototype.clamp = k, r.prototype.dlShiftTo = S, r.prototype.drShiftTo = O, r.prototype.lShiftTo = M, r.prototype.rShiftTo = E, r.prototype.subTo = T, r.prototype.multiplyTo = D, r.prototype.squareTo = F, r.prototype.divRemTo = P, r.prototype.invDigit = V, r.prototype.isEven = X, r.prototype.exp = q, r.prototype.toString = x, r.prototype.negate = y, r.prototype.abs = C, r.prototype.compareTo = _, r.prototype.bitLength = I, r.prototype.mod = B, r.prototype.modPowInt = Z, r.ZERO = j(0), r.ONE = j(1), Ve.prototype.convert = Ge, Ve.prototype.revert = Ge, Ve.prototype.mulTo = We, Ve.prototype.sqrTo = Ke, Xe.prototype.convert = qe, Xe.prototype.revert = Ze, Xe.prototype.reduce = $e, Xe.prototype.mulTo = tt, Xe.prototype.sqrTo = et;
var at, st, lt,
ct = [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],
ut = (1 << 26) / ct[ct.length - 1];
function ft(e) {
var t, n = this.abs();
if (1 == n.t && n[0] <= ct[ct.length - 1]) {
for (t = 0; t < ct.length; ++t) if (n[0] == ct[t]) return !0;
return !1
}
if (n.isEven()) return !1;
t = 1;
while (t < ct.length) {
var i = ct[t], r = t + 1;
while (r < ct.length && i < ut) i *= ct[r++];
i = n.modInt(i);
while (t < r) if (i % ct[t++] == 0) return !1
}
return n.millerRabin(e)
}
function dt(e) {
var t = this.subtract(r.ONE), n = t.getLowestSetBit();
if (n <= 0) return !1;
var i = t.shiftRight(n);
e = e + 1 >> 1, e > ct.length && (e = ct.length);
for (var a = o(), s = 0; s < e; ++s) {
a.fromInt(ct[Math.floor(Math.random() * ct.length)]);
var l = a.modPow(i, this);
if (0 != l.compareTo(r.ONE) && 0 != l.compareTo(t)) {
var c = 1;
while (c++ < n && 0 != l.compareTo(t)) if (l = l.modPowInt(2, this), 0 == l.compareTo(r.ONE)) return !1;
if (0 != l.compareTo(t)) return !1
}
}
return !0
}
function ht(e) {
st[lt++] ^= 255 & e, st[lt++] ^= e >> 8 & 255, st[lt++] ^= e >> 16 & 255, st[lt++] ^= e >> 24 & 255, lt >= _t && (lt -= _t)
}
function pt() {
ht((new Date).getTime())
}
if (r.prototype.chunkSize = ie, r.prototype.toRadix = oe, r.prototype.fromRadix = ae, r.prototype.fromNumber = se, r.prototype.bitwiseTo = de, r.prototype.changeBit = Oe, r.prototype.addTo = De, r.prototype.dMultiply = Ye, r.prototype.dAddOffset = ze, r.prototype.multiplyLowerTo = Qe, r.prototype.multiplyUpperTo = Je, r.prototype.modInt = rt, r.prototype.millerRabin = dt, r.prototype.clone = $, r.prototype.intValue = ee, r.prototype.byteValue = te, r.prototype.shortValue = ne, r.prototype.signum = re, r.prototype.toByteArray = le, r.prototype.equals = ce, r.prototype.min = ue, r.prototype.max = fe, r.prototype.and = pe, r.prototype.or = be, r.prototype.xor = ve, r.prototype.andNot = Ae, r.prototype.not = ke, r.prototype.shiftLeft = xe, r.prototype.shiftRight = ye, r.prototype.getLowestSetBit = _e, r.prototype.bitCount = Ie, r.prototype.testBit = Se, r.prototype.setBit = Me, r.prototype.clearBit = Ee, r.prototype.flipBit = Te, r.prototype.add = Fe, r.prototype.subtract = Pe, r.prototype.multiply = Be, r.prototype.divide = Le, r.prototype.remainder = He, r.prototype.divideAndRemainder = Re, r.prototype.modPow = nt, r.prototype.modInverse = ot, r.prototype.pow = Ue, r.prototype.gcd = it, r.prototype.isProbablePrime = ft, r.prototype.square = Ne, r.prototype.Barrett = Xe, null == st) {
var gt;
if (st = new Array, lt = 0, "undefined" !== typeof window && window.crypto) if (window.crypto.getRandomValues) {
var bt = new Uint8Array(32);
for (window.crypto.getRandomValues(bt), gt = 0; gt < 32; ++gt) st[lt++] = bt[gt]
} else if ("Netscape" == navigator.appName && navigator.appVersion < "5") {
var mt = window.crypto.random(32);
for (gt = 0; gt < mt.length; ++gt) st[lt++] = 255 & mt.charCodeAt(gt)
}
while (lt < _t) gt = Math.floor(65536 * Math.random()), st[lt++] = gt >>> 8, st[lt++] = 255 > lt = 0, pt()
}
function vt() {
if (null == at) {
for (pt(), at = Ct(), at.init(st), lt = 0; lt < st.length; ++lt) st[lt] = 0;
lt = 0
}
return at.next()
}
function jt(e) {
var t;
for (t = 0; t < e.length; ++t) e[t] = vt()
}
function At() {
}
function kt() {
this.i = 0, this.j = 0, this.S = new Array
}
function xt(e) {
var t, n, i;
for (t = 0; t < 256; ++t) this.S[t] = t;
for (n = 0, t = 0; t < 256; ++t) n = n + this.S[t] + e[t % e.length] & 255, i = this.S[t], this.S[t] = this.S[n], this.S[n] = i;
this.i = 0, this.j = 0
}
function yt() {
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]
}
function Ct() {
return new kt
}
At.prototype.nextBytes = jt, kt.prototype.init = xt, kt.prototype.next = yt;
var _t = 256;
e.exports = {default: r, BigInteger: r, SecureRandom: At}
}).call(this)
},
d714: function(e, t, n) {
function i(e) {
return i = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) {
return typeof e
}
: function(e) {
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
}
,
i(e)
}
function r(e, t) {
if ("function" !== typeof t && null !== t)
throw new TypeError("Super expression must either be null or a function");
e.prototype = Object.create(t && t.prototype, {
constructor: {
value: e,
writable: !0,
configurable: !0
}
}),
Object.defineProperty(e, "prototype", {
writable: !1
}),
t && o(e, t)
}
function o(e, t) {
return o = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function(e, t) {
return e.__proto__ = t,
e
}
,
o(e, t)
}
function a(e) {
var t = c();
return function() {
var n, i = u(e);
if (t) {
var r = u(this).constructor;
n = Reflect.construct(i, arguments, r)
} else
n = i.apply(this, arguments);
return s(this, n)
}
}
function s(e, t) {
if (t && ("object" === i(t) || "function" === typeof t))
return t;
if (void 0 !== t)
throw new TypeError("Derived constructors may only return object or undefined");
return l(e)
}
function l(e) {
if (void 0 === e)
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
return e
}
function c() {
if ("undefined" === typeof Reflect || !Reflect.construct)
return !1;
if (Reflect.construct.sham)
return !1;
if ("function" === typeof Proxy)
return !0;
try {
return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], (function() {}
))),
!0
} catch (e) {
return !1
}
}
function u(e) {
return u = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function(e) {
return e.__proto__ || Object.getPrototypeOf(e)
}
,
u(e)
}
function f(e, t) {
if (!(e instanceof t))
throw new TypeError("Cannot call a class as a function")
}
function d(e, t) {
for (var n = 0; n < t.length; n++) {
var i = t[n];
i.enumerable = i.enumerable || !1,
i.configurable = !0,
"value"in i && (i.writable = !0),
Object.defineProperty(e, p(i.key), i)
}
}
function h(e, t, n) {
return t && d(e.prototype, t),
n && d(e, n),
Object.defineProperty(e, "prototype", {
writable: !1
}),
e
}
function p(e) {
var t = g(e, "string");
return "symbol" === i(t) ? t : String(t)
}
function g(e, t) {
if ("object" !== i(e) || null === e)
return e;
var n = e[Symbol.toPrimitive];
if (void 0 !== n) {
var r = n.call(e, t || "default");
if ("object" !== i(r))
return r;
throw new TypeError("@@toPrimitive must return a primitive value.")
}
return ("string" === t ? String : Number)(e)
}
var b = n("f33e")
, m = b.BigInteger;
function v(e) {
var t = e.toString(16);
if ("-" !== t.substr(0, 1))
t.length % 2 === 1 ? t = "0" + t : t.match(/^[0-7]/) || (t = "00" + t);
else {
var n = t.substr(1)
, i = n.length;
i % 2 === 1 ? i += 1 : t.match(/^[0-7]/) || (i += 2);
for (var r = "", o = 0; o < i; o++)
r += "f";
var a = new m(r,16)
, s = a.xor(e).add(m.ONE);
t = s.toString(16).replace(/^-/, "")
}
return t
}
var j = function() {
"use strict";
function e() {
f(this, e),
this.isModified = !0,
this.hTLV = null,
this.hT = "00",
this.hL = "00",
this.hV = ""
}
return h(e, [{
key: "getLengthHexFromValue",
value: function() {
var e = this.hV.length / 2
, t = e.toString(16);
if (t.length % 2 === 1 && (t = "0" + t),
e < 128)
return t;
var n = t.length / 2
, i = 128 + n;
return i.toString(16) + t
}
}, {
key: "getEncodedHex",
value: function() {
return (null == this.hTLV || this.isModified) && (this.hV = this.getFreshValueHex(),
this.hL = this.getLengthHexFromValue(),
this.hTLV = this.hT + this.hL + this.hV,
this.isModified = !1),
this.hTLV
}
}, {
key: "getFreshValueHex",
value: function() {
return ""
}
}]),
e
}()
, A = function(e) {
"use strict";
r(n, e);
var t = a(n);
function n(e) {
var i;
return f(this, n),
i = t.call(this),
i.hT = "02",
e && e.bigint && (i.hTLV = null,
i.isModified = !0,
i.hV = v(e.bigint)),
i
}
return h(n, [{
key: "getFreshValueHex",
value: function() {
return this.hV
}
}]),
n
}(j)
, k = function(e) {
"use strict";
r(n, e);
var t = a(n);
function n(e) {
var i;
return f(this, n),
i = t.call(this),
i.hT = "30",
i.asn1Array = [],
e && e.array && (i.asn1Array = e.array),
i
}
return h(n, [{
key: "getFreshValueHex",
value: function() {
for (var e = "", t = 0; t < this.asn1Array.length; t++) {
var n = this.asn1Array[t];
e += n.getEncodedHex()
}
return this.hV = e,
this.hV
}
}]),
n
}(j);
function x(e, t) {
if ("8" !== e.substring(t + 2, t + 3))
return 1;
var n = parseInt(e.substring(t + 3, t + 4), 10);
return 0 === n ? -1 : n > 0 && n < 10 ? n + 1 : -2
}
function y(e, t) {
var n = x(e, t);
return n < 1 ? "" : e.substring(t + 2, t + 2 + 2 * n)
}
function C(e, t) {
var n, i = y(e, t);
return "" === i ? -1 : (n = parseInt(i.substring(0, 1), 10) < 8 ? new m(i,16) : new m(i.substring(2),16),
n.intValue())
}
function _(e, t) {
var n = x(e, t);
return n < 0 ? n : t + 2 * (n + 1)
}
function w(e, t) {
var n = _(e, t)
, i = C(e, t);
return e.substring(n, n + 2 * i)
}
function I(e, t) {
var n = _(e, t)
, i = C(e, t);
return n + 2 * i
}
function S(e, t) {
var n = []
, i = _(e, t);
n.push(i);
for (var r = C(e, t), o = i, a = 0; ; ) {
var s = I(e, o);
if (null == s || s - i >= 2 * r)
break;
if (a >= 200)
break;
n.push(s),
o = s,
a++
}
return n
}
e.exports = {
encodeDer: function(e, t) {
var n = new A({
bigint: e
})
, i = new A({
bigint: t
})
, r = new k({
array: [n, i]
});
return r.getEncodedHex()
},
decodeDer: function(e) {
var t = S(e, 0)
, n = t[0]
, i = t[1]
, r = w(e, n)
, o = w(e, i)
, a = new m(r,16)
, s = new m(o,16);
return {
r: a,
s: s
}
}
}
},
cd73: function(e, t, n) {
function i(e) {
return i = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) {
return typeof e
}
: function(e) {
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
}
,
i(e)
}
function r(e, t) {
if (!(e instanceof t))
throw new TypeError("Cannot call a class as a function")
}
function o(e, t) {
for (var n = 0; n < t.length; n++) {
var i = t[n];
i.enumerable = i.enumerable || !1,
i.configurable = !0,
"value"in i && (i.writable = !0),
Object.defineProperty(e, s(i.key), i)
}
}
function a(e, t, n) {
return t && o(e.prototype, t),
n && o(e, n),
Object.defineProperty(e, "prototype", {
writable: !1
}),
e
}
function s(e) {
var t = l(e, "string");
return "symbol" === i(t) ? t : String(t)
}
function l(e, t) {
if ("object" !== i(e) || null === e)
return e;
var n = e[Symbol.toPrimitive];
if (void 0 !== n) {
var r = n.call(e, t || "default");
if ("object" !== i(r))
return r;
throw new TypeError("@@toPrimitive must return a primitive value.")
}
return ("string" === t ? String : Number)(e)
}
var c = n("f33e")
, u = c.BigInteger
, f = n("ad6e")
, d = function(e, t, n, i, r) {
for (var o = 0; o < r; o++)
n[i + o] = e[t + o]
}
, h = {
minValue: -2147483648,
maxValue: 2147483647,
parse: function(e) {
if (e < this.minValue) {
for (var t = Number(-e), n = t.toString(2), i = n.substr(n.length - 31, 31), r = "", o = 0; o < i.length; o++) {
var a = i.substr(o, 1);
r += "0" === a ? "1" : "0"
}
var s = parseInt(r, 2);
return s + 1
}
if (e > this.maxValue) {
for (var l = Number(e), c = l.toString(2), u = c.substr(c.length - 31, 31), f = "", d = 0; d < u.length; d++) {
var h = u.substr(d, 1);
f += "0" === h ? "1" : "0"
}
var p = parseInt(f, 2);
return -(p + 1)
}
return e
},
parseByte: function(e) {
if (e < 0) {
for (var t = Number(-e), n = t.toString(2), i = n.substr(n.length - 8, 8), r = "", o = 0; o < i.length; o++) {
var a = i.substr(o, 1);
r += "0" === a ? "1" : "0"
}
var s = parseInt(r, 2);
return (s + 1) % 256
}
if (e > 255) {
var l = Number(e)
, c = l.toString(2);
return parseInt(c.substr(c.length - 8, 8), 2)
}
return e
}
}
, p = function() {
"use strict";
function e() {
r(this, e),
this.xBuf = [],
this.xBufOff = 0,
this.byteCount = 0,
this.DIGEST_LENGTH = 32,
this.v0 = [1937774191, 1226093241, 388252375, 3666478592, 2842636476, 372324522, 3817729613, 2969243214],
this.v0 = [1937774191, 1226093241, 388252375, -628488704, -1452330820, 372324522, -477237683, -1325724082],
this.v = new Array(8),
this.v_ = new Array(8),
this.X0 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
this.X = new Array(68),
this.xOff = 0,
this.T_00_15 = 2043430169,
this.T_16_63 = 2055708042,
arguments.length > 0 ? this.initDigest(arguments.length <= 0 ? void 0 : arguments[0]) : this.init()
}
return a(e, [{
key: "init",
value: function() {
this.xBuf = new Array(4),
this.reset()
}
}, {
key: "initDigest",
value: function(e) {
this.xBuf = [].concat(e.xBuf),
this.xBufOff = e.xBufOff,
this.byteCount = e.byteCount,
d(e.X, 0, this.X, 0, e.X.length),
this.xOff = e.xOff,
d(e.v, 0, this.v, 0, e.v.length)
}
}, {
key: "getDigestSize",
value: function() {
return this.DIGEST_LENGTH
}
}, {
key: "reset",
value: function() {
this.byteCount = 0,
this.xBufOff = 0;
for (var e = Object.keys(this.xBuf), t = 0, n = e.length; t < n; t++)
this.xBuf[e[t]] = null;
d(this.v0, 0, this.v, 0, this.v0.length),
this.xOff = 0,
d(this.X0, 0, this.X, 0, this.X0.length)
}
}, {
key: "processBlock",
value: function() {
var e, t = this.X, n = new Array(64);
for (e = 16; e < 68; e++)
t[e] = this.p1(t[e - 16] ^ t[e - 9] ^ this.rotate(t[e - 3], 15)) ^ this.rotate(t[e - 13], 7) ^ t[e - 6];
for (e = 0; e < 64; e++)
n[e] = t[e] ^ t[e + 4];
var i, r, o, a, s, l = this.v, c = this.v_;
for (d(l, 0, c, 0, this.v0.length),
e = 0; e < 16; e++)
s = this.rotate(c[0], 12),
i = h.parse(h.parse(s + c[4]) + this.rotate(this.T_00_15, e)),
i = this.rotate(i, 7),
r = i ^ s,
o = h.parse(h.parse(this.ff_00_15(c[0], c[1], c[2]) + c[3]) + r) + n[e],
a = h.parse(h.parse(this.gg_00_15(c[4], c[5], c[6]) + c[7]) + i) + t[e],
c[3] = c[2],
c[2] = this.rotate(c[1], 9),
c[1] = c[0],
c[0] = o,
c[7] = c[6],
c[6] = this.rotate(c[5], 19),
c[5] = c[4],
c[4] = this.p0(a);
for (e = 16; e < 64; e++)
s = this.rotate(c[0], 12),
i = h.parse(h.parse(s + c[4]) + this.rotate(this.T_16_63, e)),
i = this.rotate(i, 7),
r = i ^ s,
o = h.parse(h.parse(this.ff_16_63(c[0], c[1], c[2]) + c[3]) + r) + n[e],
a = h.parse(h.parse(this.gg_16_63(c[4], c[5], c[6]) + c[7]) + i) + t[e],
c[3] = c[2],
c[2] = this.rotate(c[1], 9),
c[1] = c[0],
c[0] = o,
c[7] = c[6],
c[6] = this.rotate(c[5], 19),
c[5] = c[4],
c[4] = this.p0(a);
for (e = 0; e < 8; e++)
l[e] ^= h.parse(c[e]);
this.xOff = 0,
d(this.X0, 0, this.X, 0, this.X0.length)
}
}, {
key: "processWord",
value: function(e, t) {
var n = e[t] << 24;
n |= (255 & e[++t]) << 16,
n |= (255 & e[++t]) << 8,
n |= 255 & e[++t],
this.X[this.xOff] = n,
16 === ++this.xOff && this.processBlock()
}
}, {
key: "processLength",
value: function(e) {
this.xOff > 14 && this.processBlock(),
this.X[14] = this.urShiftLong(e, 32),
this.X[15] = 4294967295 & e
}
}, {
key: "intToBigEndian",
value: function(e, t, n) {
t[n] = 255 & h.parseByte(this.urShift(e, 24)),
t[++n] = 255 & h.parseByte(this.urShift(e, 16)),
t[++n] = 255 & h.parseByte(this.urShift(e, 8)),
t[++n] = 255 & h.parseByte(e)
}
}, {
key: "doFinal",
value: function(e, t) {
this.finish();
for (var n = 0; n < 8; n++)
this.intToBigEndian(this.v[n], e, t + 4 * n);
return this.reset(),
this.DIGEST_LENGTH
}
}, {
key: "update",
value: function(e) {
this.xBuf[this.xBufOff++] = e,
this.xBufOff === this.xBuf.length && (this.processWord(this.xBuf, 0),
this.xBufOff = 0),
this.byteCount++
}
}, {
key: "blockUpdate",
value: function(e, t, n) {
while (0 !== this.xBufOff && n > 0)
this.update(e[t]),
t++,
n--;
while (n > this.xBuf.length)
this.processWord(e, t),
t += this.xBuf.length,
n -= this.xBuf.length,
this.byteCount += this.xBuf.length;
while (n > 0)
this.update(e[t]),
t++,
n--
}
}, {
key: "finish",
value: function() {
var e = this.byteCount << 3;
this.update(128);
while (0 !== this.xBufOff)
this.update(0);
this.processLength(e),
this.processBlock()
}
}, {
key: "rotate",
value: function(e, t) {
return e << t | this.urShift(e, 32 - t)
}
}, {
key: "p0",
value: function(e) {
return e ^ this.rotate(e, 9) ^ this.rotate(e, 17)
}
}, {
key: "p1",
value: function(e) {
return e ^ this.rotate(e, 15) ^ this.rotate(e, 23)
}
}, {
key: "ff_00_15",
value: function(e, t, n) {
return e ^ t ^ n
}
}, {
key: "ff_16_63",
value: function(e, t, n) {
return e & t | e & n | t & n
}
}, {
key: "gg_00_15",
value: function(e, t, n) {
return e ^ t ^ n
}
}, {
key: "gg_16_63",
value: function(e, t, n) {
return e & t | ~e & n
}
}, {
key: "urShift",
value: function(e, t) {
return (e > h.maxValue || e < h.minValue) && (e = h.parse(e)),
e >>> t
}
}, {
key: "urShiftLong",
value: function(e, t) {
var n, i = new u;
if (i.fromInt(e),
i.signum() >= 0)
n = i.shiftRight(t).intValue();
else {
var r = new u;
r.fromInt(2);
var o = ~t
, a = "";
if (o < 0) {
for (var s = 64 + o, l = 0; l < s; l++)
a += "0";
var c = new u;
c.fromInt(e >> t);
var f = new u("10" + a,2);
a = f.toRadix(10);
var d = f.add(c);
n = d.toRadix(10)
} else
a = r.shiftLeft(~t).intValue(),
n = (e >> t) + a
}
return n
}
}, {
key: "getZ",
value: function(e, t, n) {
var r = 0;
if (n) {
if ("string" !== typeof n)
throw new Error("sm2: Type of userId Must be String! Receive Type: ".concat(i(n)));
if (n.length >= 8192)
throw new Error("sm2: The Length of userId Must Less Than 8192! Length: ".concat(n.length));
n = f.parseUtf8StringToHex(n),
r = 4 * n.length
}
if (this.update(r >> 8 & 255),
this.update(255 & r),
n) {
var o = f.hexToArray(n);
this.blockUpdate(o, 0, o.length)
}
var a = f.hexToArray(f.leftPad(e.curve.a.toBigInteger().toRadix(16), 64))
, s = f.hexToArray(f.leftPad(e.curve.b.toBigInteger().toRadix(16), 64))
, l = f.hexToArray(f.leftPad(e.getX().toBigInteger().toRadix(16), 64))
, c = f.hexToArray(f.leftPad(e.getY().toBigInteger().toRadix(16), 64))
, u = f.hexToArray(t.substr(0, 64))
, d = f.hexToArray(t.substr(64, 64));
this.blockUpdate(a, 0, a.length),
this.blockUpdate(s, 0, s.length),
this.blockUpdate(l, 0, l.length),
this.blockUpdate(c, 0, c.length),
this.blockUpdate(u, 0, u.length),
this.blockUpdate(d, 0, d.length);
var h = new Array(this.getDigestSize());
return this.doFinal(h, 0),
h
}
}]),
e
}();
e.exports = p
},
ad6e: function(e, t, n) {
var i = n("f33e")
, r = i.BigInteger
, o = i.SecureRandom
, a = n("4692")
, s = a.ECCurveFp
, l = new o
, c = p()
, u = c.curve
, f = c.G
, d = c.n;
function h() {
return u
}
function p() {
var e = new r("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF",16)
, t = new r("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC",16)
, n = new r("28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93",16)
, i = new s(e,t,n)
, o = "32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7"
, a = "BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0"
, l = i.decodePointHex("04" + o + a)
, c = new r("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123",16);
return {
curve: i,
G: l,
n: c
}
}
function g() {
var e = new r(d.bitLength(),l).mod(d.subtract(r.ONE)).add(r.ONE)
, t = v(e.toString(16), 64)
, n = f.multiply(e)
, i = v(n.getX().toBigInteger().toString(16), 64)
, o = v(n.getY().toBigInteger().toString(16), 64)
, a = "04" + i + o;
return {
privateKey: t,
publicKey: a
}
}
function b(e) {
e = unescape(encodeURIComponent(e));
for (var t = e.length, n = [], i = 0; i < t; i++)
n[i >>> 2] |= (255 & e.charCodeAt(i)) << 24 - i % 4 * 8;
for (var r = [], o = 0; o < t; o++) {
var a = n[o >>> 2] >>> 24 - o % 4 * 8 & 255;
r.push((a >>> 4).toString(16)),
r.push((15 & a).toString(16))
}
return r.join("")
}
function m(e) {
return Array.prototype.map.call(new Uint8Array(e), (function(e) {
return ("00" + e.toString(16)).slice(-2)
}
)).join("")
}
function v(e, t) {
return e.length >= t ? e : new Array(t - e.length + 1).join("0") + e
}
function j(e) {
for (var t = [], n = 0, i = 0; i < 2 * e.length; i += 2)
t[i >>> 3] |= parseInt(e[n], 10) << 24 - i % 8 * 4,
n++;
for (var r = [], o = 0; o < e.length; o++) {
var a = t[o >>> 2] >>> 24 - o % 4 * 8 & 255;
r.push((a >>> 4).toString(16)),
r.push((15 & a).toString(16))
}
return r.join("")
}
function A(e) {
for (var t = [], n = 0, i = 0; i < 2 * e.length; i += 2)
t[i >>> 3] |= parseInt(e[n], 10) << 24 - i % 8 * 4,
n++;
try {
for (var r = [], o = 0; o < e.length; o++) {
var a = t[o >>> 2] >>> 24 - o % 4 * 8 & 255;
r.push(String.fromCharCode(a))
}
return decodeURIComponent(escape(r.join("")))
} catch (s) {
throw new Error("Malformed UTF-8 data")
}
}
function k(e) {
var t = []
, n = e.length;
n % 2 !== 0 && (e = v(e, n + 1)),
n = e.length;
for (var i = 0; i < n; i += 2)
t.push(parseInt(e.substr(i, 2), 16));
return t
}
e.exports = {
getGlobalCurve: h,
generateEcparam: p,
generateKeyPairHex: g,
parseUtf8StringToHex: b,
parseArrayBufferToHex: m,
leftPad: v,
arrayToHex: j,
arrayToUtf8: A,
hexToArray: k
}
},
4692: function(e, t, n) {
function i(e) {
return i = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) {
return typeof e
}
: function(e) {
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
}
,
i(e)
}
function r(e, t) {
if (!(e instanceof t))
throw new TypeError("Cannot call a class as a function")
}
function o(e, t) {
for (var n = 0; n < t.length; n++) {
var i = t[n];
i.enumerable = i.enumerable || !1,
i.configurable = !0,
"value"in i && (i.writable = !0),
Object.defineProperty(e, s(i.key), i)
}
}
function a(e, t, n) {
return t && o(e.prototype, t),
n && o(e, n),
Object.defineProperty(e, "prototype", {
writable: !1
}),
e
}
function s(e) {
var t = l(e, "string");
return "symbol" === i(t) ? t : String(t)
}
function l(e, t) {
if ("object" !== i(e) || null === e)
return e;
var n = e[Symbol.toPrimitive];
if (void 0 !== n) {
var r = n.call(e, t || "default");
if ("object" !== i(r))
return r;
throw new TypeError("@@toPrimitive must return a primitive value.")
}
return ("string" === t ? String : Number)(e)
}
var c = n("f33e")
, u = c.BigInteger
, f = new u("3")
, d = function() {
"use strict";
function e(t, n) {
r(this, e),
this.x = n,
this.q = t
}
return a(e, [{
key: "equals",
value: function(e) {
return e === this || this.q.equals(e.q) && this.x.equals(e.x)
}
}, {
key: "toBigInteger",
value: function() {
return this.x
}
}, {
key: "negate",
value: function() {
return new e(this.q,this.x.negate().mod(this.q))
}
}, {
key: "add",
value: function(t) {
return new e(this.q,this.x.add(t.toBigInteger()).mod(this.q))
}
}, {
key: "subtract",
value: function(t) {
return new e(this.q,this.x.subtract(t.toBigInteger()).mod(this.q))
}
}, {
key: "multiply",
value: function(t) {
return new e(this.q,this.x.multiply(t.toBigInteger()).mod(this.q))
}
}, {
key: "divide",
value: function(t) {
return new e(this.q,this.x.multiply(t.toBigInteger().modInverse(this.q)).mod(this.q))
}
}, {
key: "square",
value: function() {
return new e(this.q,this.x.square().mod(this.q))
}
}]),
e
}()
, h = function() {
"use strict";
function e(t, n, i, o) {
r(this, e),
this.curve = t,
this.x = n,
this.y = i,
this.z = null == o ? u.ONE : o,
this.zinv = null
}
return a(e, [{
key: "getX",
value: function() {
return null === this.zinv && (this.zinv = this.z.modInverse(this.curve.q)),
this.curve.fromBigInteger(this.x.toBigInteger().multiply(this.zinv).mod(this.curve.q))
}
}, {
key: "getY",
value: function() {
return null === this.zinv && (this.zinv = this.z.modInverse(this.curve.q)),
this.curve.fromBigInteger(this.y.toBigInteger().multiply(this.zinv).mod(this.curve.q))
}
}, {
key: "equals",
value: function(e) {
if (e === this)
return !0;
if (this.isInfinity())
return e.isInfinity();
if (e.isInfinity())
return this.isInfinity();
var t = e.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(e.z)).mod(this.curve.q);
if (!t.equals(u.ZERO))
return !1;
var n = e.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(e.z)).mod(this.curve.q);
return n.equals(u.ZERO)
}
}, {
key: "isInfinity",
value: function() {
return null === this.x && null === this.y || this.z.equals(u.ZERO) && !this.y.toBigInteger().equals(u.ZERO)
}
}, {
key: "negate",
value: function() {
return new e(this.curve,this.x,this.y.negate(),this.z)
}
}, {
key: "add",
value: function(t) {
if (this.isInfinity())
return t;
if (t.isInfinity())
return this;
var n = this.x.toBigInteger()
, i = this.y.toBigInteger()
, r = this.z
, o = t.x.toBigInteger()
, a = t.y.toBigInteger()
, s = t.z
, l = this.curve.q
, c = n.multiply(s).mod(l)
, f = o.multiply(r).mod(l)
, d = c.subtract(f)
, h = i.multiply(s).mod(l)
, p = a.multiply(r).mod(l)
, g = h.subtract(p);
if (u.ZERO.equals(d))
return u.ZERO.equals(g) ? this.twice() : this.curve.infinity;
var b = c.add(f)
, m = r.multiply(s).mod(l)
, v = d.square().mod(l)
, j = d.multiply(v).mod(l)
, A = m.multiply(g.square()).subtract(b.multiply(v)).mod(l)
, k = d.multiply(A).mod(l)
, x = g.multiply(v.multiply(c).subtract(A)).subtract(h.multiply(j)).mod(l)
, y = j.multiply(m).mod(l);
return new e(this.curve,this.curve.fromBigInteger(k),this.curve.fromBigInteger(x),y)
}
}, {
key: "twice",
value: function() {
if (this.isInfinity())
return this;
if (!this.y.toBigInteger().signum())
return this.curve.infinity;
var t = this.x.toBigInteger()
, n = this.y.toBigInteger()
, i = this.z
, r = this.curve.q
, o = this.curve.a.toBigInteger()
, a = t.square().multiply(f).add(o.multiply(i.square())).mod(r)
, s = n.shiftLeft(1).multiply(i).mod(r)
, l = n.square().mod(r)
, c = l.multiply(t).multiply(i).mod(r)
, u = s.square().mod(r)
, d = a.square().subtract(c.shiftLeft(3)).mod(r)
, h = s.multiply(d).mod(r)
, p = a.multiply(c.shiftLeft(2).subtract(d)).subtract(u.shiftLeft(1).multiply(l)).mod(r)
, g = s.multiply(u).mod(r);
return new e(this.curve,this.curve.fromBigInteger(h),this.curve.fromBigInteger(p),g)
}
}, {
key: "multiply",
value: function(e) {
if (this.isInfinity())
return this;
if (!e.signum())
return this.curve.infinity;
for (var t = e.multiply(f), n = this.negate(), i = this, r = t.bitLength() - 2; r > 0; r--) {
i = i.twice();
var o = t.testBit(r)
, a = e.testBit(r);
o !== a && (i = i.add(o ? this : n))
}
return i
}
}]),
e
}()
, p = function() {
"use strict";
function e(t, n, i) {
r(this, e),
this.q = t,
this.a = this.fromBigInteger(n),
this.b = this.fromBigInteger(i),
this.infinity = new h(this,null,null)
}
return a(e, [{
key: "equals",
value: function(e) {
return e === this || this.q.equals(e.q) && this.a.equals(e.a) && this.b.equals(e.b)
}
}, {
key: "fromBigInteger",
value: function(e) {
return new d(this.q,e)
}
}, {
key: "decodePointHex",
value: function(e) {
switch (parseInt(e.substr(0, 2), 16)) {
case 0:
return this.infinity;
case 2:
case 3:
return null;
case 4:
case 6:
case 7:
var t = (e.length - 2) / 2
, n = e.substr(2, t)
, i = e.substr(t + 2, t);
return new h(this,this.fromBigInteger(new u(n,16)),this.fromBigInteger(new u(i,16)));
default:
return null
}
}
}]),
e
}();
e.exports = {
ECPointFp: h,
ECCurveFp: p
}
},
a511: function(e, t, n) {
function i(e) {
return i = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) {
return typeof e
}
: function(e) {
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
}
,
i(e)
}
function r(e, t) {
if (!(e instanceof t))
throw new TypeError("Cannot call a class as a function")
}
function o(e, t) {
for (var n = 0; n < t.length; n++) {
var i = t[n];
i.enumerable = i.enumerable || !1,
i.configurable = !0,
"value"in i && (i.writable = !0),
Object.defineProperty(e, s(i.key), i)
}
}
function a(e, t, n) {
return t && o(e.prototype, t),
n && o(e, n),
Object.defineProperty(e, "prototype", {
writable: !1
}),
e
}
function s(e) {
var t = l(e, "string");
return "symbol" === i(t) ? t : String(t)
}
function l(e, t) {
if ("object" !== i(e) || null === e)
return e;
var n = e[Symbol.toPrimitive];
if (void 0 !== n) {
var r = n.call(e, t || "default");
if ("object" !== i(r))
return r;
throw new TypeError("@@toPrimitive must return a primitive value.")
}
return ("string" === t ? String : Number)(e)
}
var c = n("f33e")
, u = c.BigInteger
, f = n("cd73")
, d = n("ad6e")
, h = function() {
"use strict";
function e() {
r(this, e),
this.ct = 1,
this.p2 = null,
this.sm3keybase = null,
this.sm3c3 = null,
this.key = new Array(32),
this.keyOff = 0
}
return a(e, [{
key: "reset",
value: function() {
this.sm3keybase = new f,
this.sm3c3 = new f;
var e = d.hexToArray(d.leftPad(this.p2.getX().toBigInteger().toRadix(16), 64))
, t = d.hexToArray(d.leftPad(this.p2.getY().toBigInteger().toRadix(16), 64));
this.sm3keybase.blockUpdate(e, 0, e.length),
this.sm3c3.blockUpdate(e, 0, e.length),
this.sm3keybase.blockUpdate(t, 0, t.length),
this.ct = 1,
this.nextKey()
}
}, {
key: "nextKey",
value: function() {
var e = new f(this.sm3keybase);
e.update(this.ct >> 24 & 255),
e.update(this.ct >> 16 & 255),
e.update(this.ct >> 8 & 255),
e.update(255 & this.ct),
e.doFinal(this.key, 0),
this.keyOff = 0,
this.ct++
}
}, {
key: "initEncipher",
value: function(e) {
var t = d.generateKeyPairHex()
, n = new u(t.privateKey,16)
, i = t.publicKey;
return this.p2 = e.multiply(n),
this.reset(),
i.length > 128 && (i = i.substr(i.length - 128)),
i
}
}, {
key: "encryptBlock",
value: function(e) {
this.sm3c3.blockUpdate(e, 0, e.length);
for (var t = 0; t < e.length; t++)
this.keyOff === this.key.length && this.nextKey(),
e[t] ^= 255 & this.key[this.keyOff++]
}
}, {
key: "initDecipher",
value: function(e, t) {
this.p2 = t.multiply(e),
this.reset()
}
}, {
key: "decryptBlock",
value: function(e) {
for (var t = 0; t < e.length; t++)
this.keyOff === this.key.length && this.nextKey(),
e[t] ^= 255 & this.key[this.keyOff++];
this.sm3c3.blockUpdate(e, 0, e.length)
}
}, {
key: "doFinal",
value: function(e) {
var t = d.hexToArray(d.leftPad(this.p2.getY().toBigInteger().toRadix(16), 64));
this.sm3c3.blockUpdate(t, 0, t.length),
this.sm3c3.doFinal(e, 0),
this.reset()
}
}, {
key: "createPoint",
value: function(e, t) {
var n = "04" + e + t
, i = d.getGlobalCurve().decodePointHex(n);
return i
}
}]),
e
}();
e.exports = h
},
})
var O = xxxx(5044).sm4;
var t ={
"appcode": "460000010"
}
var o = "hjikY0WSw6r6rHPS"
var encData = O.encrypt(JSON.stringify(t), O.utf8ToArray(O.encrypt(o, O.utf8ToArray("4600000100000000")).toUpperCase().slice(0, 16)));
console.log("请求体参数:",encData)
var encData = '95763D6E58EAEB6B427E63D6A6FF61665780C4459B04149AA9321B236E4FAC05FC426F2D01B85D90ADD7081CAFAFCEF065DF17D1A5FAE7C11CBD7B31E0BD94897598928782206AB4958121794324D99C65C7A6FC495E5B489138B7A7CCC938D02DB9F1EDD35D6EFA0850341C3D5433911A05B0D0F7D18E3C66B83C8BA80427F7C85E72724A4089CEBC7E7F0EF44FE7F2D6D9D29F68BF2EA718D543696375D5090F2F435033EB8DEFF785D4D458FD79324F893E5FF7EFB8DFE93546F75FCF56905268B2820F0229BE8F3FB30F4477E5E32DB8CC0F8DCBC12C153B0AA40821B9730AC9F4BE197121DDE251C0B7B043E08E3FDA165FD26E724C462058763B65219DC5F77B88F0BB20D00B83B5D7CBC470EE0439090CC1971270864FA0C25CF88F03D7F5078A242DF8923FB8069F8B5FDE9E1B7CA60E327E5BDBE3E149A3A213858E6BA8AC8B619D2670C3D3CBA3A75D3B6A5B3437435DB95FBC4766C1D4D25750F0543A5969E2AE4DF12348A355E0FB23958B09D368E5D4A31FEC30841002682ABD7A64D55FF20467D9CE7DCD600877376FE2927DC03BAAAF8CD47B431799294DBA9CFE2151142D71DBD5A607E9C455C2BEEBC30BF8402004DB09ACFFA9AAED94786F7FD7F89868E9C22897E11A1ADE43E18F03018D27B7B906A46E378C30EE3F0648D84E90ECE491F75989ECE141E5EF76EEFADDB9E6AC68904D6C1E9248A73AD944ABF1A4E7DA5BF2EB4C40EA2D851E2D68A910F4F08C39AC74AAD43974F3C6EFDD09590CC2ADF48E426DA3F9E0A8723C428FB0659985E65D9241FF72FE1CFCC149DD6C9DBEBCFD3496895EC08BFD2BD1D168281807802CE00ADE5913F0B334E248D25474E8DDDA3242AC255230560F7A739588228BDD515949F24DBDF6DC58DB7E0C9286F671DF8D1A5193E028BDBA378CE9DFE6B75C2365CBC63A5B0C44D997B1F01BFC37A9E08ECF95BD21FE3DFBAE168B804AB47D35F5B28D30ED37BE4DDE9ED3490108F71929C973D9EB09DB19B8DC44BBBE6847BBD71DE9A158C1A1A48B00F275339A79BAF4A3682642105136E03EC30D8A7A652851FDBE36A5E8E705DFF63248A4AE15C4D349AD5EBC67DC4CE4BDBFE47CDD326C9D3FA24F4F57053045F386B2100C26739DF5F3A48BB657EF814CEA104AE0D0633164AFFC3AD76D530BC9BBFD1ED52111583C4A5DACDFD435C4302B1B7E140DF423665242B1701E47E88D772D8FC4D6B1BCC1F2DD7C0F77E913C0B5BB29701ACF6670F96DF798146E90A787787C8BC6FA9FB2100AAA87AEDA367654715A225083213AA4952486103E88B1F01BFC37A9E08ECF95BD21FE3DFBAE42F8736E139709ECE292A5691C4D0215152989BB3B700AB36E079037DD83C1EEC1241072C7A8796673B5A3859F24D9533C2DC3B81077155B9EA2BA4AA05DCA94F2537004AB52D479BAD61862DD81144EC32B7974D26E1B97888864FCC6C249B48F9F169B2BA016D3994435A70A5798CBC6DA7942C44C00E302C05C8E7BFCA4EA312101C0C0BE0B1F62A6D89CD6EB397CE620E0A22C6AAFF0C794EC44E830E6BCD4F045130B3D88A40C906B63516790DF5903EACCEF14E7DB4CA39D5188FBDFCC8AB8F8A820F7961C77B334CA9E3FD0100797DCE01B1519079AC5247E16D96A75D52C1DD762675F9C9C91AD9B532B4CB8978EE3E2B82AA749AB501218A84D25E27E4A597648F38960D2108AEE276C88AE4CA6453CE96FDB9C6BBACBB6FC53A00809ED1BCD0CD13A333490815A31B7820D02BC3A9ADBD99079AB2629051EF1102495698EB79A2576FEDB96AD2378AE26BDC70FE4C9AA44B302C25C9BB2647B6863C26F70B57B1E927951B582DE1C7D2E15E9BD14278150F3FD40AD0FEE2DC95D8645DA8CC3197BC140C72F0CBEE1D0C1495AF137E75E1C6B6423575C87363C3795FDCE9ADCB5B085971E41E9C30F69B304E1AC3796AE5EAD9648E8118D50F61BDB2D598242F9922B7EDEF343093605C4695D7A832B0C15F057DBC7C7DDA09D18FA71DEA8BD25E4090B8151DFA011263FECB1F01BFC37A9E08ECF95BD21FE3DFBAE131F32BD0F61495AB8D9CDF085D624CD9E26540166B795075C9B3B0E3DF913BD60828E28E8E851BD487F82840CAB655AE3BDCC17FEA5FB2BF06098900DCE698D2634C85C19F253C1F0C7ABFBFC6945187D01D735B2F09B54A092CE95CB039BC8941484DE3F639B96A02C7F6CCFB64C19E3BDCC17FEA5FB2BF06098900DCE698DE6834EF8F928A6435DECC2BDEB3543598D772D8FC4D6B1BCC1F2DD7C0F77E9134EFE9D14378C0508CB044CA95B1CECCEEA7D31B1A4FE31E0E50DE579453010E27AAAFF710F66DB02A78E91E65740B2E38CEBA9A60E6BB3763E9C850EE9835373DDA121AA3C888925C96584E8DAB3173010B051B3AA479A792352E1D7F6773487703447037B54015DF876D18E3CE0E4772AD9E1FD5D16BF001EE31B03AD0B1C10CEA40C28AE6A39C62DDB405612683E65727EEAC010904108ABF29448198E13C882C5DA9D79E15E85BCCCD5059B2B48F1FB891E7872EFF19CFED2FC396CF9E2781A4A10713048131CE1C91ADC343ECB08BFD0781FE93569DB3DAFC3DC7011EEA7A3D8468A0ACF67DF0EDF5DFE3FE0D551168AB4935947F531478E5728F3302ED4A671DB1C389983DC72A5E0F6EE47DC4F45DDF4CC00302096788B9725B50CA08A06128DA309B0E39D9EF6E80D220BABF1C6FF8A6DDC36232F55B4830D958794662E927009ED5D11CC0EC6187EFF036BEAEBB6EEE31D390EE4FA9C9D24F94155AAEFE21C461D794D40E2328BCA446209FFD5FB63F19A2C8699E79C61AD0A1DEAA6B54852CDFD1F46CEEF387B46C3D3207F7A8B96396A96702C70FC2ED03D0C42FC053C7BACB5837874FA8989ABCAF050145E5493F4E654FF619DEF8C9C36041237272CD0A49542CF08DEA3F596C6AE40AAFD5D544CEBCA947CAD73A139796C2EA8B1F01BFC37A9E08ECF95BD21FE3DFBAE1321D7B4633F0A486D296A7467E02FBAC42ACB1859D2C6A81BBC18D71C234520BE4697E8169E860F084B0ACEEE4DC7C58D772D8FC4D6B1BCC1F2DD7C0F77E913727EEAC010904108ABF29448198E13C800F275339A79BAF4A3682642105136E08D772D8FC4D6B1BCC1F2DD7C0F77E913727EEAC010904108ABF29448198E13C800F275339A79BAF4A3682642105136E08D772D8FC4D6B1BCC1F2DD7C0F77E913727EEAC010904108ABF29448198E13C800F275339A79BAF4A3682642105136E08D772D8FC4D6B1BCC1F2DD7C0F77E913727EEAC010904108ABF29448198E13C800F275339A79BAF4A3682642105136E08D772D8FC4D6B1BCC1F2DD7C0F77E913727EEAC010904108ABF29448198E13C800F275339A79BAF4A3682642105136E08D772D8FC4D6B1BCC1F2DD7C0F77E913E9EE22CDD1954AC6CBF1CDCD7E3F31436AB91DB86CBA9339568684BD5CCAE34DEA151EF20E7988AF61233EAB9121D7C900F275339A79BAF4A3682642105136E08D772D8FC4D6B1BCC1F2DD7C0F77E913727EEAC010904108ABF29448198E13C800F275339A79BAF4A3682642105136E08D772D8FC4D6B1BCC1F2DD7C0F77E913727EEAC010904108ABF29448198E13C800F275339A79BAF4A3682642105136E08D772D8FC4D6B1BCC1F2DD7C0F77E913727EEAC010904108ABF29448198E13C800F275339A79BAF4A3682642105136E08D772D8FC4D6B1BCC1F2DD7C0F77E913727EEAC010904108ABF29448198E13C800F275339A79BAF4A3682642105136E08D772D8FC4D6B1BCC1F2DD7C0F77E913727EEAC010904108ABF29448198E13C800F275339A79BAF4A3682642105136E08D772D8FC4D6B1BCC1F2DD7C0F77E913727EEAC010904108ABF29448198E13C800F275339A79BAF4A3682642105136E08F0674BFF3D7EA8DB1BEA68C004C95FBE5598FCFAC2F1EB969B1F4DAEF63866916FA89AD8A3F6C9AD3DA6C8632F665E83869A1E1BD0A1CD7242E9B9002E8290DCFA689D7DA17FE97C39E7F9E19BA9622CEFB2CFBA724719C55FCB9540AE858DD1C02E8CF1464B6AABE293F8C5F4C730C59BB44FBF9E22900C974BE63542205182442B7DE69281F31C265E8C9DD7A9B2EEBF036C0F039565CF9F612946D282F5BA1FF26B05F290544060BC5B205E639C9E58BF8ACB12B7FDBCD360632AE398F7B7C59F0B87274A7E5F6D03960825641022C2F5F9D9DD799BD2CFDEEB887FA72AE76DB8775059A162E84C4449EB6CD2785570C46B3850932F2758595C446FC1590B0C5CDF0ED930FD25ABBC1736C19D339CC11DE169EB3AE135D7E930D289C957A08697F4BC3E6DD2B0FEAF540997E3CF5F03F5CD63522526C91F8BD1924841C706E9C413CDDDB29E1280838C22A14864BE68462B87A02D642667CA4D9AE439EBA654C6C0395B032B5FF8FEACA5EE6E67A43025D6DB88CB22DC59831613667ECB13303D76F0E456E4B605D62F9D8C5ED7F17E123EAEBE1B5A4ABD1A772FF97082FDCEAF650178441236669D952E64C91B2F4E8E0B56BEF0F7CB7D338EE309803C9C4C94894C511AC51428F997B9FEF77CC9EBFBE94AB18A3AC3DF25851121E91D644EBE64526C32B5C5BC3178DC9CFB8A9228ECE4A15A8C61EE6CC3AB85B9EA0CD09B71688AB2417EEE6AC1B86F2CD45F4B00926CC7D9E00D4B9F6F01CA39B34546AF87098C9B2C668014BF07D24849029E7FE548833FD74EC251E691C38F6BA5E6524E611307BE35568746758F45773F6F655161E3DCA944F4918E0607B9B0DEE9385CB61D4524DF2EC7B186F553171295495FD8A1D3BE298540B9B754F33B9180B1FF3011D51AA4607E7E6C392678A8C81E6A19D3FEA87F1EF63D0E86D028E8C696FCEEB3A93E0885D50E8411EC075A1598F43FB40B8C226695901CD27CB0FDA4417AD2E31216DED6BA2ABED1728D71E0EED8E9DCD8985041344F26B062CD529E95F931B4C4558BA92D33567B6A8844DD3825672CB8D5174BDF72715B0BA7966258B31D97870724CA602C415FF15EC8E5EA1A41E109EC3A8611504494F83B90C60D291D8B62F0BF079DE05FD599A5895527DE0FE7269170C522B1C58083124AE9B4D46BD446F827FD2C69EA90DD3B127B8D3DD75D05B99379884C3D126314EB21F37870EAF83AD02D7B2888AA4081ECECA3ED4B88868DB6B70EC8B770F5293A3F699216D966527A50E6464692F2BB4D6918BC5392F97C9E819DE73C295F1C1C3B1C9D77DC5BFFBE2B14CFE92870647B784BA812CD57B02BED87B30AE2D888EB00C0A680ADDA59651CFA6DF35FAF72B38BE4E82F3F4DFC9B71CF64294EF942228A9A36B2DBF6BE3D1CC1499C3C08BAA958EC0116A1C2FAD93F7DC86D6B237EEBCB4044A376E2E13450A6510F752820651EC73B3C0752477AA40F23CF89EA0439480529C68DA4727C6033A08BA9080CAB7F4FB021FD902BACD322B30C6528E9E6DF79E034467ACC9B0D2BBA1B494BA965525C2CD446A0CE27D9758C528F14BF04AA81EEB3AEA549C0056E9E863668AD2C939784B3A6A8200F32D07880D3D3B95ED58A0BBF7FE138C2BB71619D78DD1961270651DE7BDFCB4F26C7AB3A216BF3DA3E424A386D849FAE5BEF791FC14876489AD6D81DAC855ABBC555548ED41DAE559E3C2AC0139D1A9CE33FE3D2058EBBB5C6385EE45DDFCD6E6BD52A35EB7B5A5BBF058048F89295E887711729CD20494B079AEB922BCD7B456EF0B2BA0C58BECD9EE692A0548F5840E676526CEFCF9AAE9C26C89E98D2E920E99800D913AA8BCB2B6EC01B31486D195D6EE9598690DE22BBAD019559A5FF4DB386183E27185DA58D18FD3877486D647873F97421CC0627CC16ED7DD43DD8C120A61E03EBE5655588EAAB69A87A251F4E1CD4C5999347DA1593E58CD3A2359EA6945920D203771C2C28647682DE7B6F2BB607486FDA03CC7D5CDA2DC3A16DD643F38C17A437BC94659252D0AADE22495FAAE62C8D4ABBE0DB8B85D6BCA8109D62DE46B0FF4980F96172396EA8F557B101AAB14C347668580294FB2DB65C4F830F96F22B22DCBE4C4DEC9DC0ABB5BBE6F67E65C7E6D2FBD36050A9C18E181F5B493DF8D96BAE2AF1596FF4596061665CDF9195764404F85956141603D9A61B19918C1AD184744B0C7C0A2F9DA27A79FE06A3FD2001A12C3B0F32E43CA3BD4060009B61D00CB330C4DE95F931B4C4558BA92D33567B6A8844DD3825672CB8D5174BDF72715B0BA7966A4DB2A566E38DBFBE1871EE9C8B0D9D9DDB72723EB90CCCEE097A764B91EA6D3D0648592CEF1EF0A9CA7E230C9717A92B74B680CBAA24350C9623536E31E3E5768BE3ECA42B1FD512D73EDA704FA7B44D386FEA8F17439890D7350909A95F6AAD430EB13F6B434EF1C1D53592AEF460DE631A31C22917E49592961BD726F5FF0ADE39523C9BAD67F89DED1C82E211EB4851C9FF7819E3ECD5755477305C061364CC2B0AFA43E80422516180EC6E22ECDE02B76A9E0152D2CE2A3F51E23924512973FB3F42CCD643DBED9DA871AA72C47C59C282EBB74C4DE4A0331B70B778ACC36BD6A71FDADD88D50E5AAF527FCAC76F52EA8E9B63FB3FE0D30B4F6392F28B16CB90F9D44EF5076DFF812AB887A57DAB53F6EF74DD7434C1081E1475530066478C106ED20701D79E74987E887279016F95F2CB1D0C082E408857C0AB5FB9B11FB9C5804B1F2971236427EAAAB232779AC20343FE559790C88D3EE3DA4752F62B98FC89C42729043692D6BE50522B81A7AC8C4C4921DA067754140DDA4A141AC1F6FF9F6476E57ECBC64189051FC48D0A23408C5F04C3E06BC39A00B98D926D07EEAD0783B44BCF54ADBD6FBBB57F9AFDA2F547397A3A4C2B1EA6A083A506682DFBD79E0CD2B75291A09AE2436F789BA9DA5BD40053A92069F9D1FCD1837E1F58EC0116A1C2FAD93F7DC86D6B237EEBCB4044A376E2E13450A6510F752820651EC73B3C0752477AA40F23CF89EA0439480529C68DA4727C6033A08BA9080CAB7F4FB021FD902BACD322B30C6528E9E6DF79E034467ACC9B0D2BBA1B494BA96553E925A7793230CBF483E4E48C99C8F0284BA812CD57B02BED87B30AE2D888EB00C0A680ADDA59651CFA6DF35FAF72B3820CE994CFF0345080168B33DB5B16A47325DECE835E5975AD7AB80EA4884C94E38249B6665C6184D53392E2B51AAEFF28C51F0C05EFC6929D20828F972E8F732C61992B33AA8510A028A85B713F107E84FB0BE67A738CC62D0A55314832BDC852FF87B7EC9A6C139258384C3F5BE49A6E545AE2B744E22BCDD1ED9B0302F09C8DED3ABF2FC9C9EE0AE2139FD96C3229BD2C170674FD43E2B79B64D3B163A2837B5E78167776B9EEA0E56BEC3938D323B99B2338F6634A7957ACE927C92A9D2C9325DECE835E5975AD7AB80EA4884C94E38249B6665C6184D53392E2B51AAEFF28C51F0C05EFC6929D20828F972E8F732C61992B33AA8510A028A85B713F107E84FB0BE67A738CC62D0A55314832BDC852FF87B7EC9A6C139258384C3F5BE49A668BFE8ECE1916EC7B74A416715EC670B727EEAC010904108ABF29448198E13C800F275339A79BAF4A3682642105136E08D772D8FC4D6B1BCC1F2DD7C0F77E913727EEAC010904108ABF29448198E13C800F275339A79BAF4A3682642105136E08D772D8FC4D6B1BCC1F2DD7C0F77E913E9EE22CDD1954AC6CBF1CDCD7E3F31436AB91DB86CBA9339568684BD5CCAE34DD8766977A6F0BD0CA7A5D48C7F85E6C2B5657C7FB46C371A93D3723C385316429378B4AF7E5CA41B093BAA22734D1596D38AEB1361CB457D59B212F99FDD1A917FED0E9B62FC917D4AF94B7E0C55E572305D35E1B2A58524C5A8C249F1D8CC33775F070273165A2E18C264E3A10AA63264E68CA8EB53AFC3528BF0C465A53E43B2C599EFAD9EB842CFC84BDC63385443FD12746E1682B0D7B29F3173C5F6F20B5AA04D337D5726FD128C9B685D4F6A8E8512FCD26977650A148C896538FE5A1C6C9FDC236069B12958EF3C752CEDF3B3B1F01BFC37A9E08ECF95BD21FE3DFBAE1321D7B4633F0A486D296A7467E02FBA0F2F435033EB8DEFF785D4D458FD7932B1F01BFC37A9E08ECF95BD21FE3DFBAE1321D7B4633F0A486D296A7467E02FBA0F2F435033EB8DEFF785D4D458FD7932B1F01BFC37A9E08ECF95BD21FE3DFBAE1321D7B4633F0A486D296A7467E02FBAF943DBEC8C1EC45BE2C38DE6AAFE3E0BE19AB70FFCFDD166A2F61F4EBBAAC15B2187BE43273558C05DC3918D31538CF12C8F3460F6A2422F74A4A397AFA7728DA2FFD192844A4D69CDA5CC3F47AFFAD4544F0A3FF3F9C50F27037CFE876CA25F36BD6A71FDADD88D50E5AAF527FCAC76F52EA8E9B63FB3FE0D30B4F6392F28B16CB90F9D44EF5076DFF812AB887A57DAB53F6EF74DD7434C1081E1475530066478C106ED20701D79E74987E887279016F564F08CAD35CF49F549F13D3B93D2FFCBC8E84283AF9BACB8475D15EC8607151D07B7510A590D3E18B98E7693A94449EA42A825DF40764525446C38CC9D4267C1923C60BD9EFC104B96AF79AE7963FD8CD208EDAC7D380C766077DFD7D25E81CF5BB37B838FE9562524C37FEF52E6F5E1F818EAD6F540C23DB6B200CD629968E0625625F9C63A482B6EC29B915B508462E1978AA335C482CC60661364D27511B53F6EF74DD7434C1081E1475530066478C106ED20701D79E74987E887279016F95F2CB1D0C082E408857C0AB5FB9B113D23E1EAD4AF1EE6AC2581A76C18101D964B9252432F6A26C1FF5FD0333EA4FFC1648E58233965CF6904F951A90C96ACDB692F26F46F67AA4D9386DDE405CA7B3A9D0DB827278845AC6DA7BAE3CE89752C74F47DCD535B33540367F28246D3ADAC39FB82DC4E7D900E8D566F77FE9C493716E82F854FF3C235D9A001EAA892D056BCBF70D6116724B947EBB905D58B4353CF1379A27B8480D913D134BD38DCB69590F362EBE2C0B9ADE1467DBBDAF360406DE25FB6DD283140C57F5913AD2E8D593E58CD3A2359EA6945920D203771C21CCE62B6F8184402351EED636A5AA60E80EE9DAC7542FC0B9758F3694E98F3D71A1B909063ECD60FEBA554AF5A70F4F6530F630A16E363C5FE22899CBBF2BB04D65CABEBA8B99DB9A57AA4A0E653C119'
var decryptData = O.decrypt(encData, O.utf8ToArray(O.encrypt(o, O.utf8ToArray("4600000100000000")).toUpperCase().slice(0, 16)));
console.log("响应数据解密:",decryptData)
标签:function,逆向,return,js,length,&&,服务平台,var,prototype
From: https://blog.51cto.com/u_16330819/8761591