DockerERTFF/lib/modules/crypto.js

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()
}