| 59 | * Calculate the MD5 of an array of little-endian words, and a bit length. |
| 60 | */ |
| 61 | function binlMD5 (x, len) { |
| 62 | /* append padding */ |
| 63 | x[len >> 5] |= 0x80 << (len % 32) |
| 64 | x[(((len + 64) >>> 9) << 4) + 14] = len |
| 65 | |
| 66 | var i |
| 67 | var olda |
| 68 | var oldb |
| 69 | var oldc |
| 70 | var oldd |
| 71 | var a = 1732584193 |
| 72 | var b = -271733879 |
| 73 | var c = -1732584194 |
| 74 | var d = 271733878 |
| 75 | |
| 76 | for (i = 0; i < x.length; i += 16) { |
| 77 | olda = a |
| 78 | oldb = b |
| 79 | oldc = c |
| 80 | oldd = d |
| 81 | |
| 82 | a = md5ff(a, b, c, d, x[i], 7, -680876936) |
| 83 | d = md5ff(d, a, b, c, x[i + 1], 12, -389564586) |
| 84 | c = md5ff(c, d, a, b, x[i + 2], 17, 606105819) |
| 85 | b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330) |
| 86 | a = md5ff(a, b, c, d, x[i + 4], 7, -176418897) |
| 87 | d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426) |
| 88 | c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341) |
| 89 | b = md5ff(b, c, d, a, x[i + 7], 22, -45705983) |
| 90 | a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416) |
| 91 | d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417) |
| 92 | c = md5ff(c, d, a, b, x[i + 10], 17, -42063) |
| 93 | b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162) |
| 94 | a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682) |
| 95 | d = md5ff(d, a, b, c, x[i + 13], 12, -40341101) |
| 96 | c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290) |
| 97 | b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329) |
| 98 | |
| 99 | a = md5gg(a, b, c, d, x[i + 1], 5, -165796510) |
| 100 | d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632) |
| 101 | c = md5gg(c, d, a, b, x[i + 11], 14, 643717713) |
| 102 | b = md5gg(b, c, d, a, x[i], 20, -373897302) |
| 103 | a = md5gg(a, b, c, d, x[i + 5], 5, -701558691) |
| 104 | d = md5gg(d, a, b, c, x[i + 10], 9, 38016083) |
| 105 | c = md5gg(c, d, a, b, x[i + 15], 14, -660478335) |
| 106 | b = md5gg(b, c, d, a, x[i + 4], 20, -405537848) |
| 107 | a = md5gg(a, b, c, d, x[i + 9], 5, 568446438) |
| 108 | d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690) |
| 109 | c = md5gg(c, d, a, b, x[i + 3], 14, -187363961) |
| 110 | b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501) |
| 111 | a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467) |
| 112 | d = md5gg(d, a, b, c, x[i + 2], 9, -51403784) |
| 113 | c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473) |
| 114 | b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734) |
| 115 | |
| 116 | a = md5hh(a, b, c, d, x[i + 5], 4, -378558) |
| 117 | d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463) |
| 118 | c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562) |