From 735df00592ac6804abcb44c1fd51401a4bdf3f1d Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Mon, 9 Sep 2013 16:46:03 -0700 Subject: Simplified the NIST tests and reduced duplication --- tests/primitives/test_nist.py | 181 ++++++++---------------------------------- 1 file changed, 31 insertions(+), 150 deletions(-) (limited to 'tests') diff --git a/tests/primitives/test_nist.py b/tests/primitives/test_nist.py index db5e0344..65d130ad 100644 --- a/tests/primitives/test_nist.py +++ b/tests/primitives/test_nist.py @@ -18,6 +18,7 @@ Test using the NIST Test Vectors from __future__ import absolute_import, division, print_function import binascii +import itertools import os import pytest @@ -27,159 +28,35 @@ from cryptography.primitives.block import BlockCipher, ciphers, modes from ..utils import load_nist_vectors_from_file -def parameterize_kat_encrypt(fname): +def parameterize_encrypt_test(cipher, vector_type, fnames): return pytest.mark.parametrize(("key", "iv", "plaintext", "ciphertext"), - load_nist_vectors_from_file( - os.path.join("AES/KAT/", fname), - "ENCRYPT", - ["key", "iv", "plaintext", "ciphertext"], - ), - ) - - -def paramterize_mmt_encrypt(fname): - return pytest.mark.parametrize(("key", "iv", "plaintext", "ciphertext"), - load_nist_vectors_from_file( - os.path.join("AES/MMT/", fname), - "ENCRYPT", - ["key", "iv", "plaintext", "ciphertext"], - ) + list(itertools.chain.from_iterable( + load_nist_vectors_from_file( + os.path.join(cipher, vector_type, fname), + "ENCRYPT", + ["key", "iv", "plaintext", "ciphertext"], + ) + for fname in fnames + )) ) class TestAES_CBC(object): - @parameterize_kat_encrypt("CBCGFSbox128.rsp") - def test_KAT_GFSbox_128_encrypt(self, key, iv, plaintext, ciphertext): - cipher = BlockCipher( - ciphers.AES(binascii.unhexlify(key)), - modes.CBC(binascii.unhexlify(iv)), - ) - actual_ciphertext = cipher.encrypt(binascii.unhexlify(plaintext)) - actual_ciphertext += cipher.finalize() - assert binascii.hexlify(actual_ciphertext) == ciphertext - - @parameterize_kat_encrypt("CBCGFSbox192.rsp") - def test_KAT_GFSbox_192_encrypt(self, key, iv, plaintext, ciphertext): - cipher = BlockCipher( - ciphers.AES(binascii.unhexlify(key)), - modes.CBC(binascii.unhexlify(iv)), - ) - actual_ciphertext = cipher.encrypt(binascii.unhexlify(plaintext)) - actual_ciphertext += cipher.finalize() - assert binascii.hexlify(actual_ciphertext) == ciphertext - - @parameterize_kat_encrypt("CBCGFSbox256.rsp") - def test_KAT_GFSbox_256_encrypt(self, key, iv, plaintext, ciphertext): - cipher = BlockCipher( - ciphers.AES(binascii.unhexlify(key)), - modes.CBC(binascii.unhexlify(iv)), - ) - actual_ciphertext = cipher.encrypt(binascii.unhexlify(plaintext)) - actual_ciphertext += cipher.finalize() - assert binascii.hexlify(actual_ciphertext) == ciphertext - - @parameterize_kat_encrypt("CBCKeySbox128.rsp") - def test_KAT_KeySbox_128_encrypt(self, key, iv, plaintext, ciphertext): - cipher = BlockCipher( - ciphers.AES(binascii.unhexlify(key)), - modes.CBC(binascii.unhexlify(iv)), - ) - actual_ciphertext = cipher.encrypt(binascii.unhexlify(plaintext)) - actual_ciphertext += cipher.finalize() - assert binascii.hexlify(actual_ciphertext) == ciphertext - - @parameterize_kat_encrypt("CBCKeySbox192.rsp") - def test_KAT_KeySbox_192_encrypt(self, key, iv, plaintext, ciphertext): - cipher = BlockCipher( - ciphers.AES(binascii.unhexlify(key)), - modes.CBC(binascii.unhexlify(iv)), - ) - actual_ciphertext = cipher.encrypt(binascii.unhexlify(plaintext)) - actual_ciphertext += cipher.finalize() - assert binascii.hexlify(actual_ciphertext) == ciphertext - - @parameterize_kat_encrypt("CBCKeySbox256.rsp") - def test_KAT_KeySbox_256_encrypt(self, key, iv, plaintext, ciphertext): - cipher = BlockCipher( - ciphers.AES(binascii.unhexlify(key)), - modes.CBC(binascii.unhexlify(iv)), - ) - actual_ciphertext = cipher.encrypt(binascii.unhexlify(plaintext)) - actual_ciphertext += cipher.finalize() - assert binascii.hexlify(actual_ciphertext) == ciphertext - - @parameterize_kat_encrypt("CBCVarKey128.rsp") - def test_KAT_VarKey_128_encrypt(self, key, iv, plaintext, ciphertext): - cipher = BlockCipher( - ciphers.AES(binascii.unhexlify(key)), - modes.CBC(binascii.unhexlify(iv)), - ) - actual_ciphertext = cipher.encrypt(binascii.unhexlify(plaintext)) - actual_ciphertext += cipher.finalize() - assert binascii.hexlify(actual_ciphertext) == ciphertext - - @parameterize_kat_encrypt("CBCVarKey192.rsp") - def test_KAT_VarKey_192_encrypt(self, key, iv, plaintext, ciphertext): - cipher = BlockCipher( - ciphers.AES(binascii.unhexlify(key)), - modes.CBC(binascii.unhexlify(iv)), - ) - actual_ciphertext = cipher.encrypt(binascii.unhexlify(plaintext)) - actual_ciphertext += cipher.finalize() - assert binascii.hexlify(actual_ciphertext) == ciphertext - - @parameterize_kat_encrypt("CBCVarKey256.rsp") - def test_KAT_VarKey_256_encrypt(self, key, iv, plaintext, ciphertext): - cipher = BlockCipher( - ciphers.AES(binascii.unhexlify(key)), - modes.CBC(binascii.unhexlify(iv)), - ) - actual_ciphertext = cipher.encrypt(binascii.unhexlify(plaintext)) - actual_ciphertext += cipher.finalize() - assert binascii.hexlify(actual_ciphertext) == ciphertext - - @parameterize_kat_encrypt("CBCVarTxt128.rsp") - def test_KAT_VarTxt_128_encrypt(self, key, iv, plaintext, ciphertext): - cipher = BlockCipher( - ciphers.AES(binascii.unhexlify(key)), - modes.CBC(binascii.unhexlify(iv)), - ) - actual_ciphertext = cipher.encrypt(binascii.unhexlify(plaintext)) - actual_ciphertext += cipher.finalize() - assert binascii.hexlify(actual_ciphertext) == ciphertext - - @parameterize_kat_encrypt("CBCVarTxt192.rsp") - def test_KAT_VarTxt_192_encrypt(self, key, iv, plaintext, ciphertext): - cipher = BlockCipher( - ciphers.AES(binascii.unhexlify(key)), - modes.CBC(binascii.unhexlify(iv)), - ) - actual_ciphertext = cipher.encrypt(binascii.unhexlify(plaintext)) - actual_ciphertext += cipher.finalize() - assert binascii.hexlify(actual_ciphertext) == ciphertext - - @parameterize_kat_encrypt("CBCVarTxt256.rsp") - def test_KAT_VarTxt_256_encrypt(self, key, iv, plaintext, ciphertext): - cipher = BlockCipher( - ciphers.AES(binascii.unhexlify(key)), - modes.CBC(binascii.unhexlify(iv)), - ) - actual_ciphertext = cipher.encrypt(binascii.unhexlify(plaintext)) - actual_ciphertext += cipher.finalize() - assert binascii.hexlify(actual_ciphertext) == ciphertext - - @paramterize_mmt_encrypt("CBCMMT128.rsp") - def test_MMT_128_encrypt(self, key, iv, plaintext, ciphertext): - cipher = BlockCipher( - ciphers.AES(binascii.unhexlify(key)), - modes.CBC(binascii.unhexlify(iv)), - ) - actual_ciphertext = cipher.encrypt(binascii.unhexlify(plaintext)) - actual_ciphertext += cipher.finalize() - assert binascii.hexlify(actual_ciphertext) == ciphertext - - @paramterize_mmt_encrypt("CBCMMT192.rsp") - def test_MMT_192_encrypt(self, key, iv, plaintext, ciphertext): + @parameterize_encrypt_test("AES", "KAT", [ + "CBCGFSbox128.rsp", + "CBCGFSbox192.rsp", + "CBCGFSbox256.rsp", + "CBCKeySbox128.rsp", + "CBCKeySbox192.rsp", + "CBCKeySbox256.rsp", + "CBCVarKey128.rsp", + "CBCVarKey192.rsp", + "CBCVarKey256.rsp", + "CBCVarTxt128.rsp", + "CBCVarTxt192.rsp", + "CBCVarTxt256.rsp", + ]) + def test_KAT(self, key, iv, plaintext, ciphertext): cipher = BlockCipher( ciphers.AES(binascii.unhexlify(key)), modes.CBC(binascii.unhexlify(iv)), @@ -188,8 +65,12 @@ class TestAES_CBC(object): actual_ciphertext += cipher.finalize() assert binascii.hexlify(actual_ciphertext) == ciphertext - @paramterize_mmt_encrypt("CBCMMT256.rsp") - def test_MMT_256_encrypt(self, key, iv, plaintext, ciphertext): + @parameterize_encrypt_test("AES", "MMT", [ + "CBCMMT128.rsp", + "CBCMMT192.rsp", + "CBCMMT256.rsp", + ]) + def test_MMT(self, key, iv, plaintext, ciphertext): cipher = BlockCipher( ciphers.AES(binascii.unhexlify(key)), modes.CBC(binascii.unhexlify(iv)), -- cgit v1.2.3