UNPKG

libc-crypt

Version:

A JavaScript implementation of the Unix libc crypt

44 lines (35 loc) 1.17 kB
var SALT_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012345678./"; var B64T = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; function randomInt(low, high) { return Math.floor(Math.random() * (high - low) + low); } function createRandomSalt(num) { var numSaltChars = SALT_CHARS.length; var salt = ""; for (var i = 0; i < num; i++) { salt += SALT_CHARS[randomInt(0, numSaltChars)]; } return salt; } function isValidUnixSalt(salt) { return salt.match("^[" + SALT_CHARS + "]{2,}$"); } function isValidMd5Salt(prefix, salt) { return salt.match("^" + prefix.replace(/\$/g, "\\$") + "([" + SALT_CHARS + "]{1,8}).*"); } function b64from24bit(b2, b1, b0, outLen) { var w = ((b2 << 16) & 0x00ffffff) | ((b1 << 8) & 0x00ffff) | (b0 & 0xff); var result = ""; var n = outLen; while (n-- > 0) { result += B64T[w & 0x3f]; w >>= 6; } return result; } module.exports = { createRandomSalt: createRandomSalt, isValidUnixSalt: isValidUnixSalt, isValidMd5Salt: isValidMd5Salt, b64from24bit: b64from24bit }