├── 403.lua
├── aes.lua
├── b64.lua
├── config.lua
├── fileio.lua
├── init.lua
├── log.lua
├── nginx
├── nginx.conf
└── zE48AHvK
│ ├── crypto-js.min.js
│ ├── index.html
│ ├── info.html
│ ├── info.js
│ ├── jump.js
│ └── webdriver.js
├── node
└── js_confuse.js
├── randomStr.lua
├── readme.md
├── req.lua
├── rsp_body.lua
├── rsp_header.lua
├── tableXstring.lua
├── tu
└── ainrm@20220211170151.webp
└── whiteList.lua
/403.lua:
--------------------------------------------------------------------------------
1 | function emptyPrint()
2 | end
3 |
4 | function say_html()
5 | ngx.header.content_type = "text/html"
6 | ngx.status = ngx.HTTP_FORBIDDEN
7 | ngx.say(html)
8 | ngx.exit(ngx.status)
9 | end
--------------------------------------------------------------------------------
/aes.lua:
--------------------------------------------------------------------------------
1 | local aes = require "resty.aes"
2 | local str = require "resty.string"
3 | local iv = 'ABCDEF1234123412'
4 |
5 |
6 | -- 需要自己写一个函数将16进制转2进制
7 | function hex2bin(hexstr)
8 | local str = ""
9 | for i = 1, string.len(hexstr) - 1, 2 do
10 | local doublebytestr = string.sub(hexstr, i, i+1);
11 | local n = tonumber(doublebytestr, 16);
12 | if 0 == n then
13 | str = str .. '\00'
14 | else
15 | str = str .. string.format("%c", n)
16 | end
17 | end
18 | return str
19 | end
20 |
21 | -- 加密函数,返回16进制
22 | function encrypT(content, key)
23 | local aes_128_cbc_with_iv = assert(aes:new(key, nil, aes.cipher(128,"cbc"), {iv=iv}))
24 | local encrypted = aes_128_cbc_with_iv:encrypt(content)
25 | return str.to_hex(encrypted)
26 | end
27 |
28 | -- 解密函数 返回解密字符串
29 | function dencrypT(content, key)
30 | local aes_128_cbc_with_iv = assert(aes:new(key, nil, aes.cipher(128,"cbc"), {iv=iv}))
31 | local dencrypted = aes_128_cbc_with_iv:decrypt(hex2bin(content))
32 | return dencrypted
33 | end
34 |
35 | --ngx.say(encrypt('123456'))
36 | --ngx.say(dencrypt('32e29ba66134e3d8f2c149a2b93006c7'))
--------------------------------------------------------------------------------
/b64.lua:
--------------------------------------------------------------------------------
1 | function encodeBase64(source_str)
2 | local b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
3 | local s64 = ''
4 | local str = source_str
5 |
6 | while #str > 0 do
7 | local bytes_num = 0
8 | local buf = 0
9 |
10 | for byte_cnt=1,3 do
11 | buf = (buf * 256)
12 | if #str > 0 then
13 | buf = buf + string.byte(str, 1, 1)
14 | str = string.sub(str, 2)
15 | bytes_num = bytes_num + 1
16 | end
17 | end
18 |
19 | for group_cnt=1,(bytes_num+1) do
20 | local b64char = math.fmod(math.floor(buf/262144), 64) + 1
21 | s64 = s64 .. string.sub(b64chars, b64char, b64char)
22 | buf = buf * 64
23 | end
24 |
25 | for fill_cnt=1,(3-bytes_num) do
26 | s64 = s64 .. '='
27 | end
28 | end
29 |
30 | return s64
31 | end
32 |
33 | function decodeBase64(str64)
34 | local b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
35 | local temp={}
36 | for i=1,64 do
37 | temp[string.sub(b64chars,i,i)] = i
38 | end
39 | temp['=']=0
40 | local str=""
41 | for i=1,#str64,4 do
42 | if i>#str64 then
43 | break
44 | end
45 | local data = 0
46 | local str_count=0
47 | for j=0,3 do
48 | local str1=string.sub(str64,i+j,i+j)
49 | if not temp[str1] then
50 | return
51 | end
52 | if temp[str1] < 1 then
53 | data = data * 64
54 | else
55 | data = data * 64 + temp[str1]-1
56 | str_count = str_count + 1
57 | end
58 | end
59 | for j=16,0,-8 do
60 | if str_count > 0 then
61 | str=str..string.char(math.floor(data/math.pow(2,j)))
62 | data=math.fmod(data,math.pow(2,j))
63 | str_count = str_count - 1
64 | end
65 | end
66 | end
67 |
68 | local last = tonumber(string.byte(str, string.len(str), string.len(str)))
69 | if last == 0 then
70 | str = string.sub(str, 1, string.len(str) - 1)
71 | end
72 | return str
73 | end
74 |
75 |
76 | --url解码
77 | local function decodeURI(s)
78 | s = string.gsub(s, '%%(%x%x)', function(h) return string.char(tonumber(h, 16)) end)
79 | return s
80 | end
81 |
82 | --url加码
83 | local function encodeURI(s)
84 | s = string.gsub(s, "([^%w%.%- ])", function(c) return string.format("%%%02X", string.byte(c)) end)
85 | return string.gsub(s, " ", "+")
86 | end
--------------------------------------------------------------------------------
/config.lua:
--------------------------------------------------------------------------------
1 | attacklog = "off"
2 | shiroProtect = "off"
3 | toolsProtect = "off"
4 | jsProtect = "off"
5 | sensitiveProtect = "on"
6 |
7 |
8 | logdir = "/gate/log" -- log文件夹需要有写权限
9 | aesKey = '1231231231234567' -- 16位
10 | cookieA = 'h0yGbdRv'
11 | cookieB = 'kQpFHdoh'
12 | cookieC = 'aLoFjX4v'
13 | cookieD = 'x9i7RDYX23'
14 | jsPath = 'zE48AHvK/index.html'
15 | whiteExt = {'js', 'css', 'png', 'jpg'}
16 |
17 |
18 |
19 | html=[[
20 |
21 |
22 | 网站防火墙
23 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
网站防火墙
39 |
40 |
您的请求带有不合法参数,已被网站管理员设置拦截!
41 |
可能原因:您提交的内容包含危险的攻击请求
42 |
如何解决:
43 |
- 1)检查提交内容;
44 | - 2)如网站托管,请联系空间提供商;
45 | - 3)普通网站访客,请联系网站管理员;
46 |
47 |
48 |
49 |
50 | ]]
51 |
52 |
--------------------------------------------------------------------------------
/fileio.lua:
--------------------------------------------------------------------------------
1 | function readfile(path)
2 | local file = io.open(path, "r")
3 | if file then
4 | local content = file:read("*a")
5 | io.close(file)
6 | return content
7 | end
8 | return nil
9 | end
10 |
11 | function writefile(path, content, mode)
12 | mode = mode or "w+b"
13 | local file = io.open(path, mode)
14 | if file then
15 | if file:write(content) == nil then return false end
16 | io.close(file)
17 | return true
18 | else
19 | return false
20 | end
21 | end
--------------------------------------------------------------------------------
/init.lua:
--------------------------------------------------------------------------------
1 | require 'config'
2 | require 'b64'
3 | require 'aes'
4 | require 'log'
5 | require '403'
6 | require 'tableXstring'
7 | require 'fileio'
8 | require 'randomStr'
9 | require 'whiteList'
10 |
11 | local optionIsOn = function (options) return options == "on" and true or false end
12 | ToolsProtect = optionIsOn(toolsProtect)
13 | ShiroProtect = optionIsOn(shiroProtect)
14 | JsProtect = optionIsOn(jsProtect)
15 | JsConfuse = false
16 | SensitiveProtect = optionIsOn(sensitiveProtect)
17 |
18 |
19 | -- cookie加密
20 | function reqCookieParse()
21 | if ShiroProtect then
22 | local userCookieX9 = ngx.var.cookie_x9i7RDYX23
23 | if not userCookieX9 then -- 没有cookie
24 | log('0-cookie 无cookie', '')
25 | ngx.req.set_header('Cookie', '') -- 移除其他cookie
26 | elseif #userCookieX9 < 32 then -- 判断cookie长度
27 | log('1-cookie 不符合要求', userCookieX9)
28 | ngx.say('4')
29 | say_html()
30 | else --有cookie
31 | local result = xpcall(dencrypT, emptyPrint, userCookieX9, aesKey)
32 | if not result then --解密失败
33 | log('2-cookie 无法解密', userCookieX9)
34 | ngx.say('5')
35 | say_html()
36 | else --解密成功
37 | local originCookie = StrToTable(dencrypT(userCookieX9, aesKey))
38 | ngx.req.set_header('Cookie', transTable(originCookie))
39 | log('3-cookie 解密成功', userCookieX9)
40 | end
41 | end
42 | end
43 | end
44 |
45 | function respCookieEncrypt()
46 | if ShiroProtect then
47 | local value = ngx.resp.get_headers()["Set-Cookie"]
48 | if value then
49 | local encryptedCookie = cookieD.."="..encrypT(TableToStr(value), aesKey)
50 | ngx.header["Set-Cookie"] = encryptedCookie
51 | log('4-cookie 加密成功',encryptedCookie)
52 | end
53 | end
54 | end
55 |
56 | -- reload机制
57 | function toolsInfoSpider()
58 | if ToolsProtect and not whiteExtCheck() then
59 | local clientCookieA = ngx.var.cookie_h0yGbdRv
60 | local clientCookieB = ngx.var.cookie_kQpFHdoh
61 | if not (clientCookieA and clientCookieB) then --没有cookieA进入reload,302至html生成cookie后再请求原地址
62 | local ip = 'xxx'
63 | local finalPath = 'http://'..ip..'/'..jsPath..'?origin='..encodeBase64(ngx.var.request_uri)
64 | log('1-tools 无cookieA/B', '')
65 | ngx.redirect(finalPath, 302)
66 | else
67 | local result = xpcall(dencrypT, emptyPrint, clientCookieB, clientCookieA)
68 | if not result then
69 | log('2-tools 解密失败', clientCookieA..', '..clientCookieB)
70 | ngx.say('1')
71 | say_html() -- 解密失败
72 | else-- 可以解密,提取数据
73 | local result2 = dencrypT(clientCookieB, clientCookieA)
74 | if #result2 < 1 then
75 | log('3-tools 解密失败', result2)
76 | else
77 | local srs = split(result2, ',')
78 | local _,e = string.find(srs[1], '0')
79 | if e ~= nil then
80 | log('4-tools 工具请求', result2)
81 | ngx.say('2')
82 | say_html()
83 | else
84 | log('0-tools 工具验证通过, 记录浏览器指纹', '', srs[2])
85 | end
86 | end
87 | end
88 | end
89 | end
90 | end
91 |
92 | -- js文件混淆
93 | function jsExtDetect()
94 | if JsProtect then
95 | local ext = string.match(ngx.var.uri, ".+%.(%w+)$")
96 | if ext == 'js' then -- 加入检查,js文件是否存在
97 | JsConfuse = true
98 | end
99 | end
100 | end
101 |
102 | function jsConfuse()
103 | if JsConfuse then
104 | local originBody = ngx.arg[1]
105 | if #originBody > 200 then -- 筛选空js
106 | local s = getRandom(8)
107 | local path = '/tmp/'..s
108 | writefile(path, originBody, 'w+')
109 | local t = io.popen('export NODE_PATH=/usr/lib/node_modules && node /gate/node/js_confuse.js '..path)
110 | local a = t:read("*all")
111 | ngx.arg[1] = a
112 | os.execute('rm -f '..path)
113 | end
114 | JsConfuse = false
115 | end
116 | end
117 |
118 | -- 响应包过滤
119 | function dateReplace()
120 | if SensitiveProtect then
121 | local replaceTelephone = string.gsub(ngx.arg[1], "[1][3,4,5,7,8]%d%d%d%d%d%d%d%d%d", "******")
122 | ngx.arg[1] = replaceTelephone
123 | end
124 | end
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
--------------------------------------------------------------------------------
/log.lua:
--------------------------------------------------------------------------------
1 | require 'config'
2 |
3 |
4 | local optionIsOn = function (options) return options == "on" and true or false end
5 | local Attacklog = optionIsOn(attacklog)
6 | local logpath = logdir
7 |
8 | local function getClientIp()
9 | IP = ngx.var.remote_addr
10 | if IP == nil then
11 | IP = "unknown"
12 | end
13 | return IP
14 | end
15 |
16 | local function write(logfile,msg)
17 | local fd = io.open(logfile,"ab")
18 | if fd == nil then return end
19 | fd:write(msg)
20 | fd:flush()
21 | fd:close()
22 | end
23 |
24 | function log(data, ruletag, fp)
25 | if Attacklog then
26 | local fingerprint = fp or ''
27 | local realIp = getClientIp()
28 | local method = ngx.var.request_method
29 | local ua = ngx.var.http_user_agent
30 | local servername=ngx.var.server_name
31 | local url = ngx.var.request_uri
32 | local time=ngx.localtime()
33 | if ua then
34 | line = realIp.." ["..time.."] \""..method.." "..servername..url.."\" \""..ruletag.."\" \""..ua.."\" \""..data.."\" \""..fingerprint.."\"\n"
35 | else
36 | line = realIp.." ["..time.."] \""..method.." "..servername..url.."\" \""..ruletag.."\" - \""..data.."\" \""..fingerprint.."\"\n"
37 | end
38 | local filename = logpath..'/'..servername.."_"..ngx.today().."_sec.log"
39 | write(filename,line)
40 | end
41 | end
--------------------------------------------------------------------------------
/nginx/nginx.conf:
--------------------------------------------------------------------------------
1 | worker_processes 2;
2 | events {
3 | worker_connections 1024;
4 | }
5 |
6 | http {
7 | include mime.types;
8 | default_type application/octet-stream;
9 | sendfile on;
10 | keepalive_timeout 65;
11 |
12 | lua_package_path "/gate/?.lua";
13 | lua_shared_dict limit 10m;
14 | init_by_lua_file /gate/init.lua;
15 |
16 | server {
17 | listen 44889;
18 | server_name localhost;
19 | error_log log/error.log;
20 |
21 | location /addJs {
22 | alias html/zE48AHvK;
23 | index info.html;
24 | }
25 |
26 | location /req {
27 | access_by_lua_file /gate/req.lua;
28 | add_before_body /addJs/;
29 | addition_types text/plain;
30 | proxy_pass http://127.0.0.1:8000/req;
31 | proxy_connect_timeout 2s;
32 | }
33 |
34 | location /rsp {
35 | proxy_pass http://127.0.0.1:8000/rsp;
36 | proxy_connect_timeout 2s;
37 | header_filter_by_lua_file /gate/rsp_header.lua;
38 | }
39 |
40 | location /zE48AHvK {
41 | root html;
42 | index index.html;
43 | }
44 |
45 | location /req2 {
46 | access_by_lua_file /gate/req.lua;
47 | proxy_pass http://127.0.0.1:8000/req;
48 | proxy_connect_timeout 2s;
49 |
50 | header_filter_by_lua_block { ngx.header.content_length = nil }
51 | body_filter_by_lua_block {
52 | local hhhh = [[]]
53 | local iiii = [[]]
54 | --ngx.arg[1] = hhhh..iiii..ngx.arg[1]
55 | --ngx.arg[1] = hhhh..iiii..ngx.arg[1]
56 | }
57 | }
58 |
59 | location /test {
60 | error_log /gate/log/error.log;
61 | access_by_lua_file /gate/req.lua;
62 | alias html/zE48AHvK;
63 | index test.html;
64 | header_filter_by_lua_block { ngx.header.content_length = nil }
65 | body_filter_by_lua_file /gate/rsp_body.lua;
66 | }
67 | }
68 |
69 | server {
70 | listen 8000;
71 | server_name localhost;
72 |
73 | location /req {
74 | default_type 'text/html';
75 | content_by_lua 'ngx.say(ngx.req.raw_header())';
76 | }
77 |
78 | location /rsp {
79 | default_type text/html;
80 | add_header Set-Cookie "testA=aaaaa";
81 | add_header Set-Cookie "testB=bbbbb";
82 | content_by_lua "ngx.say('原始cookie: \\nSet-Cookie \"testA=aaaaa\"\\nSet-Cookie \"testB=bbbbb\"')";
83 | }
84 | }
85 | }
86 |
--------------------------------------------------------------------------------
/nginx/zE48AHvK/crypto-js.min.js:
--------------------------------------------------------------------------------
1 | ! function (t, e) {
2 | "object" == typeof exports ? module.exports = exports = e() : "function" == typeof define && define.amd ? define([],
3 | e) : t.CryptoJS = e()
4 | }(this, function () {
5 | var n, o, s, a, h, t, e, l, r, i, c, f, d, u, p, S, x, b, A, H, z, _, v, g, y, B, w, k, m, C, D, E, R, M, F, P,
6 | W, O, I, U = U || function (h) {
7 | var i;
8 | if ("undefined" != typeof window && window.crypto && (i = window.crypto), "undefined" != typeof self &&
9 | self.crypto && (i = self.crypto), !(i = !(i = !(i = "undefined" != typeof globalThis && globalThis.crypto ?
10 | globalThis.crypto : i) && "undefined" != typeof window && window.msCrypto ? window.msCrypto :
11 | i) && "undefined" != typeof global && global.crypto ? global.crypto : i) && "function" ==
12 | typeof require) try {
13 | i = require("crypto")
14 | } catch (t) {}
15 | var r = Object.create || function (t) {
16 | return e.prototype = t, t = new e, e.prototype = null, t
17 | };
18 |
19 | function e() {}
20 | var t = {},
21 | n = t.lib = {},
22 | o = n.Base = {
23 | extend: function (t) {
24 | var e = r(this);
25 | return t && e.mixIn(t), e.hasOwnProperty("init") && this.init !== e.init || (e.init =
26 | function () {
27 | e.$super.init.apply(this, arguments)
28 | }), (e.init.prototype = e).$super = this, e
29 | },
30 | create: function () {
31 | var t = this.extend();
32 | return t.init.apply(t, arguments), t
33 | },
34 | init: function () {},
35 | mixIn: function (t) {
36 | for (var e in t) t.hasOwnProperty(e) && (this[e] = t[e]);
37 | t.hasOwnProperty("toString") && (this.toString = t.toString)
38 | },
39 | clone: function () {
40 | return this.init.prototype.extend(this)
41 | }
42 | },
43 | l = n.WordArray = o.extend({
44 | init: function (t, e) {
45 | t = this.words = t || [], this.sigBytes = null != e ? e : 4 * t.length
46 | },
47 | toString: function (t) {
48 | return (t || c).stringify(this)
49 | },
50 | concat: function (t) {
51 | var e = this.words,
52 | r = t.words,
53 | i = this.sigBytes,
54 | n = t.sigBytes;
55 | if (this.clamp(), i % 4)
56 | for (var o = 0; o < n; o++) {
57 | var s = r[o >>> 2] >>> 24 - o % 4 * 8 & 255;
58 | e[i + o >>> 2] |= s << 24 - (i + o) % 4 * 8
59 | } else
60 | for (var c = 0; c < n; c += 4) e[i + c >>> 2] = r[c >>> 2];
61 | return this.sigBytes += n, this
62 | },
63 | clamp: function () {
64 | var t = this.words,
65 | e = this.sigBytes;
66 | t[e >>> 2] &= 4294967295 << 32 - e % 4 * 8, t.length = h.ceil(e / 4)
67 | },
68 | clone: function () {
69 | var t = o.clone.call(this);
70 | return t.words = this.words.slice(0), t
71 | },
72 | random: function (t) {
73 | for (var e = [], r = 0; r < t; r += 4) e.push(function () {
74 | if (i) {
75 | if ("function" == typeof i.getRandomValues) try {
76 | return i.getRandomValues(new Uint32Array(1))[0]
77 | } catch (t) {}
78 | if ("function" == typeof i.randomBytes) try {
79 | return i.randomBytes(4).readInt32LE()
80 | } catch (t) {}
81 | }
82 | throw new Error(
83 | "Native crypto module could not be used to get secure random number."
84 | )
85 | }());
86 | return new l.init(e, t)
87 | }
88 | }),
89 | s = t.enc = {},
90 | c = s.Hex = {
91 | stringify: function (t) {
92 | for (var e = t.words, r = t.sigBytes, i = [], n = 0; n < r; n++) {
93 | var o = e[n >>> 2] >>> 24 - n % 4 * 8 & 255;
94 | i.push((o >>> 4).toString(16)), i.push((15 & o).toString(16))
95 | }
96 | return i.join("")
97 | },
98 | parse: function (t) {
99 | for (var e = t.length, r = [], i = 0; i < e; i += 2) r[i >>> 3] |= parseInt(t.substr(i,
100 | 2), 16) << 24 - i % 8 * 4;
101 | return new l.init(r, e / 2)
102 | }
103 | },
104 | a = s.Latin1 = {
105 | stringify: function (t) {
106 | for (var e = t.words, r = t.sigBytes, i = [], n = 0; n < r; n++) {
107 | var o = e[n >>> 2] >>> 24 - n % 4 * 8 & 255;
108 | i.push(String.fromCharCode(o))
109 | }
110 | return i.join("")
111 | },
112 | parse: function (t) {
113 | for (var e = t.length, r = [], i = 0; i < e; i++) r[i >>> 2] |= (255 & t.charCodeAt(i)) <<
114 | 24 - i % 4 * 8;
115 | return new l.init(r, e)
116 | }
117 | },
118 | f = s.Utf8 = {
119 | stringify: function (t) {
120 | try {
121 | return decodeURIComponent(escape(a.stringify(t)))
122 | } catch (t) {
123 | throw new Error("Malformed UTF-8 data")
124 | }
125 | },
126 | parse: function (t) {
127 | return a.parse(unescape(encodeURIComponent(t)))
128 | }
129 | },
130 | d = n.BufferedBlockAlgorithm = o.extend({
131 | reset: function () {
132 | this._data = new l.init, this._nDataBytes = 0
133 | },
134 | _append: function (t) {
135 | "string" == typeof t && (t = f.parse(t)), this._data.concat(t), this._nDataBytes +=
136 | t.sigBytes
137 | },
138 | _process: function (t) {
139 | var e, r = this._data,
140 | i = r.words,
141 | n = r.sigBytes,
142 | o = this.blockSize,
143 | s = n / (4 * o),
144 | c = (s = t ? h.ceil(s) : h.max((0 | s) - this._minBufferSize, 0)) * o,
145 | n = h.min(4 * c, n);
146 | if (c) {
147 | for (var a = 0; a < c; a += o) this._doProcessBlock(i, a);
148 | e = i.splice(0, c), r.sigBytes -= n
149 | }
150 | return new l.init(e, n)
151 | },
152 | clone: function () {
153 | var t = o.clone.call(this);
154 | return t._data = this._data.clone(), t
155 | },
156 | _minBufferSize: 0
157 | }),
158 | u = (n.Hasher = d.extend({
159 | cfg: o.extend(),
160 | init: function (t) {
161 | this.cfg = this.cfg.extend(t), this.reset()
162 | },
163 | reset: function () {
164 | d.reset.call(this), this._doReset()
165 | },
166 | update: function (t) {
167 | return this._append(t), this._process(), this
168 | },
169 | finalize: function (t) {
170 | return t && this._append(t), this._doFinalize()
171 | },
172 | blockSize: 16,
173 | _createHelper: function (r) {
174 | return function (t, e) {
175 | return new r.init(e).finalize(t)
176 | }
177 | },
178 | _createHmacHelper: function (r) {
179 | return function (t, e) {
180 | return new u.HMAC.init(r, e).finalize(t)
181 | }
182 | }
183 | }), t.algo = {});
184 | return t
185 | }(Math);
186 |
187 | function K(t, e, r) {
188 | return t & e | ~t & r
189 | }
190 |
191 | function X(t, e, r) {
192 | return t & r | e & ~r
193 | }
194 |
195 | function L(t, e) {
196 | return t << e | t >>> 32 - e
197 | }
198 |
199 | function j(t, e, r, i) {
200 | var n, o = this._iv;
201 | o ? (n = o.slice(0), this._iv = void 0) : n = this._prevBlock, i.encryptBlock(n, 0);
202 | for (var s = 0; s < r; s++) t[e + s] ^= n[s]
203 | }
204 |
205 | function T(t) {
206 | var e, r, i;
207 | return 255 == (t >> 24 & 255) ? (r = t >> 8 & 255, i = 255 & t, 255 === (e = t >> 16 & 255) ? (e = 0, 255 ===
208 | r ? (r = 0, 255 === i ? i = 0 : ++i) : ++r) : ++e, t = 0, t += e << 16, t += r << 8, t += i) : t +=
209 | 1 << 24, t
210 | }
211 |
212 | function N() {
213 | for (var t = this._X, e = this._C, r = 0; r < 8; r++) E[r] = e[r];
214 | e[0] = e[0] + 1295307597 + this._b | 0, e[1] = e[1] + 3545052371 + (e[0] >>> 0 < E[0] >>> 0 ? 1 : 0) | 0, e[
215 | 2] = e[2] + 886263092 + (e[1] >>> 0 < E[1] >>> 0 ? 1 : 0) | 0, e[3] = e[3] + 1295307597 + (e[2] >>>
216 | 0 < E[2] >>> 0 ? 1 : 0) | 0, e[4] = e[4] + 3545052371 + (e[3] >>> 0 < E[3] >>> 0 ? 1 : 0) | 0, e[5] =
217 | e[5] + 886263092 + (e[4] >>> 0 < E[4] >>> 0 ? 1 : 0) | 0, e[6] = e[6] + 1295307597 + (e[5] >>> 0 < E[5] >>>
218 | 0 ? 1 : 0) | 0, e[7] = e[7] + 3545052371 + (e[6] >>> 0 < E[6] >>> 0 ? 1 : 0) | 0, this._b = e[7] >>>
219 | 0 < E[7] >>> 0 ? 1 : 0;
220 | for (r = 0; r < 8; r++) {
221 | var i = t[r] + e[r],
222 | n = 65535 & i,
223 | o = i >>> 16;
224 | R[r] = ((n * n >>> 17) + n * o >>> 15) + o * o ^ ((4294901760 & i) * i | 0) + ((65535 & i) * i | 0)
225 | }
226 | t[0] = R[0] + (R[7] << 16 | R[7] >>> 16) + (R[6] << 16 | R[6] >>> 16) | 0, t[1] = R[1] + (R[0] << 8 | R[0] >>>
227 | 24) + R[7] | 0, t[2] = R[2] + (R[1] << 16 | R[1] >>> 16) + (R[0] << 16 | R[0] >>> 16) | 0, t[3] = R[
228 | 3] + (R[2] << 8 | R[2] >>> 24) + R[1] | 0, t[4] = R[4] + (R[3] << 16 | R[3] >>> 16) + (R[2] << 16 |
229 | R[2] >>> 16) | 0, t[5] = R[5] + (R[4] << 8 | R[4] >>> 24) + R[3] | 0, t[6] = R[6] + (R[5] << 16 | R[
230 | 5] >>> 16) + (R[4] << 16 | R[4] >>> 16) | 0, t[7] = R[7] + (R[6] << 8 | R[6] >>> 24) + R[5] | 0
231 | }
232 |
233 | function q() {
234 | for (var t = this._X, e = this._C, r = 0; r < 8; r++) O[r] = e[r];
235 | e[0] = e[0] + 1295307597 + this._b | 0, e[1] = e[1] + 3545052371 + (e[0] >>> 0 < O[0] >>> 0 ? 1 : 0) | 0, e[
236 | 2] = e[2] + 886263092 + (e[1] >>> 0 < O[1] >>> 0 ? 1 : 0) | 0, e[3] = e[3] + 1295307597 + (e[2] >>>
237 | 0 < O[2] >>> 0 ? 1 : 0) | 0, e[4] = e[4] + 3545052371 + (e[3] >>> 0 < O[3] >>> 0 ? 1 : 0) | 0, e[5] =
238 | e[5] + 886263092 + (e[4] >>> 0 < O[4] >>> 0 ? 1 : 0) | 0, e[6] = e[6] + 1295307597 + (e[5] >>> 0 < O[5] >>>
239 | 0 ? 1 : 0) | 0, e[7] = e[7] + 3545052371 + (e[6] >>> 0 < O[6] >>> 0 ? 1 : 0) | 0, this._b = e[7] >>>
240 | 0 < O[7] >>> 0 ? 1 : 0;
241 | for (r = 0; r < 8; r++) {
242 | var i = t[r] + e[r],
243 | n = 65535 & i,
244 | o = i >>> 16;
245 | I[r] = ((n * n >>> 17) + n * o >>> 15) + o * o ^ ((4294901760 & i) * i | 0) + ((65535 & i) * i | 0)
246 | }
247 | t[0] = I[0] + (I[7] << 16 | I[7] >>> 16) + (I[6] << 16 | I[6] >>> 16) | 0, t[1] = I[1] + (I[0] << 8 | I[0] >>>
248 | 24) + I[7] | 0, t[2] = I[2] + (I[1] << 16 | I[1] >>> 16) + (I[0] << 16 | I[0] >>> 16) | 0, t[3] = I[
249 | 3] + (I[2] << 8 | I[2] >>> 24) + I[1] | 0, t[4] = I[4] + (I[3] << 16 | I[3] >>> 16) + (I[2] << 16 |
250 | I[2] >>> 16) | 0, t[5] = I[5] + (I[4] << 8 | I[4] >>> 24) + I[3] | 0, t[6] = I[6] + (I[5] << 16 | I[
251 | 5] >>> 16) + (I[4] << 16 | I[4] >>> 16) | 0, t[7] = I[7] + (I[6] << 8 | I[6] >>> 24) + I[5] | 0
252 | }
253 | return F = (M = U).lib, n = F.Base, o = F.WordArray, (M = M.x64 = {}).Word = n.extend({
254 | init: function (t, e) {
255 | this.high = t, this.low = e
256 | }
257 | }), M.WordArray = n.extend({
258 | init: function (t, e) {
259 | t = this.words = t || [], this.sigBytes = null != e ? e : 8 * t.length
260 | },
261 | toX32: function () {
262 | for (var t = this.words, e = t.length, r = [], i = 0; i < e; i++) {
263 | var n = t[i];
264 | r.push(n.high), r.push(n.low)
265 | }
266 | return o.create(r, this.sigBytes)
267 | },
268 | clone: function () {
269 | for (var t = n.clone.call(this), e = t.words = this.words.slice(0), r = e.length, i = 0; i <
270 | r; i++) e[i] = e[i].clone();
271 | return t
272 | }
273 | }), "function" == typeof ArrayBuffer && (P = U.lib.WordArray, s = P.init, (P.init = function (t) {
274 | if ((t = (t = t instanceof ArrayBuffer ? new Uint8Array(t) : t) instanceof Int8Array ||
275 | "undefined" != typeof Uint8ClampedArray && t instanceof Uint8ClampedArray || t instanceof Int16Array ||
276 | t instanceof Uint16Array || t instanceof Int32Array || t instanceof Uint32Array || t instanceof Float32Array ||
277 | t instanceof Float64Array ? new Uint8Array(t.buffer, t.byteOffset, t.byteLength) : t) instanceof Uint8Array) {
278 | for (var e = t.byteLength, r = [], i = 0; i < e; i++) r[i >>> 2] |= t[i] << 24 - i % 4 * 8;
279 | s.call(this, r, e)
280 | } else s.apply(this, arguments)
281 | }).prototype = P),
282 | function () {
283 | var t = U,
284 | n = t.lib.WordArray,
285 | t = t.enc;
286 | t.Utf16 = t.Utf16BE = {
287 | stringify: function (t) {
288 | for (var e = t.words, r = t.sigBytes, i = [], n = 0; n < r; n += 2) {
289 | var o = e[n >>> 2] >>> 16 - n % 4 * 8 & 65535;
290 | i.push(String.fromCharCode(o))
291 | }
292 | return i.join("")
293 | },
294 | parse: function (t) {
295 | for (var e = t.length, r = [], i = 0; i < e; i++) r[i >>> 1] |= t.charCodeAt(i) << 16 -
296 | i % 2 * 16;
297 | return n.create(r, 2 * e)
298 | }
299 | };
300 |
301 | function s(t) {
302 | return t << 8 & 4278255360 | t >>> 8 & 16711935
303 | }
304 | t.Utf16LE = {
305 | stringify: function (t) {
306 | for (var e = t.words, r = t.sigBytes, i = [], n = 0; n < r; n += 2) {
307 | var o = s(e[n >>> 2] >>> 16 - n % 4 * 8 & 65535);
308 | i.push(String.fromCharCode(o))
309 | }
310 | return i.join("")
311 | },
312 | parse: function (t) {
313 | for (var e = t.length, r = [], i = 0; i < e; i++) r[i >>> 1] |= s(t.charCodeAt(i) << 16 -
314 | i % 2 * 16);
315 | return n.create(r, 2 * e)
316 | }
317 | }
318 | }(), a = (w = U).lib.WordArray, w.enc.Base64 = {
319 | stringify: function (t) {
320 | var e = t.words,
321 | r = t.sigBytes,
322 | i = this._map;
323 | t.clamp();
324 | for (var n = [], o = 0; o < r; o += 3)
325 | for (var s = (e[o >>> 2] >>> 24 - o % 4 * 8 & 255) << 16 | (e[o + 1 >>> 2] >>> 24 - (o + 1) %
326 | 4 * 8 & 255) << 8 | e[o + 2 >>> 2] >>> 24 - (o + 2) % 4 * 8 & 255, c = 0; c < 4 &&
327 | o + .75 * c < r; c++) n.push(i.charAt(s >>> 6 * (3 - c) & 63));
328 | var a = i.charAt(64);
329 | if (a)
330 | for (; n.length % 4;) n.push(a);
331 | return n.join("")
332 | },
333 | parse: function (t) {
334 | var e = t.length,
335 | r = this._map;
336 | if (!(i = this._reverseMap))
337 | for (var i = this._reverseMap = [], n = 0; n < r.length; n++) i[r.charCodeAt(n)] = n;
338 | var o = r.charAt(64);
339 | return !o || -1 !== (o = t.indexOf(o)) && (e = o),
340 | function (t, e, r) {
341 | for (var i = [], n = 0, o = 0; o < e; o++) {
342 | var s, c;
343 | o % 4 && (s = r[t.charCodeAt(o - 1)] << o % 4 * 2, c = r[t.charCodeAt(o)] >>> 6 - o %
344 | 4 * 2, c = s | c, i[n >>> 2] |= c << 24 - n % 4 * 8, n++)
345 | }
346 | return a.create(i, n)
347 | }(t, e, i)
348 | },
349 | _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
350 | }, h = (F = U).lib.WordArray, F.enc.Base64url = {
351 | stringify: function (t, e = !0) {
352 | var r = t.words,
353 | i = t.sigBytes,
354 | n = e ? this._safe_map : this._map;
355 | t.clamp();
356 | for (var o = [], s = 0; s < i; s += 3)
357 | for (var c = (r[s >>> 2] >>> 24 - s % 4 * 8 & 255) << 16 | (r[s + 1 >>> 2] >>> 24 - (s + 1) %
358 | 4 * 8 & 255) << 8 | r[s + 2 >>> 2] >>> 24 - (s + 2) % 4 * 8 & 255, a = 0; a < 4 &&
359 | s + .75 * a < i; a++) o.push(n.charAt(c >>> 6 * (3 - a) & 63));
360 | var h = n.charAt(64);
361 | if (h)
362 | for (; o.length % 4;) o.push(h);
363 | return o.join("")
364 | },
365 | parse: function (t, e = !0) {
366 | var r = t.length,
367 | i = e ? this._safe_map : this._map;
368 | if (!(n = this._reverseMap))
369 | for (var n = this._reverseMap = [], o = 0; o < i.length; o++) n[i.charCodeAt(o)] = o;
370 | e = i.charAt(64);
371 | return !e || -1 !== (e = t.indexOf(e)) && (r = e),
372 | function (t, e, r) {
373 | for (var i = [], n = 0, o = 0; o < e; o++) {
374 | var s, c;
375 | o % 4 && (s = r[t.charCodeAt(o - 1)] << o % 4 * 2, c = r[t.charCodeAt(o)] >>> 6 - o %
376 | 4 * 2, c = s | c, i[n >>> 2] |= c << 24 - n % 4 * 8, n++)
377 | }
378 | return h.create(i, n)
379 | }(t, r, n)
380 | },
381 | _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
382 | _safe_map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"
383 | },
384 | function (a) {
385 | var t = U,
386 | e = t.lib,
387 | r = e.WordArray,
388 | i = e.Hasher,
389 | e = t.algo,
390 | A = [];
391 | ! function () {
392 | for (var t = 0; t < 64; t++) A[t] = 4294967296 * a.abs(a.sin(t + 1)) | 0
393 | }();
394 | e = e.MD5 = i.extend({
395 | _doReset: function () {
396 | this._hash = new r.init([1732584193, 4023233417, 2562383102, 271733878])
397 | },
398 | _doProcessBlock: function (t, e) {
399 | for (var r = 0; r < 16; r++) {
400 | var i = e + r,
401 | n = t[i];
402 | t[i] = 16711935 & (n << 8 | n >>> 24) | 4278255360 & (n << 24 | n >>> 8)
403 | }
404 | var o = this._hash.words,
405 | s = t[e + 0],
406 | c = t[e + 1],
407 | a = t[e + 2],
408 | h = t[e + 3],
409 | l = t[e + 4],
410 | f = t[e + 5],
411 | d = t[e + 6],
412 | u = t[e + 7],
413 | p = t[e + 8],
414 | _ = t[e + 9],
415 | y = t[e + 10],
416 | v = t[e + 11],
417 | g = t[e + 12],
418 | B = t[e + 13],
419 | w = t[e + 14],
420 | k = t[e + 15],
421 | m = H(m = o[0], b = o[1], x = o[2], S = o[3], s, 7, A[0]),
422 | S = H(S, m, b, x, c, 12, A[1]),
423 | x = H(x, S, m, b, a, 17, A[2]),
424 | b = H(b, x, S, m, h, 22, A[3]);
425 | m = H(m, b, x, S, l, 7, A[4]), S = H(S, m, b, x, f, 12, A[5]), x = H(x, S, m, b, d,
426 | 17, A[6]), b = H(b, x, S, m, u, 22, A[7]), m = H(m, b, x, S, p, 7, A[8]), S =
427 | H(S, m, b, x, _, 12, A[9]), x = H(x, S, m, b, y, 17, A[10]), b = H(b, x, S, m,
428 | v, 22, A[11]), m = H(m, b, x, S, g, 7, A[12]), S = H(S, m, b, x, B, 12, A[
429 | 13]), x = H(x, S, m, b, w, 17, A[14]), m = z(m, b = H(b, x, S, m, k, 22, A[
430 | 15]), x, S, c, 5, A[16]), S = z(S, m, b, x, d, 9, A[17]), x = z(x, S, m, b,
431 | v, 14, A[18]), b = z(b, x, S, m, s, 20, A[19]), m = z(m, b, x, S, f, 5, A[
432 | 20]), S = z(S, m, b, x, y, 9, A[21]), x = z(x, S, m, b, k, 14, A[22]), b =
433 | z(b, x, S, m, l, 20, A[23]), m = z(m, b, x, S, _, 5, A[24]), S = z(S, m, b, x,
434 | w, 9, A[25]), x = z(x, S, m, b, h, 14, A[26]), b = z(b, x, S, m, p, 20, A[
435 | 27]), m = z(m, b, x, S, B, 5, A[28]), S = z(S, m, b, x, a, 9, A[29]), x = z(
436 | x, S, m, b, u, 14, A[30]), m = C(m, b = z(b, x, S, m, g, 20, A[31]), x, S,
437 | f, 4, A[32]), S = C(S, m, b, x, p, 11, A[33]), x = C(x, S, m, b, v, 16, A[
438 | 34]), b = C(b, x, S, m, w, 23, A[35]), m = C(m, b, x, S, c, 4, A[36]), S =
439 | C(S, m, b, x, l, 11, A[37]), x = C(x, S, m, b, u, 16, A[38]), b = C(b, x, S, m,
440 | y, 23, A[39]), m = C(m, b, x, S, B, 4, A[40]), S = C(S, m, b, x, s, 11, A[
441 | 41]), x = C(x, S, m, b, h, 16, A[42]), b = C(b, x, S, m, d, 23, A[43]), m =
442 | C(m, b, x, S, _, 4, A[44]), S = C(S, m, b, x, g, 11, A[45]), x = C(x, S, m, b,
443 | k, 16, A[46]), m = D(m, b = C(b, x, S, m, a, 23, A[47]), x, S, s, 6, A[48]),
444 | S = D(S, m, b, x, u, 10, A[49]), x = D(x, S, m, b, w, 15, A[50]), b = D(b, x, S,
445 | m, f, 21, A[51]), m = D(m, b, x, S, g, 6, A[52]), S = D(S, m, b, x, h, 10,
446 | A[53]), x = D(x, S, m, b, y, 15, A[54]), b = D(b, x, S, m, c, 21, A[55]), m =
447 | D(m, b, x, S, p, 6, A[56]), S = D(S, m, b, x, k, 10, A[57]), x = D(x, S, m, b,
448 | d, 15, A[58]), b = D(b, x, S, m, B, 21, A[59]), m = D(m, b, x, S, l, 6, A[
449 | 60]), S = D(S, m, b, x, v, 10, A[61]), x = D(x, S, m, b, a, 15, A[62]), b =
450 | D(b, x, S, m, _, 21, A[63]), o[0] = o[0] + m | 0, o[1] = o[1] + b | 0, o[2] = o[
451 | 2] + x | 0, o[3] = o[3] + S | 0
452 | },
453 | _doFinalize: function () {
454 | var t = this._data,
455 | e = t.words,
456 | r = 8 * this._nDataBytes,
457 | i = 8 * t.sigBytes;
458 | e[i >>> 5] |= 128 << 24 - i % 32;
459 | var n = a.floor(r / 4294967296),
460 | r = r;
461 | e[15 + (64 + i >>> 9 << 4)] = 16711935 & (n << 8 | n >>> 24) | 4278255360 & (n <<
462 | 24 | n >>> 8), e[14 + (64 + i >>> 9 << 4)] = 16711935 & (r << 8 | r >>> 24) |
463 | 4278255360 & (r << 24 | r >>> 8), t.sigBytes = 4 * (e.length + 1), this._process();
464 | for (var e = this._hash, o = e.words, s = 0; s < 4; s++) {
465 | var c = o[s];
466 | o[s] = 16711935 & (c << 8 | c >>> 24) | 4278255360 & (c << 24 | c >>> 8)
467 | }
468 | return e
469 | },
470 | clone: function () {
471 | var t = i.clone.call(this);
472 | return t._hash = this._hash.clone(), t
473 | }
474 | });
475 |
476 | function H(t, e, r, i, n, o, s) {
477 | s = t + (e & r | ~e & i) + n + s;
478 | return (s << o | s >>> 32 - o) + e
479 | }
480 |
481 | function z(t, e, r, i, n, o, s) {
482 | s = t + (e & i | r & ~i) + n + s;
483 | return (s << o | s >>> 32 - o) + e
484 | }
485 |
486 | function C(t, e, r, i, n, o, s) {
487 | s = t + (e ^ r ^ i) + n + s;
488 | return (s << o | s >>> 32 - o) + e
489 | }
490 |
491 | function D(t, e, r, i, n, o, s) {
492 | s = t + (r ^ (e | ~i)) + n + s;
493 | return (s << o | s >>> 32 - o) + e
494 | }
495 | t.MD5 = i._createHelper(e), t.HmacMD5 = i._createHmacHelper(e)
496 | }(Math), P = (M = U).lib, t = P.WordArray, e = P.Hasher, P = M.algo, l = [], P = P.SHA1 = e.extend({
497 | _doReset: function () {
498 | this._hash = new t.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520])
499 | },
500 | _doProcessBlock: function (t, e) {
501 | for (var r = this._hash.words, i = r[0], n = r[1], o = r[2], s = r[3], c = r[4], a = 0; a <
502 | 80; a++) {
503 | a < 16 ? l[a] = 0 | t[e + a] : (h = l[a - 3] ^ l[a - 8] ^ l[a - 14] ^ l[a - 16], l[a] =
504 | h << 1 | h >>> 31);
505 | var h = (i << 5 | i >>> 27) + c + l[a];
506 | h += a < 20 ? 1518500249 + (n & o | ~n & s) : a < 40 ? 1859775393 + (n ^ o ^ s) : a <
507 | 60 ? (n & o | n & s | o & s) - 1894007588 : (n ^ o ^ s) - 899497514, c = s, s = o,
508 | o = n << 30 | n >>> 2, n = i, i = h
509 | }
510 | r[0] = r[0] + i | 0, r[1] = r[1] + n | 0, r[2] = r[2] + o | 0, r[3] = r[3] + s | 0, r[4] =
511 | r[4] + c | 0
512 | },
513 | _doFinalize: function () {
514 | var t = this._data,
515 | e = t.words,
516 | r = 8 * this._nDataBytes,
517 | i = 8 * t.sigBytes;
518 | return e[i >>> 5] |= 128 << 24 - i % 32, e[14 + (64 + i >>> 9 << 4)] = Math.floor(r /
519 | 4294967296), e[15 + (64 + i >>> 9 << 4)] = r, t.sigBytes = 4 * e.length, this._process(),
520 | this._hash
521 | },
522 | clone: function () {
523 | var t = e.clone.call(this);
524 | return t._hash = this._hash.clone(), t
525 | }
526 | }), M.SHA1 = e._createHelper(P), M.HmacSHA1 = e._createHmacHelper(P),
527 | function (n) {
528 | var t = U,
529 | e = t.lib,
530 | r = e.WordArray,
531 | i = e.Hasher,
532 | e = t.algo,
533 | o = [],
534 | p = [];
535 | ! function () {
536 | function t(t) {
537 | return 4294967296 * (t - (0 | t)) | 0
538 | }
539 | for (var e = 2, r = 0; r < 64;) ! function (t) {
540 | for (var e = n.sqrt(t), r = 2; r <= e; r++)
541 | if (!(t % r)) return;
542 | return 1
543 | }(e) || (r < 8 && (o[r] = t(n.pow(e, .5))), p[r] = t(n.pow(e, 1 / 3)), r++), e++
544 | }();
545 | var _ = [],
546 | e = e.SHA256 = i.extend({
547 | _doReset: function () {
548 | this._hash = new r.init(o.slice(0))
549 | },
550 | _doProcessBlock: function (t, e) {
551 | for (var r = this._hash.words, i = r[0], n = r[1], o = r[2], s = r[3], c = r[4], a =
552 | r[5], h = r[6], l = r[7], f = 0; f < 64; f++) {
553 | f < 16 ? _[f] = 0 | t[e + f] : (d = _[f - 15], u = _[f - 2], _[f] = ((d << 25 |
554 | d >>> 7) ^ (d << 14 | d >>> 18) ^ d >>> 3) + _[f - 7] + ((u << 15 |
555 | u >>> 17) ^ (u << 13 | u >>> 19) ^ u >>> 10) + _[f - 16]);
556 | var d = i & n ^ i & o ^ n & o,
557 | u = l + ((c << 26 | c >>> 6) ^ (c << 21 | c >>> 11) ^ (c << 7 | c >>> 25)) +
558 | (c & a ^ ~c & h) + p[f] + _[f],
559 | l = h,
560 | h = a,
561 | a = c,
562 | c = s + u | 0,
563 | s = o,
564 | o = n,
565 | n = i,
566 | i = u + (((i << 30 | i >>> 2) ^ (i << 19 | i >>> 13) ^ (i << 10 | i >>> 22)) +
567 | d) | 0
568 | }
569 | r[0] = r[0] + i | 0, r[1] = r[1] + n | 0, r[2] = r[2] + o | 0, r[3] = r[3] + s | 0,
570 | r[4] = r[4] + c | 0, r[5] = r[5] + a | 0, r[6] = r[6] + h | 0, r[7] = r[7] + l |
571 | 0
572 | },
573 | _doFinalize: function () {
574 | var t = this._data,
575 | e = t.words,
576 | r = 8 * this._nDataBytes,
577 | i = 8 * t.sigBytes;
578 | return e[i >>> 5] |= 128 << 24 - i % 32, e[14 + (64 + i >>> 9 << 4)] = n.floor(r /
579 | 4294967296), e[15 + (64 + i >>> 9 << 4)] = r, t.sigBytes = 4 * e.length,
580 | this._process(), this._hash
581 | },
582 | clone: function () {
583 | var t = i.clone.call(this);
584 | return t._hash = this._hash.clone(), t
585 | }
586 | });
587 | t.SHA256 = i._createHelper(e), t.HmacSHA256 = i._createHmacHelper(e)
588 | }(Math), r = (w = U).lib.WordArray, F = w.algo, i = F.SHA256, F = F.SHA224 = i.extend({
589 | _doReset: function () {
590 | this._hash = new r.init([3238371032, 914150663, 812702999, 4144912697, 4290775857,
591 | 1750603025, 1694076839, 3204075428])
592 | },
593 | _doFinalize: function () {
594 | var t = i._doFinalize.call(this);
595 | return t.sigBytes -= 4, t
596 | }
597 | }), w.SHA224 = i._createHelper(F), w.HmacSHA224 = i._createHmacHelper(F),
598 | function () {
599 | var t = U,
600 | e = t.lib.Hasher,
601 | r = t.x64,
602 | i = r.Word,
603 | n = r.WordArray,
604 | r = t.algo;
605 |
606 | function o() {
607 | return i.create.apply(i, arguments)
608 | }
609 | var t1 = [o(1116352408, 3609767458), o(1899447441, 602891725), o(3049323471, 3964484399), o(3921009573,
610 | 2173295548), o(961987163, 4081628472), o(1508970993, 3053834265), o(2453635748, 2937671579),
611 | o(2870763221, 3664609560), o(3624381080, 2734883394), o(310598401, 1164996542), o(607225278,
612 | 1323610764), o(1426881987, 3590304994), o(1925078388, 4068182383), o(2162078206, 991336113),
613 | o(2614888103, 633803317), o(3248222580, 3479774868), o(3835390401, 2666613458), o(4022224774,
614 | 944711139), o(264347078, 2341262773), o(604807628, 2007800933), o(770255983, 1495990901), o(
615 | 1249150122, 1856431235), o(1555081692, 3175218132), o(1996064986, 2198950837), o(2554220882,
616 | 3999719339), o(2821834349, 766784016), o(2952996808, 2566594879), o(3210313671, 3203337956),
617 | o(3336571891, 1034457026), o(3584528711, 2466948901), o(113926993, 3758326383), o(338241895,
618 | 168717936), o(666307205, 1188179964), o(773529912, 1546045734), o(1294757372, 1522805485),
619 | o(1396182291, 2643833823), o(1695183700, 2343527390), o(1986661051, 1014477480), o(2177026350,
620 | 1206759142), o(2456956037, 344077627), o(2730485921, 1290863460), o(2820302411, 3158454273),
621 | o(3259730800, 3505952657), o(3345764771, 106217008), o(3516065817, 3606008344), o(3600352804,
622 | 1432725776), o(4094571909, 1467031594), o(275423344, 851169720), o(430227734, 3100823752),
623 | o(506948616, 1363258195), o(659060556, 3750685593), o(883997877, 3785050280), o(958139571,
624 | 3318307427), o(1322822218, 3812723403), o(1537002063, 2003034995), o(1747873779, 3602036899),
625 | o(1955562222, 1575990012), o(2024104815, 1125592928), o(2227730452, 2716904306), o(2361852424,
626 | 442776044), o(2428436474, 593698344), o(2756734187, 3733110249), o(3204031479, 2999351573),
627 | o(3329325298, 3815920427), o(3391569614, 3928383900), o(3515267271, 566280711), o(3940187606,
628 | 3454069534), o(4118630271, 4000239992), o(116418474, 1914138554), o(174292421, 2731055270),
629 | o(289380356, 3203993006), o(460393269, 320620315), o(685471733, 587496836), o(852142971,
630 | 1086792851), o(1017036298, 365543100), o(1126000580, 2618297676), o(1288033470, 3409855158),
631 | o(1501505948, 4234509866), o(1607167915, 987167468), o(1816402316, 1246189591)],
632 | e1 = [];
633 | ! function () {
634 | for (var t = 0; t < 80; t++) e1[t] = o()
635 | }();
636 | r = r.SHA512 = e.extend({
637 | _doReset: function () {
638 | this._hash = new n.init([new i.init(1779033703, 4089235720), new i.init(3144134277,
639 | 2227873595), new i.init(1013904242, 4271175723), new i.init(
640 | 2773480762, 1595750129), new i.init(1359893119, 2917565137), new i.init(
641 | 2600822924, 725511199), new i.init(528734635, 4215389547), new i.init(
642 | 1541459225, 327033209)])
643 | },
644 | _doProcessBlock: function (t, e) {
645 | for (var r = this._hash.words, i = r[0], n = r[1], o = r[2], s = r[3], c = r[4], a =
646 | r[5], h = r[6], l = r[7], f = i.high, d = i.low, u = n.high, p = n.low, _ =
647 | o.high, y = o.low, v = s.high, g = s.low, B = c.high, w = c.low, k = a.high,
648 | m = a.low, S = h.high, x = h.low, b = l.high, r = l.low, A = f, H = d, z =
649 | u, C = p, D = _, E = y, R = v, M = g, F = B, P = w, W = k, O = m, I = S, U =
650 | x, K = b, X = r, L = 0; L < 80; L++) {
651 | var j, T, N = e1[L];
652 | L < 16 ? (T = N.high = 0 | t[e + 2 * L], j = N.low = 0 | t[e + 2 * L + 1]) : ($ =
653 | (q = e1[L - 15]).high, J = q.low, G = (Q = e1[L - 2]).high, V = Q.low,
654 | Z = (Y = e1[L - 7]).high, q = Y.low, Y = (Q = e1[L - 16]).high, T = (T =
655 | (($ >>> 1 | J << 31) ^ ($ >>> 8 | J << 24) ^ $ >>> 7) + Z + ((j = (
656 | Z = (J >>> 1 | $ << 31) ^ (J >>> 8 | $ << 24) ^ (J >>>
657 | 7 | $ << 25)) + q) >>> 0 < Z >>> 0 ? 1 : 0)) + ((G >>> 19 |
658 | V << 13) ^ (G << 3 | V >>> 29) ^ G >>> 6) + ((j += J = (V >>> 19 |
659 | G << 13) ^ (V << 3 | G >>> 29) ^ (V >>> 6 | G << 26)) >>> 0 < J >>>
660 | 0 ? 1 : 0), j += $ = Q.low, N.high = T = T + Y + (j >>> 0 < $ >>>
661 | 0 ? 1 : 0), N.low = j);
662 | var q = F & W ^ ~F & I,
663 | Z = P & O ^ ~P & U,
664 | V = A & z ^ A & D ^ z & D,
665 | G = (H >>> 28 | A << 4) ^ (H << 30 | A >>> 2) ^ (H << 25 | A >>> 7),
666 | J = t1[L],
667 | Q = J.high,
668 | Y = J.low,
669 | $ = X + ((P >>> 14 | F << 18) ^ (P >>> 18 | F << 14) ^ (P << 23 | F >>> 9)),
670 | N = K + ((F >>> 14 | P << 18) ^ (F >>> 18 | P << 14) ^ (F << 23 | P >>> 9)) +
671 | ($ >>> 0 < X >>> 0 ? 1 : 0),
672 | J = G + (H & C ^ H & E ^ C & E),
673 | K = I,
674 | X = U,
675 | I = W,
676 | U = O,
677 | W = F,
678 | O = P,
679 | F = R + (N = (N = (N = N + q + (($ = $ + Z) >>> 0 < Z >>> 0 ? 1 : 0)) + Q +
680 | (($ = $ + Y) >>> 0 < Y >>> 0 ? 1 : 0)) + T + (($ = $ + j) >>> 0 < j >>>
681 | 0 ? 1 : 0)) + ((P = M + $ | 0) >>> 0 < M >>> 0 ? 1 : 0) | 0,
682 | R = D,
683 | M = E,
684 | D = z,
685 | E = C,
686 | z = A,
687 | C = H,
688 | A = N + (((A >>> 28 | H << 4) ^ (A << 30 | H >>> 2) ^ (A << 25 | H >>> 7)) +
689 | V + (J >>> 0 < G >>> 0 ? 1 : 0)) + ((H = $ + J | 0) >>> 0 < $ >>> 0 ? 1 :
690 | 0) | 0
691 | }
692 | d = i.low = d + H, i.high = f + A + (d >>> 0 < H >>> 0 ? 1 : 0), p = n.low = p + C,
693 | n.high = u + z + (p >>> 0 < C >>> 0 ? 1 : 0), y = o.low = y + E, o.high = _ + D +
694 | (y >>> 0 < E >>> 0 ? 1 : 0), g = s.low = g + M, s.high = v + R + (g >>> 0 < M >>>
695 | 0 ? 1 : 0), w = c.low = w + P, c.high = B + F + (w >>> 0 < P >>> 0 ? 1 : 0),
696 | m = a.low = m + O, a.high = k + W + (m >>> 0 < O >>> 0 ? 1 : 0), x = h.low = x +
697 | U, h.high = S + I + (x >>> 0 < U >>> 0 ? 1 : 0), r = l.low = r + X, l.high = b +
698 | K + (r >>> 0 < X >>> 0 ? 1 : 0)
699 | },
700 | _doFinalize: function () {
701 | var t = this._data,
702 | e = t.words,
703 | r = 8 * this._nDataBytes,
704 | i = 8 * t.sigBytes;
705 | return e[i >>> 5] |= 128 << 24 - i % 32, e[30 + (128 + i >>> 10 << 5)] = Math.floor(
706 | r / 4294967296), e[31 + (128 + i >>> 10 << 5)] = r, t.sigBytes = 4 * e.length,
707 | this._process(), this._hash.toX32()
708 | },
709 | clone: function () {
710 | var t = e.clone.call(this);
711 | return t._hash = this._hash.clone(), t
712 | },
713 | blockSize: 32
714 | });
715 | t.SHA512 = e._createHelper(r), t.HmacSHA512 = e._createHmacHelper(r)
716 | }(), P = (M = U).x64, c = P.Word, f = P.WordArray, P = M.algo, d = P.SHA512, P = P.SHA384 = d.extend({
717 | _doReset: function () {
718 | this._hash = new f.init([new c.init(3418070365, 3238371032), new c.init(1654270250,
719 | 914150663), new c.init(2438529370, 812702999), new c.init(355462360,
720 | 4144912697), new c.init(1731405415, 4290775857), new c.init(2394180231,
721 | 1750603025), new c.init(3675008525, 1694076839), new c.init(1203062813,
722 | 3204075428)])
723 | },
724 | _doFinalize: function () {
725 | var t = d._doFinalize.call(this);
726 | return t.sigBytes -= 16, t
727 | }
728 | }), M.SHA384 = d._createHelper(P), M.HmacSHA384 = d._createHmacHelper(P),
729 | function (l) {
730 | var t = U,
731 | e = t.lib,
732 | f = e.WordArray,
733 | i = e.Hasher,
734 | d = t.x64.Word,
735 | e = t.algo,
736 | A = [],
737 | H = [],
738 | z = [];
739 | ! function () {
740 | for (var t = 1, e = 0, r = 0; r < 24; r++) {
741 | A[t + 5 * e] = (r + 1) * (r + 2) / 2 % 64;
742 | var i = (2 * t + 3 * e) % 5;
743 | t = e % 5, e = i
744 | }
745 | for (t = 0; t < 5; t++)
746 | for (e = 0; e < 5; e++) H[t + 5 * e] = e + (2 * t + 3 * e) % 5 * 5;
747 | for (var n = 1, o = 0; o < 24; o++) {
748 | for (var s, c = 0, a = 0, h = 0; h < 7; h++) 1 & n && ((s = (1 << h) - 1) < 32 ? a ^= 1 << s :
749 | c ^= 1 << s - 32), 128 & n ? n = n << 1 ^ 113 : n <<= 1;
750 | z[o] = d.create(c, a)
751 | }
752 | }();
753 | var C = [];
754 | ! function () {
755 | for (var t = 0; t < 25; t++) C[t] = d.create()
756 | }();
757 | e = e.SHA3 = i.extend({
758 | cfg: i.cfg.extend({
759 | outputLength: 512
760 | }),
761 | _doReset: function () {
762 | for (var t = this._state = [], e = 0; e < 25; e++) t[e] = new d.init;
763 | this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32
764 | },
765 | _doProcessBlock: function (t, e) {
766 | for (var r = this._state, i = this.blockSize / 2, n = 0; n < i; n++) {
767 | var o = t[e + 2 * n],
768 | s = t[e + 2 * n + 1],
769 | o = 16711935 & (o << 8 | o >>> 24) | 4278255360 & (o << 24 | o >>> 8);
770 | (m = r[n]).high ^= s = 16711935 & (s << 8 | s >>> 24) | 4278255360 & (s << 24 |
771 | s >>> 8), m.low ^= o
772 | }
773 | for (var c = 0; c < 24; c++) {
774 | for (var a = 0; a < 5; a++) {
775 | for (var h = 0, l = 0, f = 0; f < 5; f++) h ^= (m = r[a + 5 * f]).high, l ^=
776 | m.low;
777 | var d = C[a];
778 | d.high = h, d.low = l
779 | }
780 | for (a = 0; a < 5; a++)
781 | for (var u = C[(a + 4) % 5], p = C[(a + 1) % 5], _ = p.high, p = p.low, h =
782 | u.high ^ (_ << 1 | p >>> 31), l = u.low ^ (p << 1 | _ >>> 31), f =
783 | 0; f < 5; f++)(m = r[a + 5 * f]).high ^= h, m.low ^= l;
784 | for (var y = 1; y < 25; y++) {
785 | var v = (m = r[y]).high,
786 | g = m.low,
787 | B = A[y];
788 | l = B < 32 ? (h = v << B | g >>> 32 - B, g << B | v >>> 32 - B) : (h = g <<
789 | B - 32 | v >>> 64 - B, v << B - 32 | g >>> 64 - B);
790 | B = C[H[y]];
791 | B.high = h, B.low = l
792 | }
793 | var w = C[0],
794 | k = r[0];
795 | w.high = k.high, w.low = k.low;
796 | for (a = 0; a < 5; a++)
797 | for (f = 0; f < 5; f++) {
798 | var m = r[y = a + 5 * f],
799 | S = C[y],
800 | x = C[(a + 1) % 5 + 5 * f],
801 | b = C[(a + 2) % 5 + 5 * f];
802 | m.high = S.high ^ ~x.high & b.high, m.low = S.low ^ ~x.low & b.low
803 | }
804 | m = r[0], k = z[c];
805 | m.high ^= k.high, m.low ^= k.low
806 | }
807 | },
808 | _doFinalize: function () {
809 | var t = this._data,
810 | e = t.words,
811 | r = (this._nDataBytes, 8 * t.sigBytes),
812 | i = 32 * this.blockSize;
813 | e[r >>> 5] |= 1 << 24 - r % 32, e[(l.ceil((1 + r) / i) * i >>> 5) - 1] |= 128, t.sigBytes =
814 | 4 * e.length, this._process();
815 | for (var n = this._state, e = this.cfg.outputLength / 8, o = e / 8, s = [], c = 0; c <
816 | o; c++) {
817 | var a = n[c],
818 | h = a.high,
819 | a = a.low,
820 | h = 16711935 & (h << 8 | h >>> 24) | 4278255360 & (h << 24 | h >>> 8);
821 | s.push(a = 16711935 & (a << 8 | a >>> 24) | 4278255360 & (a << 24 | a >>> 8)),
822 | s.push(h)
823 | }
824 | return new f.init(s, e)
825 | },
826 | clone: function () {
827 | for (var t = i.clone.call(this), e = t._state = this._state.slice(0), r = 0; r < 25; r++)
828 | e[r] = e[r].clone();
829 | return t
830 | }
831 | });
832 | t.SHA3 = i._createHelper(e), t.HmacSHA3 = i._createHmacHelper(e)
833 | }(Math), Math, F = (w = U).lib, u = F.WordArray, p = F.Hasher, F = w.algo, S = u.create([0, 1, 2, 3, 4, 5,
834 | 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14,
835 | 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4,
836 | 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]), x = u.create([5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15,
837 | 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11,
838 | 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5,
839 | 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]), b = u.create([11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
840 | 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6,
841 | 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5,
842 | 12, 13, 14, 11, 8, 5, 6]), A = u.create([8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13,
843 | 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13,
844 | 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6,
845 | 5, 15, 13, 11, 11]), H = u.create([0, 1518500249, 1859775393, 2400959708, 2840853838]), z = u.create([
846 | 1352829926, 1548603684, 1836072691, 2053994217, 0]), F = F.RIPEMD160 = p.extend({
847 | _doReset: function () {
848 | this._hash = u.create([1732584193, 4023233417, 2562383102, 271733878, 3285377520])
849 | },
850 | _doProcessBlock: function (t, e) {
851 | for (var r = 0; r < 16; r++) {
852 | var i = e + r,
853 | n = t[i];
854 | t[i] = 16711935 & (n << 8 | n >>> 24) | 4278255360 & (n << 24 | n >>> 8)
855 | }
856 | for (var o, s, c, a, h, l, f = this._hash.words, d = H.words, u = z.words, p = S.words, _ =
857 | x.words, y = b.words, v = A.words, g = o = f[0], B = s = f[1], w = c = f[2], k = a =
858 | f[3], m = h = f[4], r = 0; r < 80; r += 1) l = o + t[e + p[r]] | 0, l += r < 16 ? (
859 | s ^ c ^ a) + d[0] : r < 32 ? K(s, c, a) + d[1] : r < 48 ? ((s | ~c) ^ a) + d[2] : r <
860 | 64 ? X(s, c, a) + d[3] : (s ^ (c | ~a)) + d[4], l = (l = L(l |= 0, y[r])) + h | 0, o =
861 | h, h = a, a = L(c, 10), c = s, s = l, l = g + t[e + _[r]] | 0, l += r < 16 ? (B ^ (w |
862 | ~k)) + u[0] : r < 32 ? X(B, w, k) + u[1] : r < 48 ? ((B | ~w) ^ k) + u[2] : r < 64 ?
863 | K(B, w, k) + u[3] : (B ^ w ^ k) + u[4], l = (l = L(l |= 0, v[r])) + m | 0, g = m, m = k,
864 | k = L(w, 10), w = B, B = l;
865 | l = f[1] + c + k | 0, f[1] = f[2] + a + m | 0, f[2] = f[3] + h + g | 0, f[3] = f[4] + o + B |
866 | 0, f[4] = f[0] + s + w | 0, f[0] = l
867 | },
868 | _doFinalize: function () {
869 | var t = this._data,
870 | e = t.words,
871 | r = 8 * this._nDataBytes,
872 | i = 8 * t.sigBytes;
873 | e[i >>> 5] |= 128 << 24 - i % 32, e[14 + (64 + i >>> 9 << 4)] = 16711935 & (r << 8 | r >>>
874 | 24) | 4278255360 & (r << 24 | r >>> 8), t.sigBytes = 4 * (e.length + 1), this._process();
875 | for (var e = this._hash, n = e.words, o = 0; o < 5; o++) {
876 | var s = n[o];
877 | n[o] = 16711935 & (s << 8 | s >>> 24) | 4278255360 & (s << 24 | s >>> 8)
878 | }
879 | return e
880 | },
881 | clone: function () {
882 | var t = p.clone.call(this);
883 | return t._hash = this._hash.clone(), t
884 | }
885 | }), w.RIPEMD160 = p._createHelper(F), w.HmacRIPEMD160 = p._createHmacHelper(F), P = (M = U).lib.Base, _ = M
886 | .enc.Utf8, M.algo.HMAC = P.extend({
887 | init: function (t, e) {
888 | t = this._hasher = new t.init, "string" == typeof e && (e = _.parse(e));
889 | var r = t.blockSize,
890 | i = 4 * r;
891 | (e = e.sigBytes > i ? t.finalize(e) : e).clamp();
892 | for (var t = this._oKey = e.clone(), e = this._iKey = e.clone(), n = t.words, o = e.words,
893 | s = 0; s < r; s++) n[s] ^= 1549556828, o[s] ^= 909522486;
894 | t.sigBytes = e.sigBytes = i, this.reset()
895 | },
896 | reset: function () {
897 | var t = this._hasher;
898 | t.reset(), t.update(this._iKey)
899 | },
900 | update: function (t) {
901 | return this._hasher.update(t), this
902 | },
903 | finalize: function (t) {
904 | var e = this._hasher,
905 | t = e.finalize(t);
906 | return e.reset(), e.finalize(this._oKey.clone().concat(t))
907 | }
908 | }), F = (w = U).lib, M = F.Base, v = F.WordArray, P = w.algo, F = P.SHA1, g = P.HMAC, y = P.PBKDF2 = M.extend({
909 | cfg: M.extend({
910 | keySize: 4,
911 | hasher: F,
912 | iterations: 1
913 | }),
914 | init: function (t) {
915 | this.cfg = this.cfg.extend(t)
916 | },
917 | compute: function (t, e) {
918 | for (var r = this.cfg, i = g.create(r.hasher, t), n = v.create(), o = v.create([1]), s = n.words,
919 | c = o.words, a = r.keySize, h = r.iterations; s.length < a;) {
920 | var l = i.update(e).finalize(o);
921 | i.reset();
922 | for (var f = l.words, d = f.length, u = l, p = 1; p < h; p++) {
923 | u = i.finalize(u), i.reset();
924 | for (var _ = u.words, y = 0; y < d; y++) f[y] ^= _[y]
925 | }
926 | n.concat(l), c[0]++
927 | }
928 | return n.sigBytes = 4 * a, n
929 | }
930 | }), w.PBKDF2 = function (t, e, r) {
931 | return y.create(r).compute(t, e)
932 | }, M = (P = U).lib, F = M.Base, B = M.WordArray, w = P.algo, M = w.MD5, k = w.EvpKDF = F.extend({
933 | cfg: F.extend({
934 | keySize: 4,
935 | hasher: M,
936 | iterations: 1
937 | }),
938 | init: function (t) {
939 | this.cfg = this.cfg.extend(t)
940 | },
941 | compute: function (t, e) {
942 | for (var r, i = this.cfg, n = i.hasher.create(), o = B.create(), s = o.words, c = i.keySize,
943 | a = i.iterations; s.length < c;) {
944 | r && n.update(r), r = n.update(t).finalize(e), n.reset();
945 | for (var h = 1; h < a; h++) r = n.finalize(r), n.reset();
946 | o.concat(r)
947 | }
948 | return o.sigBytes = 4 * c, o
949 | }
950 | }), P.EvpKDF = function (t, e, r) {
951 | return k.create(r).compute(t, e)
952 | }, U.lib.Cipher || function () {
953 | var t = U,
954 | e = t.lib,
955 | r = e.Base,
956 | s = e.WordArray,
957 | i = e.BufferedBlockAlgorithm,
958 | n = t.enc,
959 | o = (n.Utf8, n.Base64),
960 | c = t.algo.EvpKDF,
961 | a = e.Cipher = i.extend({
962 | cfg: r.extend(),
963 | createEncryptor: function (t, e) {
964 | return this.create(this._ENC_XFORM_MODE, t, e)
965 | },
966 | createDecryptor: function (t, e) {
967 | return this.create(this._DEC_XFORM_MODE, t, e)
968 | },
969 | init: function (t, e, r) {
970 | this.cfg = this.cfg.extend(r), this._xformMode = t, this._key = e, this.reset()
971 | },
972 | reset: function () {
973 | i.reset.call(this), this._doReset()
974 | },
975 | process: function (t) {
976 | return this._append(t), this._process()
977 | },
978 | finalize: function (t) {
979 | return t && this._append(t), this._doFinalize()
980 | },
981 | keySize: 4,
982 | ivSize: 4,
983 | _ENC_XFORM_MODE: 1,
984 | _DEC_XFORM_MODE: 2,
985 | _createHelper: function (i) {
986 | return {
987 | encrypt: function (t, e, r) {
988 | return h(e).encrypt(i, t, e, r)
989 | },
990 | decrypt: function (t, e, r) {
991 | return h(e).decrypt(i, t, e, r)
992 | }
993 | }
994 | }
995 | });
996 |
997 | function h(t) {
998 | return "string" == typeof t ? p : u
999 | }
1000 | e.StreamCipher = a.extend({
1001 | _doFinalize: function () {
1002 | return this._process(!0)
1003 | },
1004 | blockSize: 1
1005 | });
1006 | var l = t.mode = {},
1007 | n = e.BlockCipherMode = r.extend({
1008 | createEncryptor: function (t, e) {
1009 | return this.Encryptor.create(t, e)
1010 | },
1011 | createDecryptor: function (t, e) {
1012 | return this.Decryptor.create(t, e)
1013 | },
1014 | init: function (t, e) {
1015 | this._cipher = t, this._iv = e
1016 | }
1017 | }),
1018 | n = l.CBC = ((l = n.extend()).Encryptor = l.extend({
1019 | processBlock: function (t, e) {
1020 | var r = this._cipher,
1021 | i = r.blockSize;
1022 | f.call(this, t, e, i), r.encryptBlock(t, e), this._prevBlock = t.slice(e, e + i)
1023 | }
1024 | }), l.Decryptor = l.extend({
1025 | processBlock: function (t, e) {
1026 | var r = this._cipher,
1027 | i = r.blockSize,
1028 | n = t.slice(e, e + i);
1029 | r.decryptBlock(t, e), f.call(this, t, e, i), this._prevBlock = n
1030 | }
1031 | }), l);
1032 |
1033 | function f(t, e, r) {
1034 | var i, n = this._iv;
1035 | n ? (i = n, this._iv = void 0) : i = this._prevBlock;
1036 | for (var o = 0; o < r; o++) t[e + o] ^= i[o]
1037 | }
1038 | var l = (t.pad = {}).Pkcs7 = {
1039 | pad: function (t, e) {
1040 | for (var e = 4 * e, r = e - t.sigBytes % e, i = r << 24 | r << 16 | r << 8 | r, n = [],
1041 | o = 0; o < r; o += 4) n.push(i);
1042 | e = s.create(n, r);
1043 | t.concat(e)
1044 | },
1045 | unpad: function (t) {
1046 | var e = 255 & t.words[t.sigBytes - 1 >>> 2];
1047 | t.sigBytes -= e
1048 | }
1049 | },
1050 | d = (e.BlockCipher = a.extend({
1051 | cfg: a.cfg.extend({
1052 | mode: n,
1053 | padding: l
1054 | }),
1055 | reset: function () {
1056 | var t;
1057 | a.reset.call(this);
1058 | var e = this.cfg,
1059 | r = e.iv,
1060 | e = e.mode;
1061 | this._xformMode == this._ENC_XFORM_MODE ? t = e.createEncryptor : (t = e.createDecryptor,
1062 | this._minBufferSize = 1), this._mode && this._mode.__creator == t ?
1063 | this._mode.init(this, r && r.words) : (this._mode = t.call(e, this, r && r.words),
1064 | this._mode.__creator = t)
1065 | },
1066 | _doProcessBlock: function (t, e) {
1067 | this._mode.processBlock(t, e)
1068 | },
1069 | _doFinalize: function () {
1070 | var t, e = this.cfg.padding;
1071 | return this._xformMode == this._ENC_XFORM_MODE ? (e.pad(this._data, this.blockSize),
1072 | t = this._process(!0)) : (t = this._process(!0), e.unpad(t)), t
1073 | },
1074 | blockSize: 4
1075 | }), e.CipherParams = r.extend({
1076 | init: function (t) {
1077 | this.mixIn(t)
1078 | },
1079 | toString: function (t) {
1080 | return (t || this.formatter).stringify(this)
1081 | }
1082 | })),
1083 | l = (t.format = {}).OpenSSL = {
1084 | stringify: function (t) {
1085 | var e = t.ciphertext,
1086 | t = t.salt,
1087 | e = t ? s.create([1398893684, 1701076831]).concat(t).concat(e) : e;
1088 | return e.toString(o)
1089 | },
1090 | parse: function (t) {
1091 | var e, r = o.parse(t),
1092 | t = r.words;
1093 | return 1398893684 == t[0] && 1701076831 == t[1] && (e = s.create(t.slice(2, 4)), t.splice(
1094 | 0, 4), r.sigBytes -= 16), d.create({
1095 | ciphertext: r,
1096 | salt: e
1097 | })
1098 | }
1099 | },
1100 | u = e.SerializableCipher = r.extend({
1101 | cfg: r.extend({
1102 | format: l
1103 | }),
1104 | encrypt: function (t, e, r, i) {
1105 | i = this.cfg.extend(i);
1106 | var n = t.createEncryptor(r, i),
1107 | e = n.finalize(e),
1108 | n = n.cfg;
1109 | return d.create({
1110 | ciphertext: e,
1111 | key: r,
1112 | iv: n.iv,
1113 | algorithm: t,
1114 | mode: n.mode,
1115 | padding: n.padding,
1116 | blockSize: t.blockSize,
1117 | formatter: i.format
1118 | })
1119 | },
1120 | decrypt: function (t, e, r, i) {
1121 | return i = this.cfg.extend(i), e = this._parse(e, i.format), t.createDecryptor(r, i)
1122 | .finalize(e.ciphertext)
1123 | },
1124 | _parse: function (t, e) {
1125 | return "string" == typeof t ? e.parse(t, this) : t
1126 | }
1127 | }),
1128 | t = (t.kdf = {}).OpenSSL = {
1129 | execute: function (t, e, r, i) {
1130 | i = i || s.random(8);
1131 | t = c.create({
1132 | keySize: e + r
1133 | }).compute(t, i), r = s.create(t.words.slice(e), 4 * r);
1134 | return t.sigBytes = 4 * e, d.create({
1135 | key: t,
1136 | iv: r,
1137 | salt: i
1138 | })
1139 | }
1140 | },
1141 | p = e.PasswordBasedCipher = u.extend({
1142 | cfg: u.cfg.extend({
1143 | kdf: t
1144 | }),
1145 | encrypt: function (t, e, r, i) {
1146 | r = (i = this.cfg.extend(i)).kdf.execute(r, t.keySize, t.ivSize);
1147 | i.iv = r.iv;
1148 | i = u.encrypt.call(this, t, e, r.key, i);
1149 | return i.mixIn(r), i
1150 | },
1151 | decrypt: function (t, e, r, i) {
1152 | i = this.cfg.extend(i), e = this._parse(e, i.format);
1153 | r = i.kdf.execute(r, t.keySize, t.ivSize, e.salt);
1154 | return i.iv = r.iv, u.decrypt.call(this, t, e, r.key, i)
1155 | }
1156 | })
1157 | }(), U.mode.CFB = ((F = U.lib.BlockCipherMode.extend()).Encryptor = F.extend({
1158 | processBlock: function (t, e) {
1159 | var r = this._cipher,
1160 | i = r.blockSize;
1161 | j.call(this, t, e, i, r), this._prevBlock = t.slice(e, e + i)
1162 | }
1163 | }), F.Decryptor = F.extend({
1164 | processBlock: function (t, e) {
1165 | var r = this._cipher,
1166 | i = r.blockSize,
1167 | n = t.slice(e, e + i);
1168 | j.call(this, t, e, i, r), this._prevBlock = n
1169 | }
1170 | }), F), U.mode.CTR = (M = U.lib.BlockCipherMode.extend(), P = M.Encryptor = M.extend({
1171 | processBlock: function (t, e) {
1172 | var r = this._cipher,
1173 | i = r.blockSize,
1174 | n = this._iv,
1175 | o = this._counter;
1176 | n && (o = this._counter = n.slice(0), this._iv = void 0);
1177 | var s = o.slice(0);
1178 | r.encryptBlock(s, 0), o[i - 1] = o[i - 1] + 1 | 0;
1179 | for (var c = 0; c < i; c++) t[e + c] ^= s[c]
1180 | }
1181 | }), M.Decryptor = P, M), U.mode.CTRGladman = (F = U.lib.BlockCipherMode.extend(), P = F.Encryptor = F.extend({
1182 | processBlock: function (t, e) {
1183 | var r = this._cipher,
1184 | i = r.blockSize,
1185 | n = this._iv,
1186 | o = this._counter;
1187 | n && (o = this._counter = n.slice(0), this._iv = void 0), 0 === ((n = o)[0] = T(n[0])) &&
1188 | (n[1] = T(n[1]));
1189 | var s = o.slice(0);
1190 | r.encryptBlock(s, 0);
1191 | for (var c = 0; c < i; c++) t[e + c] ^= s[c]
1192 | }
1193 | }), F.Decryptor = P, F), U.mode.OFB = (M = U.lib.BlockCipherMode.extend(), P = M.Encryptor = M.extend({
1194 | processBlock: function (t, e) {
1195 | var r = this._cipher,
1196 | i = r.blockSize,
1197 | n = this._iv,
1198 | o = this._keystream;
1199 | n && (o = this._keystream = n.slice(0), this._iv = void 0), r.encryptBlock(o, 0);
1200 | for (var s = 0; s < i; s++) t[e + s] ^= o[s]
1201 | }
1202 | }), M.Decryptor = P, M), U.mode.ECB = ((F = U.lib.BlockCipherMode.extend()).Encryptor = F.extend({
1203 | processBlock: function (t, e) {
1204 | this._cipher.encryptBlock(t, e)
1205 | }
1206 | }), F.Decryptor = F.extend({
1207 | processBlock: function (t, e) {
1208 | this._cipher.decryptBlock(t, e)
1209 | }
1210 | }), F), U.pad.AnsiX923 = {
1211 | pad: function (t, e) {
1212 | var r = t.sigBytes,
1213 | e = 4 * e,
1214 | e = e - r % e,
1215 | r = r + e - 1;
1216 | t.clamp(), t.words[r >>> 2] |= e << 24 - r % 4 * 8, t.sigBytes += e
1217 | },
1218 | unpad: function (t) {
1219 | var e = 255 & t.words[t.sigBytes - 1 >>> 2];
1220 | t.sigBytes -= e
1221 | }
1222 | }, U.pad.Iso10126 = {
1223 | pad: function (t, e) {
1224 | e *= 4, e -= t.sigBytes % e;
1225 | t.concat(U.lib.WordArray.random(e - 1)).concat(U.lib.WordArray.create([e << 24], 1))
1226 | },
1227 | unpad: function (t) {
1228 | var e = 255 & t.words[t.sigBytes - 1 >>> 2];
1229 | t.sigBytes -= e
1230 | }
1231 | }, U.pad.Iso97971 = {
1232 | pad: function (t, e) {
1233 | t.concat(U.lib.WordArray.create([2147483648], 1)), U.pad.ZeroPadding.pad(t, e)
1234 | },
1235 | unpad: function (t) {
1236 | U.pad.ZeroPadding.unpad(t), t.sigBytes--
1237 | }
1238 | }, U.pad.ZeroPadding = {
1239 | pad: function (t, e) {
1240 | e *= 4;
1241 | t.clamp(), t.sigBytes += e - (t.sigBytes % e || e)
1242 | },
1243 | unpad: function (t) {
1244 | for (var e = t.words, r = t.sigBytes - 1, r = t.sigBytes - 1; 0 <= r; r--)
1245 | if (e[r >>> 2] >>> 24 - r % 4 * 8 & 255) {
1246 | t.sigBytes = r + 1;
1247 | break
1248 | }
1249 | }
1250 | }, U.pad.NoPadding = {
1251 | pad: function () {},
1252 | unpad: function () {}
1253 | }, m = (P = U).lib.CipherParams, C = P.enc.Hex, P.format.Hex = {
1254 | stringify: function (t) {
1255 | return t.ciphertext.toString(C)
1256 | },
1257 | parse: function (t) {
1258 | t = C.parse(t);
1259 | return m.create({
1260 | ciphertext: t
1261 | })
1262 | }
1263 | },
1264 | function () {
1265 | var t = U,
1266 | e = t.lib.BlockCipher,
1267 | r = t.algo,
1268 | h = [],
1269 | l = [],
1270 | f = [],
1271 | d = [],
1272 | u = [],
1273 | p = [],
1274 | _ = [],
1275 | y = [],
1276 | v = [],
1277 | g = [];
1278 | ! function () {
1279 | for (var t = [], e = 0; e < 256; e++) t[e] = e < 128 ? e << 1 : e << 1 ^ 283;
1280 | for (var r = 0, i = 0, e = 0; e < 256; e++) {
1281 | var n = i ^ i << 1 ^ i << 2 ^ i << 3 ^ i << 4;
1282 | h[r] = n = n >>> 8 ^ 255 & n ^ 99;
1283 | var o = t[l[n] = r],
1284 | s = t[o],
1285 | c = t[s],
1286 | a = 257 * t[n] ^ 16843008 * n;
1287 | f[r] = a << 24 | a >>> 8, d[r] = a << 16 | a >>> 16, u[r] = a << 8 | a >>> 24, p[r] = a, _[n] =
1288 | (a = 16843009 * c ^ 65537 * s ^ 257 * o ^ 16843008 * r) << 24 | a >>> 8, y[n] = a << 16 | a >>>
1289 | 16, v[n] = a << 8 | a >>> 24, g[n] = a, r ? (r = o ^ t[t[t[c ^ o]]], i ^= t[t[i]]) : r = i =
1290 | 1
1291 | }
1292 | }();
1293 | var B = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54],
1294 | r = r.AES = e.extend({
1295 | _doReset: function () {
1296 | if (!this._nRounds || this._keyPriorReset !== this._key) {
1297 | for (var t = this._keyPriorReset = this._key, e = t.words, r = t.sigBytes / 4,
1298 | i = 4 * (1 + (this._nRounds = 6 + r)), n = this._keySchedule = [], o =
1299 | 0; o < i; o++) o < r ? n[o] = e[o] : (a = n[o - 1], o % r ? 6 < r && o %
1300 | r == 4 && (a = h[a >>> 24] << 24 | h[a >>> 16 & 255] << 16 | h[a >>> 8 &
1301 | 255] << 8 | h[255 & a]) : (a = h[(a = a << 8 | a >>> 24) >>> 24] <<
1302 | 24 | h[a >>> 16 & 255] << 16 | h[a >>> 8 & 255] << 8 | h[255 & a],
1303 | a ^= B[o / r | 0] << 24), n[o] = n[o - r] ^ a);
1304 | for (var s = this._invKeySchedule = [], c = 0; c < i; c++) {
1305 | var a, o = i - c;
1306 | a = c % 4 ? n[o] : n[o - 4], s[c] = c < 4 || o <= 4 ? a : _[h[a >>> 24]] ^
1307 | y[h[a >>> 16 & 255]] ^ v[h[a >>> 8 & 255]] ^ g[h[255 & a]]
1308 | }
1309 | }
1310 | },
1311 | encryptBlock: function (t, e) {
1312 | this._doCryptBlock(t, e, this._keySchedule, f, d, u, p, h)
1313 | },
1314 | decryptBlock: function (t, e) {
1315 | var r = t[e + 1];
1316 | t[e + 1] = t[e + 3], t[e + 3] = r, this._doCryptBlock(t, e, this._invKeySchedule, _,
1317 | y, v, g, l);
1318 | r = t[e + 1];
1319 | t[e + 1] = t[e + 3], t[e + 3] = r
1320 | },
1321 | _doCryptBlock: function (t, e, r, i, n, o, s, c) {
1322 | for (var a = this._nRounds, h = t[e] ^ r[0], l = t[e + 1] ^ r[1], f = t[e + 2] ^ r[
1323 | 2], d = t[e + 3] ^ r[3], u = 4, p = 1; p < a; p++) var _ = i[h >>> 24] ^ n[
1324 | l >>> 16 & 255] ^ o[f >>> 8 & 255] ^ s[255 & d] ^ r[u++],
1325 | y = i[l >>> 24] ^ n[f >>> 16 & 255] ^ o[d >>> 8 & 255] ^ s[255 & h] ^ r[u++],
1326 | v = i[f >>> 24] ^ n[d >>> 16 & 255] ^ o[h >>> 8 & 255] ^ s[255 & l] ^ r[u++],
1327 | g = i[d >>> 24] ^ n[h >>> 16 & 255] ^ o[l >>> 8 & 255] ^ s[255 & f] ^ r[u++],
1328 | h = _,
1329 | l = y,
1330 | f = v,
1331 | d = g;
1332 | _ = (c[h >>> 24] << 24 | c[l >>> 16 & 255] << 16 | c[f >>> 8 & 255] << 8 | c[255 &
1333 | d]) ^ r[u++], y = (c[l >>> 24] << 24 | c[f >>> 16 & 255] << 16 | c[d >>> 8 &
1334 | 255] << 8 | c[255 & h]) ^ r[u++], v = (c[f >>> 24] << 24 | c[d >>> 16 & 255] <<
1335 | 16 | c[h >>> 8 & 255] << 8 | c[255 & l]) ^ r[u++], g = (c[d >>> 24] << 24 |
1336 | c[h >>> 16 & 255] << 16 | c[l >>> 8 & 255] << 8 | c[255 & f]) ^ r[u++];
1337 | t[e] = _, t[e + 1] = y, t[e + 2] = v, t[e + 3] = g
1338 | },
1339 | keySize: 8
1340 | });
1341 | t.AES = e._createHelper(r)
1342 | }(),
1343 | function () {
1344 | var t = U,
1345 | e = t.lib,
1346 | i = e.WordArray,
1347 | r = e.BlockCipher,
1348 | e = t.algo,
1349 | h = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60,
1350 | 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29,
1351 | 21, 13, 5, 28, 20, 12, 4],
1352 | l = [14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52,
1353 | 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32],
1354 | f = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28],
1355 | d = [{
1356 | 0: 8421888,
1357 | 268435456: 32768,
1358 | 536870912: 8421378,
1359 | 805306368: 2,
1360 | 1073741824: 512,
1361 | 1342177280: 8421890,
1362 | 1610612736: 8389122,
1363 | 1879048192: 8388608,
1364 | 2147483648: 514,
1365 | 2415919104: 8389120,
1366 | 2684354560: 33280,
1367 | 2952790016: 8421376,
1368 | 3221225472: 32770,
1369 | 3489660928: 8388610,
1370 | 3758096384: 0,
1371 | 4026531840: 33282,
1372 | 134217728: 0,
1373 | 402653184: 8421890,
1374 | 671088640: 33282,
1375 | 939524096: 32768,
1376 | 1207959552: 8421888,
1377 | 1476395008: 512,
1378 | 1744830464: 8421378,
1379 | 2013265920: 2,
1380 | 2281701376: 8389120,
1381 | 2550136832: 33280,
1382 | 2818572288: 8421376,
1383 | 3087007744: 8389122,
1384 | 3355443200: 8388610,
1385 | 3623878656: 32770,
1386 | 3892314112: 514,
1387 | 4160749568: 8388608,
1388 | 1: 32768,
1389 | 268435457: 2,
1390 | 536870913: 8421888,
1391 | 805306369: 8388608,
1392 | 1073741825: 8421378,
1393 | 1342177281: 33280,
1394 | 1610612737: 512,
1395 | 1879048193: 8389122,
1396 | 2147483649: 8421890,
1397 | 2415919105: 8421376,
1398 | 2684354561: 8388610,
1399 | 2952790017: 33282,
1400 | 3221225473: 514,
1401 | 3489660929: 8389120,
1402 | 3758096385: 32770,
1403 | 4026531841: 0,
1404 | 134217729: 8421890,
1405 | 402653185: 8421376,
1406 | 671088641: 8388608,
1407 | 939524097: 512,
1408 | 1207959553: 32768,
1409 | 1476395009: 8388610,
1410 | 1744830465: 2,
1411 | 2013265921: 33282,
1412 | 2281701377: 32770,
1413 | 2550136833: 8389122,
1414 | 2818572289: 514,
1415 | 3087007745: 8421888,
1416 | 3355443201: 8389120,
1417 | 3623878657: 0,
1418 | 3892314113: 33280,
1419 | 4160749569: 8421378
1420 | }, {
1421 | 0: 1074282512,
1422 | 16777216: 16384,
1423 | 33554432: 524288,
1424 | 50331648: 1074266128,
1425 | 67108864: 1073741840,
1426 | 83886080: 1074282496,
1427 | 100663296: 1073758208,
1428 | 117440512: 16,
1429 | 134217728: 540672,
1430 | 150994944: 1073758224,
1431 | 167772160: 1073741824,
1432 | 184549376: 540688,
1433 | 201326592: 524304,
1434 | 218103808: 0,
1435 | 234881024: 16400,
1436 | 251658240: 1074266112,
1437 | 8388608: 1073758208,
1438 | 25165824: 540688,
1439 | 41943040: 16,
1440 | 58720256: 1073758224,
1441 | 75497472: 1074282512,
1442 | 92274688: 1073741824,
1443 | 109051904: 524288,
1444 | 125829120: 1074266128,
1445 | 142606336: 524304,
1446 | 159383552: 0,
1447 | 176160768: 16384,
1448 | 192937984: 1074266112,
1449 | 209715200: 1073741840,
1450 | 226492416: 540672,
1451 | 243269632: 1074282496,
1452 | 260046848: 16400,
1453 | 268435456: 0,
1454 | 285212672: 1074266128,
1455 | 301989888: 1073758224,
1456 | 318767104: 1074282496,
1457 | 335544320: 1074266112,
1458 | 352321536: 16,
1459 | 369098752: 540688,
1460 | 385875968: 16384,
1461 | 402653184: 16400,
1462 | 419430400: 524288,
1463 | 436207616: 524304,
1464 | 452984832: 1073741840,
1465 | 469762048: 540672,
1466 | 486539264: 1073758208,
1467 | 503316480: 1073741824,
1468 | 520093696: 1074282512,
1469 | 276824064: 540688,
1470 | 293601280: 524288,
1471 | 310378496: 1074266112,
1472 | 327155712: 16384,
1473 | 343932928: 1073758208,
1474 | 360710144: 1074282512,
1475 | 377487360: 16,
1476 | 394264576: 1073741824,
1477 | 411041792: 1074282496,
1478 | 427819008: 1073741840,
1479 | 444596224: 1073758224,
1480 | 461373440: 524304,
1481 | 478150656: 0,
1482 | 494927872: 16400,
1483 | 511705088: 1074266128,
1484 | 528482304: 540672
1485 | }, {
1486 | 0: 260,
1487 | 1048576: 0,
1488 | 2097152: 67109120,
1489 | 3145728: 65796,
1490 | 4194304: 65540,
1491 | 5242880: 67108868,
1492 | 6291456: 67174660,
1493 | 7340032: 67174400,
1494 | 8388608: 67108864,
1495 | 9437184: 67174656,
1496 | 10485760: 65792,
1497 | 11534336: 67174404,
1498 | 12582912: 67109124,
1499 | 13631488: 65536,
1500 | 14680064: 4,
1501 | 15728640: 256,
1502 | 524288: 67174656,
1503 | 1572864: 67174404,
1504 | 2621440: 0,
1505 | 3670016: 67109120,
1506 | 4718592: 67108868,
1507 | 5767168: 65536,
1508 | 6815744: 65540,
1509 | 7864320: 260,
1510 | 8912896: 4,
1511 | 9961472: 256,
1512 | 11010048: 67174400,
1513 | 12058624: 65796,
1514 | 13107200: 65792,
1515 | 14155776: 67109124,
1516 | 15204352: 67174660,
1517 | 16252928: 67108864,
1518 | 16777216: 67174656,
1519 | 17825792: 65540,
1520 | 18874368: 65536,
1521 | 19922944: 67109120,
1522 | 20971520: 256,
1523 | 22020096: 67174660,
1524 | 23068672: 67108868,
1525 | 24117248: 0,
1526 | 25165824: 67109124,
1527 | 26214400: 67108864,
1528 | 27262976: 4,
1529 | 28311552: 65792,
1530 | 29360128: 67174400,
1531 | 30408704: 260,
1532 | 31457280: 65796,
1533 | 32505856: 67174404,
1534 | 17301504: 67108864,
1535 | 18350080: 260,
1536 | 19398656: 67174656,
1537 | 20447232: 0,
1538 | 21495808: 65540,
1539 | 22544384: 67109120,
1540 | 23592960: 256,
1541 | 24641536: 67174404,
1542 | 25690112: 65536,
1543 | 26738688: 67174660,
1544 | 27787264: 65796,
1545 | 28835840: 67108868,
1546 | 29884416: 67109124,
1547 | 30932992: 67174400,
1548 | 31981568: 4,
1549 | 33030144: 65792
1550 | }, {
1551 | 0: 2151682048,
1552 | 65536: 2147487808,
1553 | 131072: 4198464,
1554 | 196608: 2151677952,
1555 | 262144: 0,
1556 | 327680: 4198400,
1557 | 393216: 2147483712,
1558 | 458752: 4194368,
1559 | 524288: 2147483648,
1560 | 589824: 4194304,
1561 | 655360: 64,
1562 | 720896: 2147487744,
1563 | 786432: 2151678016,
1564 | 851968: 4160,
1565 | 917504: 4096,
1566 | 983040: 2151682112,
1567 | 32768: 2147487808,
1568 | 98304: 64,
1569 | 163840: 2151678016,
1570 | 229376: 2147487744,
1571 | 294912: 4198400,
1572 | 360448: 2151682112,
1573 | 425984: 0,
1574 | 491520: 2151677952,
1575 | 557056: 4096,
1576 | 622592: 2151682048,
1577 | 688128: 4194304,
1578 | 753664: 4160,
1579 | 819200: 2147483648,
1580 | 884736: 4194368,
1581 | 950272: 4198464,
1582 | 1015808: 2147483712,
1583 | 1048576: 4194368,
1584 | 1114112: 4198400,
1585 | 1179648: 2147483712,
1586 | 1245184: 0,
1587 | 1310720: 4160,
1588 | 1376256: 2151678016,
1589 | 1441792: 2151682048,
1590 | 1507328: 2147487808,
1591 | 1572864: 2151682112,
1592 | 1638400: 2147483648,
1593 | 1703936: 2151677952,
1594 | 1769472: 4198464,
1595 | 1835008: 2147487744,
1596 | 1900544: 4194304,
1597 | 1966080: 64,
1598 | 2031616: 4096,
1599 | 1081344: 2151677952,
1600 | 1146880: 2151682112,
1601 | 1212416: 0,
1602 | 1277952: 4198400,
1603 | 1343488: 4194368,
1604 | 1409024: 2147483648,
1605 | 1474560: 2147487808,
1606 | 1540096: 64,
1607 | 1605632: 2147483712,
1608 | 1671168: 4096,
1609 | 1736704: 2147487744,
1610 | 1802240: 2151678016,
1611 | 1867776: 4160,
1612 | 1933312: 2151682048,
1613 | 1998848: 4194304,
1614 | 2064384: 4198464
1615 | }, {
1616 | 0: 128,
1617 | 4096: 17039360,
1618 | 8192: 262144,
1619 | 12288: 536870912,
1620 | 16384: 537133184,
1621 | 20480: 16777344,
1622 | 24576: 553648256,
1623 | 28672: 262272,
1624 | 32768: 16777216,
1625 | 36864: 537133056,
1626 | 40960: 536871040,
1627 | 45056: 553910400,
1628 | 49152: 553910272,
1629 | 53248: 0,
1630 | 57344: 17039488,
1631 | 61440: 553648128,
1632 | 2048: 17039488,
1633 | 6144: 553648256,
1634 | 10240: 128,
1635 | 14336: 17039360,
1636 | 18432: 262144,
1637 | 22528: 537133184,
1638 | 26624: 553910272,
1639 | 30720: 536870912,
1640 | 34816: 537133056,
1641 | 38912: 0,
1642 | 43008: 553910400,
1643 | 47104: 16777344,
1644 | 51200: 536871040,
1645 | 55296: 553648128,
1646 | 59392: 16777216,
1647 | 63488: 262272,
1648 | 65536: 262144,
1649 | 69632: 128,
1650 | 73728: 536870912,
1651 | 77824: 553648256,
1652 | 81920: 16777344,
1653 | 86016: 553910272,
1654 | 90112: 537133184,
1655 | 94208: 16777216,
1656 | 98304: 553910400,
1657 | 102400: 553648128,
1658 | 106496: 17039360,
1659 | 110592: 537133056,
1660 | 114688: 262272,
1661 | 118784: 536871040,
1662 | 122880: 0,
1663 | 126976: 17039488,
1664 | 67584: 553648256,
1665 | 71680: 16777216,
1666 | 75776: 17039360,
1667 | 79872: 537133184,
1668 | 83968: 536870912,
1669 | 88064: 17039488,
1670 | 92160: 128,
1671 | 96256: 553910272,
1672 | 100352: 262272,
1673 | 104448: 553910400,
1674 | 108544: 0,
1675 | 112640: 553648128,
1676 | 116736: 16777344,
1677 | 120832: 262144,
1678 | 124928: 537133056,
1679 | 129024: 536871040
1680 | }, {
1681 | 0: 268435464,
1682 | 256: 8192,
1683 | 512: 270532608,
1684 | 768: 270540808,
1685 | 1024: 268443648,
1686 | 1280: 2097152,
1687 | 1536: 2097160,
1688 | 1792: 268435456,
1689 | 2048: 0,
1690 | 2304: 268443656,
1691 | 2560: 2105344,
1692 | 2816: 8,
1693 | 3072: 270532616,
1694 | 3328: 2105352,
1695 | 3584: 8200,
1696 | 3840: 270540800,
1697 | 128: 270532608,
1698 | 384: 270540808,
1699 | 640: 8,
1700 | 896: 2097152,
1701 | 1152: 2105352,
1702 | 1408: 268435464,
1703 | 1664: 268443648,
1704 | 1920: 8200,
1705 | 2176: 2097160,
1706 | 2432: 8192,
1707 | 2688: 268443656,
1708 | 2944: 270532616,
1709 | 3200: 0,
1710 | 3456: 270540800,
1711 | 3712: 2105344,
1712 | 3968: 268435456,
1713 | 4096: 268443648,
1714 | 4352: 270532616,
1715 | 4608: 270540808,
1716 | 4864: 8200,
1717 | 5120: 2097152,
1718 | 5376: 268435456,
1719 | 5632: 268435464,
1720 | 5888: 2105344,
1721 | 6144: 2105352,
1722 | 6400: 0,
1723 | 6656: 8,
1724 | 6912: 270532608,
1725 | 7168: 8192,
1726 | 7424: 268443656,
1727 | 7680: 270540800,
1728 | 7936: 2097160,
1729 | 4224: 8,
1730 | 4480: 2105344,
1731 | 4736: 2097152,
1732 | 4992: 268435464,
1733 | 5248: 268443648,
1734 | 5504: 8200,
1735 | 5760: 270540808,
1736 | 6016: 270532608,
1737 | 6272: 270540800,
1738 | 6528: 270532616,
1739 | 6784: 8192,
1740 | 7040: 2105352,
1741 | 7296: 2097160,
1742 | 7552: 0,
1743 | 7808: 268435456,
1744 | 8064: 268443656
1745 | }, {
1746 | 0: 1048576,
1747 | 16: 33555457,
1748 | 32: 1024,
1749 | 48: 1049601,
1750 | 64: 34604033,
1751 | 80: 0,
1752 | 96: 1,
1753 | 112: 34603009,
1754 | 128: 33555456,
1755 | 144: 1048577,
1756 | 160: 33554433,
1757 | 176: 34604032,
1758 | 192: 34603008,
1759 | 208: 1025,
1760 | 224: 1049600,
1761 | 240: 33554432,
1762 | 8: 34603009,
1763 | 24: 0,
1764 | 40: 33555457,
1765 | 56: 34604032,
1766 | 72: 1048576,
1767 | 88: 33554433,
1768 | 104: 33554432,
1769 | 120: 1025,
1770 | 136: 1049601,
1771 | 152: 33555456,
1772 | 168: 34603008,
1773 | 184: 1048577,
1774 | 200: 1024,
1775 | 216: 34604033,
1776 | 232: 1,
1777 | 248: 1049600,
1778 | 256: 33554432,
1779 | 272: 1048576,
1780 | 288: 33555457,
1781 | 304: 34603009,
1782 | 320: 1048577,
1783 | 336: 33555456,
1784 | 352: 34604032,
1785 | 368: 1049601,
1786 | 384: 1025,
1787 | 400: 34604033,
1788 | 416: 1049600,
1789 | 432: 1,
1790 | 448: 0,
1791 | 464: 34603008,
1792 | 480: 33554433,
1793 | 496: 1024,
1794 | 264: 1049600,
1795 | 280: 33555457,
1796 | 296: 34603009,
1797 | 312: 1,
1798 | 328: 33554432,
1799 | 344: 1048576,
1800 | 360: 1025,
1801 | 376: 34604032,
1802 | 392: 33554433,
1803 | 408: 34603008,
1804 | 424: 0,
1805 | 440: 34604033,
1806 | 456: 1049601,
1807 | 472: 1024,
1808 | 488: 33555456,
1809 | 504: 1048577
1810 | }, {
1811 | 0: 134219808,
1812 | 1: 131072,
1813 | 2: 134217728,
1814 | 3: 32,
1815 | 4: 131104,
1816 | 5: 134350880,
1817 | 6: 134350848,
1818 | 7: 2048,
1819 | 8: 134348800,
1820 | 9: 134219776,
1821 | 10: 133120,
1822 | 11: 134348832,
1823 | 12: 2080,
1824 | 13: 0,
1825 | 14: 134217760,
1826 | 15: 133152,
1827 | 2147483648: 2048,
1828 | 2147483649: 134350880,
1829 | 2147483650: 134219808,
1830 | 2147483651: 134217728,
1831 | 2147483652: 134348800,
1832 | 2147483653: 133120,
1833 | 2147483654: 133152,
1834 | 2147483655: 32,
1835 | 2147483656: 134217760,
1836 | 2147483657: 2080,
1837 | 2147483658: 131104,
1838 | 2147483659: 134350848,
1839 | 2147483660: 0,
1840 | 2147483661: 134348832,
1841 | 2147483662: 134219776,
1842 | 2147483663: 131072,
1843 | 16: 133152,
1844 | 17: 134350848,
1845 | 18: 32,
1846 | 19: 2048,
1847 | 20: 134219776,
1848 | 21: 134217760,
1849 | 22: 134348832,
1850 | 23: 131072,
1851 | 24: 0,
1852 | 25: 131104,
1853 | 26: 134348800,
1854 | 27: 134219808,
1855 | 28: 134350880,
1856 | 29: 133120,
1857 | 30: 2080,
1858 | 31: 134217728,
1859 | 2147483664: 131072,
1860 | 2147483665: 2048,
1861 | 2147483666: 134348832,
1862 | 2147483667: 133152,
1863 | 2147483668: 32,
1864 | 2147483669: 134348800,
1865 | 2147483670: 134217728,
1866 | 2147483671: 134219808,
1867 | 2147483672: 134350880,
1868 | 2147483673: 134217760,
1869 | 2147483674: 134219776,
1870 | 2147483675: 0,
1871 | 2147483676: 133120,
1872 | 2147483677: 2080,
1873 | 2147483678: 131104,
1874 | 2147483679: 134350848
1875 | }],
1876 | u = [4160749569, 528482304, 33030144, 2064384, 129024, 8064, 504, 2147483679],
1877 | n = e.DES = r.extend({
1878 | _doReset: function () {
1879 | for (var t = this._key.words, e = [], r = 0; r < 56; r++) {
1880 | var i = h[r] - 1;
1881 | e[r] = t[i >>> 5] >>> 31 - i % 32 & 1
1882 | }
1883 | for (var n = this._subKeys = [], o = 0; o < 16; o++) {
1884 | for (var s = n[o] = [], c = f[o], r = 0; r < 24; r++) s[r / 6 | 0] |= e[(l[r] -
1885 | 1 + c) % 28] << 31 - r % 6, s[4 + (r / 6 | 0)] |= e[28 + (l[r + 24] - 1 +
1886 | c) % 28] << 31 - r % 6;
1887 | s[0] = s[0] << 1 | s[0] >>> 31;
1888 | for (r = 1; r < 7; r++) s[r] = s[r] >>> 4 * (r - 1) + 3;
1889 | s[7] = s[7] << 5 | s[7] >>> 27
1890 | }
1891 | for (var a = this._invSubKeys = [], r = 0; r < 16; r++) a[r] = n[15 - r]
1892 | },
1893 | encryptBlock: function (t, e) {
1894 | this._doCryptBlock(t, e, this._subKeys)
1895 | },
1896 | decryptBlock: function (t, e) {
1897 | this._doCryptBlock(t, e, this._invSubKeys)
1898 | },
1899 | _doCryptBlock: function (t, e, r) {
1900 | this._lBlock = t[e], this._rBlock = t[e + 1], p.call(this, 4, 252645135), p.call(
1901 | this, 16, 65535), _.call(this, 2, 858993459), _.call(this, 8, 16711935), p.call(
1902 | this, 1, 1431655765);
1903 | for (var i = 0; i < 16; i++) {
1904 | for (var n = r[i], o = this._lBlock, s = this._rBlock, c = 0, a = 0; a < 8; a++)
1905 | c |= d[a][((s ^ n[a]) & u[a]) >>> 0];
1906 | this._lBlock = s, this._rBlock = o ^ c
1907 | }
1908 | var h = this._lBlock;
1909 | this._lBlock = this._rBlock, this._rBlock = h, p.call(this, 1, 1431655765), _.call(
1910 | this, 8, 16711935), _.call(this, 2, 858993459), p.call(this, 16, 65535), p.call(
1911 | this, 4, 252645135), t[e] = this._lBlock, t[e + 1] = this._rBlock
1912 | },
1913 | keySize: 2,
1914 | ivSize: 2,
1915 | blockSize: 2
1916 | });
1917 |
1918 | function p(t, e) {
1919 | e = (this._lBlock >>> t ^ this._rBlock) & e;
1920 | this._rBlock ^= e, this._lBlock ^= e << t
1921 | }
1922 |
1923 | function _(t, e) {
1924 | e = (this._rBlock >>> t ^ this._lBlock) & e;
1925 | this._lBlock ^= e, this._rBlock ^= e << t
1926 | }
1927 | t.DES = r._createHelper(n);
1928 | e = e.TripleDES = r.extend({
1929 | _doReset: function () {
1930 | var t = this._key.words;
1931 | if (2 !== t.length && 4 !== t.length && t.length < 6) throw new Error(
1932 | "Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192."
1933 | );
1934 | var e = t.slice(0, 2),
1935 | r = t.length < 4 ? t.slice(0, 2) : t.slice(2, 4),
1936 | t = t.length < 6 ? t.slice(0, 2) : t.slice(4, 6);
1937 | this._des1 = n.createEncryptor(i.create(e)), this._des2 = n.createEncryptor(i.create(
1938 | r)), this._des3 = n.createEncryptor(i.create(t))
1939 | },
1940 | encryptBlock: function (t, e) {
1941 | this._des1.encryptBlock(t, e), this._des2.decryptBlock(t, e), this._des3.encryptBlock(
1942 | t, e)
1943 | },
1944 | decryptBlock: function (t, e) {
1945 | this._des3.decryptBlock(t, e), this._des2.encryptBlock(t, e), this._des1.decryptBlock(
1946 | t, e)
1947 | },
1948 | keySize: 6,
1949 | ivSize: 2,
1950 | blockSize: 2
1951 | });
1952 | t.TripleDES = r._createHelper(e)
1953 | }(),
1954 | function () {
1955 | var t = U,
1956 | e = t.lib.StreamCipher,
1957 | r = t.algo,
1958 | i = r.RC4 = e.extend({
1959 | _doReset: function () {
1960 | for (var t = this._key, e = t.words, r = t.sigBytes, i = this._S = [], n = 0; n <
1961 | 256; n++) i[n] = n;
1962 | for (var n = 0, o = 0; n < 256; n++) {
1963 | var s = n % r,
1964 | s = e[s >>> 2] >>> 24 - s % 4 * 8 & 255,
1965 | o = (o + i[n] + s) % 256,
1966 | s = i[n];
1967 | i[n] = i[o], i[o] = s
1968 | }
1969 | this._i = this._j = 0
1970 | },
1971 | _doProcessBlock: function (t, e) {
1972 | t[e] ^= n.call(this)
1973 | },
1974 | keySize: 8,
1975 | ivSize: 0
1976 | });
1977 |
1978 | function n() {
1979 | for (var t = this._S, e = this._i, r = this._j, i = 0, n = 0; n < 4; n++) {
1980 | var r = (r + t[e = (e + 1) % 256]) % 256,
1981 | o = t[e];
1982 | t[e] = t[r], t[r] = o, i |= t[(t[e] + t[r]) % 256] << 24 - 8 * n
1983 | }
1984 | return this._i = e, this._j = r, i
1985 | }
1986 | t.RC4 = e._createHelper(i);
1987 | r = r.RC4Drop = i.extend({
1988 | cfg: i.cfg.extend({
1989 | drop: 192
1990 | }),
1991 | _doReset: function () {
1992 | i._doReset.call(this);
1993 | for (var t = this.cfg.drop; 0 < t; t--) n.call(this)
1994 | }
1995 | });
1996 | t.RC4Drop = e._createHelper(r)
1997 | }(), F = (M = U).lib.StreamCipher, P = M.algo, D = [], E = [], R = [], P = P.Rabbit = F.extend({
1998 | _doReset: function () {
1999 | for (var t = this._key.words, e = this.cfg.iv, r = 0; r < 4; r++) t[r] = 16711935 & (t[r] <<
2000 | 8 | t[r] >>> 24) | 4278255360 & (t[r] << 24 | t[r] >>> 8);
2001 | for (var i = this._X = [t[0], t[3] << 16 | t[2] >>> 16, t[1], t[0] << 16 | t[3] >>> 16, t[2],
2002 | t[1] << 16 | t[0] >>> 16, t[3], t[2] << 16 | t[1] >>> 16], n = this._C = [t[2] <<
2003 | 16 | t[2] >>> 16, 4294901760 & t[0] | 65535 & t[1], t[3] << 16 | t[3] >>> 16,
2004 | 4294901760 & t[1] | 65535 & t[2], t[0] << 16 | t[0] >>> 16, 4294901760 & t[2] |
2005 | 65535 & t[3], t[1] << 16 | t[1] >>> 16, 4294901760 & t[3] | 65535 & t[0]], r =
2006 | this._b = 0; r < 4; r++) N.call(this);
2007 | for (r = 0; r < 8; r++) n[r] ^= i[r + 4 & 7];
2008 | if (e) {
2009 | var o = e.words,
2010 | s = o[0],
2011 | c = o[1],
2012 | e = 16711935 & (s << 8 | s >>> 24) | 4278255360 & (s << 24 | s >>> 8),
2013 | o = 16711935 & (c << 8 | c >>> 24) | 4278255360 & (c << 24 | c >>> 8),
2014 | s = e >>> 16 | 4294901760 & o,
2015 | c = o << 16 | 65535 & e;
2016 | n[0] ^= e, n[1] ^= s, n[2] ^= o, n[3] ^= c, n[4] ^= e, n[5] ^= s, n[6] ^= o, n[7] ^= c;
2017 | for (r = 0; r < 4; r++) N.call(this)
2018 | }
2019 | },
2020 | _doProcessBlock: function (t, e) {
2021 | var r = this._X;
2022 | N.call(this), D[0] = r[0] ^ r[5] >>> 16 ^ r[3] << 16, D[1] = r[2] ^ r[7] >>> 16 ^ r[5] <<
2023 | 16, D[2] = r[4] ^ r[1] >>> 16 ^ r[7] << 16, D[3] = r[6] ^ r[3] >>> 16 ^ r[1] << 16;
2024 | for (var i = 0; i < 4; i++) D[i] = 16711935 & (D[i] << 8 | D[i] >>> 24) | 4278255360 & (D[i] <<
2025 | 24 | D[i] >>> 8), t[e + i] ^= D[i]
2026 | },
2027 | blockSize: 4,
2028 | ivSize: 2
2029 | }), M.Rabbit = F._createHelper(P), F = (M = U).lib.StreamCipher, P = M.algo, W = [], O = [], I = [], P = P.RabbitLegacy =
2030 | F.extend({
2031 | _doReset: function () {
2032 | for (var t = this._key.words, e = this.cfg.iv, r = this._X = [t[0], t[3] << 16 | t[2] >>>
2033 | 16, t[1], t[0] << 16 | t[3] >>> 16, t[2], t[1] << 16 | t[0] >>> 16, t[3], t[2] <<
2034 | 16 | t[1] >>> 16], i = this._C = [t[2] << 16 | t[2] >>> 16, 4294901760 & t[0] |
2035 | 65535 & t[1], t[3] << 16 | t[3] >>> 16, 4294901760 & t[1] | 65535 & t[2], t[0] <<
2036 | 16 | t[0] >>> 16, 4294901760 & t[2] | 65535 & t[3], t[1] << 16 | t[1] >>> 16,
2037 | 4294901760 & t[3] | 65535 & t[0]], n = this._b = 0; n < 4; n++) q.call(this);
2038 | for (n = 0; n < 8; n++) i[n] ^= r[n + 4 & 7];
2039 | if (e) {
2040 | var o = e.words,
2041 | s = o[0],
2042 | t = o[1],
2043 | e = 16711935 & (s << 8 | s >>> 24) | 4278255360 & (s << 24 | s >>> 8),
2044 | o = 16711935 & (t << 8 | t >>> 24) | 4278255360 & (t << 24 | t >>> 8),
2045 | s = e >>> 16 | 4294901760 & o,
2046 | t = o << 16 | 65535 & e;
2047 | i[0] ^= e, i[1] ^= s, i[2] ^= o, i[3] ^= t, i[4] ^= e, i[5] ^= s, i[6] ^= o, i[7] ^= t;
2048 | for (n = 0; n < 4; n++) q.call(this)
2049 | }
2050 | },
2051 | _doProcessBlock: function (t, e) {
2052 | var r = this._X;
2053 | q.call(this), W[0] = r[0] ^ r[5] >>> 16 ^ r[3] << 16, W[1] = r[2] ^ r[7] >>> 16 ^ r[5] <<
2054 | 16, W[2] = r[4] ^ r[1] >>> 16 ^ r[7] << 16, W[3] = r[6] ^ r[3] >>> 16 ^ r[1] << 16;
2055 | for (var i = 0; i < 4; i++) W[i] = 16711935 & (W[i] << 8 | W[i] >>> 24) | 4278255360 & (W[i] <<
2056 | 24 | W[i] >>> 8), t[e + i] ^= W[i]
2057 | },
2058 | blockSize: 4,
2059 | ivSize: 2
2060 | }), M.RabbitLegacy = F._createHelper(P), U
2061 | });
2062 |
--------------------------------------------------------------------------------
/nginx/zE48AHvK/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/nginx/zE48AHvK/info.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/nginx/zE48AHvK/info.js:
--------------------------------------------------------------------------------
1 | //生成cookieB
2 |
3 | // 随同页面下发,嵌入在返回体中
4 |
5 | //js全局hook http请求
6 | var arr = [];
7 |
8 |
9 | function get_webdriver() {
10 | try {
11 | return !0 === _navigator.webdriver ? 0 : +!window.document.documentElement.getAttribute('webdriver')
12 | } catch (e) {
13 | return 1
14 | }
15 | }
16 | function get_awvs() {
17 | for (var e = [
18 | 'SimpleDOMXSSClass',
19 | 'MarvinHooks',
20 | 'MarvinPageExplorer',
21 | 'HashDOMXSSClass'
22 | ], t = e.length, r = window.$hook$, n = 0; n < t; n++) if (window[e[n]] && r) return 0;
23 | return 1
24 | }
25 | function get_appscan() {
26 | for (var e = [
27 | 'appScanSendReplacement',
28 | 'appScanOnReadyStateChangeReplacement',
29 | 'appScanLoadHandler',
30 | 'appScanSetPageLoaded'
31 | ], t = e.length, r = 0; r < t; r++) if (window[e[r]]) return 0;
32 | return 1
33 | }
34 |
35 | function getCookie(cookieName) {
36 | var strCookie = document.cookie;
37 | var arrCookie = strCookie.split("; ");
38 | for(var i = 0; i < arrCookie.length; i++){
39 | var arr = arrCookie[i].split("=");
40 | if(cookieName == arr[0]){
41 | return arr[1];
42 | }
43 | }
44 | return "";
45 | }
46 |
47 | function get_info(){
48 | str = '' + get_webdriver() + get_awvs() + get_appscan();
49 | return str;
50 | }
51 |
52 | function finalCookie(){
53 | arr.push(get_info());
54 | let fp = new Fingerprint();
55 | arr.push(fp.get());
56 | return arr
57 | }
58 |
59 | function setCookie(cname, data) {
60 | var d = new Date();
61 | d.setTime(d.getTime() + (1 * 24 * 60 * 60 * 1000));
62 | var expires = "expires=" + d.toGMTString();
63 | document.cookie = cname + '=' + data + '; ' + expires + '; Path=/';
64 | }
65 |
66 | function aesEncrypt(word, tt) {
67 | let key = CryptoJS.enc.Utf8.parse(tt);
68 | const iv = CryptoJS.enc.Utf8.parse('ABCDEF1234123412');
69 | let srcs = CryptoJS.enc.Utf8.parse(word);
70 | let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
71 | return encrypted.ciphertext.toString().toUpperCase();
72 | }
73 |
74 |
75 | var tt = getCookie("h0yGbdRv");
76 | var cookieV = aesEncrypt(finalCookie(), tt);
77 |
78 |
79 | function hookAJAX() {
80 | XMLHttpRequest.prototype.nativeOpen = XMLHttpRequest.prototype.open;
81 | var customizeOpen = function (method, url, async, user, password) {
82 | // do something
83 | setCookie('kQpFHdoh', cookieV);
84 | this.nativeOpen(method, url, async, user, password);
85 | };
86 | XMLHttpRequest.prototype.open = customizeOpen;
87 | }
88 |
89 | /**
90 | *全局拦截Image的图片请求添加token
91 | *
92 | */
93 | function hookImg() {
94 | const property = Object.getOwnPropertyDescriptor(Image.prototype, 'src');
95 | const nativeSet = property.set;
96 |
97 | function customiseSrcSet(url) {
98 | // do something
99 | setCookie('kQpFHdoh', cookieV);
100 | nativeSet.call(this, url);
101 | }
102 | Object.defineProperty(Image.prototype, 'src', {
103 | set: customiseSrcSet,
104 | });
105 | }
106 |
107 | /**
108 | * 拦截全局open的url添加token
109 | *
110 | */
111 | function hookOpen() {
112 | const nativeOpen = window.open;
113 | window.open = function (url) {
114 | // do something
115 | setCookie('kQpFHdoh', cookieV);
116 | nativeOpen.call(this, url);
117 | };
118 | }
119 |
120 | function hookFetch() {
121 | var fet = Object.getOwnPropertyDescriptor(window, 'fetch')
122 | Object.defineProperty(window, 'fetch', {
123 | value: function (a, b, c) {
124 | // do something
125 | setCookie('kQpFHdoh', cookieV);
126 | return fet.value.apply(this, args)
127 | }
128 | })
129 | }
130 |
131 |
132 | //setCookie('kQpFHdoh', cookieV);
133 | hookAJAX();
134 | hookImg();
135 | hookOpen();
136 | hookFetch();
137 |
138 |
139 |
--------------------------------------------------------------------------------
/nginx/zE48AHvK/jump.js:
--------------------------------------------------------------------------------
1 | function getUrlParams() {
2 | var args = new Object();
3 | var query = location.search.substring(1); //获取查询串
4 | var pairs = query.split("&"); //在逗号处断开
5 | for (var i = 0; i < pairs.length; i++) {
6 | var pos = pairs[i].indexOf('='); //查找name=value
7 | if (pos == -1) continue; //如果没有找到就跳过
8 | var argname = pairs[i].substring(0, pos); //提取name
9 | var value = pairs[i].substring(pos + 1); //提取value
10 | args[argname] = unescape(value); //存为属性
11 | }
12 | return args;
13 | }
14 |
15 | function jump(){
16 | var args = getUrlParams()['origin'];
17 | var path = atob(args);
18 | self.location=path;
19 | }
20 | jump();
--------------------------------------------------------------------------------
/nginx/zE48AHvK/webdriver.js:
--------------------------------------------------------------------------------
1 | var tt = Date.parse(new Date());
2 | var arr = [];
3 |
4 | function get_webdriver() {
5 | try {
6 | return !0 === _navigator.webdriver ? 0 : +!window.document.documentElement.getAttribute('webdriver')
7 | } catch (e) {
8 | return 1
9 | }
10 | }
11 | function get_awvs() {
12 | for (var e = [
13 | 'SimpleDOMXSSClass',
14 | 'MarvinHooks',
15 | 'MarvinPageExplorer',
16 | 'HashDOMXSSClass'
17 | ], t = e.length, r = window.$hook$, n = 0; n < t; n++) if (window[e[n]] && r) return 0;
18 | return 1
19 | }
20 | function get_appscan() {
21 | for (var e = [
22 | 'appScanSendReplacement',
23 | 'appScanOnReadyStateChangeReplacement',
24 | 'appScanLoadHandler',
25 | 'appScanSetPageLoaded'
26 | ], t = e.length, r = 0; r < t; r++) if (window[e[r]]) return 0;
27 | return 1
28 | }
29 |
30 | function get_info(){
31 | str = '' + get_webdriver() + get_awvs() + get_appscan();
32 | return str;
33 | }
34 |
35 | function finalCookie(){
36 | arr.push(get_info())
37 | let fp = new Fingerprint();
38 | arr.push(fp.get());
39 | return arr
40 | }
41 |
42 |
43 | function setCookie(cname, date)
44 | {
45 | var d = new Date();
46 | d.setTime(d.getTime()+(1*24*60*60*1000));
47 | var expires = "expires="+d.toGMTString();
48 | document.cookie = cname + '=' + date + '; ' + expires + '; Path=/';
49 | }
50 |
51 | function aesEncrypt(word, tt) {
52 | let key = CryptoJS.enc.Utf8.parse(tt);
53 | const iv = CryptoJS.enc.Utf8.parse('ABCDEF1234123412');
54 | let srcs = CryptoJS.enc.Utf8.parse(word);
55 | let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
56 | return encrypted.ciphertext.toString().toUpperCase();
57 | }
58 | tt = '000'+tt;
59 | setCookie('h0yGbdRv', tt);
60 | setCookie('kQpFHdoh', aesEncrypt(finalCookie(), tt));
61 |
--------------------------------------------------------------------------------
/node/js_confuse.js:
--------------------------------------------------------------------------------
1 | const parser = require("@babel/parser");
2 | const traverse = require("@babel/traverse").default;
3 | const t = require("@babel/types");
4 | const generator = require("@babel/generator").default;
5 | const fs = require('fs');
6 |
7 |
8 | const argv = process.argv
9 | const fileParam = argv[2]
10 |
11 |
12 | const jscode = fs.readFileSync(fileParam, {
13 | encoding: "utf-8"
14 | });
15 |
16 |
17 | let ast = parser.parse(jscode);
18 |
19 | // 字符串转unicode
20 | function string2unicode(str){
21 | let ret ="";
22 | for(let i=0; i{});
214 |
--------------------------------------------------------------------------------
/randomStr.lua:
--------------------------------------------------------------------------------
1 | math.randomseed(os.time())
2 |
3 | function getRandom(n)
4 | local t = {
5 | "0","1","2","3","4","5","6","7","8","9",
6 | "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
7 | "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",
8 | }
9 | local s = ""
10 | for i =1, n do
11 | s = s .. t[math.random(#t)]
12 | end;
13 | return 't'..s
14 | end
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | ### 0x01 简介
2 |
3 | 这是一个基于openresty的安全网关,使用提供的指令和接口将lua代码插入至nginx处理http请求的不同阶段来实现包过滤效果,相较传统waf该网关更侧重于业务方面的防护,特点之一是具备防自动化工具请求能力,但目前还只是一个demo项目,具体的开发过程记录在[这里](https://ainrm.cn/2022/safegate.html),后续可能会增加如文中所规划的功能
4 |
5 | 
6 |
7 | ### 0x02 文件说明
8 |
9 | 核心文件是`init.lua`,包含了具体的处理逻辑,`config.lua`为配置文件,决定是否启用某些功能,然后在nginx中配置`access_by_lua_file`、`header_filter_by_lua_file`、`body_filter_by_lua_file`来调用具体函数
10 |
11 | ```bash
12 | .
13 | ├── 403.lua # 403页面
14 | ├── aes.lua # aes加解密
15 | ├── b64.lua # base64转码
16 | ├── config.lua # 配置文件
17 | ├── fileio.lua # 文件io相关
18 | ├── init.lua # 处理请求的具体逻辑
19 | ├── log.lua # 日志相关
20 | ├── log # 保存日志的路径
21 | │ ├── error.log
22 | │ └── localhost_2022-02-11_sec.log
23 | ├── nginx
24 | │ ├── nginx.conf # 示例配置
25 | │ └── zE48AHvK # 下发cookie相关文件
26 | │ ├── crypto-js.min.js
27 | │ ├── index.html
28 | │ ├── info.html
29 | │ ├── info.js
30 | │ ├── jump.js
31 | │ └── webdriver.js
32 | ├── node # babel混淆规则
33 | │ └── js_confuse.js
34 | ├── randomStr.lua # 产生随机字符串
35 | ├── req.lua # 处理发来的请求,由access_by_lua_file调用
36 | ├── resty -> /usr/local/openresty/lualib/resty # 软链接过来的库文件
37 | ├── rsp_body.lua # 处理返回包体内容,由body_filter_by_lua_file调用
38 | ├── rsp_header.lua # 处理返回包头内容,header_filter_by_lua_file调用
39 | ├── tableXstring.lua # table与string转换
40 | └── whiteList.lua # 白名单相关
41 | ```
42 |
43 | ### 0x03 使用说明
44 |
45 | 首先在http块中引入lua文件:
46 |
47 | - lua_package_path
48 | - lua_shared_dict
49 | - init_by_lua_file
50 |
51 | 然后在server块中引用具体lua文件:
52 |
53 | - access_by_lua_file
54 | - header_filter_by_lua_block
55 | - body_filter_by_lua_file
56 |
57 | 示例:
58 |
59 | ```lua
60 | http {
61 | lua_package_path "/gate/?.lua";
62 | lua_shared_dict limit 10m;
63 | init_by_lua_file /gate/init.lua;
64 |
65 | server {
66 | location /test {
67 | access_by_lua_file /gate/req.lua;
68 | proxy_pass http://127.0.0.1:8000/req;
69 | proxy_connect_timeout 2s;
70 | header_filter_by_lua_file /gate/rsp_header.lua;
71 | body_filter_by_lua_file /gate/rsp_body.lua;
72 | }
73 | }
74 | }
75 | ```
76 |
77 |
--------------------------------------------------------------------------------
/req.lua:
--------------------------------------------------------------------------------
1 | toolsInfoSpider()
2 | reqCookieParse()
3 | jsExtDetect()
--------------------------------------------------------------------------------
/rsp_body.lua:
--------------------------------------------------------------------------------
1 | jsConfuse()
2 | dateReplace()
--------------------------------------------------------------------------------
/rsp_header.lua:
--------------------------------------------------------------------------------
1 | ngx.header.content_length = nil
2 | respCookieEncrypt()
3 |
--------------------------------------------------------------------------------
/tableXstring.lua:
--------------------------------------------------------------------------------
1 |
2 | function ToStringEx(value)
3 | if type(value)=='table' then
4 | return TableToStr(value)
5 | elseif type(value)=='string' then
6 | return "\'"..value.."\'"
7 | else
8 | return tostring(value)
9 | end
10 | end
11 |
12 |
13 | function TableToStr(t)
14 | if t == nil then return "" end
15 | local retstr= "{"
16 |
17 | local i = 1
18 | for key,value in pairs(t) do
19 | local signal = ","
20 | if i==1 then
21 | signal = ""
22 | end
23 |
24 | if key == i then
25 | retstr = retstr..signal..ToStringEx(value)
26 | else
27 | if type(key)=='number' or type(key) == 'string' then
28 | retstr = retstr..signal..'['..ToStringEx(key).."]="..ToStringEx(value)
29 | else
30 | if type(key)=='userdata' then
31 | retstr = retstr..signal.."*s"..TableToStr(getmetatable(key)).."*e".."="..ToStringEx(value)
32 | else
33 | retstr = retstr..signal..key.."="..ToStringEx(value)
34 | end
35 | end
36 | end
37 |
38 | i = i+1
39 | end
40 |
41 | retstr = retstr.."}"
42 | return retstr
43 | end
44 |
45 |
46 | function StrToTable(str)
47 | if str == nil or type(str) ~= "string" then
48 | return
49 | end
50 |
51 | return loadstring("return " .. str)()
52 | end
53 |
54 | function transTable(xxx)
55 | local yyy = {}
56 | for i=#xxx,1,-1 do
57 | if #yyy ~= 0 then
58 | yyy = xxx[i].."; "..yyy
59 | else
60 | yyy = xxx[i]
61 | end
62 | end
63 | return yyy
64 | end
65 |
66 |
67 | function split( str,reps )
68 | local resultStrList = {}
69 | string.gsub(str,'[^'..reps..']+',function ( w )
70 | table.insert(resultStrList,w)
71 | end)
72 | return resultStrList
73 | end
--------------------------------------------------------------------------------
/tu/ainrm@20220211170151.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ainrm/safeGate/5910cb2983987df1d6753bbb74c8015a867ac84c/tu/ainrm@20220211170151.webp
--------------------------------------------------------------------------------
/whiteList.lua:
--------------------------------------------------------------------------------
1 | function whiteExtCheck()
2 | local reqExt = string.match(ngx.var.uri, ".+%.(%w+)$") --js
3 | for _,e in ipairs(whiteExt) do -- js、css、png
4 | if reqExt == e then -- 在白名单里
5 | return true
6 | end
7 | end
8 | return false
9 | end
--------------------------------------------------------------------------------