From f053a2db1ba5a9bba980e28213b20b5f41f99dd0 Mon Sep 17 00:00:00 2001 From: Midnight Date: Fri, 24 Jan 2020 13:08:04 -0500 Subject: [PATCH] Swap pycrypto to pycryptodome Updated the reqs to use pycryptodome, fixed the RSA public exponent issue that was causing the logn failure, as well as general updates to patch up slight changes. --- requirements.txt | 2 +- src/mega/mega.py | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/requirements.txt b/requirements.txt index 9cc3a88..1b3f8b3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ requests>=0.10 -pycrypto +pycryptodome pathlib==1.0.1 tenacity>=5.1.5,<6.0.0 diff --git a/src/mega/mega.py b/src/mega/mega.py index f0c5bc3..d5ee917 100644 --- a/src/mega/mega.py +++ b/src/mega/mega.py @@ -130,12 +130,12 @@ class Mega: encrypted_sid = mpi_to_int(base64_url_decode(resp['csid'])) rsa_decrypter = RSA.construct( ( - self.rsa_private_key[0] * self.rsa_private_key[1], 0, + self.rsa_private_key[0] * self.rsa_private_key[1], 257, self.rsa_private_key[2], self.rsa_private_key[0], self.rsa_private_key[1] ) ) - sid = '%x' % rsa_decrypter.key._decrypt(encrypted_sid) + sid = '%x' % rsa_decrypter._decrypt(encrypted_sid) sid = binascii.unhexlify('0' + sid if len(sid) % 2 else sid) self.sid = base64_url_encode(sid[:43]) @@ -608,7 +608,7 @@ class Mega: master_key_cipher = AES.new(a32_to_str(self.master_key), AES.MODE_ECB) ha = base64_url_encode( - master_key_cipher.encrypt(node_data['h'] + node_data['h']) + master_key_cipher.encrypt(node_data['h'].encode("utf8") + node_data['h'].encode("utf8")) ) share_key = secrets.token_bytes(16) @@ -726,7 +726,7 @@ class Mega: aes = AES.new(k_str, AES.MODE_CTR, counter=counter) mac_str = '\0' * 16 - mac_encryptor = AES.new(k_str, AES.MODE_CBC, mac_str) + mac_encryptor = AES.new(k_str, AES.MODE_CBC, mac_str.encode("utf8")) iv_str = a32_to_str([iv[0], iv[1], iv[0], iv[1]]) for chunk_start, chunk_size in get_chunks(file_size): @@ -789,7 +789,7 @@ class Mega: completion_file_handle = None mac_str = '\0' * 16 - mac_encryptor = AES.new(k_str, AES.MODE_CBC, mac_str) + mac_encryptor = AES.new(k_str, AES.MODE_CBC, mac_str.encode("utf8")) iv_str = a32_to_str([ul_key[4], ul_key[5], ul_key[4], ul_key[5]]) if file_size > 0: for chunk_start, chunk_size in get_chunks(file_size):