Skip to content

Commit

Permalink
Merge pull request #106 from alex/duplication-reduction
Browse files Browse the repository at this point in the history
Remove much of the duplication found in the tests
  • Loading branch information
dstufft committed Oct 16, 2013
2 parents b98118f + 745c95c commit 9a76847
Show file tree
Hide file tree
Showing 9 changed files with 349 additions and 429 deletions.
7 changes: 5 additions & 2 deletions cryptography/bindings/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,10 @@
# See the License for the specific language governing permissions and
# limitations under the License.

from cryptography.bindings.openssl import api
from cryptography.bindings import openssl


_default_api = api
_default_api = openssl.api
_ALL_APIS = [
openssl.api
]
4 changes: 2 additions & 2 deletions tests/conftest.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
def pytest_generate_tests(metafunc):
from cryptography.bindings.openssl import api
from cryptography.bindings import _ALL_APIS

if "api" in metafunc.fixturenames:
metafunc.parametrize("api", [api])
metafunc.parametrize("api", _ALL_APIS)
44 changes: 12 additions & 32 deletions tests/primitives/test_cryptrec.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,51 +12,31 @@
# limitations under the License.

"""
Test using the CRYPTREC (Camellia) Test Vectors
Tests using the CRYPTREC (Camellia) 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_cryptrec_vectors_from_file


def parameterize_encrypt_test(cipher, vector_type, params, fnames):
return pytest.mark.parametrize(params,
list(itertools.chain.from_iterable(
load_cryptrec_vectors_from_file(
os.path.join(cipher, vector_type, fname),
)
for fname in fnames
))
)


class TestCamelliaECB(object):
@parameterize_encrypt_test(
"Camellia", "NTT",
("key", "plaintext", "ciphertext"),
test_NTT = generate_encrypt_test(
load_cryptrec_vectors_from_file,
os.path.join("Camellia", "NTT"),
[
"camellia-128-ecb.txt",
"camellia-192-ecb.txt",
"camellia-256-ecb.txt",
]
"camellia-256-ecb.txt"
],
lambda key: ciphers.Camellia(binascii.unhexlify((key))),
lambda key: modes.ECB(),
only_if=lambda api: api.supports_cipher("camellia-128-ecb"),
skip_message="Does not support Camellia ECB",
)
def test_NTT(self, key, plaintext, ciphertext, api):
if not api.supports_cipher("camellia-128-ecb"):
pytest.skip("Does not support Camellia ECB") # pragma: no cover
cipher = BlockCipher(
ciphers.Camellia(binascii.unhexlify(key)),
modes.ECB(),
api
)
actual_ciphertext = cipher.encrypt(binascii.unhexlify(plaintext))
actual_ciphertext += cipher.finalize()
assert binascii.hexlify(actual_ciphertext).upper() == ciphertext
179 changes: 54 additions & 125 deletions tests/primitives/test_nist.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,33 +18,18 @@
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",
Expand All @@ -58,42 +43,28 @@ 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, api):
cipher = BlockCipher(
ciphers.AES(binascii.unhexlify(key)),
modes.CBC(binascii.unhexlify(iv)),
api
)
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)),
)
def test_MMT(self, key, iv, plaintext, ciphertext, api):
cipher = BlockCipher(
ciphers.AES(binascii.unhexlify(key)),
modes.CBC(binascii.unhexlify(iv)),
api
)
actual_ciphertext = cipher.encrypt(binascii.unhexlify(plaintext))
actual_ciphertext += cipher.finalize()
assert binascii.hexlify(actual_ciphertext) == ciphertext


class TestAES_ECB(object):
@parameterize_encrypt_test(
"AES", "KAT",
("key", "plaintext", "ciphertext"),
test_KAT = generate_encrypt_test(
lambda path: load_nist_vectors_from_file(path, "ENCRYPT"),
os.path.join("AES", "KAT"),
[
"ECBGFSbox128.rsp",
"ECBGFSbox192.rsp",
Expand All @@ -107,42 +78,28 @@ class TestAES_ECB(object):
"ECBVarTxt128.rsp",
"ECBVarTxt192.rsp",
"ECBVarTxt256.rsp",
]
],
lambda key: ciphers.AES(binascii.unhexlify(key)),
lambda key: modes.ECB(),
)
def test_KAT(self, key, plaintext, ciphertext, api):
cipher = BlockCipher(
ciphers.AES(binascii.unhexlify(key)),
modes.ECB(),
api
)
actual_ciphertext = cipher.encrypt(binascii.unhexlify(plaintext))
actual_ciphertext += cipher.finalize()
assert binascii.hexlify(actual_ciphertext) == ciphertext

@parameterize_encrypt_test(
"AES", "MMT",
("key", "plaintext", "ciphertext"),

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(),
)
def test_MMT(self, key, plaintext, ciphertext, api):
cipher = BlockCipher(
ciphers.AES(binascii.unhexlify(key)),
modes.ECB(),
api
)
actual_ciphertext = cipher.encrypt(binascii.unhexlify(plaintext))
actual_ciphertext += cipher.finalize()
assert binascii.hexlify(actual_ciphertext) == ciphertext


class TestAES_OFB(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"),
[
"OFBGFSbox128.rsp",
"OFBGFSbox192.rsp",
Expand All @@ -156,42 +113,28 @@ class TestAES_OFB(object):
"OFBVarTxt128.rsp",
"OFBVarTxt192.rsp",
"OFBVarTxt256.rsp",
]
],
lambda key, iv: ciphers.AES(binascii.unhexlify(key)),
lambda key, iv: modes.OFB(binascii.unhexlify(iv)),
)
def test_KAT(self, key, iv, plaintext, ciphertext, api):
cipher = BlockCipher(
ciphers.AES(binascii.unhexlify(key)),
modes.OFB(binascii.unhexlify(iv)),
api
)
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"),
[
"OFBMMT128.rsp",
"OFBMMT192.rsp",
"OFBMMT256.rsp",
]
],
lambda key, iv: ciphers.AES(binascii.unhexlify(key)),
lambda key, iv: modes.OFB(binascii.unhexlify(iv)),
)
def test_MMT(self, key, iv, plaintext, ciphertext, api):
cipher = BlockCipher(
ciphers.AES(binascii.unhexlify(key)),
modes.OFB(binascii.unhexlify(iv)),
api
)
actual_ciphertext = cipher.encrypt(binascii.unhexlify(plaintext))
actual_ciphertext += cipher.finalize()
assert binascii.hexlify(actual_ciphertext) == ciphertext


class TestAES_CFB(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"),
[
"CFB128GFSbox128.rsp",
"CFB128GFSbox192.rsp",
Expand All @@ -205,33 +148,19 @@ class TestAES_CFB(object):
"CFB128VarTxt128.rsp",
"CFB128VarTxt192.rsp",
"CFB128VarTxt256.rsp",
]
],
lambda key, iv: ciphers.AES(binascii.unhexlify(key)),
lambda key, iv: modes.CFB(binascii.unhexlify(iv)),
)
def test_KAT(self, key, iv, plaintext, ciphertext, api):
cipher = BlockCipher(
ciphers.AES(binascii.unhexlify(key)),
modes.CFB(binascii.unhexlify(iv)),
api
)
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"),
[
"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, api):
cipher = BlockCipher(
ciphers.AES(binascii.unhexlify(key)),
modes.CFB(binascii.unhexlify(iv)),
api
)
actual_ciphertext = cipher.encrypt(binascii.unhexlify(plaintext))
actual_ciphertext += cipher.finalize()
assert binascii.hexlify(actual_ciphertext) == ciphertext

0 comments on commit 9a76847

Please sign in to comment.