skaram

Untitled

Aug 15th, 2024
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  A JavaScript implementation of the SHA family of hashes, as
  3.  defined in FIPS PUB 180-2 as well as the corresponding HMAC implementation
  4.  as defined in FIPS PUB 198a
  5.  
  6.  Copyright Brian Turek 2008-2013
  7.  Distributed under the BSD License
  8.  See http://caligatio.github.com/jsSHA/ for more information
  9.  
  10.  Several functions taken from Paul Johnston
  11. */
  12. 'use strict';
  13. (function(B) {
  14.     function r(a, c, b) {
  15.         var f = 0
  16.           , e = [0]
  17.           , g = ""
  18.           , h = null
  19.           , g = b || "UTF8";
  20.         if ("UTF8" !== g && "UTF16" !== g)
  21.             throw "encoding must be UTF8 or UTF16";
  22.         if ("HEX" === c) {
  23.             if (0 !== a.length % 2)
  24.                 throw "srcString of HEX type must be in byte increments";
  25.             h = u(a);
  26.             f = h.binLen;
  27.             e = h.value
  28.         } else if ("ASCII" === c || "TEXT" === c)
  29.             h = v(a, g),
  30.             f = h.binLen,
  31.             e = h.value;
  32.         else if ("B64" === c)
  33.             h = w(a),
  34.             f = h.binLen,
  35.             e = h.value;
  36.         else
  37.             throw "inputFormat must be HEX, TEXT, ASCII, or B64";
  38.         this.getHash = function(a, c, b, g) {
  39.             var h = null, d = e.slice(), l = f, m;
  40.             3 === arguments.length ? "number" !== typeof b && (g = b,
  41.             b = 1) : 2 === arguments.length && (b = 1);
  42.             if (b !== parseInt(b, 10) || 1 > b)
  43.                 throw "numRounds must a integer >= 1";
  44.             switch (c) {
  45.             case "HEX":
  46.                 h = x;
  47.                 break;
  48.             case "B64":
  49.                 h = y;
  50.                 break;
  51.             default:
  52.                 throw "format must be HEX or B64";
  53.             }
  54.             if ("SHA-224" === a)
  55.                 for (m = 0; m < b; m++)
  56.                     d = q(d, l, a),
  57.                     l = 224;
  58.             else if ("SHA-256" === a)
  59.                 for (m = 0; m < b; m++)
  60.                     d = q(d, l, a),
  61.                     l = 256;
  62.             else
  63.                 throw "Chosen SHA variant is not supported";
  64.             return h(d, z(g))
  65.         }
  66.         ;
  67.         this.getHMAC = function(a, b, c, h, k) {
  68.             var d, l, m, n, A = [], s = [];
  69.             d = null;
  70.             switch (h) {
  71.             case "HEX":
  72.                 h = x;
  73.                 break;
  74.             case "B64":
  75.                 h = y;
  76.                 break;
  77.             default:
  78.                 throw "outputFormat must be HEX or B64";
  79.             }
  80.             if ("SHA-224" === c)
  81.                 l = 64,
  82.                 n = 224;
  83.             else if ("SHA-256" === c)
  84.                 l = 64,
  85.                 n = 256;
  86.             else
  87.                 throw "Chosen SHA variant is not supported";
  88.             if ("HEX" === b)
  89.                 d = u(a),
  90.                 m = d.binLen,
  91.                 d = d.value;
  92.             else if ("ASCII" === b || "TEXT" === b)
  93.                 d = v(a, g),
  94.                 m = d.binLen,
  95.                 d = d.value;
  96.             else if ("B64" === b)
  97.                 d = w(a),
  98.                 m = d.binLen,
  99.                 d = d.value;
  100.             else
  101.                 throw "inputFormat must be HEX, TEXT, ASCII, or B64";
  102.             a = 8 * l;
  103.             b = l / 4 - 1;
  104.             l < m / 8 ? (d = q(d, m, c),
  105.             d[b] &= 4294967040) : l > m / 8 && (d[b] &= 4294967040);
  106.             for (l = 0; l <= b; l += 1)
  107.                 A[l] = d[l] ^ 909522486,
  108.                 s[l] = d[l] ^ 1549556828;
  109.             c = q(s.concat(q(A.concat(e), a + f, c)), a + n, c);
  110.             return h(c, z(k))
  111.         }
  112.     }
  113.     function v(a, c) {
  114.         var b = [], f, e = [], g = 0, h;
  115.         if ("UTF8" === c)
  116.             for (h = 0; h < a.length; h += 1)
  117.                 for (f = a.charCodeAt(h),
  118.                 e = [],
  119.                 2048 < f ? (e[0] = 224 | (f & 61440) >>> 12,
  120.                 e[1] = 128 | (f & 4032) >>> 6,
  121.                 e[2] = 128 | f & 63) : 128 < f ? (e[0] = 192 | (f & 1984) >>> 6,
  122.                 e[1] = 128 | f & 63) : e[0] = f,
  123.                 f = 0; f < e.length; f += 1)
  124.                     b[g >>> 2] |= e[f] << 24 - g % 4 * 8,
  125.                     g += 1;
  126.         else if ("UTF16" === c)
  127.             for (h = 0; h < a.length; h += 1)
  128.                 b[g >>> 2] |= a.charCodeAt(h) << 16 - g % 4 * 8,
  129.                 g += 2;
  130.         return {
  131.             value: b,
  132.             binLen: 8 * g
  133.         }
  134.     }
  135.     function u(a) {
  136.         var c = [], b = a.length, f, e;
  137.         if (0 !== b % 2)
  138.             throw "String of HEX type must be in byte increments";
  139.         for (f = 0; f < b; f += 2) {
  140.             e = parseInt(a.substr(f, 2), 16);
  141.             if (isNaN(e))
  142.                 throw "String of HEX type contains invalid characters";
  143.             c[f >>> 3] |= e << 24 - f % 8 * 4
  144.         }
  145.         return {
  146.             value: c,
  147.             binLen: 4 * b
  148.         }
  149.     }
  150.     function w(a) {
  151.         var c = [], b = 0, f, e, g, h, k;
  152.         if (-1 === a.search(/^[a-zA-Z0-9=+\/]+$/))
  153.             throw "Invalid character in base-64 string";
  154.         f = a.indexOf("=");
  155.         a = a.replace(/\=/g, "");
  156.         if (-1 !== f && f < a.length)
  157.             throw "Invalid '=' found in base-64 string";
  158.         for (e = 0; e < a.length; e += 4) {
  159.             k = a.substr(e, 4);
  160.             for (g = h = 0; g < k.length; g += 1)
  161.                 f = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(k[g]),
  162.                 h |= f << 18 - 6 * g;
  163.             for (g = 0; g < k.length - 1; g += 1)
  164.                 c[b >> 2] |= (h >>> 16 - 8 * g & 255) << 24 - b % 4 * 8,
  165.                 b += 1
  166.         }
  167.         return {
  168.             value: c,
  169.             binLen: 8 * b
  170.         }
  171.     }
  172.     function x(a, c) {
  173.         var b = "", f = 4 * a.length, e, g;
  174.         for (e = 0; e < f; e += 1)
  175.             g = a[e >>> 2] >>> 8 * (3 - e % 4),
  176.             b += "0123456789abcdef".charAt(g >>> 4 & 15) + "0123456789abcdef".charAt(g & 15);
  177.         return c.outputUpper ? b.toUpperCase() : b
  178.     }
  179.     function y(a, c) {
  180.         var b = "", f = 4 * a.length, e, g, h;
  181.         for (e = 0; e < f; e += 3)
  182.             for (h = (a[e >>> 2] >>> 8 * (3 - e % 4) & 255) << 16 | (a[e + 1 >>> 2] >>> 8 * (3 - (e + 1) % 4) & 255) << 8 | a[e + 2 >>> 2] >>> 8 * (3 - (e + 2) % 4) & 255,
  183.             g = 0; 4 > g; g += 1)
  184.                 b = 8 * e + 6 * g <= 32 * a.length ? b + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(h >>> 6 * (3 - g) & 63) : b + c.b64Pad;
  185.         return b
  186.     }
  187.     function z(a) {
  188.         var c = {
  189.             outputUpper: !1,
  190.             b64Pad: "="
  191.         };
  192.         try {
  193.             a.hasOwnProperty("outputUpper") && (c.outputUpper = a.outputUpper),
  194.             a.hasOwnProperty("b64Pad") && (c.b64Pad = a.b64Pad)
  195.         } catch (b) {}
  196.         if ("boolean" !== typeof c.outputUpper)
  197.             throw "Invalid outputUpper formatting option";
  198.         if ("string" !== typeof c.b64Pad)
  199.             throw "Invalid b64Pad formatting option";
  200.         return c
  201.     }
  202.     function k(a, c) {
  203.         return a >>> c | a << 32 - c
  204.     }
  205.     function I(a, c, b) {
  206.         return a & c ^ ~a & b
  207.     }
  208.     function J(a, c, b) {
  209.         return a & c ^ a & b ^ c & b
  210.     }
  211.     function K(a) {
  212.         return k(a, 2) ^ k(a, 13) ^ k(a, 22)
  213.     }
  214.     function L(a) {
  215.         return k(a, 6) ^ k(a, 11) ^ k(a, 25)
  216.     }
  217.     function M(a) {
  218.         return k(a, 7) ^ k(a, 18) ^ a >>> 3
  219.     }
  220.     function N(a) {
  221.         return k(a, 17) ^ k(a, 19) ^ a >>> 10
  222.     }
  223.     function O(a, c) {
  224.         var b = (a & 65535) + (c & 65535);
  225.         return ((a >>> 16) + (c >>> 16) + (b >>> 16) & 65535) << 16 | b & 65535
  226.     }
  227.     function P(a, c, b, f) {
  228.         var e = (a & 65535) + (c & 65535) + (b & 65535) + (f & 65535);
  229.         return ((a >>> 16) + (c >>> 16) + (b >>> 16) + (f >>> 16) + (e >>> 16) & 65535) << 16 | e & 65535
  230.     }
  231.     function Q(a, c, b, f, e) {
  232.         var g = (a & 65535) + (c & 65535) + (b & 65535) + (f & 65535) + (e & 65535);
  233.         return ((a >>> 16) + (c >>> 16) + (b >>> 16) + (f >>> 16) + (e >>> 16) + (g >>> 16) & 65535) << 16 | g & 65535
  234.     }
  235.     function q(a, c, b) {
  236.         var f, e, g, h, k, q, r, C, u, d, l, m, n, A, s, p, v, w, x, y, z, D, E, F, G, t = [], H, B = [1116352408, 1899447441, 3049323471, 3921009573, 961987163, 1508970993, 2453635748, 2870763221, 3624381080, 310598401, 607225278, 1426881987, 1925078388, 2162078206, 2614888103, 3248222580, 3835390401, 4022224774, 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, 2554220882, 2821834349, 2952996808, 3210313671, 3336571891, 3584528711, 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291, 1695183700, 1986661051, 2177026350, 2456956037, 2730485921, 2820302411, 3259730800, 3345764771, 3516065817, 3600352804, 4094571909, 275423344, 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218, 1537002063, 1747873779, 1955562222, 2024104815, 2227730452, 2361852424, 2428436474, 2756734187, 3204031479, 3329325298];
  237.         d = [3238371032, 914150663, 812702999, 4144912697, 4290775857, 1750603025, 1694076839, 3204075428];
  238.         f = [1779033703, 3144134277, 1013904242, 2773480762, 1359893119, 2600822924, 528734635, 1541459225];
  239.         if ("SHA-224" === b || "SHA-256" === b)
  240.             l = 64,
  241.             A = 16,
  242.             s = 1,
  243.             G = Number,
  244.             p = O,
  245.             v = P,
  246.             w = Q,
  247.             x = M,
  248.             y = N,
  249.             z = K,
  250.             D = L,
  251.             F = J,
  252.             E = I,
  253.             d = "SHA-224" === b ? d : f;
  254.         else
  255.             throw "Unexpected error in SHA-2 implementation";
  256.         a[c >>> 5] |= 128 << 24 - c % 32;
  257.         a[(c + 65 >>> 9 << 4) + 15] = c;
  258.         H = a.length;
  259.         for (m = 0; m < H; m += A) {
  260.             c = d[0];
  261.             f = d[1];
  262.             e = d[2];
  263.             g = d[3];
  264.             h = d[4];
  265.             k = d[5];
  266.             q = d[6];
  267.             r = d[7];
  268.             for (n = 0; n < l; n += 1)
  269.                 t[n] = 16 > n ? new G(a[n * s + m],a[n * s + m + 1]) : v(y(t[n - 2]), t[n - 7], x(t[n - 15]), t[n - 16]),
  270.                 C = w(r, D(h), E(h, k, q), B[n], t[n]),
  271.                 u = p(z(c), F(c, f, e)),
  272.                 r = q,
  273.                 q = k,
  274.                 k = h,
  275.                 h = p(g, C),
  276.                 g = e,
  277.                 e = f,
  278.                 f = c,
  279.                 c = p(C, u);
  280.             d[0] = p(c, d[0]);
  281.             d[1] = p(f, d[1]);
  282.             d[2] = p(e, d[2]);
  283.             d[3] = p(g, d[3]);
  284.             d[4] = p(h, d[4]);
  285.             d[5] = p(k, d[5]);
  286.             d[6] = p(q, d[6]);
  287.             d[7] = p(r, d[7])
  288.         }
  289.         if ("SHA-224" === b)
  290.             a = [d[0], d[1], d[2], d[3], d[4], d[5], d[6]];
  291.         else if ("SHA-256" === b)
  292.             a = d;
  293.         else
  294.             throw "Unexpected error in SHA-2 implementation";
  295.         return a
  296.     }
  297.     "function" === typeof define && typeof define.amd ? define(function() {
  298.         return r
  299.     }) : "undefined" !== typeof exports ? "undefined" !== typeof module && module.exports ? module.exports = exports = r : exports = r : B.jsSHA = r
  300. }
  301. )(this);
  302.  
Add Comment
Please, Sign In to add comment