Skip to content

Commit bbc4d20

Browse files
authored
Merge pull request satazor#41 from nochev/ie11-performance-issue
Fix IE11 performance issue.
2 parents 48eb911 + 02e62c5 commit bbc4d20

File tree

2 files changed

+137
-89
lines changed

2 files changed

+137
-89
lines changed

spark-md5.js

Lines changed: 136 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -45,100 +45,148 @@
4545
return add32((a << s) | (a >>> (32 - s)), b);
4646
}
4747

48-
function ff(a, b, c, d, x, s, t) {
49-
return cmn((b & c) | ((~b) & d), a, b, x, s, t);
50-
}
51-
52-
function gg(a, b, c, d, x, s, t) {
53-
return cmn((b & d) | (c & (~d)), a, b, x, s, t);
54-
}
55-
56-
function hh(a, b, c, d, x, s, t) {
57-
return cmn(b ^ c ^ d, a, b, x, s, t);
58-
}
59-
60-
function ii(a, b, c, d, x, s, t) {
61-
return cmn(c ^ (b | (~d)), a, b, x, s, t);
62-
}
63-
6448
function md5cycle(x, k) {
6549
var a = x[0],
6650
b = x[1],
6751
c = x[2],
6852
d = x[3];
6953

70-
a = ff(a, b, c, d, k[0], 7, -680876936);
71-
d = ff(d, a, b, c, k[1], 12, -389564586);
72-
c = ff(c, d, a, b, k[2], 17, 606105819);
73-
b = ff(b, c, d, a, k[3], 22, -1044525330);
74-
a = ff(a, b, c, d, k[4], 7, -176418897);
75-
d = ff(d, a, b, c, k[5], 12, 1200080426);
76-
c = ff(c, d, a, b, k[6], 17, -1473231341);
77-
b = ff(b, c, d, a, k[7], 22, -45705983);
78-
a = ff(a, b, c, d, k[8], 7, 1770035416);
79-
d = ff(d, a, b, c, k[9], 12, -1958414417);
80-
c = ff(c, d, a, b, k[10], 17, -42063);
81-
b = ff(b, c, d, a, k[11], 22, -1990404162);
82-
a = ff(a, b, c, d, k[12], 7, 1804603682);
83-
d = ff(d, a, b, c, k[13], 12, -40341101);
84-
c = ff(c, d, a, b, k[14], 17, -1502002290);
85-
b = ff(b, c, d, a, k[15], 22, 1236535329);
86-
87-
a = gg(a, b, c, d, k[1], 5, -165796510);
88-
d = gg(d, a, b, c, k[6], 9, -1069501632);
89-
c = gg(c, d, a, b, k[11], 14, 643717713);
90-
b = gg(b, c, d, a, k[0], 20, -373897302);
91-
a = gg(a, b, c, d, k[5], 5, -701558691);
92-
d = gg(d, a, b, c, k[10], 9, 38016083);
93-
c = gg(c, d, a, b, k[15], 14, -660478335);
94-
b = gg(b, c, d, a, k[4], 20, -405537848);
95-
a = gg(a, b, c, d, k[9], 5, 568446438);
96-
d = gg(d, a, b, c, k[14], 9, -1019803690);
97-
c = gg(c, d, a, b, k[3], 14, -187363961);
98-
b = gg(b, c, d, a, k[8], 20, 1163531501);
99-
a = gg(a, b, c, d, k[13], 5, -1444681467);
100-
d = gg(d, a, b, c, k[2], 9, -51403784);
101-
c = gg(c, d, a, b, k[7], 14, 1735328473);
102-
b = gg(b, c, d, a, k[12], 20, -1926607734);
103-
104-
a = hh(a, b, c, d, k[5], 4, -378558);
105-
d = hh(d, a, b, c, k[8], 11, -2022574463);
106-
c = hh(c, d, a, b, k[11], 16, 1839030562);
107-
b = hh(b, c, d, a, k[14], 23, -35309556);
108-
a = hh(a, b, c, d, k[1], 4, -1530992060);
109-
d = hh(d, a, b, c, k[4], 11, 1272893353);
110-
c = hh(c, d, a, b, k[7], 16, -155497632);
111-
b = hh(b, c, d, a, k[10], 23, -1094730640);
112-
a = hh(a, b, c, d, k[13], 4, 681279174);
113-
d = hh(d, a, b, c, k[0], 11, -358537222);
114-
c = hh(c, d, a, b, k[3], 16, -722521979);
115-
b = hh(b, c, d, a, k[6], 23, 76029189);
116-
a = hh(a, b, c, d, k[9], 4, -640364487);
117-
d = hh(d, a, b, c, k[12], 11, -421815835);
118-
c = hh(c, d, a, b, k[15], 16, 530742520);
119-
b = hh(b, c, d, a, k[2], 23, -995338651);
120-
121-
a = ii(a, b, c, d, k[0], 6, -198630844);
122-
d = ii(d, a, b, c, k[7], 10, 1126891415);
123-
c = ii(c, d, a, b, k[14], 15, -1416354905);
124-
b = ii(b, c, d, a, k[5], 21, -57434055);
125-
a = ii(a, b, c, d, k[12], 6, 1700485571);
126-
d = ii(d, a, b, c, k[3], 10, -1894986606);
127-
c = ii(c, d, a, b, k[10], 15, -1051523);
128-
b = ii(b, c, d, a, k[1], 21, -2054922799);
129-
a = ii(a, b, c, d, k[8], 6, 1873313359);
130-
d = ii(d, a, b, c, k[15], 10, -30611744);
131-
c = ii(c, d, a, b, k[6], 15, -1560198380);
132-
b = ii(b, c, d, a, k[13], 21, 1309151649);
133-
a = ii(a, b, c, d, k[4], 6, -145523070);
134-
d = ii(d, a, b, c, k[11], 10, -1120210379);
135-
c = ii(c, d, a, b, k[2], 15, 718787259);
136-
b = ii(b, c, d, a, k[9], 21, -343485551);
137-
138-
x[0] = add32(a, x[0]);
139-
x[1] = add32(b, x[1]);
140-
x[2] = add32(c, x[2]);
141-
x[3] = add32(d, x[3]);
54+
a += (b & c | ~b & d) + k[0] - 680876936 | 0;
55+
a = (a << 7 | a >>> 25) + b | 0;
56+
d += (a & b | ~a & c) + k[1] - 389564586 | 0;
57+
d = (d << 12 | d >>> 20) + a | 0;
58+
c += (d & a | ~d & b) + k[2] + 606105819 | 0;
59+
c = (c << 17 | c >>> 15) + d | 0;
60+
b += (c & d | ~c & a) + k[3] - 1044525330 | 0;
61+
b = (b << 22 | b >>> 10) + c | 0;
62+
a += (b & c | ~b & d) + k[4] - 176418897 | 0;
63+
a = (a << 7 | a >>> 25) + b | 0;
64+
d += (a & b | ~a & c) + k[5] + 1200080426 | 0;
65+
d = (d << 12 | d >>> 20) + a | 0;
66+
c += (d & a | ~d & b) + k[6] - 1473231341 | 0;
67+
c = (c << 17 | c >>> 15) + d | 0;
68+
b += (c & d | ~c & a) + k[7] - 45705983 | 0;
69+
b = (b << 22 | b >>> 10) + c | 0;
70+
a += (b & c | ~b & d) + k[8] + 1770035416 | 0;
71+
a = (a << 7 | a >>> 25) + b | 0;
72+
d += (a & b | ~a & c) + k[9] - 1958414417 | 0;
73+
d = (d << 12 | d >>> 20) + a | 0;
74+
c += (d & a | ~d & b) + k[10] - 42063 | 0;
75+
c = (c << 17 | c >>> 15) + d | 0;
76+
b += (c & d | ~c & a) + k[11] - 1990404162 | 0;
77+
b = (b << 22 | b >>> 10) + c | 0;
78+
a += (b & c | ~b & d) + k[12] + 1804603682 | 0;
79+
a = (a << 7 | a >>> 25) + b | 0;
80+
d += (a & b | ~a & c) + k[13] - 40341101 | 0;
81+
d = (d << 12 | d >>> 20) + a | 0;
82+
c += (d & a | ~d & b) + k[14] - 1502002290 | 0;
83+
c = (c << 17 | c >>> 15) + d | 0;
84+
b += (c & d | ~c & a) + k[15] + 1236535329 | 0;
85+
b = (b << 22 | b >>> 10) + c | 0;
86+
87+
a += (b & d | c & ~d) + k[1] - 165796510 | 0;
88+
a = (a << 5 | a >>> 27) + b | 0;
89+
d += (a & c | b & ~c) + k[6] - 1069501632 | 0;
90+
d = (d << 9 | d >>> 23) + a | 0;
91+
c += (d & b | a & ~b) + k[11] + 643717713 | 0;
92+
c = (c << 14 | c >>> 18) + d | 0;
93+
b += (c & a | d & ~a) + k[0] - 373897302 | 0;
94+
b = (b << 20 | b >>> 12) + c | 0;
95+
a += (b & d | c & ~d) + k[5] - 701558691 | 0;
96+
a = (a << 5 | a >>> 27) + b | 0;
97+
d += (a & c | b & ~c) + k[10] + 38016083 | 0;
98+
d = (d << 9 | d >>> 23) + a | 0;
99+
c += (d & b | a & ~b) + k[15] - 660478335 | 0;
100+
c = (c << 14 | c >>> 18) + d | 0;
101+
b += (c & a | d & ~a) + k[4] - 405537848 | 0;
102+
b = (b << 20 | b >>> 12) + c | 0;
103+
a += (b & d | c & ~d) + k[9] + 568446438 | 0;
104+
a = (a << 5 | a >>> 27) + b | 0;
105+
d += (a & c | b & ~c) + k[14] - 1019803690 | 0;
106+
d = (d << 9 | d >>> 23) + a | 0;
107+
c += (d & b | a & ~b) + k[3] - 187363961 | 0;
108+
c = (c << 14 | c >>> 18) + d | 0;
109+
b += (c & a | d & ~a) + k[8] + 1163531501 | 0;
110+
b = (b << 20 | b >>> 12) + c | 0;
111+
a += (b & d | c & ~d) + k[13] - 1444681467 | 0;
112+
a = (a << 5 | a >>> 27) + b | 0;
113+
d += (a & c | b & ~c) + k[2] - 51403784 | 0;
114+
d = (d << 9 | d >>> 23) + a | 0;
115+
c += (d & b | a & ~b) + k[7] + 1735328473 | 0;
116+
c = (c << 14 | c >>> 18) + d | 0;
117+
b += (c & a | d & ~a) + k[12] - 1926607734 | 0;
118+
b = (b << 20 | b >>> 12) + c | 0;
119+
120+
a += (b ^ c ^ d) + k[5] - 378558 | 0;
121+
a = (a << 4 | a >>> 28) + b | 0;
122+
d += (a ^ b ^ c) + k[8] - 2022574463 | 0;
123+
d = (d << 11 | d >>> 21) + a | 0;
124+
c += (d ^ a ^ b) + k[11] + 1839030562 | 0;
125+
c = (c << 16 | c >>> 16) + d | 0;
126+
b += (c ^ d ^ a) + k[14] - 35309556 | 0;
127+
b = (b << 23 | b >>> 9) + c | 0;
128+
a += (b ^ c ^ d) + k[1] - 1530992060 | 0;
129+
a = (a << 4 | a >>> 28) + b | 0;
130+
d += (a ^ b ^ c) + k[4] + 1272893353 | 0;
131+
d = (d << 11 | d >>> 21) + a | 0;
132+
c += (d ^ a ^ b) + k[7] - 155497632 | 0;
133+
c = (c << 16 | c >>> 16) + d | 0;
134+
b += (c ^ d ^ a) + k[10] - 1094730640 | 0;
135+
b = (b << 23 | b >>> 9) + c | 0;
136+
a += (b ^ c ^ d) + k[13] + 681279174 | 0;
137+
a = (a << 4 | a >>> 28) + b | 0;
138+
d += (a ^ b ^ c) + k[0] - 358537222 | 0;
139+
d = (d << 11 | d >>> 21) + a | 0;
140+
c += (d ^ a ^ b) + k[3] - 722521979 | 0;
141+
c = (c << 16 | c >>> 16) + d | 0;
142+
b += (c ^ d ^ a) + k[6] + 76029189 | 0;
143+
b = (b << 23 | b >>> 9) + c | 0;
144+
a += (b ^ c ^ d) + k[9] - 640364487 | 0;
145+
a = (a << 4 | a >>> 28) + b | 0;
146+
d += (a ^ b ^ c) + k[12] - 421815835 | 0;
147+
d = (d << 11 | d >>> 21) + a | 0;
148+
c += (d ^ a ^ b) + k[15] + 530742520 | 0;
149+
c = (c << 16 | c >>> 16) + d | 0;
150+
b += (c ^ d ^ a) + k[2] - 995338651 | 0;
151+
b = (b << 23 | b >>> 9) + c | 0;
152+
153+
a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;
154+
a = (a << 6 | a >>> 26) + b | 0;
155+
d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;
156+
d = (d << 10 | d >>> 22) + a | 0;
157+
c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;
158+
c = (c << 15 | c >>> 17) + d | 0;
159+
b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;
160+
b = (b << 21 |b >>> 11) + c | 0;
161+
a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;
162+
a = (a << 6 | a >>> 26) + b | 0;
163+
d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;
164+
d = (d << 10 | d >>> 22) + a | 0;
165+
c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;
166+
c = (c << 15 | c >>> 17) + d | 0;
167+
b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;
168+
b = (b << 21 |b >>> 11) + c | 0;
169+
a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;
170+
a = (a << 6 | a >>> 26) + b | 0;
171+
d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;
172+
d = (d << 10 | d >>> 22) + a | 0;
173+
c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;
174+
c = (c << 15 | c >>> 17) + d | 0;
175+
b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;
176+
b = (b << 21 |b >>> 11) + c | 0;
177+
a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;
178+
a = (a << 6 | a >>> 26) + b | 0;
179+
d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;
180+
d = (d << 10 | d >>> 22) + a | 0;
181+
c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;
182+
c = (c << 15 | c >>> 17) + d | 0;
183+
b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;
184+
b = (b << 21 | b >>> 11) + c | 0;
185+
186+
x[0] = a + x[0] | 0;
187+
x[1] = b + x[1] | 0;
188+
x[2] = c + x[2] | 0;
189+
x[3] = d + x[3] | 0;
142190
}
143191

144192
function md5blk(s) {

0 commit comments

Comments
 (0)