@r1tsu/payload
Version:
34 lines (33 loc) • 1.27 kB
JavaScript
import crypto from 'crypto';
import { ValidationError } from '../../../errors/index.js';
const defaultPasswordValidator = (password)=>{
if (!password) return 'No password was given';
if (password.length < 3) return 'Password must be at least 3 characters';
return true;
};
function randomBytes() {
return new Promise((resolve, reject)=>crypto.randomBytes(32, (err, saltBuffer)=>err ? reject(err) : resolve(saltBuffer)));
}
function pbkdf2Promisified(password, salt) {
return new Promise((resolve, reject)=>crypto.pbkdf2(password, salt, 25000, 512, 'sha256', (err, hashRaw)=>err ? reject(err) : resolve(hashRaw)));
}
export const generatePasswordSaltHash = async ({ password })=>{
const validationResult = defaultPasswordValidator(password);
if (typeof validationResult === 'string') {
throw new ValidationError([
{
field: 'password',
message: validationResult
}
]);
}
const saltBuffer = await randomBytes();
const salt = saltBuffer.toString('hex');
const hashRaw = await pbkdf2Promisified(password, salt);
const hash = hashRaw.toString('hex');
return {
hash,
salt
};
};
//# sourceMappingURL=generatePasswordSaltHash.js.map