keyvenant
Version:
Keyvenant is a JavaScript tool to generate and export CovenantSQL keys to facilitate key management locally and in web extensions.
43 lines • 3.24 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const utils_1 = require("./utils");
const sha256_1 = require("./utils/sha256");
/**
* derive secret key from password user typed-in
* use sha256x2 as key derivation function(kdf)
* @param password user's password in utf8
* @param salt default salt in hex
* @return secretKey string in hex (16 bytes because of sha256)
*/
function derive(password, salt) {
if (typeof password === 'undefined' || password === null) {
throw new Error('Must provide password and salt to derive a key');
}
// convert strings to buffers
const saltBuf = utils_1.string2Buffer(salt, 'hex');
const passwordBuf = utils_1.string2Buffer(password, 'utf8');
// use double sha256 as key derivation function
const concated = Buffer.concat([passwordBuf, saltBuf]);
const secretKey = sha256_1.sha256x2(concated);
return secretKey.toString('hex');
}
exports.derive = derive;
/**
* verify secret key from password and salt
* @param password old password in utf8
* @param salt default salt in hex
* @param secretKey secret key in hex
* @return boolean of verify success or not
*/
function verify(password, salt, secretKey) {
const secretKeyBuf = utils_1.string2Buffer(secretKey, 'hex');
// convert strings to buffers
const saltBuf = utils_1.string2Buffer(salt, 'hex');
const passwordBuf = utils_1.string2Buffer(password, 'utf8');
// prepare secretKeyToVerify
const concated = Buffer.concat([passwordBuf, saltBuf]);
const secretKeyToVerify = sha256_1.sha256x2(concated);
return Buffer.compare(secretKeyBuf, secretKeyToVerify) === 0;
}
exports.verify = verify;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0a2V5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9zZWNyZXRrZXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxtQ0FBdUM7QUFDdkMsMkNBQXlDO0FBRXpDOzs7Ozs7R0FNRztBQUNILFNBQWdCLE1BQU0sQ0FDcEIsUUFBZ0IsRUFDaEIsSUFBWTtJQUVaLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUU7UUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFBO0tBQ2xFO0lBRUQsNkJBQTZCO0lBQzdCLE1BQU0sT0FBTyxHQUFHLHFCQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQzFDLE1BQU0sV0FBVyxHQUFHLHFCQUFhLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBRW5ELCtDQUErQztJQUMvQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUE7SUFDdEQsTUFBTSxTQUFTLEdBQUcsaUJBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUVwQyxPQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDbEMsQ0FBQztBQWpCRCx3QkFpQkM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixNQUFNLENBQ3BCLFFBQWdCLEVBQ2hCLElBQVksRUFDWixTQUFpQjtJQUVqQixNQUFNLFlBQVksR0FBRyxxQkFBYSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUVwRCw2QkFBNkI7SUFDN0IsTUFBTSxPQUFPLEdBQUcscUJBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDMUMsTUFBTSxXQUFXLEdBQUcscUJBQWEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFFbkQsNEJBQTRCO0lBQzVCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtJQUN0RCxNQUFNLGlCQUFpQixHQUFHLGlCQUFRLENBQUMsUUFBUSxDQUFDLENBQUE7SUFFNUMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUM5RCxDQUFDO0FBaEJELHdCQWdCQyJ9