diff options
author | Paul Kehrer <paul.l.kehrer@gmail.com> | 2013-10-19 14:12:04 -0500 |
---|---|---|
committer | Paul Kehrer <paul.l.kehrer@gmail.com> | 2013-10-21 08:50:05 -0500 |
commit | 620c2aec10423c11e49cbffc71efe19a190f9187 (patch) | |
tree | d8b3abaf1a64b720ab5410087f82309c1bb43c22 /tests | |
parent | e58820924094b8846bf739c2eb66f049a9a75939 (diff) | |
download | cryptography-620c2aec10423c11e49cbffc71efe19a190f9187.tar.gz cryptography-620c2aec10423c11e49cbffc71efe19a190f9187.tar.bz2 cryptography-620c2aec10423c11e49cbffc71efe19a190f9187.zip |
block cipher decryption support
This is a squash of previous commits plus new ones. Ran into a pile of
conflicts during the rebase and decided this was an easier way to retain
a sane commit history
Diffstat (limited to 'tests')
-rw-r--r-- | tests/primitives/test_block.py | 54 | ||||
-rw-r--r-- | tests/primitives/utils.py | 9 |
2 files changed, 38 insertions, 25 deletions
diff --git a/tests/primitives/test_block.py b/tests/primitives/test_block.py index 9f5905bf..4a67002f 100644 --- a/tests/primitives/test_block.py +++ b/tests/primitives/test_block.py @@ -15,11 +15,9 @@ from __future__ import absolute_import, division, print_function import binascii -import pretend import pytest from cryptography.primitives.block import BlockCipher, ciphers, modes -from cryptography.primitives.block.base import _Operation class TestBlockCipher(object): @@ -29,40 +27,42 @@ class TestBlockCipher(object): modes.CBC(binascii.unhexlify(b"0" * 32)) ) - def test_use_after_finalize(self, api): + def test_creates_encryptor(self): cipher = BlockCipher( ciphers.AES(binascii.unhexlify(b"0" * 32)), - modes.CBC(binascii.unhexlify(b"0" * 32)), - api + modes.CBC(binascii.unhexlify(b"0" * 32)) ) - cipher.encrypt(b"a" * 16) - cipher.finalize() - with pytest.raises(ValueError): - cipher.encrypt(b"b" * 16) - with pytest.raises(ValueError): - cipher.finalize() + assert cipher.encryptor() is not None - def test_encrypt_with_invalid_operation(self, api): + def test_creates_decryptor(self): cipher = BlockCipher( ciphers.AES(binascii.unhexlify(b"0" * 32)), - modes.CBC(binascii.unhexlify(b"0" * 32)), - api + modes.CBC(binascii.unhexlify(b"0" * 32)) ) - cipher._operation = _Operation.decrypt + assert cipher.decryptor() is not None - with pytest.raises(ValueError): - cipher.encrypt(b"b" * 16) - def test_finalize_with_invalid_operation(self, api): +class TestBlockCipherContext(object): + def test_use_after_finalize(self, api): cipher = BlockCipher( ciphers.AES(binascii.unhexlify(b"0" * 32)), modes.CBC(binascii.unhexlify(b"0" * 32)), api ) - cipher._operation = pretend.stub(name="wat") - + context = cipher.encryptor() + context.update(b"a" * 16) + context.finalize() + with pytest.raises(ValueError): + context.update(b"b" * 16) + with pytest.raises(ValueError): + context.finalize() + context = cipher.decryptor() + context.update(b"a" * 16) + context.finalize() + with pytest.raises(ValueError): + context.update(b"b" * 16) with pytest.raises(ValueError): - cipher.finalize() + context.finalize() def test_unaligned_block_encryption(self, api): cipher = BlockCipher( @@ -70,7 +70,15 @@ class TestBlockCipher(object): modes.ECB(), api ) - ct = cipher.encrypt(b"a" * 15) + context = cipher.encryptor() + ct = context.update(b"a" * 15) assert ct == b"" - ct += cipher.encrypt(b"a" * 65) + ct += context.update(b"a" * 65) assert len(ct) == 80 + ct += context.finalize() + context = cipher.decryptor() + pt = context.update(ct[:3]) + assert pt == b"" + pt += context.update(ct[3:]) + assert len(pt) == 80 + context.finalize() diff --git a/tests/primitives/utils.py b/tests/primitives/utils.py index a3759b03..70ece52a 100644 --- a/tests/primitives/utils.py +++ b/tests/primitives/utils.py @@ -37,9 +37,14 @@ def encrypt_test(api, cipher_factory, mode_factory, params, only_if, mode_factory(**params), api ) - actual_ciphertext = cipher.encrypt(binascii.unhexlify(plaintext)) - actual_ciphertext += cipher.finalize() + encryptor = cipher.encryptor() + actual_ciphertext = encryptor.update(binascii.unhexlify(plaintext)) + actual_ciphertext += encryptor.finalize() assert actual_ciphertext == binascii.unhexlify(ciphertext) + decryptor = cipher.decryptor() + actual_plaintext = decryptor.update(binascii.unhexlify(ciphertext)) + actual_plaintext += decryptor.finalize() + assert actual_plaintext == binascii.unhexlify(plaintext) def generate_hash_test(param_loader, path, file_names, hash_cls, |