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)
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
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()
Exemplo n.º 4
0
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)