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 54 55 56 | 1x 1x 32x 32x 1x 31x 1x | /**
* @file MFKDF Policy Setup
* @copyright Multifactor, Inc. 2022–2025
*
* @description
* Setup MFKDF key derivation policy
*
* @author Vivek Nair (https://nair.me) <vivek@nair.me>
*/
const setupKey = require('../setup/key').key
const validate = require('./validate').validate
/**
* Validate and setup a policy-based multi-factor derived key
*
* @example
* // setup key that can be derived from passwordA AND (passwordB OR passwordC)
* const setup = await mfkdf.policy.setup(
* await mfkdf.policy.and(
* await mfkdf.setup.factors.password('passwordA', { id: 'passwordA' }),
* await mfkdf.policy.or(
* await mfkdf.setup.factors.password('passwordB', { id: 'passwordB' }),
* await mfkdf.setup.factors.password('passwordC', { id: 'passwordC' })
* )
* )
* )
*
* // derive key with passwordA and passwordC (or passwordA and passwordB)
* const derive = await mfkdf.policy.derive(setup.policy, {
* passwordA: mfkdf.derive.factors.password('passwordA'),
* passwordC: mfkdf.derive.factors.password('passwordC'),
* })
*
* setup.key.toString('hex') // -> e16a…5263
* derive.key.toString('hex') // -> e16a…5263
*
* @param {MFKDFFactor} factor - Base factor used to derive this key
* @param {Object} [options] - Configuration options
* @param {string} [options.id] - Unique identifier for this key; random UUIDv4 generated by default
* @param {number} [options.threshold] - Number of factors required to derive key; factors.length by default (all required)
* @param {Buffer} [options.salt] - Cryptographic salt; generated via secure PRG by default (recommended)
* @returns {MFKDFDerivedKey} A multi-factor derived key object
* @author Vivek Nair (https://nair.me) <vivek@nair.me>
* @since 0.16.0
* @memberOf policy
*/
async function setup (factor, options) {
const key = await setupKey([factor], options)
if (!validate(key.policy)) {
throw new RangeError('policy contains duplicate ids')
}
return key
}
module.exports.setup = setup
|