UNPKG

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
"use strict"; 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==