diff options
Diffstat (limited to 'utils/lib/md4.js')
-rwxr-xr-x | utils/lib/md4.js | 146 |
1 files changed, 0 insertions, 146 deletions
diff --git a/utils/lib/md4.js b/utils/lib/md4.js deleted file mode 100755 index fe9a292..0000000 --- a/utils/lib/md4.js +++ /dev/null @@ -1,146 +0,0 @@ -/* - - Version 2.1 Copyright (C) Jerrad Pierce, Paul Johnston 1999 - 2002. - Distributed under the BSD License - - Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - See http://pajhome.org.uk/crypt/md5 for more info. - -*/ - -/** - - A JavaScript implementation of the RSA Data Security, Inc. MD4 Message - Digest Algorithm, as defined in RFC 1320. - -*/ - -var util = require('./util'); -var struct = require('./struct'); - -/*** hash - returns a hexadecimal string of the md4 hash for a given byte string -*/ -exports.hash = function (s, _characterSize) { - if (util.no(_characterSize)) - _characterSize = struct.characterSize; - return struct.binl2bin(core_md4(struct.str2binl(s), s.length * _characterSize)); -}; - -/* - Calculate the MD4 of an array of little-endian words, and a bit length -*/ -var core_md4 = function (x, len) { - /* append padding */ - x[len >> 5] |= 0x80 << (len % 32); - x[(((len + 64) >>> 9) << 4) + 14] = len; - - var a = 1732584193; - var b = -271733879; - var c = -1732584194; - var d = 271733878; - - for(var i = 0; i < x.length; i += 16) { - var olda = a; - var oldb = b; - var oldc = c; - var oldd = d; - - a = md4_ff(a, b, c, d, x[i+ 0], 3 ); - d = md4_ff(d, a, b, c, x[i+ 1], 7 ); - c = md4_ff(c, d, a, b, x[i+ 2], 11); - b = md4_ff(b, c, d, a, x[i+ 3], 19); - a = md4_ff(a, b, c, d, x[i+ 4], 3 ); - d = md4_ff(d, a, b, c, x[i+ 5], 7 ); - c = md4_ff(c, d, a, b, x[i+ 6], 11); - b = md4_ff(b, c, d, a, x[i+ 7], 19); - a = md4_ff(a, b, c, d, x[i+ 8], 3 ); - d = md4_ff(d, a, b, c, x[i+ 9], 7 ); - c = md4_ff(c, d, a, b, x[i+10], 11); - b = md4_ff(b, c, d, a, x[i+11], 19); - a = md4_ff(a, b, c, d, x[i+12], 3 ); - d = md4_ff(d, a, b, c, x[i+13], 7 ); - c = md4_ff(c, d, a, b, x[i+14], 11); - b = md4_ff(b, c, d, a, x[i+15], 19); - - a = md4_gg(a, b, c, d, x[i+ 0], 3 ); - d = md4_gg(d, a, b, c, x[i+ 4], 5 ); - c = md4_gg(c, d, a, b, x[i+ 8], 9 ); - b = md4_gg(b, c, d, a, x[i+12], 13); - a = md4_gg(a, b, c, d, x[i+ 1], 3 ); - d = md4_gg(d, a, b, c, x[i+ 5], 5 ); - c = md4_gg(c, d, a, b, x[i+ 9], 9 ); - b = md4_gg(b, c, d, a, x[i+13], 13); - a = md4_gg(a, b, c, d, x[i+ 2], 3 ); - d = md4_gg(d, a, b, c, x[i+ 6], 5 ); - c = md4_gg(c, d, a, b, x[i+10], 9 ); - b = md4_gg(b, c, d, a, x[i+14], 13); - a = md4_gg(a, b, c, d, x[i+ 3], 3 ); - d = md4_gg(d, a, b, c, x[i+ 7], 5 ); - c = md4_gg(c, d, a, b, x[i+11], 9 ); - b = md4_gg(b, c, d, a, x[i+15], 13); - - a = md4_hh(a, b, c, d, x[i+ 0], 3 ); - d = md4_hh(d, a, b, c, x[i+ 8], 9 ); - c = md4_hh(c, d, a, b, x[i+ 4], 11); - b = md4_hh(b, c, d, a, x[i+12], 15); - a = md4_hh(a, b, c, d, x[i+ 2], 3 ); - d = md4_hh(d, a, b, c, x[i+10], 9 ); - c = md4_hh(c, d, a, b, x[i+ 6], 11); - b = md4_hh(b, c, d, a, x[i+14], 15); - a = md4_hh(a, b, c, d, x[i+ 1], 3 ); - d = md4_hh(d, a, b, c, x[i+ 9], 9 ); - c = md4_hh(c, d, a, b, x[i+ 5], 11); - b = md4_hh(b, c, d, a, x[i+13], 15); - a = md4_hh(a, b, c, d, x[i+ 3], 3 ); - d = md4_hh(d, a, b, c, x[i+11], 9 ); - c = md4_hh(c, d, a, b, x[i+ 7], 11); - b = md4_hh(b, c, d, a, x[i+15], 15); - - a = struct.addU32(a, olda); - b = struct.addU32(b, oldb); - c = struct.addU32(c, oldc); - d = struct.addU32(d, oldd); - - } - return [a, b, c, d]; - -}; - -/* - These functions implement the basic operation for each round of the - algorithm. -*/ - -var md4_cmn = function (q, a, b, x, s, t) { - return struct.addU32(struct.rolU32(struct.addU32(a, q, x, t), s), b); -}; -var md4_ff = function (a, b, c, d, x, s) { - return md4_cmn((b & c) | ((~b) & d), a, 0, x, s, 0); -}; -var md4_gg = function (a, b, c, d, x, s) { - return md4_cmn((b & c) | (b & d) | (c & d), a, 0, x, s, 1518500249); -}; -var md4_hh = function (a, b, c, d, x, s) { - return md4_cmn(b ^ c ^ d, a, 0, x, s, 1859775393); -}; - -/* - Calculate the HMAC-MD4, of a key and some data -*/ -var core_hmac_md4 = function (key, data, _characterSize) { - if (no(_characterSize)) - _characterSize = struct.characterSize; - var bkey = struct.str2binl(key); - if(bkey.length > 16) bkey = core_md4(bkey, key.length * _characterSize); - - var ipad = [], opad = []; - for(var i = 0; i < 16; i++) { - ipad[i] = bkey[i] ^ 0x36363636; - opad[i] = bkey[i] ^ 0x5C5C5C5C; - } - - var hash = core_md4(ipad.concat(struct.str2binl(data)), 512 + data.length * _characterSize); - return core_md4(opad.concat(hash), 512 + 128); -}; - |