1010
1111var makeHash = require ( './make-hash' )
1212
13- /*
14- * Calculate the MD5 of an array of little-endian words, and a bit length
15- */
16- function core_md5 ( x , len ) {
17- /* append padding */
18- x [ len >> 5 ] |= 0x80 << ( ( len ) % 32 )
19- x [ ( ( ( len + 64 ) >>> 9 ) << 4 ) + 14 ] = len
20-
21- var a = 1732584193
22- var b = - 271733879
23- var c = - 1732584194
24- var d = 271733878
25-
26- for ( var i = 0 ; i < x . length ; i += 16 ) {
27- var olda = a
28- var oldb = b
29- var oldc = c
30- var oldd = d
31-
32- a = md5_ff ( a , b , c , d , x [ i + 0 ] , 7 , - 680876936 )
33- d = md5_ff ( d , a , b , c , x [ i + 1 ] , 12 , - 389564586 )
34- c = md5_ff ( c , d , a , b , x [ i + 2 ] , 17 , 606105819 )
35- b = md5_ff ( b , c , d , a , x [ i + 3 ] , 22 , - 1044525330 )
36- a = md5_ff ( a , b , c , d , x [ i + 4 ] , 7 , - 176418897 )
37- d = md5_ff ( d , a , b , c , x [ i + 5 ] , 12 , 1200080426 )
38- c = md5_ff ( c , d , a , b , x [ i + 6 ] , 17 , - 1473231341 )
39- b = md5_ff ( b , c , d , a , x [ i + 7 ] , 22 , - 45705983 )
40- a = md5_ff ( a , b , c , d , x [ i + 8 ] , 7 , 1770035416 )
41- d = md5_ff ( d , a , b , c , x [ i + 9 ] , 12 , - 1958414417 )
42- c = md5_ff ( c , d , a , b , x [ i + 10 ] , 17 , - 42063 )
43- b = md5_ff ( b , c , d , a , x [ i + 11 ] , 22 , - 1990404162 )
44- a = md5_ff ( a , b , c , d , x [ i + 12 ] , 7 , 1804603682 )
45- d = md5_ff ( d , a , b , c , x [ i + 13 ] , 12 , - 40341101 )
46- c = md5_ff ( c , d , a , b , x [ i + 14 ] , 17 , - 1502002290 )
47- b = md5_ff ( b , c , d , a , x [ i + 15 ] , 22 , 1236535329 )
48-
49- a = md5_gg ( a , b , c , d , x [ i + 1 ] , 5 , - 165796510 )
50- d = md5_gg ( d , a , b , c , x [ i + 6 ] , 9 , - 1069501632 )
51- c = md5_gg ( c , d , a , b , x [ i + 11 ] , 14 , 643717713 )
52- b = md5_gg ( b , c , d , a , x [ i + 0 ] , 20 , - 373897302 )
53- a = md5_gg ( a , b , c , d , x [ i + 5 ] , 5 , - 701558691 )
54- d = md5_gg ( d , a , b , c , x [ i + 10 ] , 9 , 38016083 )
55- c = md5_gg ( c , d , a , b , x [ i + 15 ] , 14 , - 660478335 )
56- b = md5_gg ( b , c , d , a , x [ i + 4 ] , 20 , - 405537848 )
57- a = md5_gg ( a , b , c , d , x [ i + 9 ] , 5 , 568446438 )
58- d = md5_gg ( d , a , b , c , x [ i + 14 ] , 9 , - 1019803690 )
59- c = md5_gg ( c , d , a , b , x [ i + 3 ] , 14 , - 187363961 )
60- b = md5_gg ( b , c , d , a , x [ i + 8 ] , 20 , 1163531501 )
61- a = md5_gg ( a , b , c , d , x [ i + 13 ] , 5 , - 1444681467 )
62- d = md5_gg ( d , a , b , c , x [ i + 2 ] , 9 , - 51403784 )
63- c = md5_gg ( c , d , a , b , x [ i + 7 ] , 14 , 1735328473 )
64- b = md5_gg ( b , c , d , a , x [ i + 12 ] , 20 , - 1926607734 )
65-
66- a = md5_hh ( a , b , c , d , x [ i + 5 ] , 4 , - 378558 )
67- d = md5_hh ( d , a , b , c , x [ i + 8 ] , 11 , - 2022574463 )
68- c = md5_hh ( c , d , a , b , x [ i + 11 ] , 16 , 1839030562 )
69- b = md5_hh ( b , c , d , a , x [ i + 14 ] , 23 , - 35309556 )
70- a = md5_hh ( a , b , c , d , x [ i + 1 ] , 4 , - 1530992060 )
71- d = md5_hh ( d , a , b , c , x [ i + 4 ] , 11 , 1272893353 )
72- c = md5_hh ( c , d , a , b , x [ i + 7 ] , 16 , - 155497632 )
73- b = md5_hh ( b , c , d , a , x [ i + 10 ] , 23 , - 1094730640 )
74- a = md5_hh ( a , b , c , d , x [ i + 13 ] , 4 , 681279174 )
75- d = md5_hh ( d , a , b , c , x [ i + 0 ] , 11 , - 358537222 )
76- c = md5_hh ( c , d , a , b , x [ i + 3 ] , 16 , - 722521979 )
77- b = md5_hh ( b , c , d , a , x [ i + 6 ] , 23 , 76029189 )
78- a = md5_hh ( a , b , c , d , x [ i + 9 ] , 4 , - 640364487 )
79- d = md5_hh ( d , a , b , c , x [ i + 12 ] , 11 , - 421815835 )
80- c = md5_hh ( c , d , a , b , x [ i + 15 ] , 16 , 530742520 )
81- b = md5_hh ( b , c , d , a , x [ i + 2 ] , 23 , - 995338651 )
82-
83- a = md5_ii ( a , b , c , d , x [ i + 0 ] , 6 , - 198630844 )
84- d = md5_ii ( d , a , b , c , x [ i + 7 ] , 10 , 1126891415 )
85- c = md5_ii ( c , d , a , b , x [ i + 14 ] , 15 , - 1416354905 )
86- b = md5_ii ( b , c , d , a , x [ i + 5 ] , 21 , - 57434055 )
87- a = md5_ii ( a , b , c , d , x [ i + 12 ] , 6 , 1700485571 )
88- d = md5_ii ( d , a , b , c , x [ i + 3 ] , 10 , - 1894986606 )
89- c = md5_ii ( c , d , a , b , x [ i + 10 ] , 15 , - 1051523 )
90- b = md5_ii ( b , c , d , a , x [ i + 1 ] , 21 , - 2054922799 )
91- a = md5_ii ( a , b , c , d , x [ i + 8 ] , 6 , 1873313359 )
92- d = md5_ii ( d , a , b , c , x [ i + 15 ] , 10 , - 30611744 )
93- c = md5_ii ( c , d , a , b , x [ i + 6 ] , 15 , - 1560198380 )
94- b = md5_ii ( b , c , d , a , x [ i + 13 ] , 21 , 1309151649 )
95- a = md5_ii ( a , b , c , d , x [ i + 4 ] , 6 , - 145523070 )
96- d = md5_ii ( d , a , b , c , x [ i + 11 ] , 10 , - 1120210379 )
97- c = md5_ii ( c , d , a , b , x [ i + 2 ] , 15 , 718787259 )
98- b = md5_ii ( b , c , d , a , x [ i + 9 ] , 21 , - 343485551 )
99-
100- a = safe_add ( a , olda )
101- b = safe_add ( b , oldb )
102- c = safe_add ( c , oldc )
103- d = safe_add ( d , oldd )
104- }
105-
106- return [ a , b , c , d ]
107- }
108-
10913/*
11014 * These functions implement the four basic operations the algorithm uses.
11115 */
112- function md5_cmn ( q , a , b , x , s , t ) {
113- return safe_add ( bit_rol ( safe_add ( safe_add ( a , q ) , safe_add ( x , t ) ) , s ) , b )
16+ function md5cmn ( q , a , b , x , s , t ) {
17+ return safeAdd ( bitRol ( safeAdd ( safeAdd ( a , q ) , safeAdd ( x , t ) ) , s ) , b )
11418}
11519
116- function md5_ff ( a , b , c , d , x , s , t ) {
117- return md5_cmn ( ( b & c ) | ( ( ~ b ) & d ) , a , b , x , s , t )
20+ function md5ff ( a , b , c , d , x , s , t ) {
21+ return md5cmn ( ( b & c ) | ( ( ~ b ) & d ) , a , b , x , s , t )
11822}
11923
120- function md5_gg ( a , b , c , d , x , s , t ) {
121- return md5_cmn ( ( b & d ) | ( c & ( ~ d ) ) , a , b , x , s , t )
24+ function md5gg ( a , b , c , d , x , s , t ) {
25+ return md5cmn ( ( b & d ) | ( c & ( ~ d ) ) , a , b , x , s , t )
12226}
12327
124- function md5_hh ( a , b , c , d , x , s , t ) {
125- return md5_cmn ( b ^ c ^ d , a , b , x , s , t )
28+ function md5hh ( a , b , c , d , x , s , t ) {
29+ return md5cmn ( b ^ c ^ d , a , b , x , s , t )
12630}
12731
128- function md5_ii ( a , b , c , d , x , s , t ) {
129- return md5_cmn ( c ^ ( b | ( ~ d ) ) , a , b , x , s , t )
32+ function md5ii ( a , b , c , d , x , s , t ) {
33+ return md5cmn ( c ^ ( b | ( ~ d ) ) , a , b , x , s , t )
13034}
13135
13236/*
13337 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
13438 * to work around bugs in some JS interpreters.
13539 */
136- function safe_add ( x , y ) {
40+ function safeAdd ( x , y ) {
13741 var lsw = ( x & 0xFFFF ) + ( y & 0xFFFF )
13842 var msw = ( x >> 16 ) + ( y >> 16 ) + ( lsw >> 16 )
13943 return ( msw << 16 ) | ( lsw & 0xFFFF )
@@ -142,10 +46,106 @@ function safe_add (x, y) {
14246/*
14347 * Bitwise rotate a 32-bit number to the left.
14448 */
145- function bit_rol ( num , cnt ) {
49+ function bitRol ( num , cnt ) {
14650 return ( num << cnt ) | ( num >>> ( 32 - cnt ) )
14751}
14852
53+ /*
54+ * Calculate the MD5 of an array of little-endian words, and a bit length
55+ */
56+ function coreMd5 ( x , len ) {
57+ /* append padding */
58+ x [ len >> 5 ] |= 0x80 << ( ( len ) % 32 )
59+ x [ ( ( ( len + 64 ) >>> 9 ) << 4 ) + 14 ] = len
60+
61+ var a = 1732584193
62+ var b = - 271733879
63+ var c = - 1732584194
64+ var d = 271733878
65+
66+ for ( var i = 0 ; i < x . length ; i += 16 ) {
67+ var olda = a
68+ var oldb = b
69+ var oldc = c
70+ var oldd = d
71+
72+ a = md5ff ( a , b , c , d , x [ i + 0 ] , 7 , - 680876936 )
73+ d = md5ff ( d , a , b , c , x [ i + 1 ] , 12 , - 389564586 )
74+ c = md5ff ( c , d , a , b , x [ i + 2 ] , 17 , 606105819 )
75+ b = md5ff ( b , c , d , a , x [ i + 3 ] , 22 , - 1044525330 )
76+ a = md5ff ( a , b , c , d , x [ i + 4 ] , 7 , - 176418897 )
77+ d = md5ff ( d , a , b , c , x [ i + 5 ] , 12 , 1200080426 )
78+ c = md5ff ( c , d , a , b , x [ i + 6 ] , 17 , - 1473231341 )
79+ b = md5ff ( b , c , d , a , x [ i + 7 ] , 22 , - 45705983 )
80+ a = md5ff ( a , b , c , d , x [ i + 8 ] , 7 , 1770035416 )
81+ d = md5ff ( d , a , b , c , x [ i + 9 ] , 12 , - 1958414417 )
82+ c = md5ff ( c , d , a , b , x [ i + 10 ] , 17 , - 42063 )
83+ b = md5ff ( b , c , d , a , x [ i + 11 ] , 22 , - 1990404162 )
84+ a = md5ff ( a , b , c , d , x [ i + 12 ] , 7 , 1804603682 )
85+ d = md5ff ( d , a , b , c , x [ i + 13 ] , 12 , - 40341101 )
86+ c = md5ff ( c , d , a , b , x [ i + 14 ] , 17 , - 1502002290 )
87+ b = md5ff ( b , c , d , a , x [ i + 15 ] , 22 , 1236535329 )
88+
89+ a = md5gg ( a , b , c , d , x [ i + 1 ] , 5 , - 165796510 )
90+ d = md5gg ( d , a , b , c , x [ i + 6 ] , 9 , - 1069501632 )
91+ c = md5gg ( c , d , a , b , x [ i + 11 ] , 14 , 643717713 )
92+ b = md5gg ( b , c , d , a , x [ i + 0 ] , 20 , - 373897302 )
93+ a = md5gg ( a , b , c , d , x [ i + 5 ] , 5 , - 701558691 )
94+ d = md5gg ( d , a , b , c , x [ i + 10 ] , 9 , 38016083 )
95+ c = md5gg ( c , d , a , b , x [ i + 15 ] , 14 , - 660478335 )
96+ b = md5gg ( b , c , d , a , x [ i + 4 ] , 20 , - 405537848 )
97+ a = md5gg ( a , b , c , d , x [ i + 9 ] , 5 , 568446438 )
98+ d = md5gg ( d , a , b , c , x [ i + 14 ] , 9 , - 1019803690 )
99+ c = md5gg ( c , d , a , b , x [ i + 3 ] , 14 , - 187363961 )
100+ b = md5gg ( b , c , d , a , x [ i + 8 ] , 20 , 1163531501 )
101+ a = md5gg ( a , b , c , d , x [ i + 13 ] , 5 , - 1444681467 )
102+ d = md5gg ( d , a , b , c , x [ i + 2 ] , 9 , - 51403784 )
103+ c = md5gg ( c , d , a , b , x [ i + 7 ] , 14 , 1735328473 )
104+ b = md5gg ( b , c , d , a , x [ i + 12 ] , 20 , - 1926607734 )
105+
106+ a = md5hh ( a , b , c , d , x [ i + 5 ] , 4 , - 378558 )
107+ d = md5hh ( d , a , b , c , x [ i + 8 ] , 11 , - 2022574463 )
108+ c = md5hh ( c , d , a , b , x [ i + 11 ] , 16 , 1839030562 )
109+ b = md5hh ( b , c , d , a , x [ i + 14 ] , 23 , - 35309556 )
110+ a = md5hh ( a , b , c , d , x [ i + 1 ] , 4 , - 1530992060 )
111+ d = md5hh ( d , a , b , c , x [ i + 4 ] , 11 , 1272893353 )
112+ c = md5hh ( c , d , a , b , x [ i + 7 ] , 16 , - 155497632 )
113+ b = md5hh ( b , c , d , a , x [ i + 10 ] , 23 , - 1094730640 )
114+ a = md5hh ( a , b , c , d , x [ i + 13 ] , 4 , 681279174 )
115+ d = md5hh ( d , a , b , c , x [ i + 0 ] , 11 , - 358537222 )
116+ c = md5hh ( c , d , a , b , x [ i + 3 ] , 16 , - 722521979 )
117+ b = md5hh ( b , c , d , a , x [ i + 6 ] , 23 , 76029189 )
118+ a = md5hh ( a , b , c , d , x [ i + 9 ] , 4 , - 640364487 )
119+ d = md5hh ( d , a , b , c , x [ i + 12 ] , 11 , - 421815835 )
120+ c = md5hh ( c , d , a , b , x [ i + 15 ] , 16 , 530742520 )
121+ b = md5hh ( b , c , d , a , x [ i + 2 ] , 23 , - 995338651 )
122+
123+ a = md5ii ( a , b , c , d , x [ i + 0 ] , 6 , - 198630844 )
124+ d = md5ii ( d , a , b , c , x [ i + 7 ] , 10 , 1126891415 )
125+ c = md5ii ( c , d , a , b , x [ i + 14 ] , 15 , - 1416354905 )
126+ b = md5ii ( b , c , d , a , x [ i + 5 ] , 21 , - 57434055 )
127+ a = md5ii ( a , b , c , d , x [ i + 12 ] , 6 , 1700485571 )
128+ d = md5ii ( d , a , b , c , x [ i + 3 ] , 10 , - 1894986606 )
129+ c = md5ii ( c , d , a , b , x [ i + 10 ] , 15 , - 1051523 )
130+ b = md5ii ( b , c , d , a , x [ i + 1 ] , 21 , - 2054922799 )
131+ a = md5ii ( a , b , c , d , x [ i + 8 ] , 6 , 1873313359 )
132+ d = md5ii ( d , a , b , c , x [ i + 15 ] , 10 , - 30611744 )
133+ c = md5ii ( c , d , a , b , x [ i + 6 ] , 15 , - 1560198380 )
134+ b = md5ii ( b , c , d , a , x [ i + 13 ] , 21 , 1309151649 )
135+ a = md5ii ( a , b , c , d , x [ i + 4 ] , 6 , - 145523070 )
136+ d = md5ii ( d , a , b , c , x [ i + 11 ] , 10 , - 1120210379 )
137+ c = md5ii ( c , d , a , b , x [ i + 2 ] , 15 , 718787259 )
138+ b = md5ii ( b , c , d , a , x [ i + 9 ] , 21 , - 343485551 )
139+
140+ a = safeAdd ( a , olda )
141+ b = safeAdd ( b , oldb )
142+ c = safeAdd ( c , oldc )
143+ d = safeAdd ( d , oldd )
144+ }
145+
146+ return [ a , b , c , d ]
147+ }
148+
149149module . exports = function md5 ( buf ) {
150- return makeHash ( buf , core_md5 )
150+ return makeHash ( buf , coreMd5 )
151151}
0 commit comments