diff options
author | Donald Stufft <donald@stufft.io> | 2013-08-09 01:20:03 -0400 |
---|---|---|
committer | Donald Stufft <donald@stufft.io> | 2013-08-09 01:21:05 -0400 |
commit | ec672e8f5b02fd8fb286507d77e84caa473eae19 (patch) | |
tree | b72bdee138ba6b2012d930ed702385ee62466c93 /tests/primitives/test_nist.py | |
parent | cd95f3c0355d684082fdc8ad38a00850259c517d (diff) | |
download | cryptography-ec672e8f5b02fd8fb286507d77e84caa473eae19.tar.gz cryptography-ec672e8f5b02fd8fb286507d77e84caa473eae19.tar.bz2 cryptography-ec672e8f5b02fd8fb286507d77e84caa473eae19.zip |
Use the NIST KAT vectors to test AES-CBC w/ no padding
Diffstat (limited to 'tests/primitives/test_nist.py')
-rw-r--r-- | tests/primitives/test_nist.py | 193 |
1 files changed, 193 insertions, 0 deletions
diff --git a/tests/primitives/test_nist.py b/tests/primitives/test_nist.py new file mode 100644 index 00000000..651f0415 --- /dev/null +++ b/tests/primitives/test_nist.py @@ -0,0 +1,193 @@ +""" +Test using the NIST Test Vectors +""" +import binascii + +import pytest + +from cryptography.primitives.block import BlockCipher, ciphers, modes, padding + +from ..utils import load_nist_vectors_from_file + + +class TestAES_CBC: + + @pytest.mark.parametrize(("key", "iv", "plaintext", "ciphertext"), + load_nist_vectors_from_file( + "AES/KAT/CBCGFSbox128.rsp", + "ENCRYPT", + ["key", "iv", "plaintext", "ciphertext"], + ), + ) + def test_KAT_GFSbox_128_encrypt(self, key, iv, plaintext, ciphertext): + cipher = BlockCipher( + ciphers.AES(binascii.unhexlify(key)), + modes.CBC(binascii.unhexlify(iv), padding.NoPadding()) + ) + actual_ciphertext = cipher.encrypt(plaintext) + cipher.finalize() + assert binascii.hexlify(actual_ciphertext) == ciphertext + + @pytest.mark.parametrize(("key", "iv", "plaintext", "ciphertext"), + load_nist_vectors_from_file( + "AES/KAT/CBCGFSbox192.rsp", + "ENCRYPT", + ["key", "iv", "plaintext", "ciphertext"], + ), + ) + def test_KAT_GFSbox_192_encrypt(self, key, iv, plaintext, ciphertext): + cipher = BlockCipher( + ciphers.AES(binascii.unhexlify(key)), + modes.CBC(binascii.unhexlify(iv), padding.NoPadding()) + ) + actual_ciphertext = cipher.encrypt(plaintext) + cipher.finalize() + assert binascii.hexlify(actual_ciphertext) == ciphertext + + @pytest.mark.parametrize(("key", "iv", "plaintext", "ciphertext"), + load_nist_vectors_from_file( + "AES/KAT/CBCGFSbox256.rsp", + "ENCRYPT", + ["key", "iv", "plaintext", "ciphertext"], + ), + ) + def test_KAT_GFSbox_256_encrypt(self, key, iv, plaintext, ciphertext): + cipher = BlockCipher( + ciphers.AES(binascii.unhexlify(key)), + modes.CBC(binascii.unhexlify(iv), padding.NoPadding()) + ) + actual_ciphertext = cipher.encrypt(plaintext) + cipher.finalize() + assert binascii.hexlify(actual_ciphertext) == ciphertext + + @pytest.mark.parametrize(("key", "iv", "plaintext", "ciphertext"), + load_nist_vectors_from_file( + "AES/KAT/CBCKeySbox128.rsp", + "ENCRYPT", + ["key", "iv", "plaintext", "ciphertext"], + ), + ) + def test_KAT_KeySbox_128_encrypt(self, key, iv, plaintext, ciphertext): + cipher = BlockCipher( + ciphers.AES(binascii.unhexlify(key)), + modes.CBC(binascii.unhexlify(iv), padding.NoPadding()) + ) + actual_ciphertext = cipher.encrypt(plaintext) + cipher.finalize() + assert binascii.hexlify(actual_ciphertext) == ciphertext + + @pytest.mark.parametrize(("key", "iv", "plaintext", "ciphertext"), + load_nist_vectors_from_file( + "AES/KAT/CBCKeySbox192.rsp", + "ENCRYPT", + ["key", "iv", "plaintext", "ciphertext"], + ), + ) + def test_KAT_KeySbox_192_encrypt(self, key, iv, plaintext, ciphertext): + cipher = BlockCipher( + ciphers.AES(binascii.unhexlify(key)), + modes.CBC(binascii.unhexlify(iv), padding.NoPadding()) + ) + actual_ciphertext = cipher.encrypt(plaintext) + cipher.finalize() + assert binascii.hexlify(actual_ciphertext) == ciphertext + + @pytest.mark.parametrize(("key", "iv", "plaintext", "ciphertext"), + load_nist_vectors_from_file( + "AES/KAT/CBCKeySbox256.rsp", + "ENCRYPT", + ["key", "iv", "plaintext", "ciphertext"], + ), + ) + def test_KAT_KeySbox_256_encrypt(self, key, iv, plaintext, ciphertext): + cipher = BlockCipher( + ciphers.AES(binascii.unhexlify(key)), + modes.CBC(binascii.unhexlify(iv), padding.NoPadding()) + ) + actual_ciphertext = cipher.encrypt(plaintext) + cipher.finalize() + assert binascii.hexlify(actual_ciphertext) == ciphertext + + @pytest.mark.parametrize(("key", "iv", "plaintext", "ciphertext"), + load_nist_vectors_from_file( + "AES/KAT/CBCVarKey128.rsp", + "ENCRYPT", + ["key", "iv", "plaintext", "ciphertext"], + ), + ) + def test_KAT_VarKey_128_encrypt(self, key, iv, plaintext, ciphertext): + cipher = BlockCipher( + ciphers.AES(binascii.unhexlify(key)), + modes.CBC(binascii.unhexlify(iv), padding.NoPadding()) + ) + actual_ciphertext = cipher.encrypt(plaintext) + cipher.finalize() + assert binascii.hexlify(actual_ciphertext) == ciphertext + + @pytest.mark.parametrize(("key", "iv", "plaintext", "ciphertext"), + load_nist_vectors_from_file( + "AES/KAT/CBCVarKey192.rsp", + "ENCRYPT", + ["key", "iv", "plaintext", "ciphertext"], + ), + ) + def test_KAT_VarKey_192_encrypt(self, key, iv, plaintext, ciphertext): + cipher = BlockCipher( + ciphers.AES(binascii.unhexlify(key)), + modes.CBC(binascii.unhexlify(iv), padding.NoPadding()) + ) + actual_ciphertext = cipher.encrypt(plaintext) + cipher.finalize() + assert binascii.hexlify(actual_ciphertext) == ciphertext + + @pytest.mark.parametrize(("key", "iv", "plaintext", "ciphertext"), + load_nist_vectors_from_file( + "AES/KAT/CBCVarKey256.rsp", + "ENCRYPT", + ["key", "iv", "plaintext", "ciphertext"], + ), + ) + def test_KAT_VarKey_256_encrypt(self, key, iv, plaintext, ciphertext): + cipher = BlockCipher( + ciphers.AES(binascii.unhexlify(key)), + modes.CBC(binascii.unhexlify(iv), padding.NoPadding()) + ) + actual_ciphertext = cipher.encrypt(plaintext) + cipher.finalize() + assert binascii.hexlify(actual_ciphertext) == ciphertext + + @pytest.mark.parametrize(("key", "iv", "plaintext", "ciphertext"), + load_nist_vectors_from_file( + "AES/KAT/CBCVarTxt128.rsp", + "ENCRYPT", + ["key", "iv", "plaintext", "ciphertext"], + ), + ) + def test_KAT_VarTxt_128_encrypt(self, key, iv, plaintext, ciphertext): + cipher = BlockCipher( + ciphers.AES(binascii.unhexlify(key)), + modes.CBC(binascii.unhexlify(iv), padding.NoPadding()) + ) + actual_ciphertext = cipher.encrypt(plaintext) + cipher.finalize() + assert binascii.hexlify(actual_ciphertext) == ciphertext + + @pytest.mark.parametrize(("key", "iv", "plaintext", "ciphertext"), + load_nist_vectors_from_file( + "AES/KAT/CBCVarTxt192.rsp", + "ENCRYPT", + ["key", "iv", "plaintext", "ciphertext"], + ), + ) + def test_KAT_VarTxt_192_encrypt(self, key, iv, plaintext, ciphertext): + cipher = BlockCipher( + ciphers.AES(binascii.unhexlify(key)), + modes.CBC(binascii.unhexlify(iv), padding.NoPadding()) + ) + actual_ciphertext = cipher.encrypt(plaintext) + cipher.finalize() + assert binascii.hexlify(actual_ciphertext) == ciphertext + + @pytest.mark.parametrize(("key", "iv", "plaintext", "ciphertext"), + load_nist_vectors_from_file( + "AES/KAT/CBCVarTxt256.rsp", + "ENCRYPT", + ["key", "iv", "plaintext", "ciphertext"], + ), + ) + def test_KAT_VarTxt_256_encrypt(self, key, iv, plaintext, ciphertext): + cipher = BlockCipher( + ciphers.AES(binascii.unhexlify(key)), + modes.CBC(binascii.unhexlify(iv), padding.NoPadding()) + ) + actual_ciphertext = cipher.encrypt(plaintext) + cipher.finalize() + assert binascii.hexlify(actual_ciphertext) == ciphertext |