def _test_encrypt_decrypt(self, size_of_data): # max blob size is 2*2**20 -1 ( -1 due to required padding in the end ) blob = MocBlob() blob_num = 0 key = os.urandom(AES_BLOCK_SIZE_BYTES) iv = os.urandom(AES_BLOCK_SIZE_BYTES) maker = CryptBlob.CryptStreamBlobMaker(key, iv, blob_num, blob) write_size = size_of_data string_to_encrypt = random_string(size_of_data).encode() # encrypt string done, num_bytes = maker.write(string_to_encrypt) yield maker.close() self.assertEqual(size_of_data, num_bytes) expected_encrypted_blob_size = int( (size_of_data / AES_BLOCK_SIZE_BYTES) + 1) * AES_BLOCK_SIZE_BYTES self.assertEqual(expected_encrypted_blob_size, len(blob.data)) if size_of_data < MAX_BLOB_SIZE - 1: self.assertFalse(done) else: self.assertTrue(done) self.data_buf = b'' def write_func(data): self.data_buf += data # decrypt string decryptor = CryptBlob.StreamBlobDecryptor(blob, key, iv, size_of_data) yield decryptor.decrypt(write_func) self.assertEqual(self.data_buf, string_to_encrypt)
def _test_encrypt_decrypt(self, size_of_data): # max blob size is 2*2**20 -1 ( -1 due to required padding in the end ) blob = MocBlob() blob_num = 0 key = Random.new().read(AES.block_size) iv = Random.new().read(AES.block_size) maker = CryptBlob.CryptStreamBlobMaker(key, iv, blob_num, blob) write_size = size_of_data string_to_encrypt = random_string(size_of_data) # encrypt string done, num_bytes = maker.write(string_to_encrypt) yield maker.close() self.assertEqual(size_of_data, num_bytes) expected_encrypted_blob_size = ( (size_of_data / AES.block_size) + 1) * AES.block_size self.assertEqual(expected_encrypted_blob_size, len(blob.data)) if size_of_data < conf.settings['BLOB_SIZE'] - 1: self.assertFalse(done) else: self.assertTrue(done) self.data_buf = '' def write_func(data): self.data_buf += data # decrypt string decryptor = CryptBlob.StreamBlobDecryptor(blob, key, iv, size_of_data) decryptor.decrypt(write_func) self.assertEqual(self.data_buf, string_to_encrypt)
def encrypt_blob(filename, key, iv): blob = Blob() blob_maker = CryptBlob.CryptStreamBlobMaker(binascii.unhexlify(key), binascii.unhexlify(iv), 0, blob) with open(filename) as fin: blob_maker.write(fin.read()) blob_maker.close()
def decrypt_blob(blob_file, key, iv, output): filename = os.path.abspath(blob_file) length = os.path.getsize(filename) directory, blob_hash = os.path.split(filename) blob = HashBlob.BlobFile(directory, blob_hash, True, length) decryptor = CryptBlob.StreamBlobDecryptor(blob, binascii.unhexlify(key), binascii.unhexlify(iv), length) with open(output, 'w') as f: yield decryptor.decrypt(f.write)