UNPKG

keyvenant

Version:

Keyvenant is a JavaScript tool to generate and export CovenantSQL keys to facilitate key management locally and in web extensions.

62 lines 4.47 kB
import { string2Buffer } from './utils'; import crypto from './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) */ export 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.createCipheriv(algo, string2Buffer(key), string2Buffer(iv)); // encrypt plaintext buffer const firstHalf = cipher.update(string2Buffer(plaintext)); const lastHalf = cipher.final(); const encrypted = Buffer.concat([firstHalf, lastHalf]); return encrypted.toString('hex'); } /** * 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 */ export 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.createDecipheriv(algo, string2Buffer(key), string2Buffer(iv)); // decrypted plaintext buffer const plaintext = decipher.update(string2Buffer(encrypted)); // return Buffer or string return plaintext.toString('hex'); } /** * randomly generate iv * @param length default length is 16 btyes because of AES 128bit blocksize * @return iv in hex */ export function generateIv(length = 16) { let iv = crypto.randomBytes(length); return iv.toString('hex'); } /** * check cipher availablility * @param algo [description] * @return boolean of cipher availablility */ function isCipherAvailable(algo) { return crypto.getCiphers().some(cipher => { return cipher === algo; }); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ltbWV0cmljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9zeW1tZXRyaWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUN2QyxPQUFPLE1BQU0sTUFBTSxnQkFBZ0IsQ0FBQTtBQUVuQzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FDckIsU0FBaUIsRUFDakIsR0FBVyxFQUNYLEVBQVUsRUFDVixJQUFJLEdBQUcsUUFBUTtJQUVmLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixHQUFHLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxDQUFBO0tBQy9EO0lBQ0QsNEJBQTRCO0lBQzVCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUVqRiwyQkFBMkI7SUFDM0IsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtJQUN6RCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDL0IsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO0lBRXRELE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUNsQyxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxPQUFPLENBQ3JCLFNBQWlCLEVBQUUsV0FBVztBQUM5QixHQUFXLEVBQUUsc0JBQXNCO0FBQ25DLEVBQVUsRUFBRSxXQUFXO0FBQ3ZCLElBQUksR0FBRyxRQUFRO0lBRWYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFO1FBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLG1CQUFtQixDQUFDLENBQUE7S0FDL0Q7SUFFRCxXQUFXO0lBQ1gsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDckYsNkJBQTZCO0lBQzdCLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7SUFFM0QsMEJBQTBCO0lBQzFCLE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUNsQyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQ3hCLE1BQU0sR0FBRyxFQUFFO0lBRVgsSUFBSSxFQUFFLEdBQVcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUUzQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDM0IsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGlCQUFpQixDQUN4QixJQUFZO0lBRVosT0FBTyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsT0FBTyxNQUFNLEtBQUssSUFBSSxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDdkUsQ0FBQyJ9