diff options
author | Alex Gaynor <alex.gaynor@gmail.com> | 2013-10-16 16:55:40 -0700 |
---|---|---|
committer | Alex Gaynor <alex.gaynor@gmail.com> | 2013-10-16 16:55:40 -0700 |
commit | e761f8b33519104605b14cf8a24e9f68bd23b624 (patch) | |
tree | 672968fa7c23790bc9f5c9cd3c779adce09fae8c /tests/primitives/test_nist.py | |
parent | 62ebc7e212a92a13c3836de5d129cb93f40a128d (diff) | |
parent | 169dee88faa7c46b5551b89cf97a1b30c0a1c6ea (diff) | |
download | cryptography-e761f8b33519104605b14cf8a24e9f68bd23b624.tar.gz cryptography-e761f8b33519104605b14cf8a24e9f68bd23b624.tar.bz2 cryptography-e761f8b33519104605b14cf8a24e9f68bd23b624.zip |
Merge branch 'master' into triple-des
Also moved most of the tests to the new format except for one which doesn't yet
have an obvious translation
Conflicts:
cryptography/primitives/block/ciphers.py
tests/primitives/test_nist.py
Diffstat (limited to 'tests/primitives/test_nist.py')
-rw-r--r-- | tests/primitives/test_nist.py | 232 |
1 files changed, 143 insertions, 89 deletions
diff --git a/tests/primitives/test_nist.py b/tests/primitives/test_nist.py index bc444191..ceecd57e 100644 --- a/tests/primitives/test_nist.py +++ b/tests/primitives/test_nist.py @@ -18,33 +18,18 @@ Test using the NIST Test Vectors from __future__ import absolute_import, division, print_function import binascii -import itertools import os -import pytest - -from cryptography.primitives.block import BlockCipher, ciphers, modes +from cryptography.primitives.block import ciphers, modes +from .utils import generate_encrypt_test from ..utils import load_nist_vectors_from_file -def parameterize_encrypt_test(cipher, vector_type, params, fnames): - return pytest.mark.parametrize(params, - list(itertools.chain.from_iterable( - load_nist_vectors_from_file( - os.path.join(cipher, vector_type, fname), - "ENCRYPT", - params - ) - for fname in fnames - )) - ) - - class TestAES_CBC(object): - @parameterize_encrypt_test( - "AES", "KAT", - ("key", "iv", "plaintext", "ciphertext"), + test_KAT = generate_encrypt_test( + lambda path: load_nist_vectors_from_file(path, "ENCRYPT"), + os.path.join("AES", "KAT"), [ "CBCGFSbox128.rsp", "CBCGFSbox192.rsp", @@ -58,75 +43,156 @@ class TestAES_CBC(object): "CBCVarTxt128.rsp", "CBCVarTxt192.rsp", "CBCVarTxt256.rsp", - ] + ], + lambda key, iv: ciphers.AES(binascii.unhexlify(key)), + lambda key, iv: modes.CBC(binascii.unhexlify(iv)), ) - def test_KAT(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_encrypt_test( - "AES", "MMT", - ("key", "iv", "plaintext", "ciphertext"), + test_MMT = generate_encrypt_test( + lambda path: load_nist_vectors_from_file(path, "ENCRYPT"), + os.path.join("AES", "MMT"), [ "CBCMMT128.rsp", "CBCMMT192.rsp", "CBCMMT256.rsp", - ] + ], + lambda key, iv: ciphers.AES(binascii.unhexlify(key)), + lambda key, iv: modes.CBC(binascii.unhexlify(iv)), + ) + + +class TestAES_ECB(object): + test_KAT = generate_encrypt_test( + lambda path: load_nist_vectors_from_file(path, "ENCRYPT"), + os.path.join("AES", "KAT"), + [ + "ECBGFSbox128.rsp", + "ECBGFSbox192.rsp", + "ECBGFSbox256.rsp", + "ECBKeySbox128.rsp", + "ECBKeySbox192.rsp", + "ECBKeySbox256.rsp", + "ECBVarKey128.rsp", + "ECBVarKey192.rsp", + "ECBVarKey256.rsp", + "ECBVarTxt128.rsp", + "ECBVarTxt192.rsp", + "ECBVarTxt256.rsp", + ], + lambda key: ciphers.AES(binascii.unhexlify(key)), + lambda key: modes.ECB(), + ) + + test_MMT = generate_encrypt_test( + lambda path: load_nist_vectors_from_file(path, "ENCRYPT"), + os.path.join("AES", "MMT"), + [ + "ECBMMT128.rsp", + "ECBMMT192.rsp", + "ECBMMT256.rsp", + ], + lambda key: ciphers.AES(binascii.unhexlify(key)), + lambda key: modes.ECB(), + ) + + +class TestAES_OFB(object): + test_KAT = generate_encrypt_test( + lambda path: load_nist_vectors_from_file(path, "ENCRYPT"), + os.path.join("AES", "KAT"), + [ + "OFBGFSbox128.rsp", + "OFBGFSbox192.rsp", + "OFBGFSbox256.rsp", + "OFBKeySbox128.rsp", + "OFBKeySbox192.rsp", + "OFBKeySbox256.rsp", + "OFBVarKey128.rsp", + "OFBVarKey192.rsp", + "OFBVarKey256.rsp", + "OFBVarTxt128.rsp", + "OFBVarTxt192.rsp", + "OFBVarTxt256.rsp", + ], + lambda key, iv: ciphers.AES(binascii.unhexlify(key)), + lambda key, iv: modes.OFB(binascii.unhexlify(iv)), + ) + + test_MMT = generate_encrypt_test( + lambda path: load_nist_vectors_from_file(path, "ENCRYPT"), + os.path.join("AES", "MMT"), + [ + "OFBMMT128.rsp", + "OFBMMT192.rsp", + "OFBMMT256.rsp", + ], + lambda key, iv: ciphers.AES(binascii.unhexlify(key)), + lambda key, iv: modes.OFB(binascii.unhexlify(iv)), + ) + + +class TestAES_CFB(object): + test_KAT = generate_encrypt_test( + lambda path: load_nist_vectors_from_file(path, "ENCRYPT"), + os.path.join("AES", "KAT"), + [ + "CFB128GFSbox128.rsp", + "CFB128GFSbox192.rsp", + "CFB128GFSbox256.rsp", + "CFB128KeySbox128.rsp", + "CFB128KeySbox192.rsp", + "CFB128KeySbox256.rsp", + "CFB128VarKey128.rsp", + "CFB128VarKey192.rsp", + "CFB128VarKey256.rsp", + "CFB128VarTxt128.rsp", + "CFB128VarTxt192.rsp", + "CFB128VarTxt256.rsp", + ], + lambda key, iv: ciphers.AES(binascii.unhexlify(key)), + lambda key, iv: modes.CFB(binascii.unhexlify(iv)), + ) + + test_MMT = generate_encrypt_test( + lambda path: load_nist_vectors_from_file(path, "ENCRYPT"), + os.path.join("AES", "MMT"), + [ + "CFB128MMT128.rsp", + "CFB128MMT192.rsp", + "CFB128MMT256.rsp", + ], + lambda key, iv: ciphers.AES(binascii.unhexlify(key)), + lambda key, iv: modes.CFB(binascii.unhexlify(iv)), ) - def test_MMT(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 class TestTripleDES_CBC(object): - @parameterize_encrypt_test( - "3DES", "KAT", - ("keys", "iv", "plaintext", "ciphertext"), + test_KAT1 = generate_encrypt_test( + lambda path: load_nist_vectors_from_file(path, "ENCRYPT"), + os.path.join("3DES", "KAT"), [ "TCBCinvperm.rsp", "TCBCpermop.rsp", "TCBCsubtab.rsp", "TCBCvarkey.rsp", "TCBCvartext.rsp", - ] + ], + lambda keys, iv: ciphers.TripleDES(binascii.unhexlify(keys)), + lambda keys, iv: modes.CBC(iv), ) - def test_KAT_1(self, keys, iv, plaintext, ciphertext): - cipher = BlockCipher( - ciphers.TripleDES(binascii.unhexlify(keys)), - modes.CBC(binascii.unhexlify(iv)), - ) - actual_ciphertext = cipher.encrypt(binascii.unhexlify(plaintext)) - actual_ciphertext += cipher.finalize() - assert binascii.hexlify(actual_ciphertext) == ciphertext - @parameterize_encrypt_test( - "3DES", "KAT", - ("keys", "iv1", "iv2", "iv3", "plaintext", "ciphertext3"), + test_KAT2 = generate_encrypt_test( + lambda path: load_nist_vectors_from_file(path, "ENCRYPT"), + os.path.join("3DES", "KAT"), [ "TCBCIpermop.rsp", "TCBCIsubtab.rsp", "TCBCIvarkey.rsp", "TCBCIvartext.rsp", - ] + ], + lambda keys, iv1, iv2, iv3: ciphers.TripleDES(binascii.unhexlify(keys)), + lambda keys, iv1, iv2, iv3: modes.CBC(iv1 + iv2 + iv3), ) - def test_KAT_2(self, keys, iv1, iv2, iv3, plaintext, ciphertext3): - cipher = BlockCipher( - ciphers.TripleDES(binascii.unhexlify(keys)), - modes.CBC(binascii.unhexlify(iv1 + iv2 + iv3)), - ) - actual_ciphertext = cipher.encrypt(binascii.unhexlify(plaintext)) - actual_ciphertext += cipher.finalize() - assert binascii.hexlify(actual_ciphertext) == ciphertext3 @parameterize_encrypt_test( "3DES", "KAT", @@ -144,38 +210,26 @@ class TestTripleDES_CBC(object): actual_ciphertext += cipher.finalize() assert binascii.hexlify(actual_ciphertext) == ciphertext3 - @parameterize_encrypt_test( - "3DES", "MMT", - ("key1", "key2", "key3", "iv1", "iv2", "iv3", "plaintext", "ciphertext"), + test_MMT1 = generate_encrypt_test( + lambda path: load_nist_vectors_from_file(path, "ENCRYPT"), + os.path.join("3DES", "MMT"), [ "TCBCIMMT1.rsp", "TCBCIMMT2.rsp", "TCBCIMMT3.rsp", - ] + ], + lambda key1, key2, key3, iv1, iv2, iv3: ciphers.TripleDES(binascii.unhexlify(key1 + key2 + key3)), + lambda key1, key2, key3, iv1, iv2, iv3: modes.CBC(iv1 + iv2 + iv3), ) - def test_MMT_1(self, key1, key2, key3, iv1, iv2, iv3, plaintext, ciphertext): - cipher = BlockCipher( - ciphers.TripleDES(binascii.unhexlify(key1 + key2 + key3)), - modes.CBC(binascii.unhexlify(iv1 + iv2 + iv3)), - ) - actual_ciphertext = cipher.encrypt(binascii.unhexlify(plaintext)) - actual_ciphertext += cipher.finalize() - assert binascii.hexlify(actual_ciphertext) == ciphertext - @parameterize_encrypt_test( - "3DES", "MMT", - ("key1", "key2", "key3", "iv", "plaintext", "ciphertext"), + test_MMT1 = generate_encrypt_test( + lambda path: load_nist_vectors_from_file(path, "ENCRYPT"), + os.path.join("3DES", "MMT"), [ "TCBCMMT1.rsp", "TCBCMMT2.rsp", "TCBCMMT3.rsp", - ] + ], + lambda key1, key2, key3, iv: ciphers.TripleDES(binascii.unhexlify(key1 + key2 + key3)), + lambda key1, key2, key3, iv: modes.CBC(iv), ) - def test_MMT_2(self, key1, key2, key3, iv, plaintext, ciphertext): - cipher = BlockCipher( - ciphers.TripleDES(binascii.unhexlify(key1 + key2 + key3)), - modes.CBC(binascii.unhexlify(iv)), - ) - actual_ciphertext = cipher.encrypt(binascii.unhexlify(plaintext)) - actual_ciphertext += cipher.finalize() - assert binascii.hexlify(actual_ciphertext) == ciphertext |