├── 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 | ![ainrm@20220211170151](./tu/ainrm@20220211170151.webp) 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 --------------------------------------------------------------------------------