brf/server/plugins/auth/helpers.ts
2025-12-18 07:31:37 +01:00

25 lines
687 B
TypeScript

import crypto from 'node:crypto'
import util from 'node:util'
const scrypt = util.promisify(crypto.scrypt)
const tokenLength = 64
export async function hashPassword(password: string) {
const salt = crypto.randomBytes(32)
const hash = (await scrypt(password, salt, 64)) as Buffer
return Buffer.concat([salt, hash]).toString('base64')
}
export async function verifyPassword(password: string, hash: string) {
const buf = Buffer.from(hash, 'base64')
return crypto.timingSafeEqual(buf.subarray(32), (await scrypt(password, buf.subarray(0, 32), 64)) as Buffer)
}
export function generateToken(length = tokenLength) {
return crypto.randomBytes(length / 2).toString('hex')
}