var crypto = require('crypto'); var $ = require('./common'); /* * Generate the LM Hash */ function lmhashbuf(inputstr) { /* ASCII --> uppercase */ var x = inputstr.substring(0, 14).toUpperCase(); var xl = Buffer.byteLength(x, 'ascii'); /* null pad to 14 bytes */ var y = new Buffer(14); y.write(x, 0, xl, 'ascii'); y.fill(0, xl); /* insert odd parity bits in key */ var halves = [ $.oddpar($.expandkey(y.slice(0, 7))), $.oddpar($.expandkey(y.slice(7, 14))) ]; /* DES encrypt magic number "KGS!@#$%" to two * 8-byte ciphertexts, (ECB, no padding) */ var buf = new Buffer(16); var pos = 0; var cts = halves.forEach(function(z) { var des = crypto.createCipheriv('DES-ECB', z, ''); var str = des.update('KGS!@#$%', 'binary', 'binary'); buf.write(str, pos, pos + 8, 'binary'); pos += 8; }); /* concat the two ciphertexts to form 16byte value, * the LM hash */ return buf; } function nthashbuf(str) { /* take MD4 hash of UCS-2 encoded password */ var ucs2 = new Buffer(str, 'ucs2'); var md4 = crypto.createHash('md4'); md4.update(ucs2); return new Buffer(md4.digest('binary'), 'binary'); } function lmhash(is) { return $.bintohex(lmhashbuf(is)); } function nthash(is) { return $.bintohex(nthashbuf(is)); } module.exports.nthashbuf = nthashbuf; module.exports.lmhashbuf = lmhashbuf; module.exports.nthash = nthash; module.exports.lmhash = lmhash;