From c9510f9f247c6c390df095f742fc972cfe88708a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20H=C3=B6rist?= Date: Sun, 10 Dec 2017 19:53:15 +0100 Subject: [PATCH] [omemo] Make encrypt_file() method better available Now we dont need to supply the account --- omemo/{file_decryption.py => file_crypto.py} | 10 ++++++++++ omemo/omemo/state.py | 8 -------- omemo/omemoplugin.py | 16 +++++++++------- 3 files changed, 19 insertions(+), 15 deletions(-) rename omemo/{file_decryption.py => file_crypto.py} (97%) diff --git a/omemo/file_decryption.py b/omemo/file_crypto.py similarity index 97% rename from omemo/file_decryption.py rename to omemo/file_crypto.py index e68431a..e76b9e3 100644 --- a/omemo/file_decryption.py +++ b/omemo/file_crypto.py @@ -45,6 +45,7 @@ try: from cryptography.hazmat.primitives.ciphers import algorithms from cryptography.hazmat.primitives.ciphers.modes import GCM from cryptography.hazmat.backends import default_backend + from omemo.omemo.aes_gcm_native import aes_encrypt except ImportError: log.exception('ImportError') ERROR = True @@ -59,6 +60,15 @@ except Exception: log.exception('Error') +def encrypt_file(data): + key = os.urandom(32) + iv = os.urandom(16) + + payload, tag = aes_encrypt(key, iv, data) + encrypted_data = payload + tag + return (encrypted_data, key, iv) + + class File: def __init__(self, url): self.url, self.fragment = urldefrag(url) diff --git a/omemo/omemo/state.py b/omemo/omemo/state.py index 2cd5234..3ee640e 100644 --- a/omemo/omemo/state.py +++ b/omemo/omemo/state.py @@ -217,14 +217,6 @@ class OmemoState: log.debug("Decrypted Message => " + result) return result - def encrypt_file(self, data): - key = os.urandom(32) - iv = os.urandom(16) - - payload, tag = encrypt(key, iv, data) - encrypted_data = payload + tag - return (encrypted_data, key, iv) - def create_msg(self, from_jid, jid, plaintext): key = get_random_bytes(16) iv = get_random_bytes(16) diff --git a/omemo/omemoplugin.py b/omemo/omemoplugin.py index 216b953..e9a003d 100644 --- a/omemo/omemoplugin.py +++ b/omemo/omemoplugin.py @@ -45,7 +45,7 @@ ERROR_MSG = '' log = logging.getLogger('gajim.plugin_system.omemo') try: - from omemo.file_decryption import FileDecryption + from omemo import file_crypto except Exception as error: log.exception(error) ERROR_MSG = CRYPTOGRAPHY_MISSING @@ -188,17 +188,19 @@ class OmemoPlugin(GajimPlugin): self.connections[conn.name].encrypt_message(conn, obj, callback) def _file_decryption(self, url, kind, instance, window): - FileDecryption(self).hyperlink_handler(url, kind, instance, window) + file_decryption.FileDecryption(self).hyperlink_handler( + url, kind, instance, window) - def encrypt_file(self, file, account, callback): + def encrypt_file(self, file, callback): thread = threading.Thread(target=self._encrypt_file_thread, - args=(file, account, callback)) + args=(file, callback)) thread.daemon = True thread.start() - def _encrypt_file_thread(self, file, account, callback): - omemo = self.get_omemo(account) - encrypted_data, key, iv = omemo.encrypt_file(file.get_data(full=True)) + @staticmethod + def _encrypt_file_thread(file, callback): + encrypted_data, key, iv = file_decryption.encrypt_file( + file.get_data(full=True)) file.encrypted = True file.size = len(encrypted_data) file.user_data = binascii.hexlify(iv + key).decode('utf-8')