UNPKG

2.46 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = void 0;
7
8// Adapted from Chris Veness' SHA1 code at
9// http://www.movable-type.co.uk/scripts/sha1.html
10function f(s, x, y, z) {
11 switch (s) {
12 case 0:
13 return x & y ^ ~x & z;
14
15 case 1:
16 return x ^ y ^ z;
17
18 case 2:
19 return x & y ^ x & z ^ y & z;
20
21 case 3:
22 return x ^ y ^ z;
23 }
24}
25
26function ROTL(x, n) {
27 return x << n | x >>> 32 - n;
28}
29
30function sha1(bytes) {
31 var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];
32 var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];
33
34 if (typeof bytes == 'string') {
35 var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape
36
37 bytes = new Array(msg.length);
38
39 for (var i = 0; i < msg.length; i++) bytes[i] = msg.charCodeAt(i);
40 }
41
42 bytes.push(0x80);
43 var l = bytes.length / 4 + 2;
44 var N = Math.ceil(l / 16);
45 var M = new Array(N);
46
47 for (var i = 0; i < N; i++) {
48 M[i] = new Array(16);
49
50 for (var j = 0; j < 16; j++) {
51 M[i][j] = bytes[i * 64 + j * 4] << 24 | bytes[i * 64 + j * 4 + 1] << 16 | bytes[i * 64 + j * 4 + 2] << 8 | bytes[i * 64 + j * 4 + 3];
52 }
53 }
54
55 M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);
56 M[N - 1][14] = Math.floor(M[N - 1][14]);
57 M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;
58
59 for (var i = 0; i < N; i++) {
60 var W = new Array(80);
61
62 for (var t = 0; t < 16; t++) W[t] = M[i][t];
63
64 for (var t = 16; t < 80; t++) {
65 W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1);
66 }
67
68 var a = H[0];
69 var b = H[1];
70 var c = H[2];
71 var d = H[3];
72 var e = H[4];
73
74 for (var t = 0; t < 80; t++) {
75 var s = Math.floor(t / 20);
76 var T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t] >>> 0;
77 e = d;
78 d = c;
79 c = ROTL(b, 30) >>> 0;
80 b = a;
81 a = T;
82 }
83
84 H[0] = H[0] + a >>> 0;
85 H[1] = H[1] + b >>> 0;
86 H[2] = H[2] + c >>> 0;
87 H[3] = H[3] + d >>> 0;
88 H[4] = H[4] + e >>> 0;
89 }
90
91 return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];
92}
93
94var _default = sha1;
95exports.default = _default;
96module.exports = exports.default;
\No newline at end of file