keyvenant
Version:
Keyvenant is a JavaScript tool to generate and export CovenantSQL keys to facilitate key management locally and in web extensions.
70 lines • 4.85 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const utils_1 = require("./utils");
const crypto_1 = __importDefault(require("./utils/crypto"));
/**
* symmetric encryption
* @param plaintext input text to be encrypted
* @param key serectKey string in hex (16 btyes)
* @param iv iv string in hex (16 btyes because of AES 128bit blocksize)
* @param algo='aes256' symmetric encryption algo, defualt is AES256
* @return encrypted ciphertext in hex (48 btyes)
*/
function encrypt(plaintext, key, iv, algo = 'aes256') {
if (!isCipherAvailable(algo)) {
throw new Error('crypto cipher ' + algo + ' is not available');
}
// cipher, default as AES256
const cipher = crypto_1.default.createCipheriv(algo, utils_1.string2Buffer(key), utils_1.string2Buffer(iv));
// encrypt plaintext buffer
const firstHalf = cipher.update(utils_1.string2Buffer(plaintext));
const lastHalf = cipher.final();
const encrypted = Buffer.concat([firstHalf, lastHalf]);
return encrypted.toString('hex');
}
exports.encrypt = encrypt;
/**
* symmetric decryption
* @param encrypted encrypted ciphertext in hex (48 btyes)
* @param key serectKey string in hex (16 btyes)
* @param iv iv string in hex (16 btyes because of AES 128bit blocksize)
* @param algo='aes256' symmetric encryption algo, defualt is AES256
* @return decrypted text in hex
*/
function decrypt(encrypted, // 48 bytes
key, // derivedKey 16 bytes
iv, // 16 btyes
algo = 'aes256') {
if (!isCipherAvailable(algo)) {
throw new Error('crypto cipher ' + algo + ' is not available');
}
// decipher
const decipher = crypto_1.default.createDecipheriv(algo, utils_1.string2Buffer(key), utils_1.string2Buffer(iv));
// decrypted plaintext buffer
const plaintext = decipher.update(utils_1.string2Buffer(encrypted));
// return Buffer or string
return plaintext.toString('hex');
}
exports.decrypt = decrypt;
/**
* randomly generate iv
* @param length default length is 16 btyes because of AES 128bit blocksize
* @return iv in hex
*/
function generateIv(length = 16) {
let iv = crypto_1.default.randomBytes(length);
return iv.toString('hex');
}
exports.generateIv = generateIv;
/**
* check cipher availablility
* @param algo [description]
* @return boolean of cipher availablility
*/
function isCipherAvailable(algo) {
return crypto_1.default.getCiphers().some(cipher => { return cipher === algo; });
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ltbWV0cmljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9zeW1tZXRyaWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBdUM7QUFDdkMsNERBQW1DO0FBRW5DOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixPQUFPLENBQ3JCLFNBQWlCLEVBQ2pCLEdBQVcsRUFDWCxFQUFVLEVBQ1YsSUFBSSxHQUFHLFFBQVE7SUFFZixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsbUJBQW1CLENBQUMsQ0FBQTtLQUMvRDtJQUNELDRCQUE0QjtJQUM1QixNQUFNLE1BQU0sR0FBRyxnQkFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUscUJBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxxQkFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFFakYsMkJBQTJCO0lBQzNCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMscUJBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO0lBQ3pELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUMvQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUE7SUFFdEQsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQ2xDLENBQUM7QUFsQkQsMEJBa0JDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLE9BQU8sQ0FDckIsU0FBaUIsRUFBRSxXQUFXO0FBQzlCLEdBQVcsRUFBRSxzQkFBc0I7QUFDbkMsRUFBVSxFQUFFLFdBQVc7QUFDdkIsSUFBSSxHQUFHLFFBQVE7SUFFZixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsbUJBQW1CLENBQUMsQ0FBQTtLQUMvRDtJQUVELFdBQVc7SUFDWCxNQUFNLFFBQVEsR0FBRyxnQkFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxxQkFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFLHFCQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUNyRiw2QkFBNkI7SUFDN0IsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxxQkFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7SUFFM0QsMEJBQTBCO0lBQzFCLE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUNsQyxDQUFDO0FBakJELDBCQWlCQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixVQUFVLENBQ3hCLE1BQU0sR0FBRyxFQUFFO0lBRVgsSUFBSSxFQUFFLEdBQVcsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7SUFFM0MsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQzNCLENBQUM7QUFORCxnQ0FNQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGlCQUFpQixDQUN4QixJQUFZO0lBRVosT0FBTyxnQkFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLE9BQU8sTUFBTSxLQUFLLElBQUksQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3ZFLENBQUMifQ==