UNPKG

@codingtools/cdt

Version:
98 lines 4.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const command_1 = require("@oclif/command"); const crypto_js_1 = tslib_1.__importDefault(require("crypto-js")); const logger_1 = tslib_1.__importDefault(require("../utilities/logger")); const utilities_1 = tslib_1.__importDefault(require("../utilities/utilities")); class Crypto extends command_1.Command { //need INPUT_STRING, TYPE_OF_CRYPTO , KEY, MODE async run() { const { args, flags } = this.parse(Crypto); args.string = utilities_1.default.getInputString(this, flags, args); //always add input to args args.type = flags.encryption ? flags.encryption : flags.decryption; //type like AES,DES this.checkParameters(flags, args); return flags.encryption ? this.Encrypt(flags, args) : this.Decrypt(flags, args); } Encrypt(flags, args) { let crypto = this.getCryptoType(args.type); logger_1.default.info(this, `Encryption: ${flags.encryption.toUpperCase()}`); // @ts-ignore // as crypto will never be undefined and reach here let encrypted = crypto.encrypt(args.string, flags.key, { mode: this.getCryptoMode(flags) }).toString(); logger_1.default.success(this, `${encrypted}`); return encrypted; } Decrypt(flags, args) { let crypto = this.getCryptoType(args.type); logger_1.default.info(this, `Decryption: ${flags.decryption.toUpperCase()}`); // @ts-ignore // as crypto will never be undefined and reach here let decrypted = crypto.decrypt(args.string, flags.key, { mode: this.getCryptoMode(flags) }).toString(crypto_js_1.default.enc.Utf8); logger_1.default.success(this, `${decrypted}`); return decrypted; } getCryptoType(type) { switch (type.toUpperCase()) { case 'AES': return crypto_js_1.default.AES; case 'DES': return crypto_js_1.default.DES; case '3DES': return crypto_js_1.default.TripleDES; case 'RABBIT': return crypto_js_1.default.Rabbit; case 'RC4': return crypto_js_1.default.RC4; case 'RC4DROP': return crypto_js_1.default.RC4Drop; default: logger_1.default.error(this, 'Invalid or Unsupported Encryption/Decryption type'); } } // to check required parameters passed or not checkParameters(flags, args) { if (!flags.key) logger_1.default.error(this, 'Key is not passed'); if (args.string === undefined || args.string === '') logger_1.default.error(this, 'Input string is empty or undefined'); if (flags.encryption && flags.decryption) logger_1.default.error(this, 'Both encryption and decryption methods passed'); if (!(flags.encryption || flags.decryption)) logger_1.default.error(this, 'Neither encryption or decryption methods passed'); } getCryptoMode(flags) { if (!flags.mode) //set default flags.mode = 'CBC'; // it will not set to flags.mode there in run() but we do not require it logger_1.default.info(this, 'Block Mode: ' + flags.mode); switch (flags.mode.toUpperCase()) { case 'CBC': return crypto_js_1.default.mode.CBC; case 'CFB': return crypto_js_1.default.mode.CFB; case 'OFB': return crypto_js_1.default.mode.OFB; case 'ECB': return crypto_js_1.default.mode.ECB; default: logger_1.default.error(this, 'Invalid or Unsupported Block Mode'); } } } exports.default = Crypto; Crypto.ENCRYPTION = 'encryption'; Crypto.DECRYPTION = 'decryption'; Crypto.description = 'Encryption and Decryption functionality for File/String'; Crypto.flags = { help: command_1.flags.help({ char: 'h' }), encryption: command_1.flags.string({ char: 'e', description: 'encryption type, Supported [AES, DES, 3DES, Rabbit, RC4, RC4Drop]' }), decryption: command_1.flags.string({ char: 'd', description: 'decryption type, Supported [AES, DES, 3DES, Rabbit, RC4, RC4Drop]' }), string: command_1.flags.string({ char: 's', description: 'string to be encrypted/decrypted' }), file: command_1.flags.string({ char: 'f', description: 'file to be encrypted/decrypted' }), key: command_1.flags.string({ char: 'k', description: 'key for encryption/decryption' }), mode: command_1.flags.string({ char: 'm', description: 'Block Mode, Supported [CBC, CFB, CTR, OFB, ECB]' }) }; Crypto.args = [{ name: 'string' }]; //# sourceMappingURL=crypto.js.map