1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 | 'use strict';
|
13 | (function (I) {
|
14 | function w(c, a, d) {
|
15 | var l = 0, b = [], g = 0, f, n, k, e, h, q, y, p, m = !1, t = [], r = [], u,
|
16 | z = !1;
|
17 | d = d || {};
|
18 | f = d.encoding || "UTF8";
|
19 | u = d.numRounds || 1;
|
20 | if (u !== parseInt(u, 10) || 1 > u) {
|
21 | throw Error(
|
22 | "numRounds must a integer >= 1");
|
23 | }
|
24 | if (0 === c.lastIndexOf("SHA-", 0)) {
|
25 | if (q = function (b, a) {
|
26 | return A(b, a, c)
|
27 | }, y = function (b, a, l, f) {
|
28 | var g, e;
|
29 | if ("SHA-224" === c || "SHA-256" === c) {
|
30 | g = (a + 65 >>> 9 << 4)
|
31 | + 15, e = 16;
|
32 | } else {
|
33 | throw Error(
|
34 | "Unexpected error in SHA-2 implementation");
|
35 | }
|
36 | for (; b.length <= g;) {
|
37 | b.push(0);
|
38 | }
|
39 | b[a >>> 5] |= 128 << 24 - a % 32;
|
40 | a = a + l;
|
41 | b[g] = a & 4294967295;
|
42 | b[g - 1] = a / 4294967296 | 0;
|
43 | l = b.length;
|
44 | for (a = 0; a < l; a += e) {
|
45 | f = A(b.slice(a, a + e), f, c);
|
46 | }
|
47 | if ("SHA-224" === c) {
|
48 | b = [f[0], f[1], f[2], f[3], f[4], f[5],
|
49 | f[6]];
|
50 | } else if ("SHA-256" === c) {
|
51 | b = f;
|
52 | } else {
|
53 | throw Error(
|
54 | "Unexpected error in SHA-2 implementation");
|
55 | }
|
56 | return b
|
57 | }, p = function (b) {
|
58 | return b.slice()
|
59 | }, "SHA-224" === c) {
|
60 | h = 512, e = 224;
|
61 | } else if ("SHA-256"
|
62 | === c) {
|
63 | h = 512, e = 256;
|
64 | } else {
|
65 | throw Error(
|
66 | "Chosen SHA variant is not supported");
|
67 | }
|
68 | } else {
|
69 | throw Error(
|
70 | "Chosen SHA variant is not supported");
|
71 | }
|
72 | k = B(a, f);
|
73 | n = x(c);
|
74 | this.setHMACKey = function (b, a, g) {
|
75 | var e;
|
76 | if (!0 === m) {
|
77 | throw Error("HMAC key already set");
|
78 | }
|
79 | if (!0 === z) {
|
80 | throw Error("Cannot set HMAC key after calling update");
|
81 | }
|
82 | f = (g || {}).encoding || "UTF8";
|
83 | a = B(a, f)(b);
|
84 | b = a.binLen;
|
85 | a = a.value;
|
86 | e = h >>> 3;
|
87 | g = e / 4 - 1;
|
88 | if (e < b / 8) {
|
89 | for (a = y(a, b, 0, x(c)); a.length <= g;) {
|
90 | a.push(0);
|
91 | }
|
92 | a[g] &= 4294967040
|
93 | } else if (e > b / 8) {
|
94 | for (; a.length <= g;) {
|
95 | a.push(0);
|
96 | }
|
97 | a[g] &= 4294967040
|
98 | }
|
99 | for (b = 0; b <= g; b += 1) {
|
100 | t[b] = a[b] ^ 909522486, r[b] = a[b]
|
101 | ^ 1549556828;
|
102 | }
|
103 | n = q(t, n);
|
104 | l = h;
|
105 | m = !0
|
106 | };
|
107 | this.update = function (a) {
|
108 | var c, f, e, d = 0, p = h >>> 5;
|
109 | c = k(a, b, g);
|
110 | a = c.binLen;
|
111 | f = c.value;
|
112 | c = a >>> 5;
|
113 | for (e = 0; e < c; e += p) {
|
114 | d + h <= a && (n = q(f.slice(e, e + p),
|
115 | n), d += h);
|
116 | }
|
117 | l += d;
|
118 | b = f.slice(d >>>
|
119 | 5);
|
120 | g = a % h;
|
121 | z = !0
|
122 | };
|
123 | this.getHash = function (a, f) {
|
124 | var d, h, k, q;
|
125 | if (!0 === m) {
|
126 | throw Error("Cannot call getHash after setting HMAC key");
|
127 | }
|
128 | k = C(f);
|
129 | switch (a) {
|
130 | case "HEX":
|
131 | d = function (a) {
|
132 | return D(a, e, k)
|
133 | };
|
134 | break;
|
135 | case "B64":
|
136 | d = function (a) {
|
137 | return E(a, e, k)
|
138 | };
|
139 | break;
|
140 | case "BYTES":
|
141 | d = function (a) {
|
142 | return F(a, e)
|
143 | };
|
144 | break;
|
145 | case "ARRAYBUFFER":
|
146 | try {
|
147 | h = new ArrayBuffer(0)
|
148 | } catch (v) {
|
149 | throw Error("ARRAYBUFFER not supported by this environment");
|
150 | }
|
151 | d = function (a) {
|
152 | return G(a, e)
|
153 | };
|
154 | break;
|
155 | default:
|
156 | throw Error("format must be HEX, B64, BYTES, or ARRAYBUFFER");
|
157 | }
|
158 | q = y(b.slice(), g, l, p(n));
|
159 | for (h = 1; h < u; h += 1) {
|
160 | q = y(q, e, 0, x(c));
|
161 | }
|
162 | return d(q)
|
163 | };
|
164 | this.getHMAC = function (a, f) {
|
165 | var d, k, t, u;
|
166 | if (!1 === m) {
|
167 | throw Error(
|
168 | "Cannot call getHMAC without first setting HMAC key");
|
169 | }
|
170 | t = C(f);
|
171 | switch (a) {
|
172 | case "HEX":
|
173 | d = function (a) {
|
174 | return D(a, e, t)
|
175 | };
|
176 | break;
|
177 | case "B64":
|
178 | d = function (a) {
|
179 | return E(a, e, t)
|
180 | };
|
181 | break;
|
182 | case "BYTES":
|
183 | d = function (a) {
|
184 | return F(a, e)
|
185 | };
|
186 | break;
|
187 | case "ARRAYBUFFER":
|
188 | try {
|
189 | d = new ArrayBuffer(0)
|
190 | } catch (v) {
|
191 | throw Error("ARRAYBUFFER not supported by this environment");
|
192 | }
|
193 | d = function (a) {
|
194 | return G(a, e)
|
195 | };
|
196 | break;
|
197 | default:
|
198 | throw Error("outputFormat must be HEX, B64, BYTES, or ARRAYBUFFER");
|
199 | }
|
200 | k = y(b.slice(), g, l, p(n));
|
201 | u = q(r, x(c));
|
202 | u = y(k, e, h, u);
|
203 | return d(u)
|
204 | }
|
205 | }
|
206 |
|
207 | function m() {
|
208 | }
|
209 |
|
210 | function D(c, a, d) {
|
211 | var l = "";
|
212 | a /= 8;
|
213 | var b, g;
|
214 | for (b = 0; b < a; b += 1) {
|
215 | g = c[b >>> 2] >>> 8 * (3 + b % 4
|
216 | * -1), l += "0123456789abcdef".charAt(g >>> 4 & 15)
|
217 | + "0123456789abcdef".charAt(g & 15);
|
218 | }
|
219 | return d.outputUpper ? l.toUpperCase() : l
|
220 | }
|
221 |
|
222 | function E(c, a, d) {
|
223 | var l = "", b = a / 8, g, f, n;
|
224 | for (g = 0; g < b; g += 3) {
|
225 | for (f = g + 1 < b ? c[g + 1 >>> 2] : 0, n = g
|
226 | + 2 < b ? c[g + 2 >>> 2] : 0, n = (c[g >>> 2] >>> 8 * (3 + g % 4 * -1)
|
227 | & 255) << 16 | (f >>> 8 * (3 + (g + 1) % 4 * -1) & 255) << 8 | n >>> 8
|
228 | * (3 + (g + 2) % 4 * -1) & 255, f = 0; 4 > f; f += 1) {
|
229 | 8 * g + 6 * f <= a
|
230 | ? l += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(n
|
231 | >>>
|
232 | 6 * (3 - f) & 63) : l += d.b64Pad;
|
233 | }
|
234 | }
|
235 | return l
|
236 | }
|
237 |
|
238 | function F(c, a) {
|
239 | var d = "", l = a / 8, b, g;
|
240 | for (b = 0; b < l; b += 1) {
|
241 | g = c[b >>> 2] >>> 8 * (3 + b % 4 * -1)
|
242 | & 255, d += String.fromCharCode(g);
|
243 | }
|
244 | return d
|
245 | }
|
246 |
|
247 | function G(c, a) {
|
248 | var d = a / 8, l, b = new ArrayBuffer(d), g;
|
249 | g = new Uint8Array(b);
|
250 | for (l = 0; l < d; l += 1) {
|
251 | g[l] = c[l >>> 2] >>> 8 * (3 + l % 4 * -1) & 255;
|
252 | }
|
253 | return b
|
254 | }
|
255 |
|
256 | function C(c) {
|
257 | var a = {outputUpper: !1, b64Pad: "=", shakeLen: -1};
|
258 | c = c || {};
|
259 | a.outputUpper = c.outputUpper || !1;
|
260 | !0 === c.hasOwnProperty("b64Pad") && (a.b64Pad = c.b64Pad);
|
261 | if ("boolean" !== typeof a.outputUpper) {
|
262 | throw Error(
|
263 | "Invalid outputUpper formatting option");
|
264 | }
|
265 | if ("string" !== typeof a.b64Pad) {
|
266 | throw Error(
|
267 | "Invalid b64Pad formatting option");
|
268 | }
|
269 | return a
|
270 | }
|
271 |
|
272 | function B(c, a) {
|
273 | var d;
|
274 | switch (a) {
|
275 | case "UTF8":
|
276 | case "UTF16BE":
|
277 | case "UTF16LE":
|
278 | break;
|
279 | default:
|
280 | throw Error("encoding must be UTF8, UTF16BE, or UTF16LE");
|
281 | }
|
282 | switch (c) {
|
283 | case "HEX":
|
284 | d = function (a, b, c) {
|
285 | var f = a.length, d, k, e, h, q;
|
286 | if (0 !== f % 2) {
|
287 | throw Error(
|
288 | "String of HEX type must be in byte increments");
|
289 | }
|
290 | b = b || [0];
|
291 | c = c || 0;
|
292 | q = c >>> 3;
|
293 | for (d = 0; d < f; d += 2) {
|
294 | k = parseInt(a.substr(d, 2), 16);
|
295 | if (isNaN(k)) {
|
296 | throw Error(
|
297 | "String of HEX type contains invalid characters");
|
298 | }
|
299 | h = (d >>> 1) + q;
|
300 | for (e = h >>> 2; b.length <= e;) {
|
301 | b.push(0);
|
302 | }
|
303 | b[e] |= k << 8 * (3 + h % 4 * -1)
|
304 | }
|
305 | return {value: b, binLen: 4 * f + c}
|
306 | };
|
307 | break;
|
308 | case "TEXT":
|
309 | d = function (c, b, d) {
|
310 | var f, n, k = 0, e, h, q, m, p, r;
|
311 | b = b || [0];
|
312 | d = d || 0;
|
313 | q = d >>> 3;
|
314 | if ("UTF8" === a) {
|
315 | for (r = 3, e = 0; e < c.length;
|
316 | e += 1) {
|
317 | for (f = c.charCodeAt(e), n = [], 128 > f ? n.push(f)
|
318 | : 2048 > f ? (n.push(192 | f >>> 6), n.push(128 | f & 63))
|
319 | : 55296 > f || 57344 <= f ? n.push(224 | f >>> 12, 128 | f
|
320 | >>> 6 & 63, 128 | f & 63) : (e += 1, f = 65536 + ((f
|
321 | & 1023) << 10 | c.charCodeAt(e) & 1023), n.push(240
|
322 | | f
|
323 | >>> 18, 128 | f >>> 12 & 63, 128 | f >>> 6 & 63, 128
|
324 | | f
|
325 | & 63)), h = 0; h < n.length; h += 1) {
|
326 | p = k +
|
327 | q;
|
328 | for (m = p >>> 2; b.length <= m;) {
|
329 | b.push(0);
|
330 | }
|
331 | b[m] |= n[h] << 8 * (r + p % 4 * -1);
|
332 | k += 1
|
333 | }
|
334 | }
|
335 | } else if ("UTF16BE" === a || "UTF16LE"
|
336 | === a) {
|
337 | for (r = 2, n = "UTF16LE" === a && !0 || "UTF16LE" !== a
|
338 | && !1, e = 0; e < c.length; e += 1) {
|
339 | f = c.charCodeAt(e);
|
340 | !0 === n && (h = f & 255, f = h << 8 | f >>> 8);
|
341 | p = k + q;
|
342 | for (m = p >>> 2; b.length <= m;) {
|
343 | b.push(0);
|
344 | }
|
345 | b[m] |= f << 8 * (r + p % 4 * -1);
|
346 | k += 2
|
347 | }
|
348 | }
|
349 | return {value: b, binLen: 8 * k + d}
|
350 | };
|
351 | break;
|
352 | case "B64":
|
353 | d = function (a, b, c) {
|
354 | var f = 0, d, k, e, h, q, m, p;
|
355 | if (-1 === a.search(/^[a-zA-Z0-9=+\/]+$/)) {
|
356 | throw Error(
|
357 | "Invalid character in base-64 string");
|
358 | }
|
359 | k = a.indexOf("=");
|
360 | a = a.replace(/\=/g,
|
361 | "");
|
362 | if (-1 !== k && k < a.length) {
|
363 | throw Error(
|
364 | "Invalid '=' found in base-64 string");
|
365 | }
|
366 | b = b || [0];
|
367 | c = c || 0;
|
368 | m = c >>> 3;
|
369 | for (k = 0; k < a.length; k += 4) {
|
370 | q = a.substr(k, 4);
|
371 | for (e = h = 0; e < q.length;
|
372 | e += 1) {
|
373 | d = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(
|
374 | q[e]), h |= d << 18 - 6 * e;
|
375 | }
|
376 | for (e = 0; e < q.length - 1; e += 1) {
|
377 | p = f + m;
|
378 | for (d = p >>> 2; b.length <= d;) {
|
379 | b.push(0);
|
380 | }
|
381 | b[d] |= (h >>> 16 - 8 * e & 255) << 8 * (3 + p % 4 * -1);
|
382 | f += 1
|
383 | }
|
384 | }
|
385 | return {value: b, binLen: 8 * f + c}
|
386 | };
|
387 | break;
|
388 | case "BYTES":
|
389 | d = function (a, b, c) {
|
390 | var d, n, k, e, h;
|
391 | b = b || [0];
|
392 | c = c || 0;
|
393 | k = c >>> 3;
|
394 | for (n = 0; n < a.length; n +=
|
395 | 1) {
|
396 | d = a.charCodeAt(n), h = n + k, e = h >>> 2, b.length <= e
|
397 | && b.push(0), b[e] |= d << 8 * (3 + h % 4 * -1);
|
398 | }
|
399 | return {value: b, binLen: 8 * a.length + c}
|
400 | };
|
401 | break;
|
402 | case "ARRAYBUFFER":
|
403 | try {
|
404 | d = new ArrayBuffer(0)
|
405 | } catch (l) {
|
406 | throw Error("ARRAYBUFFER not supported by this environment");
|
407 | }
|
408 | d = function (a, b, c) {
|
409 | var d, n, k, e, h;
|
410 | b = b || [0];
|
411 | c = c || 0;
|
412 | n = c >>> 3;
|
413 | h = new Uint8Array(a);
|
414 | for (d = 0; d < a.byteLength; d += 1) {
|
415 | e = d + n, k = e >>> 2, b.length
|
416 | <= k && b.push(0), b[k] |= h[d] << 8 * (3 + e % 4 * -1);
|
417 | }
|
418 | return {value: b, binLen: 8 * a.byteLength + c}
|
419 | };
|
420 | break;
|
421 | default:
|
422 | throw Error("format must be HEX, TEXT, B64, BYTES, or ARRAYBUFFER");
|
423 | }
|
424 | return d
|
425 | }
|
426 |
|
427 | function r(c, a) {
|
428 | return c >>> a | c << 32 - a
|
429 | }
|
430 |
|
431 | function J(c, a, d) {
|
432 | return c & a ^ ~c & d
|
433 | }
|
434 |
|
435 | function K(c, a, d) {
|
436 | return c & a ^ c & d ^ a & d
|
437 | }
|
438 |
|
439 | function L(c) {
|
440 | return r(c, 2) ^ r(c, 13) ^ r(c, 22)
|
441 | }
|
442 |
|
443 | function M(c) {
|
444 | return r(c, 6) ^ r(c, 11) ^ r(c, 25)
|
445 | }
|
446 |
|
447 | function N(c) {
|
448 | return r(c, 7) ^ r(c, 18) ^ c >>> 3
|
449 | }
|
450 |
|
451 | function O(c) {
|
452 | return r(c, 17) ^ r(c, 19) ^ c >>> 10
|
453 | }
|
454 |
|
455 | function P(c, a) {
|
456 | var d = (c & 65535) + (a & 65535);
|
457 | return ((c >>> 16) + (a >>> 16) + (d >>> 16) & 65535) << 16 | d & 65535
|
458 | }
|
459 |
|
460 | function Q(c, a, d, l) {
|
461 | var b = (c & 65535) + (a & 65535) + (d & 65535) + (l & 65535);
|
462 | return ((c >>> 16) + (a >>> 16) + (d >>> 16) + (l >>> 16) + (b >>>
|
463 | 16) & 65535) << 16 | b & 65535
|
464 | }
|
465 |
|
466 | function R(c, a, d, l, b) {
|
467 | var g = (c & 65535) + (a & 65535) + (d & 65535) + (l & 65535) + (b & 65535);
|
468 | return ((c >>> 16) + (a >>> 16) + (d >>> 16) + (l >>> 16) + (b >>> 16) + (g
|
469 | >>> 16) & 65535) << 16 | g & 65535
|
470 | }
|
471 |
|
472 | function x(c) {
|
473 | var a = [], d;
|
474 | if (0 === c.lastIndexOf("SHA-", 0)) {
|
475 | switch (a = [3238371032, 914150663,
|
476 | 812702999, 4144912697, 4290775857, 1750603025, 1694076839,
|
477 | 3204075428], d = [1779033703, 3144134277, 1013904242, 2773480762,
|
478 | 1359893119, 2600822924, 528734635, 1541459225], c) {
|
479 | case "SHA-224":
|
480 | break;
|
481 | case "SHA-256":
|
482 | a = d;
|
483 | break;
|
484 | case "SHA-384":
|
485 | a = [new m, new m,
|
486 | new m, new m, new m, new m, new m, new m];
|
487 | break;
|
488 | case "SHA-512":
|
489 | a = [new m, new m, new m, new m, new m, new m, new m, new m];
|
490 | break;
|
491 | default:
|
492 | throw Error("Unknown SHA variant");
|
493 | }
|
494 | } else {
|
495 | throw Error("No SHA variants supported");
|
496 | }
|
497 | return a
|
498 | }
|
499 |
|
500 | function A(c, a, d) {
|
501 | var l, b, g, f, n, k, e, h, m, r, p, w, t, x, u, z, A, B, C, D, E, F,
|
502 | v = [], G;
|
503 | if ("SHA-224" === d || "SHA-256"
|
504 | === d) {
|
505 | r = 64, w = 1, F = Number, t = P, x = Q, u = R, z = N, A = O, B = L, C = M, E = K, D = J, G = H;
|
506 | } else {
|
507 | throw Error(
|
508 | "Unexpected error in SHA-2 implementation");
|
509 | }
|
510 | d = a[0];
|
511 | l = a[1];
|
512 | b = a[2];
|
513 | g = a[3];
|
514 | f = a[4];
|
515 | n = a[5];
|
516 | k = a[6];
|
517 | e = a[7];
|
518 | for (p =
|
519 | 0; p < r; p += 1) {
|
520 | 16 > p ? (m = p * w, h = c.length <= m ? 0
|
521 | : c[m], m = c.length <= m + 1 ? 0 : c[m + 1], v[p] = new F(h, m))
|
522 | : v[p] = x(A(v[p - 2]), v[p - 7], z(v[p - 15]), v[p - 16]), h = u(e,
|
523 | C(f), D(f, n, k), G[p], v[p]), m = t(B(d),
|
524 | E(d, l, b)), e = k, k = n, n = f, f = t(g,
|
525 | h), g = b, b = l, l = d, d = t(h, m);
|
526 | }
|
527 | a[0] = t(d, a[0]);
|
528 | a[1] = t(l, a[1]);
|
529 | a[2] = t(b, a[2]);
|
530 | a[3] = t(g, a[3]);
|
531 | a[4] = t(f, a[4]);
|
532 | a[5] = t(n, a[5]);
|
533 | a[6] = t(k, a[6]);
|
534 | a[7] = t(e, a[7]);
|
535 | return a
|
536 | }
|
537 |
|
538 | var H;
|
539 | H = [1116352408, 1899447441, 3049323471, 3921009573, 961987163, 1508970993,
|
540 | 2453635748, 2870763221, 3624381080, 310598401, 607225278, 1426881987,
|
541 | 1925078388, 2162078206,
|
542 | 2614888103, 3248222580, 3835390401, 4022224774, 264347078, 604807628,
|
543 | 770255983, 1249150122, 1555081692, 1996064986, 2554220882, 2821834349,
|
544 | 2952996808, 3210313671, 3336571891, 3584528711, 113926993, 338241895,
|
545 | 666307205, 773529912, 1294757372, 1396182291, 1695183700, 1986661051,
|
546 | 2177026350, 2456956037, 2730485921, 2820302411, 3259730800, 3345764771,
|
547 | 3516065817, 3600352804, 4094571909, 275423344, 430227734, 506948616,
|
548 | 659060556, 883997877, 958139571, 1322822218, 1537002063, 1747873779,
|
549 | 1955562222, 2024104815, 2227730452, 2361852424, 2428436474,
|
550 | 2756734187, 3204031479, 3329325298];
|
551 | "function" === typeof define && define.amd ? define(function () {
|
552 | return w
|
553 | }) : "undefined" !== typeof exports ? ("undefined" !== typeof module
|
554 | && module.exports && (module.exports = w), exports = w) : I.jsSHA = w
|
555 | })(this);
|