Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: lib/sha1.js

Issue 29375851: [safari] Issue 4902 - Partially revert d5be57b68f91 for Safari compatibility (Closed)
Patch Set: Addressed Sebastian's feedback Created Feb. 17, 2017, 2:16 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « lib/rsa.js ('k') | lib/whitelisting.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /**
2 *
3 * Secure Hash Algorithm (SHA1)
4 * http://www.webtoolkit.info/
5 *
6 **/
7
8 function SHA1(msg) {
9
10 function rotate_left(n,s) {
11 var t4 = ( n<<s ) | (n>>>(32-s));
12 return t4;
13 };
14
15 function lsb_hex(val) {
16 var str="";
17 var i;
18 var vh;
19 var vl;
20
21 for( i=0; i<=6; i+=2 ) {
22 vh = (val>>>(i*4+4))&0x0f;
23 vl = (val>>>(i*4))&0x0f;
24 str += vh.toString(16) + vl.toString(16);
25 }
26 return str;
27 };
28
29 function cvt_hex(val) {
30 var str="";
31 var i;
32 var v;
33
34 for( i=7; i>=0; i-- ) {
35 v = (val>>>(i*4))&0x0f;
36 str += v.toString(16);
37 }
38 return str;
39 };
40
41
42 function Utf8Encode(string) {
43 string = string.replace(/\r\n/g,"\n");
44 var utftext = "";
45
46 for (var n = 0; n < string.length; n++) {
47
48 var c = string.charCodeAt(n);
49
50 if (c < 128) {
51 utftext += String.fromCharCode(c);
52 }
53 else if((c > 127) && (c < 2048)) {
54 utftext += String.fromCharCode((c >> 6) | 192);
55 utftext += String.fromCharCode((c & 63) | 128);
56 }
57 else {
58 utftext += String.fromCharCode((c >> 12) | 224);
59 utftext += String.fromCharCode(((c >> 6) & 63) | 128);
60 utftext += String.fromCharCode((c & 63) | 128);
61 }
62
63 }
64
65 return utftext;
66 };
67
68 var blockstart;
69 var i, j;
70 var W = new Array(80);
71 var H0 = 0x67452301;
72 var H1 = 0xEFCDAB89;
73 var H2 = 0x98BADCFE;
74 var H3 = 0x10325476;
75 var H4 = 0xC3D2E1F0;
76 var A, B, C, D, E;
77 var temp;
78
79 msg = Utf8Encode(msg);
80
81 var msg_len = msg.length;
82
83 var word_array = new Array();
84 for( i=0; i<msg_len-3; i+=4 ) {
85 j = msg.charCodeAt(i)<<24 | msg.charCodeAt(i+1)<<16 |
86 msg.charCodeAt(i+2)<<8 | msg.charCodeAt(i+3);
87 word_array.push( j );
88 }
89
90 switch( msg_len % 4 ) {
91 case 0:
92 i = 0x080000000;
93 break;
94 case 1:
95 i = msg.charCodeAt(msg_len-1)<<24 | 0x0800000;
96 break;
97
98 case 2:
99 i = msg.charCodeAt(msg_len-2)<<24 | msg.charCodeAt(msg_l en-1)<<16 | 0x08000;
100 break;
101
102 case 3:
103 i = msg.charCodeAt(msg_len-3)<<24 | msg.charCodeAt(msg_l en-2)<<16 | msg.charCodeAt(msg_len-1)<<8 | 0x80;
104 break;
105 }
106
107 word_array.push( i );
108
109 while( (word_array.length % 16) != 14 ) word_array.push( 0 );
110
111 word_array.push( msg_len>>>29 );
112 word_array.push( (msg_len<<3)&0x0ffffffff );
113
114
115 for ( blockstart=0; blockstart<word_array.length; blockstart+=16 ) {
116
117 for( i=0; i<16; i++ ) W[i] = word_array[blockstart+i];
118 for( i=16; i<=79; i++ ) W[i] = rotate_left(W[i-3] ^ W[i-8] ^ W[i -14] ^ W[i-16], 1);
119
120 A = H0;
121 B = H1;
122 C = H2;
123 D = H3;
124 E = H4;
125
126 for( i= 0; i<=19; i++ ) {
127 temp = (rotate_left(A,5) + ((B&C) | (~B&D)) + E + W[i] + 0x5A827999) & 0x0ffffffff;
128 E = D;
129 D = C;
130 C = rotate_left(B,30);
131 B = A;
132 A = temp;
133 }
134
135 for( i=20; i<=39; i++ ) {
136 temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0x6E D9EBA1) & 0x0ffffffff;
137 E = D;
138 D = C;
139 C = rotate_left(B,30);
140 B = A;
141 A = temp;
142 }
143
144 for( i=40; i<=59; i++ ) {
145 temp = (rotate_left(A,5) + ((B&C) | (B&D) | (C&D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff;
146 E = D;
147 D = C;
148 C = rotate_left(B,30);
149 B = A;
150 A = temp;
151 }
152
153 for( i=60; i<=79; i++ ) {
154 temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0xCA 62C1D6) & 0x0ffffffff;
155 E = D;
156 D = C;
157 C = rotate_left(B,30);
158 B = A;
159 A = temp;
160 }
161
162 H0 = (H0 + A) & 0x0ffffffff;
163 H1 = (H1 + B) & 0x0ffffffff;
164 H2 = (H2 + C) & 0x0ffffffff;
165 H3 = (H3 + D) & 0x0ffffffff;
166 H4 = (H4 + E) & 0x0ffffffff;
167
168 }
169
170 var temp = cvt_hex(H0) + cvt_hex(H1) + cvt_hex(H2) + cvt_hex(H3) + cvt_h ex(H4);
171
172 return temp.toLowerCase();
173 }
OLDNEW
« no previous file with comments | « lib/rsa.js ('k') | lib/whitelisting.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld