keyvenant
Version:
Keyvenant is a JavaScript tool to generate and export CovenantSQL keys to facilitate key management locally and in web extensions.
39 lines • 3.12 kB
JavaScript
import { string2Buffer } from './utils';
import { sha256x2 } from './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)
*/
export 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 = string2Buffer(salt, 'hex');
const passwordBuf = string2Buffer(password, 'utf8');
// use double sha256 as key derivation function
const concated = Buffer.concat([passwordBuf, saltBuf]);
const secretKey = sha256x2(concated);
return secretKey.toString('hex');
}
/**
* 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
*/
export function verify(password, salt, secretKey) {
const secretKeyBuf = string2Buffer(secretKey, 'hex');
// convert strings to buffers
const saltBuf = string2Buffer(salt, 'hex');
const passwordBuf = string2Buffer(password, 'utf8');
// prepare secretKeyToVerify
const concated = Buffer.concat([passwordBuf, saltBuf]);
const secretKeyToVerify = sha256x2(concated);
return Buffer.compare(secretKeyBuf, secretKeyToVerify) === 0;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0a2V5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9zZWNyZXRrZXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFekM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FDcEIsUUFBZ0IsRUFDaEIsSUFBWTtJQUVaLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUU7UUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFBO0tBQ2xFO0lBRUQsNkJBQTZCO0lBQzdCLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDMUMsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUVuRCwrQ0FBK0M7SUFDL0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFBO0lBQ3RELE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUVwQyxPQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDbEMsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQ3BCLFFBQWdCLEVBQ2hCLElBQVksRUFDWixTQUFpQjtJQUVqQixNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBRXBELDZCQUE2QjtJQUM3QixNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQzFDLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFFbkQsNEJBQTRCO0lBQzVCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtJQUN0RCxNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUU1QyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQzlELENBQUMifQ==