Upload supports empty files

This commit is contained in:
asanchez 2013-11-09 18:11:27 +01:00
parent 9263d0cc06
commit b1ada6ad69

View file

@ -531,37 +531,41 @@ class Mega(object):
mac_str = '\0' * 16 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)
iv_str = a32_to_str([ul_key[4], ul_key[5], ul_key[4], ul_key[5]]) 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):
chunk = input_file.read(chunk_size)
upload_progress += len(chunk)
for chunk_start, chunk_size in get_chunks(file_size): encryptor = AES.new(k_str, AES.MODE_CBC, iv_str)
chunk = input_file.read(chunk_size) for i in range(0, len(chunk)-16, 16):
upload_progress += len(chunk) block = chunk[i:i + 16]
encryptor.encrypt(block)
#fix for files under 16 bytes failing
if file_size > 16:
i += 16
else:
i = 0
encryptor = AES.new(k_str, AES.MODE_CBC, iv_str)
for i in range(0, len(chunk)-16, 16):
block = chunk[i:i + 16] block = chunk[i:i + 16]
encryptor.encrypt(block) if len(block) % 16:
block += '\0' * (16 - len(block) % 16)
mac_str = mac_encryptor.encrypt(encryptor.encrypt(block))
#fix for files under 16 bytes failing #encrypt file and upload
if file_size > 16: chunk = aes.encrypt(chunk)
i += 16 output_file = requests.post(ul_url + "/" + str(chunk_start),
else: data=chunk, timeout=self.timeout)
i = 0 completion_file_handle = output_file.text
block = chunk[i:i + 16] if self.options.get('verbose') is True:
if len(block) % 16: # upload progress
block += '\0' * (16 - len(block) % 16) print('{0} of {1} uploaded'.format(upload_progress, file_size))
mac_str = mac_encryptor.encrypt(encryptor.encrypt(block)) else:
output_file = requests.post(ul_url + "/0",
#encrypt file and upload data='', timeout=self.timeout)
chunk = aes.encrypt(chunk)
output_file = requests.post(ul_url + "/" + str(chunk_start),
data=chunk, timeout=self.timeout)
completion_file_handle = output_file.text completion_file_handle = output_file.text
if self.options.get('verbose') is True:
# upload progress
print('{0} of {1} uploaded'.format(upload_progress, file_size))
file_mac = str_to_a32(mac_str) file_mac = str_to_a32(mac_str)
#determine meta mac #determine meta mac