From b98073f562e64cff17cd860cf378583fcf157001 Mon Sep 17 00:00:00 2001 From: Saran Balaji C Date: Wed, 16 Oct 2019 22:38:03 +0530 Subject: [PATCH 1/3] implemented encryption with static key --- requirements.txt | 1 + setup.py | 3 ++- tmessage/cli.py | 10 +++++----- tmessage/utils.py | 27 ++++++++++++++++++++++++++- 4 files changed, 34 insertions(+), 7 deletions(-) diff --git a/requirements.txt b/requirements.txt index 12ccc18..317678e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,3 +6,4 @@ PyJWT==1.7.1 python-dotenv==0.10.3 pylint==2.4.2 simple-chalk==0.1.0 +cryptography==2.7 diff --git a/setup.py b/setup.py index c83557f..77ac668 100644 --- a/setup.py +++ b/setup.py @@ -15,7 +15,8 @@ def get_requirements(): 'requests==2.22.0', 'PyJWT==1.7.1', 'python-dotenv==0.10.3', - 'simple-chalk==0.1.0' + 'simple-chalk==0.1.0', + 'cryptography==2.7' ] return requirements diff --git a/tmessage/cli.py b/tmessage/cli.py index f6ebd14..89c7760 100644 --- a/tmessage/cli.py +++ b/tmessage/cli.py @@ -6,7 +6,7 @@ from simple_chalk import chalk import tmessage.auth as auth # auth.py from tmessage.db import store_messages # db.py -from tmessage.utils import get_formatted_message +from tmessage.utils import get_formatted_message, encrypt_message, decrypt_message # Initialize colorama init() @@ -48,12 +48,12 @@ def on_message(client, userdata, message): user_name_separator_index = current_msg.find(":") + 1 user_details = chalk.bgGreen(current_msg[:user_name_separator_index]) - msg = current_msg[user_name_separator_index + 1:] + encrypted_msg = current_msg[user_name_separator_index + 3:-1] + msg = decrypt_message(encrypted_msg.encode()).decode() if user != CURRENT_USER: print(user_details, msg) - _, _, message = current_msg.partition("] ") if IS_STORE: - store_messages(user, message) + store_messages(user, msg) def main(): @@ -85,7 +85,7 @@ def main(): while True: raw_msg = str(input(Back.RESET + Fore.RESET)) formatted_msg = get_formatted_message(raw_msg) - pub_msg = f"[{user_name}] {displayed_name}: {formatted_msg}" + pub_msg = f"[{user_name}] {displayed_name}: {encrypt_message(formatted_msg.encode())}" if raw_msg != "": MQTT_CLIENT.publish(MQTT_TOPIC, pub_msg) if IS_STORE: diff --git a/tmessage/utils.py b/tmessage/utils.py index 270e5e4..db77eb2 100644 --- a/tmessage/utils.py +++ b/tmessage/utils.py @@ -1,7 +1,7 @@ """Utils : Methods and Class which are used for tmessage.""" from html.parser import HTMLParser from simple_chalk import chalk - +from cryptography.fernet import Fernet # pylint: disable=W0223 class MessageParser(HTMLParser): @@ -48,3 +48,28 @@ def get_formatted_message(raw_message): parser = MessageParser() parser.feed(raw_message) return parser.message_to_show + + +def get_encryption_key(): + """get the encryption key to encrypt and decrypt. + + TODO: need to avoid static key by implementing Diffie-Hellman. + # Fernet.generate_key() will generate a new key + """ + return b'pxry9LY9AKkgHr-Zfs7x8hkUwJSHkdKxyeuq_retZ4A=' + + +def encrypt_message(message): + """encrypt a message and returns the encrypted message""" + key = get_encryption_key() + f = Fernet(key) + encrypted_message = f.encrypt(message) + return encrypted_message + + +def decrypt_message(message): + """decrypt an encrypted message and returns the message""" + key = get_encryption_key() + f = Fernet(key) + decrypted_message = f.decrypt(message) + return decrypted_message From 7687259797647456d9848d946a77c9ac6b50d076 Mon Sep 17 00:00:00 2001 From: Saran Balaji C Date: Wed, 16 Oct 2019 22:44:30 +0530 Subject: [PATCH 2/3] fixed pylint errors --- tmessage/utils.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tmessage/utils.py b/tmessage/utils.py index db77eb2..622d13e 100644 --- a/tmessage/utils.py +++ b/tmessage/utils.py @@ -62,14 +62,14 @@ def get_encryption_key(): def encrypt_message(message): """encrypt a message and returns the encrypted message""" key = get_encryption_key() - f = Fernet(key) - encrypted_message = f.encrypt(message) + fernet = Fernet(key) + encrypted_message = fernet.encrypt(message) return encrypted_message def decrypt_message(message): """decrypt an encrypted message and returns the message""" key = get_encryption_key() - f = Fernet(key) - decrypted_message = f.decrypt(message) + fernet = Fernet(key) + decrypted_message = fernet.decrypt(message) return decrypted_message From cd8e6cafcf6076c56c9632025b868fec94a55d54 Mon Sep 17 00:00:00 2001 From: Saran Balaji Date: Sat, 14 Dec 2019 20:53:16 +0530 Subject: [PATCH 3/3] =?UTF-8?q?Updated=20comments=20based=20on=20pep8=20?= =?UTF-8?q?=F0=9F=93=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tmessage/cli.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmessage/cli.py b/tmessage/cli.py index e15dfb6..fd7519a 100644 --- a/tmessage/cli.py +++ b/tmessage/cli.py @@ -6,7 +6,7 @@ from simple_chalk import chalk import tmessage.auth as auth # auth.py from tmessage.db import store_messages # db.py -from tmessage.utils import get_formatted_message, encrypt_message, decrypt_message #utils.py +from tmessage.utils import get_formatted_message, encrypt_message, decrypt_message # utils.py from tmessage.input import Input # input.py # Initialize colorama