31 lines
1.3 KiB
JavaScript
31 lines
1.3 KiB
JavaScript
// Perhaps use hashy as reference to implement bcrypt and needRehash action
|
|
// https://github.com/JsCommunity/hashy
|
|
|
|
// supports argon2i, argon2d and argon2id
|
|
exports.passwordHash = async function(options) {
|
|
const password = this.parseRequired(options.password, 'string', 'crypto.passwordHash: password is required.')
|
|
const algo = this.parseOptional(options.algo, 'string', 'argon2i')
|
|
const argon2 = require('argon2')
|
|
const type = argon2[algo]
|
|
return argon2.hash(password, { type })
|
|
}
|
|
|
|
exports.passwordVerify = async function(options) {
|
|
const password = this.parseRequired(options.password, 'string', 'crypto.passwordVerify: password is required.')
|
|
const hash = this.parseRequired(options.hash, 'string', 'crypto.passwordVerify: hash is required.')
|
|
const argon2 = require('argon2')
|
|
return argon2.verify(hash, password)
|
|
}
|
|
|
|
exports.passwordNeedsRehash = async function(options) {
|
|
const hash = this.parseRequired(options.hash, 'string', 'crypto.passwordNeedsRehash: hash is required.')
|
|
const algo = this.parseOptional(options.algo, 'string', 'argon2i')
|
|
const argon2 = require('argon2')
|
|
return argon2.needsRehash(hash, {})
|
|
}
|
|
|
|
exports.uuid = async function(options) {
|
|
const { randomUUID } = require('crypto')
|
|
const { v4: uuidv4 } = require('uuid')
|
|
return randomUUID ? randomUUID() : uuidv4()
|
|
} |