diff options
-rw-r--r-- | tests/primitives/utils.py | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/primitives/utils.py b/tests/primitives/utils.py new file mode 100644 index 00000000..e35c915a --- /dev/null +++ b/tests/primitives/utils.py @@ -0,0 +1,40 @@ +import binascii +import os + +import pytest + +from cryptography.bindings import openssl +from cryptography.primitives.block import BlockCipher + + +def generate_encrypt_test(param_loader, cipher_name, vector_type, file_names, + cipher_factory, mode_factory, + only_if=lambda api: True): + def test_encryption(self): + for api in [openssl.api]: + if not only_if(api): + yield encrypt_skipped + else: + for file_name in file_names: + for params in param_loader( + os.path.join(cipher_name, vector_type, file_name) + ): + yield encrypt_test, api, cipher_factory, mode_factory, params + return test_encryption + + +def encrypt_test(api, cipher_factory, mode_factory, params): + plaintext = params.pop("plaintext") + ciphertext = params.pop("ciphertext") + cipher = BlockCipher( + cipher_factory(**params), + mode_factory(**params), + api + ) + actual_ciphertext = cipher.encrypt(binascii.unhexlify(plaintext)) + actual_ciphertext += cipher.finalize() + assert binascii.hexlify(actual_ciphertext) == ciphertext + + +def encrypt_skipped(): + pytest.skip("because reasons") |