* Calculate the MD5 of an array of little-endian words, and a bit length.
(x, len)
| 550 | */ |
| 551 | |
| 552 | function binl(x, len) { |
| 553 | var i, olda, oldb, oldc, oldd, |
| 554 | a = 1732584193, |
| 555 | b = -271733879, |
| 556 | c = -1732584194, |
| 557 | d = 271733878; |
| 558 | |
| 559 | /* append padding */ |
| 560 | x[len >> 5] |= 0x80 << ((len) % 32); |
| 561 | x[(((len + 64) >>> 9) << 4) + 14] = len; |
| 562 | |
| 563 | for (i = 0; i < x.length; i += 16) { |
| 564 | olda = a; |
| 565 | oldb = b; |
| 566 | oldc = c; |
| 567 | oldd = d; |
| 568 | |
| 569 | a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936); |
| 570 | d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586); |
| 571 | c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819); |
| 572 | b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330); |
| 573 | a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897); |
| 574 | d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426); |
| 575 | c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341); |
| 576 | b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983); |
| 577 | a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416); |
| 578 | d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417); |
| 579 | c = md5_ff(c, d, a, b, x[i + 10], 17, -42063); |
| 580 | b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162); |
| 581 | a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682); |
| 582 | d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101); |
| 583 | c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290); |
| 584 | b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329); |
| 585 | |
| 586 | a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510); |
| 587 | d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632); |
| 588 | c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713); |
| 589 | b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302); |
| 590 | a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691); |
| 591 | d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083); |
| 592 | c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335); |
| 593 | b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848); |
| 594 | a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438); |
| 595 | d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690); |
| 596 | c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961); |
| 597 | b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501); |
| 598 | a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467); |
| 599 | d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784); |
| 600 | c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473); |
| 601 | b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734); |
| 602 | |
| 603 | a = md5_hh(a, b, c, d, x[i + 5], 4, -378558); |
| 604 | d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463); |
| 605 | c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562); |
| 606 | b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556); |
| 607 | a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060); |
| 608 | d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353); |
| 609 | c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632); |