Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(337)

Side by Side Diff: chrome/test/data/dromaeo/tests/sunspider-crypto-md5.html

Issue 269054: Importing dromaeo performance tests to src/chrome/test/data.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 <html>
2 <head>
3 <script src="../htmlrunner.js"></script>
4 <script>
5 /*
6 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
7 * Digest Algorithm, as defined in RFC 1321.
8 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
9 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
10 * Distributed under the BSD License
11 * See http://pajhome.org.uk/crypt/md5 for more info.
12 */
13
14 /*
15 * Configurable variables. You may need to tweak these to be compatible with
16 * the server-side, but the defaults work in most cases.
17 */
18 var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */
19 var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */
20 var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */
21
22 /*
23 * These are the functions you'll usually want to call
24 * They take string arguments and return either hex or base-64 encoded strings
25 */
26 function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));}
27 function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));}
28 function str_md5(s){ return binl2str(core_md5(str2binl(s), s.length * chrsz));}
29 function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); }
30 function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); }
31 function str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, data)); }
32
33 /*
34 * Perform a simple self-test to see if the VM is working
35 */
36 function md5_vm_test()
37 {
38 return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";
39 }
40
41 /*
42 * Calculate the MD5 of an array of little-endian words, and a bit length
43 */
44 function core_md5(x, len)
45 {
46 /* append padding */
47 x[len >> 5] |= 0x80 << ((len) % 32);
48 x[(((len + 64) >>> 9) << 4) + 14] = len;
49
50 var a = 1732584193;
51 var b = -271733879;
52 var c = -1732584194;
53 var d = 271733878;
54
55 for(var i = 0; i < x.length; i += 16)
56 {
57 var olda = a;
58 var oldb = b;
59 var oldc = c;
60 var oldd = d;
61
62 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
63 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
64 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
65 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
66 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
67 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
68 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
69 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
70 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
71 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
72 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
73 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
74 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
75 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
76 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
77 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
78
79 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
80 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
81 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
82 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
83 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
84 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
85 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
86 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
87 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
88 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
89 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
90 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
91 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
92 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
93 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
94 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
95
96 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
97 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
98 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
99 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
100 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
101 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
102 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
103 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
104 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
105 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
106 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
107 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
108 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
109 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
110 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
111 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
112
113 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
114 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
115 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
116 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
117 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
118 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
119 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
120 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
121 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
122 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
123 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
124 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
125 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
126 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
127 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
128 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
129
130 a = safe_add(a, olda);
131 b = safe_add(b, oldb);
132 c = safe_add(c, oldc);
133 d = safe_add(d, oldd);
134 }
135 return Array(a, b, c, d);
136
137 }
138
139 /*
140 * These functions implement the four basic operations the algorithm uses.
141 */
142 function md5_cmn(q, a, b, x, s, t)
143 {
144 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
145 }
146 function md5_ff(a, b, c, d, x, s, t)
147 {
148 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
149 }
150 function md5_gg(a, b, c, d, x, s, t)
151 {
152 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
153 }
154 function md5_hh(a, b, c, d, x, s, t)
155 {
156 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
157 }
158 function md5_ii(a, b, c, d, x, s, t)
159 {
160 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
161 }
162
163 /*
164 * Calculate the HMAC-MD5, of a key and some data
165 */
166 function core_hmac_md5(key, data)
167 {
168 var bkey = str2binl(key);
169 if(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);
170
171 var ipad = Array(16), opad = Array(16);
172 for(var i = 0; i < 16; i++)
173 {
174 ipad[i] = bkey[i] ^ 0x36363636;
175 opad[i] = bkey[i] ^ 0x5C5C5C5C;
176 }
177
178 var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
179 return core_md5(opad.concat(hash), 512 + 128);
180 }
181
182 /*
183 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
184 * to work around bugs in some JS interpreters.
185 */
186 function safe_add(x, y)
187 {
188 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
189 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
190 return (msw << 16) | (lsw & 0xFFFF);
191 }
192
193 /*
194 * Bitwise rotate a 32-bit number to the left.
195 */
196 function bit_rol(num, cnt)
197 {
198 return (num << cnt) | (num >>> (32 - cnt));
199 }
200
201 /*
202 * Convert a string to an array of little-endian words
203 * If chrsz is ASCII, characters >255 have their hi-byte silently ignored.
204 */
205 function str2binl(str)
206 {
207 var bin = Array();
208 var mask = (1 << chrsz) - 1;
209 for(var i = 0; i < str.length * chrsz; i += chrsz)
210 bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
211 return bin;
212 }
213
214 /*
215 * Convert an array of little-endian words to a string
216 */
217 function binl2str(bin)
218 {
219 var str = "";
220 var mask = (1 << chrsz) - 1;
221 for(var i = 0; i < bin.length * 32; i += chrsz)
222 str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask);
223 return str;
224 }
225
226 /*
227 * Convert an array of little-endian words to a hex string.
228 */
229 function binl2hex(binarray)
230 {
231 var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
232 var str = "";
233 for(var i = 0; i < binarray.length * 4; i++)
234 {
235 str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
236 hex_tab.charAt((binarray[i>>2] >> ((i%4)*8 )) & 0xF);
237 }
238 return str;
239 }
240
241 /*
242 * Convert an array of little-endian words to a base-64 string
243 */
244 function binl2b64(binarray)
245 {
246 var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
247 var str = "";
248 for(var i = 0; i < binarray.length * 4; i += 3)
249 {
250 var triplet = (((binarray[i >> 2] >> 8 * ( i %4)) & 0xFF) << 16)
251 | (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 )
252 | ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF);
253 for(var j = 0; j < 4; j++)
254 {
255 if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
256 else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
257 }
258 }
259 return str;
260 }
261
262 var plainText = "Rebellious subjects, enemies to peace,\n\
263 Profaners of this neighbour-stained steel,--\n\
264 Will they not hear? What, ho! you men, you beasts,\n\
265 That quench the fire of your pernicious rage\n\
266 With purple fountains issuing from your veins,\n\
267 On pain of torture, from those bloody hands\n\
268 Throw your mistemper'd weapons to the ground,\n\
269 And hear the sentence of your moved prince.\n\
270 Three civil brawls, bred of an airy word,\n\
271 By thee, old Capulet, and Montague,\n\
272 Have thrice disturb'd the quiet of our streets,\n\
273 And made Verona's ancient citizens\n\
274 Cast by their grave beseeming ornaments,\n\
275 To wield old partisans, in hands as old,\n\
276 Canker'd with peace, to part your canker'd hate:\n\
277 If ever you disturb our streets again,\n\
278 Your lives shall pay the forfeit of the peace.\n\
279 For this time, all the rest depart away:\n\
280 You Capulet; shall go along with me:\n\
281 And, Montague, come you this afternoon,\n\
282 To know our further pleasure in this case,\n\
283 To old Free-town, our common judgment-place.\n\
284 Once more, on pain of death, all men depart."
285
286 for (var i = 0; i <2; i++) {
287 plainText += plainText;
288 }
289
290 window.onload = function(){ startTest("sunspider-crypto-md5", '');
291
292 test("MD5", function(){
293 var md5Output = hex_md5(plainText);
294 });
295
296 endTest(); };
297 </script>
298 </head>
299 <body></body>
300 </html>
OLDNEW
« no previous file with comments | « chrome/test/data/dromaeo/tests/sunspider-crypto-aes.html ('k') | chrome/test/data/dromaeo/tests/sunspider-crypto-sha1.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698