import { pbkdf2, randomBytes } from "crypto"; import Config from "../objects/Config"; export default abstract class PasswordUtility { public static ValidatePassword(hash:string, salt:string, password:string) { return new Promise((resolve, reject) => { pbkdf2(password, salt, Config.database.pbkdf2.itterations, Config.database.pbkdf2.keylength, "sha512", (err, derivedKey) => { if (err) { return reject(err); } else { if (derivedKey.toString("hex") !== hash) { return resolve(false); } return resolve(true); } }); }); } public static HashPassword(salt:string, password:string) { return new Promise((resolve, reject) => { pbkdf2(password, salt, Config.database.pbkdf2.itterations, Config.database.pbkdf2.keylength, "sha512", (err, derivedKey) => { if (err) { return reject(err); } else { return resolve(derivedKey.toString("hex")); } }); }); } public static GenerateSalt() { return randomBytes(Config.database.pbkdf2.keylength).toString("hex"); } }