def modify(fileName): dictkeys = jsonToDict(fileName) def modifyKeyValue(keyName): if keyName in dictkeys: key = message.prompt(keyName + ' new value') if (key != ''): dictkeys[keyName] = key elif (key == ''): message.error('Value cannot be empty.') getKeyValue(keyName) else: message.error('No such Key exists!') while (True): keyName = message.prompt('Enter Key to be modified (done)') if (keyName != ''): modifyKeyValue(keyName) elif (keyName == ''): break try: dictToJson(dictkeys, fileName) message.success('Keys modified successfully!') except: message.error('Some error occured!') return False #test functions #add(fileName) #subtract(fileName) #modify(fileName)
def generate_encryption(): key = keygen() #Displaying the Key message.success("SECURITY KEY GENERATED: " + key) user_choice = message.prompt("Save the key locally (Y/n)") # user choice to save the file # default user choice is YES if user_choice == "" or user_choice.lower() == "y" or user_choice.lower( ) == "yes": storage_choice = message.prompt( "Path to store key to (" + os.path.join(STORAGE_DIR, STORE_KEY_F) + "_keys.key" + ")") if storage_choice != "": storeKey(key, storage_choice) else: storeKey(key) print(key) elif user_choice.lower() == "n" or user_choice.lower() == "no": message.success("YOUR KEY WILL NOT BE STORED. KEEP IT SAFE.") else: message.error("INVALID INPUT") generateEncryption() return key
def display_json (filename, display_indent=4): json_val = jsonToDict(filename) if json_val: message.success(filename + ' loaded successfully') printy (json_val, indentation=display_indent) else: message.error('JSON couldn\'t be loaded') debug.error('JSON to Dict Failed')
def dictToJson(inputDict, filename, indents=2): try: with open(filename, 'w') as fh2: fh2.write(json.dumps(inputDict, indent=indents, sort_keys=True)) message.success('Keys stored successfully') return True except Exception as e: message.error('Couldn\'t write to JSON') debug.error(str(e)) return False
def keygen(): try: #generating the key and storing them in a file key = Fernet.generate_key() message.success("Encryption key generated successfully") except Exception as e: message.error('Couldn\'t generate encryption key') debug.error(str(e)) return False return key.decode('utf-8')
def decryption(key, filename): try: with open(filename, 'rb') as f: data = f.read() q = Fernet(key) decrypted_message = q.decrypt(data) with open(filename, 'wb') as f: f.write(decrypted_message) message.success(filename + ' successfully decrypted') except Exception as e: message.error(filename + ' couldn\'t be decrypted') debug.error(filename + ' couldn\'t be decrypted') print(e) return False return True
def init_function(): if init_default_key_storage(): filename = get_filename_from_user() tokendict = get_keys_from_user() enc_key = generate_encryption() if dictToJson(tokendict, filename): if encryption(enc_key, filename): message.success("Filename: " + filename) else: message.error("Filename: " + filename) message.success("Keys Added: ") printy(tokendict, indentation=4) # init_function()
def encryption(key, filename): try: with open(filename, 'rb') as f: data = f.read() #encrypting the data from the given file name fernet = Fernet(key) encrypted = fernet.encrypt(data) with open(filename, 'wb') as f: f.write(encrypted) message.success(filename + ' successfully encrypted') except Exception as e: message.error(filename + ' couldn\'t be encrypted') debug.error(filename + ' couldn\'t be encrypted') print(e) return False return True
def storeKey(key, filename=STORE_KEY_F): storeTo = os.path.join(STORAGE_DIR, filename) + "_keys.key" if init_default_key_storage(): try: #creating the key file in which the key'll be stored file = open(storeTo, 'w') file.write(key) file.close() message.success("Key was stored to " + storeTo + " successfully") except Exception as e: message.error("Key couldn't be stored to " + storeTo) debug.error("Key couldn't be stored to " + storeTo) return False return True else: return False
def getKey(filename=STORE_KEY_F): getFrom = os.path.join(STORAGE_DIR, filename) + "_keys.key" if init_default_key_storage(): try: # retriving key file file = open(getFrom, 'r') key = file.read() file.close() message.success('Loaded encryption key successfully') return key except: message.error('Couldn\'t load encryption key') debug.error('Couldn\'t load encryption key') return False else: message.error('Couldn\'t load encryption key') debug.error('Couldn\'t load encryption key') return False
def subtract(fileName): dictkeys = jsonToDict(fileName) def removeKeyValue(keyName): try: del dictkeys[keyName] except: message.error('No such Key exists!') while (True): keyName = message.prompt('Enter Key to be removed (done)') if (keyName != ''): removeKeyValue(keyName) elif (keyName == ''): break try: dictToJson(dictkeys, fileName) message.success('Keys removed successfully!') except: message.error('Some error occured!') return False
def add(fileName): dictkeys = jsonToDict(fileName) def getKeyValue(keyName): key = message.prompt(keyName + ' value') if (key != ''): dictkeys[keyName] = key elif (key == ''): message.error('Value cannot be empty.') getKeyValue(keyName) while (True): keyName = message.prompt('Key (done)') if (keyName != ''): getKeyValue(keyName) elif (keyName == ''): break try: dictToJson(dictkeys, fileName) message.success('New keys added successfully!') except: message.error('Some error occured!') return False
def version(): message.success("CLIK Version 1.0")
def help(): message.success( "Usage: clik <command> \n \n init\t\tinitializes the script to input key value pairs \n add\t\tinsert key value pair in existing json file, clik <name of file> add\n sub\t\tdelete key value pair in existing json file, clik <name of file> sub \n mod\t\talter key value in existing json file, clik <name of file> mod\n enc\t\tencrypts key value dictionary to json and generate encryption key, clik <name of file> enc\n dec\t\tdecrypts json file to dictionary, clik <name of file> dec\n help\t\tguide through all the CLIK functions \n version\tshows the CLIK version installed " )