Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | 1x 1x 16x 16x 16x 16x 16x 1x | /**
* @file Multi-Factor Derived Key Crypto Functions
* @copyright Multifactor, Inc. 2022–2025
*
* @description
* Multi-Factor Deterministic Password Generator (MFDPG2)
*
* @author Vivek Nair (https://nair.me) <vivek@nair.me>
*/
const RandExp = require('randexp')
const rand = require('random-seed')
/**
* Generate a policy-compliant password for a given purpose.
*
* @example
* const setup = await mfkdf.setup.key([
* await mfkdf.setup.factors.password('password1', {
* id: 'password1'
* })
* ])
* const password = setup.derivePassword(
* 'example.com',
* 'salt',
* /[a-zA-Z]{6,10}/
* )
*
* const password2 = setup.derivePassword(
* 'example.com',
* 'salt',
* /[a-zA-Z]{6,10}/
* )
* password.should.equal(password2)
*
* @param {string} purpose - Unique purpose value for this password
* @param {string} salt - Unique salt value for this salt
* @param {string} regex - Regular expression defining password policy
* @returns {string} Derived password
* @author Vivek Nair (https://nair.me) <vivek@nair.me>
* @since 2.0.0
* @memberOf MFKDFDerivedKey
* @async
*/
async function derivePassword (purpose, salt, regex) {
const passwordKey = await this.getSubkey(purpose, salt)
const dfa = new RandExp(regex)
const rng = rand.create(passwordKey.toString('hex'))
dfa.randInt = rng.intBetween
return dfa.gen()
}
module.exports.derivePassword = derivePassword
|