Guest User

Untitled

a guest
Sep 27th, 2016
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function rl(i, t) {
  2.     return i << t | i >>> 32 - t
  3. }
  4.  
  5. function cvt(i) {
  6.     var t = "";
  7.     var r;
  8.     var e;
  9.     for (r = 7; r >= 0; r--) {
  10.         e = i >>> r * 4 & 15;
  11.         t = t + e.toString(16)
  12.     }
  13.     return t
  14. }
  15.  
  16. function SHA1(i) {
  17.     var t;
  18.     var r, e;
  19.     var a = new Array(80);
  20.     var n = 1732584193;
  21.     var s = 4023233417;
  22.     var g = 2562383102;
  23.     var d = 271733878;
  24.     var o = 3285377520;
  25.     var u, h, l, v, b;
  26.     var f;
  27.     var c = i.length;
  28.     var m = new Array;
  29.     for (r = 0; r < c - 3; r += 4) m.push(i.charCodeAt(r) << 24 | i.charCodeAt(r + 1) << 16 | i.charCodeAt(r + 2) << 8 | i.charCodeAt(r + 3));
  30.     switch (c % 4) {
  31.         case 0:
  32.             r = 2147483648;
  33.             break;
  34.         case 1:
  35.             r = i.charCodeAt(c - 1) << 24 | 8388608;
  36.             break;
  37.         case 2:
  38.             r = i.charCodeAt(c - 2) << 24 | i.charCodeAt(c - 1) << 16 | 32768;
  39.             break;
  40.         case 3:
  41.             r = i.charCodeAt(c - 3) << 24 | i.charCodeAt(c - 2) << 16 | i.charCodeAt(c - 1) << 8 | 128;
  42.             break
  43.     }
  44.     m.push(r);
  45.     while (m.length % 16 != 14) m.push(0);
  46.     m.push(c >>> 29);
  47.     m.push(c << 3 & 4294967295);
  48.     for (t = 0; t < m.length; t += 16) {
  49.         for (r = 0; r < 16; r++) a[r] = m[t + r];
  50.         for (r = 16; r <= 79; r++) a[r] = rl(a[r - 3] ^ a[r - 8] ^ a[r - 14] ^ a[r - 16], 1);
  51.         u = n;
  52.         h = s;
  53.         l = g;
  54.         v = d;
  55.         b = o;
  56.         for (r = 0; r <= 19; r++) {
  57.             f = rl(u, 5) + (h & l | ~h & v) + b + a[r] + 1518500249 & 4294967295;
  58.             b = v;
  59.             v = l;
  60.             l = rl(h, 30);
  61.             h = u;
  62.             u = f
  63.         }
  64.         for (r = 20; r <= 39; r++) {
  65.             f = rl(u, 5) + (h ^ l ^ v) + b + a[r] + 1859775393 & 4294967295;
  66.             b = v;
  67.             v = l;
  68.             l = rl(h, 30);
  69.             h = u;
  70.             u = f
  71.         }
  72.         for (r = 40; r <= 59; r++) {
  73.             f = rl(u, 5) + (h & l | h & v | l & v) + b + a[r] + 2400959708 & 4294967295;
  74.             b = v;
  75.             v = l;
  76.             l = rl(h, 30);
  77.             h = u;
  78.             u = f
  79.         }
  80.         for (r = 60; r <= 79; r++) {
  81.             f = rl(u, 5) + (h ^ l ^ v) + b + a[r] + 3395469782 & 4294967295;
  82.             b = v;
  83.             v = l;
  84.             l = rl(h, 30);
  85.             h = u;
  86.             u = f
  87.         }
  88.         n = n + u & 4294967295;
  89.         s = s + h & 4294967295;
  90.         g = g + l & 4294967295;
  91.         d = d + v & 4294967295;
  92.         o = o + b & 4294967295
  93.     }
  94.     return cvt(n) + cvt(s) + cvt(g) + cvt(d) + cvt(o)
  95. }
  96. var ua = navigator.userAgent.toLowerCase();
  97. if (ua.indexOf(" chrome/") >= 0 || ua.indexOf(" firefox/") >= 0 || ua.indexOf(" gecko/") >= 0) {
  98.     var StringMaker = function() {
  99.         this.str = "";
  100.         this.length = 0;
  101.         this.append = function(i) {
  102.             this.str += i;
  103.             this.length += i.length
  104.         };
  105.         this.prepend = function(i) {
  106.             this.str = i + this.str;
  107.             this.length += i.length
  108.         };
  109.         this.toString = function() {
  110.             return this.str
  111.         }
  112.     }
  113. } else {
  114.     var StringMaker = function() {
  115.         this.parts = [];
  116.         this.length = 0;
  117.         this.append = function(i) {
  118.             this.parts.push(i);
  119.             this.length += i.length
  120.         };
  121.         this.prepend = function(i) {
  122.             this.parts.unshift(i);
  123.             this.length += i.length
  124.         };
  125.         this.toString = function() {
  126.             return this.parts.join("")
  127.         }
  128.     }
  129. }
  130. var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
  131.  
  132. function encode64(i) {
  133.     var t = new StringMaker;
  134.     var r, e, a;
  135.     var n, s, g, d;
  136.     var o = 0;
  137.     while (o < i.length) {
  138.         r = i.charCodeAt(o++);
  139.         e = i.charCodeAt(o++);
  140.         a = i.charCodeAt(o++);
  141.         n = r >> 2;
  142.         s = (r & 3) << 4 | e >> 4;
  143.         g = (e & 15) << 2 | a >> 6;
  144.         d = a & 63;
  145.         if (isNaN(e)) {
  146.             g = d = 64
  147.         } else if (isNaN(a)) {
  148.             d = 64
  149.         }
  150.         t.append(keyStr.charAt(n) + keyStr.charAt(s) + keyStr.charAt(g) + keyStr.charAt(d))
  151.     }
  152.     return t.toString()
  153. }
  154.  
  155. function decode64(i) {
  156.     var t = new StringMaker;
  157.     var r, e, a;
  158.     var n, s, g, d;
  159.     var o = 0;
  160.     i = i.replace(/[^A-Za-z0-9\+\/\=]/g, "");
  161.     while (o < i.length) {
  162.         n = keyStr.indexOf(i.charAt(o++));
  163.         s = keyStr.indexOf(i.charAt(o++));
  164.         g = keyStr.indexOf(i.charAt(o++));
  165.         d = keyStr.indexOf(i.charAt(o++));
  166.         r = n << 2 | s >> 4;
  167.         e = (s & 15) << 4 | g >> 2;
  168.         a = (g & 3) << 6 | d;
  169.         t.append(String.fromCharCode(r));
  170.         if (g != 64) {
  171.             t.append(String.fromCharCode(e))
  172.         }
  173.         if (d != 64) {
  174.             t.append(String.fromCharCode(a))
  175.         }
  176.     }
  177.     return t.toString()
  178. }
  179.  
  180. function decode64_2hex(i) {
  181.     var t = new StringMaker;
  182.     var r, e, a;
  183.     var n, s, g, d;
  184.     var o = 0;
  185.     i = i.replace(/[^A-Za-z0-9\+\/\=]/g, "");
  186.     while (o < i.length) {
  187.         n = keyStr.indexOf(i.charAt(o++));
  188.         s = keyStr.indexOf(i.charAt(o++));
  189.         g = keyStr.indexOf(i.charAt(o++));
  190.         d = keyStr.indexOf(i.charAt(o++));
  191.         r = n << 2 | s >> 4;
  192.         e = (s & 15) << 4 | g >> 2;
  193.         a = (g & 3) << 6 | d;
  194.         t.append(String.fromCharCode(r));
  195.         if (g != 64) {
  196.             t.append(String.fromCharCode(e))
  197.         }
  198.         if (d != 64) {
  199.             t.append(String.fromCharCode(a))
  200.         }
  201.     }
  202.     return t.toString()
  203. }
  204. var biRadixBase = 2;
  205. var biRadixBits = 16;
  206. var bitsPerDigit = biRadixBits;
  207. var biRadix = 1 << 16;
  208. var biHalfRadix = biRadix >>> 1;
  209. var biRadixSquared = biRadix * biRadix;
  210. var maxDigitVal = biRadix - 1;
  211. var maxInteger = 9999999999999998;
  212. var maxDigits;
  213. var ZERO_ARRAY;
  214. var bigZero, bigOne;
  215.  
  216. function setMaxDigits(i) {
  217.     maxDigits = i;
  218.     ZERO_ARRAY = new Array(maxDigits);
  219.     for (var t = 0; t < ZERO_ARRAY.length; t++) ZERO_ARRAY[t] = 0;
  220.     bigZero = new BigInt;
  221.     bigOne = new BigInt;
  222.     bigOne.digits[0] = 1
  223. }
  224. setMaxDigits(20);
  225. var dpl10 = 15;
  226. var lr10 = biFromNumber(1e15);
  227.  
  228. function BigInt(i) {
  229.     if (typeof i == "boolean" && i == true) {
  230.         this.digits = null
  231.     } else {
  232.         this.digits = ZERO_ARRAY.slice(0)
  233.     }
  234.     this.isNeg = false
  235. }
  236.  
  237. function biFromDecimal(i) {
  238.     var t = i.charAt(0) == "-";
  239.     var r = t ? 1 : 0;
  240.     var e;
  241.     while (r < i.length && i.charAt(r) == "0") ++r;
  242.     if (r == i.length) {
  243.         e = new BigInt
  244.     } else {
  245.         var a = i.length - r;
  246.         var n = a % dpl10;
  247.         if (n == 0) n = dpl10;
  248.         e = biFromNumber(Number(i.substr(r, n)));
  249.         r += n;
  250.         while (r < i.length) {
  251.             e = biAdd(biMultiply(e, lr10), biFromNumber(Number(i.substr(r, dpl10))));
  252.             r += dpl10
  253.         }
  254.         e.isNeg = t
  255.     }
  256.     return e
  257. }
  258.  
  259. function biCopy(i) {
  260.     var t = new BigInt(true);
  261.     t.digits = i.digits.slice(0);
  262.     t.isNeg = i.isNeg;
  263.     return t
  264. }
  265.  
  266. function biFromNumber(i) {
  267.     var t = new BigInt;
  268.     t.isNeg = i < 0;
  269.     i = Math.abs(i);
  270.     var r = 0;
  271.     while (i > 0) {
  272.         t.digits[r++] = i & maxDigitVal;
  273.         i >>= biRadixBits
  274.     }
  275.     return t
  276. }
  277.  
  278. function reverseStr(i) {
  279.     var t = "";
  280.     for (var r = i.length - 1; r > -1; --r) {
  281.         t += i.charAt(r)
  282.     }
  283.     return t
  284. }
  285. var hexatrigesimalToChar = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "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");
  286.  
  287. function biToString(i, t) {
  288.     var r = new BigInt;
  289.     r.digits[0] = t;
  290.     var e = biDivideModulo(i, r);
  291.     var a = hexatrigesimalToChar[e[1].digits[0]];
  292.     while (biCompare(e[0], bigZero) == 1) {
  293.         e = biDivideModulo(e[0], r);
  294.         digit = e[1].digits[0];
  295.         a += hexatrigesimalToChar[e[1].digits[0]]
  296.     }
  297.     return (i.isNeg ? "-" : "") + reverseStr(a)
  298. }
  299.  
  300. function biToDecimal(i) {
  301.     var t = new BigInt;
  302.     t.digits[0] = 10;
  303.     var r = biDivideModulo(i, t);
  304.     var e = String(r[1].digits[0]);
  305.     while (biCompare(r[0], bigZero) == 1) {
  306.         r = biDivideModulo(r[0], t);
  307.         e += String(r[1].digits[0])
  308.     }
  309.     return (i.isNeg ? "-" : "") + reverseStr(e)
  310. }
  311. var hexToChar = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f");
  312.  
  313. function digitToHex(t) {
  314.     var r = 15;
  315.     var e = "";
  316.     for (i = 0; i < 4; ++i) {
  317.         e += hexToChar[t & r];
  318.         t >>>= 4
  319.     }
  320.     return reverseStr(e)
  321. }
  322.  
  323. function biToHex(i) {
  324.     var t = "";
  325.     var r = biHighIndex(i);
  326.     for (var e = biHighIndex(i); e > -1; --e) {
  327.         t += digitToHex(i.digits[e])
  328.     }
  329.     return t
  330. }
  331.  
  332. function charToHex(i) {
  333.     var t = 48;
  334.     var r = t + 9;
  335.     var e = 97;
  336.     var a = e + 25;
  337.     var n = 65;
  338.     var s = 65 + 25;
  339.     var g;
  340.     if (i >= t && i <= r) {
  341.         g = i - t
  342.     } else if (i >= n && i <= s) {
  343.         g = 10 + i - n
  344.     } else if (i >= e && i <= a) {
  345.         g = 10 + i - e
  346.     } else {
  347.         g = 0
  348.     }
  349.     return g
  350. }
  351.  
  352. function hexToDigit(i) {
  353.     var t = 0;
  354.     var r = Math.min(i.length, 4);
  355.     for (var e = 0; e < r; ++e) {
  356.         t <<= 4;
  357.         t |= charToHex(i.charCodeAt(e))
  358.     }
  359.     return t
  360. }
  361.  
  362. function biFromHex(i) {
  363.     var t = new BigInt;
  364.     var r = i.length;
  365.     for (var e = r, a = 0; e > 0; e -= 4, ++a) {
  366.         t.digits[a] = hexToDigit(i.substr(Math.max(e - 4, 0), Math.min(e, 4)))
  367.     }
  368.     return t
  369. }
  370.  
  371. function biFromString(i, t) {
  372.     var r = i.charAt(0) == "-";
  373.     var e = r ? 1 : 0;
  374.     var a = new BigInt;
  375.     var n = new BigInt;
  376.     n.digits[0] = 1;
  377.     for (var s = i.length - 1; s >= e; s--) {
  378.         var g = i.charCodeAt(s);
  379.         var d = charToHex(g);
  380.         var o = biMultiplyDigit(n, d);
  381.         a = biAdd(a, o);
  382.         n = biMultiplyDigit(n, t)
  383.     }
  384.     a.isNeg = r;
  385.     return a
  386. }
  387.  
  388. function biDump(i) {
  389.     return (i.isNeg ? "-" : "") + i.digits.join(" ")
  390. }
  391.  
  392. function biAdd(i, t) {
  393.     var r;
  394.     if (i.isNeg != t.isNeg) {
  395.         t.isNeg = !t.isNeg;
  396.         r = biSubtract(i, t);
  397.         t.isNeg = !t.isNeg
  398.     } else {
  399.         r = new BigInt;
  400.         var e = 0;
  401.         var a;
  402.         for (var n = 0; n < i.digits.length; ++n) {
  403.             a = i.digits[n] + t.digits[n] + e;
  404.             r.digits[n] = a & 65535;
  405.             e = Number(a >= biRadix)
  406.         }
  407.         r.isNeg = i.isNeg
  408.     }
  409.     return r
  410. }
  411.  
  412. function biSubtract(i, t) {
  413.     var r;
  414.     if (i.isNeg != t.isNeg) {
  415.         t.isNeg = !t.isNeg;
  416.         r = biAdd(i, t);
  417.         t.isNeg = !t.isNeg
  418.     } else {
  419.         r = new BigInt;
  420.         var e, a;
  421.         a = 0;
  422.         for (var n = 0; n < i.digits.length; ++n) {
  423.             e = i.digits[n] - t.digits[n] + a;
  424.             r.digits[n] = e & 65535;
  425.             if (r.digits[n] < 0) r.digits[n] += biRadix;
  426.             a = 0 - Number(e < 0)
  427.         }
  428.         if (a == -1) {
  429.             a = 0;
  430.             for (var n = 0; n < i.digits.length; ++n) {
  431.                 e = 0 - r.digits[n] + a;
  432.                 r.digits[n] = e & 65535;
  433.                 if (r.digits[n] < 0) r.digits[n] += biRadix;
  434.                 a = 0 - Number(e < 0)
  435.             }
  436.             r.isNeg = !i.isNeg
  437.         } else {
  438.             r.isNeg = i.isNeg
  439.         }
  440.     }
  441.     return r
  442. }
  443.  
  444. function biHighIndex(i) {
  445.     var t = i.digits.length - 1;
  446.     while (t > 0 && i.digits[t] == 0) --t;
  447.     return t
  448. }
  449.  
  450. function biNumBits(i) {
  451.     var t = biHighIndex(i);
  452.     var r = i.digits[t];
  453.     var e = (t + 1) * bitsPerDigit;
  454.     var a;
  455.     for (a = e; a > e - bitsPerDigit; --a) {
  456.         if ((r & 32768) != 0) break;
  457.         r <<= 1
  458.     }
  459.     return a
  460. }
  461.  
  462. function biMultiply(i, t) {
  463.     var r = new BigInt;
  464.     var e;
  465.     var a = biHighIndex(i);
  466.     var n = biHighIndex(t);
  467.     var s, g, d;
  468.     for (var o = 0; o <= n; ++o) {
  469.         e = 0;
  470.         d = o;
  471.         for (j = 0; j <= a; ++j, ++d) {
  472.             g = r.digits[d] + i.digits[j] * t.digits[o] + e;
  473.             r.digits[d] = g & maxDigitVal;
  474.             e = g >>> biRadixBits
  475.         }
  476.         r.digits[o + a + 1] = e
  477.     }
  478.     r.isNeg = i.isNeg != t.isNeg;
  479.     return r
  480. }
  481.  
  482. function biMultiplyDigit(i, t) {
  483.     var r, e, a;
  484.     result = new BigInt;
  485.     r = biHighIndex(i);
  486.     e = 0;
  487.     for (var n = 0; n <= r; ++n) {
  488.         a = result.digits[n] + i.digits[n] * t + e;
  489.         result.digits[n] = a & maxDigitVal;
  490.         e = a >>> biRadixBits
  491.     }
  492.     result.digits[1 + r] = e;
  493.     return result
  494. }
  495.  
  496. function arrayCopy(i, t, r, e, a) {
  497.     var n = Math.min(t + a, i.length);
  498.     for (var s = t, g = e; s < n; ++s, ++g) {
  499.         r[g] = i[s]
  500.     }
  501. }
  502. var highBitMasks = new Array(0, 32768, 49152, 57344, 61440, 63488, 64512, 65024, 65280, 65408, 65472, 65504, 65520, 65528, 65532, 65534, 65535);
  503.  
  504. function biShiftLeft(i, t) {
  505.     var r = Math.floor(t / bitsPerDigit);
  506.     var e = new BigInt;
  507.     arrayCopy(i.digits, 0, e.digits, r, e.digits.length - r);
  508.     var a = t % bitsPerDigit;
  509.     var n = bitsPerDigit - a;
  510.     for (var s = e.digits.length - 1, g = s - 1; s > 0; --s, --g) {
  511.         e.digits[s] = e.digits[s] << a & maxDigitVal | (e.digits[g] & highBitMasks[a]) >>> n
  512.     }
  513.     e.digits[0] = e.digits[s] << a & maxDigitVal;
  514.     e.isNeg = i.isNeg;
  515.     return e
  516. }
  517. var lowBitMasks = new Array(0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535);
  518.  
  519. function biShiftRight(i, t) {
  520.     var r = Math.floor(t / bitsPerDigit);
  521.     var e = new BigInt;
  522.     arrayCopy(i.digits, r, e.digits, 0, i.digits.length - r);
  523.     var a = t % bitsPerDigit;
  524.     var n = bitsPerDigit - a;
  525.     for (var s = 0, g = s + 1; s < e.digits.length - 1; ++s, ++g) {
  526.         e.digits[s] = e.digits[s] >>> a | (e.digits[g] & lowBitMasks[a]) << n
  527.     }
  528.     e.digits[e.digits.length - 1] >>>= a;
  529.     e.isNeg = i.isNeg;
  530.     return e
  531. }
  532.  
  533. function biMultiplyByRadixPower(i, t) {
  534.     var r = new BigInt;
  535.     arrayCopy(i.digits, 0, r.digits, t, r.digits.length - t);
  536.     return r
  537. }
  538.  
  539. function biDivideByRadixPower(i, t) {
  540.     var r = new BigInt;
  541.     arrayCopy(i.digits, t, r.digits, 0, r.digits.length - t);
  542.     return r
  543. }
  544.  
  545. function biModuloByRadixPower(i, t) {
  546.     var r = new BigInt;
  547.     arrayCopy(i.digits, 0, r.digits, 0, t);
  548.     return r
  549. }
  550.  
  551. function biCompare(i, t) {
  552.     if (i.isNeg != t.isNeg) {
  553.         return 1 - 2 * Number(i.isNeg)
  554.     }
  555.     for (var r = i.digits.length - 1; r >= 0; --r) {
  556.         if (i.digits[r] != t.digits[r]) {
  557.             if (i.isNeg) {
  558.                 return 1 - 2 * Number(i.digits[r] > t.digits[r])
  559.             } else {
  560.                 return 1 - 2 * Number(i.digits[r] < t.digits[r])
  561.             }
  562.         }
  563.     }
  564.     return 0
  565. }
  566.  
  567. function biDivideModulo(i, t) {
  568.     var r = biNumBits(i);
  569.     var e = biNumBits(t);
  570.     var a = t.isNeg;
  571.     var n, s;
  572.     if (r < e) {
  573.         if (i.isNeg) {
  574.             n = biCopy(bigOne);
  575.             n.isNeg = !t.isNeg;
  576.             i.isNeg = false;
  577.             t.isNeg = false;
  578.             s = biSubtract(t, i);
  579.             i.isNeg = true;
  580.             t.isNeg = a
  581.         } else {
  582.             n = new BigInt;
  583.             s = biCopy(i)
  584.         }
  585.         return new Array(n, s)
  586.     }
  587.     n = new BigInt;
  588.     s = i;
  589.     var g = Math.ceil(e / bitsPerDigit) - 1;
  590.     var d = 0;
  591.     while (t.digits[g] < biHalfRadix) {
  592.         t = biShiftLeft(t, 1);
  593.         ++d;
  594.         ++e;
  595.         g = Math.ceil(e / bitsPerDigit) - 1
  596.     }
  597.     s = biShiftLeft(s, d);
  598.     r += d;
  599.     var o = Math.ceil(r / bitsPerDigit) - 1;
  600.     var u = biMultiplyByRadixPower(t, o - g);
  601.     while (biCompare(s, u) != -1) {
  602.         ++n.digits[o - g];
  603.         s = biSubtract(s, u)
  604.     }
  605.     for (var h = o; h > g; --h) {
  606.         var l = h >= s.digits.length ? 0 : s.digits[h];
  607.         var v = h - 1 >= s.digits.length ? 0 : s.digits[h - 1];
  608.         var b = h - 2 >= s.digits.length ? 0 : s.digits[h - 2];
  609.         var f = g >= t.digits.length ? 0 : t.digits[g];
  610.         var c = g - 1 >= t.digits.length ? 0 : t.digits[g - 1];
  611.         if (l == f) {
  612.             n.digits[h - g - 1] = maxDigitVal
  613.         } else {
  614.             n.digits[h - g - 1] = Math.floor((l * biRadix + v) / f)
  615.         }
  616.         var m = n.digits[h - g - 1] * (f * biRadix + c);
  617.         var p = l * biRadixSquared + (v * biRadix + b);
  618.         while (m > p) {
  619.             --n.digits[h - g - 1];
  620.             m = n.digits[h - g - 1] * (f * biRadix | c);
  621.             p = l * biRadix * biRadix + (v * biRadix + b)
  622.         }
  623.         u = biMultiplyByRadixPower(t, h - g - 1);
  624.         s = biSubtract(s, biMultiplyDigit(u, n.digits[h - g - 1]));
  625.         if (s.isNeg) {
  626.             s = biAdd(s, u);
  627.             --n.digits[h - g - 1]
  628.         }
  629.     }
  630.     s = biShiftRight(s, d);
  631.     n.isNeg = i.isNeg != a;
  632.     if (i.isNeg) {
  633.         if (a) {
  634.             n = biAdd(n, bigOne)
  635.         } else {
  636.             n = biSubtract(n, bigOne)
  637.         }
  638.         t = biShiftRight(t, d);
  639.         s = biSubtract(t, s)
  640.     }
  641.     if (s.digits[0] == 0 && biHighIndex(s) == 0) s.isNeg = false;
  642.     return new Array(n, s)
  643. }
  644.  
  645. function biDivide(i, t) {
  646.     return biDivideModulo(i, t)[0]
  647. }
  648.  
  649. function biModulo(i, t) {
  650.     return biDivideModulo(i, t)[1]
  651. }
  652.  
  653. function biMultiplyMod(i, t, r) {
  654.     return biModulo(biMultiply(i, t), r)
  655. }
  656.  
  657. function biPow(i, t) {
  658.     var r = bigOne;
  659.     var e = i;
  660.     while (true) {
  661.         if ((t & 1) != 0) r = biMultiply(r, e);
  662.         t >>= 1;
  663.         if (t == 0) break;
  664.         e = biMultiply(e, e)
  665.     }
  666.     return r
  667. }
  668.  
  669. function biPowMod(i, t, r) {
  670.     var e = bigOne;
  671.     var a = i;
  672.     var n = t;
  673.     while (true) {
  674.         if ((n.digits[0] & 1) != 0) e = biMultiplyMod(e, a, r);
  675.         n = biShiftRight(n, 1);
  676.         if (n.digits[0] == 0 && biHighIndex(n) == 0) break;
  677.         a = biMultiplyMod(a, a, r)
  678.     }
  679.     return e
  680. }
  681.  
  682. function biFromRaw(i) {
  683.     var t = new BigInt;
  684.     var r = i.length;
  685.     for (var e = 0, a = 0; e < r; e += 2, ++a) {
  686.         t.digits[a] = i.charCodeAt(e) + (e < r - 1 ? i.charCodeAt(e + 1) * 256 : 0)
  687.     }
  688.     return t
  689. }
  690.  
  691. function biToRaw(t) {
  692.     var r = "";
  693.     var e = biHighIndex(t);
  694.     for (i = e; i > -1; --i) {
  695.         r += String.fromCharCode(t.digits[i] / 256, t.digits[i] % 256)
  696.     }
  697.     return reverseStr(r)
  698. }
  699.  
  700. function BarrettMu(i) {
  701.     this.modulus = biCopy(i);
  702.     this.k = biHighIndex(this.modulus) + 1;
  703.     var t = new BigInt;
  704.     t.digits[2 * this.k] = 1;
  705.     this.mu = biDivide(t, this.modulus);
  706.     this.bkplus1 = new BigInt;
  707.     this.bkplus1.digits[this.k + 1] = 1;
  708.     this.modulo = BarrettMu_modulo;
  709.     this.multiplyMod = BarrettMu_multiplyMod;
  710.     this.powMod = BarrettMu_powMod
  711. }
  712.  
  713. function BarrettMu_modulo(i) {
  714.     var t = biDivideByRadixPower(i, this.k - 1);
  715.     var r = biMultiply(t, this.mu);
  716.     var e = biDivideByRadixPower(r, this.k + 1);
  717.     var a = biModuloByRadixPower(i, this.k + 1);
  718.     var n = biMultiply(e, this.modulus);
  719.     var s = biModuloByRadixPower(n, this.k + 1);
  720.     var g = biSubtract(a, s);
  721.     if (g.isNeg) {
  722.         g = biAdd(g, this.bkplus1)
  723.     }
  724.     var d = biCompare(g, this.modulus) >= 0;
  725.     while (d) {
  726.         g = biSubtract(g, this.modulus);
  727.         d = biCompare(g, this.modulus) >= 0
  728.     }
  729.     return g
  730. }
  731.  
  732. function BarrettMu_multiplyMod(i, t) {
  733.     var r = biMultiply(i, t);
  734.     return this.modulo(r)
  735. }
  736.  
  737. function BarrettMu_powMod(i, t) {
  738.     var r = new BigInt;
  739.     r.digits[0] = 1;
  740.     var e = i;
  741.     var a = t;
  742.     while (true) {
  743.         if ((a.digits[0] & 1) != 0) r = this.multiplyMod(r, e);
  744.         a = biShiftRight(a, 1);
  745.         if (a.digits[0] == 0 && biHighIndex(a) == 0) break;
  746.         e = this.multiplyMod(e, e)
  747.     }
  748.     return r
  749. }
  750.  
  751. function rsasec_key(i, t, r) {
  752.     setMaxDigits(160);
  753.     this.e = biFromRaw(decode64(i));
  754.     this.m = biFromRaw(decode64(t));
  755.     this.chunkSize = parseInt(r);
  756.     this.radix = 16;
  757.     this.barrett = new BarrettMu(this.m)
  758. }
  759.  
  760. function rsasec_crypt(i, t) {
  761.     var r = new Array;
  762.     var e = i.length;
  763.     var a = 0;
  764.     while (a < e) {
  765.         r[a] = i.charCodeAt(a);
  766.         a++
  767.     }
  768.     while (r.length % t.chunkSize != 0) {
  769.         r[a++] = 0
  770.     }
  771.     var n = r.length;
  772.     var s = "";
  773.     var g, d, o;
  774.     for (a = 0; a < n; a += t.chunkSize) {
  775.         o = new BigInt;
  776.         g = 0;
  777.         for (d = a; d < a + t.chunkSize; ++g) {
  778.             o.digits[g] = r[d++];
  779.             o.digits[g] += r[d++] << 8
  780.         }
  781.         var u = t.barrett.powMod(o, t.e);
  782.         var h = encode64(biToRaw(u));
  783.         s += h + " "
  784.     }
  785.     return s.substring(0, s.length - 1)
  786. }
  787.  
  788. function rsasec_form_bind(i) {
  789.     BX.ready(function() {
  790.         var t = document.forms[i.formid];
  791.         if (!t) t = document.getElementById(i.formid);
  792.         if (t) {
  793.             BX.bind(t, "submit", function() {
  794.                 rsasec_form(i);
  795.                 return true
  796.             })
  797.         }
  798.     })
  799. }
  800.  
  801. function rsasec_form(i) {
  802.     var t = document.forms[i.formid];
  803.     if (!t) t = document.getElementById(i.formid);
  804.     if (t) {
  805.         var r = new rsasec_key(i.key.E, i.key.M, i.key.chunk);
  806.         var e = "__RSA_RAND=" + i.rsa_rand;
  807.         for (var a = 0; a < i.params.length; a++) {
  808.             var n = t.elements[i.params[a]];
  809.             if (n) {
  810.                 e += "&" + i.params[a] + "=" + encodeURIComponent(n.value);
  811.                 n.disabled = true
  812.             }
  813.         }
  814.         e = e + "&__SHA=" + SHA1(e);
  815.         if (!t.__RSA_DATA) {
  816.             var s = document.createElement("INPUT");
  817.             s.type = "hidden";
  818.             s.name = "__RSA_DATA";
  819.             s.value = rsasec_crypt(e, r);
  820.             t.appendChild(s)
  821.         } else {
  822.             t.__RSA_DATA.value = rsasec_crypt(e, r)
  823.         }
  824.     }
  825. }
  826.  
  827. {'formid':'system_auth_form6zOYVN','key':{'M':'5Y6Yfsfa/mM9MwGO659mICrK13zF1Ka2oXpHYaXLVsctWPrvZpf/YTaCMYk0VV3OhSq62VWnRW0fC8ue3dh715BWg1V6vzQa8NBguYwjxTsxWLQt1ku/bn0QZMCgCpRjOKy5HqkLAnVi1HzEHN8t7TmNRBV/Yl/G0jrUsSkT8eg=','E':'AQAB','chunk':'128'},'rsa_rand':'57ead5c811aaf9.36398788','params':['USER_PASSWORD']}
Advertisement
Add Comment
Please, Sign In to add comment