aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorPaul Kehrer <paul.l.kehrer@gmail.com>2013-09-11 09:38:45 -0500
committerPaul Kehrer <paul.l.kehrer@gmail.com>2013-09-11 09:38:45 -0500
commita1ec262a3596dbba4ff82ff7d05c4f265f794359 (patch)
tree42a2b5a50611b58b25821aa80d71c7c6d469a749 /tests
parent9287c2344c6c91ad838a251d3b6fde2a6ea88b56 (diff)
downloadcryptography-a1ec262a3596dbba4ff82ff7d05c4f265f794359.tar.gz
cryptography-a1ec262a3596dbba4ff82ff7d05c4f265f794359.tar.bz2
cryptography-a1ec262a3596dbba4ff82ff7d05c4f265f794359.zip
CFB support
This requires a bit of explanation. OpenSSL has methods that implement standard CFB, 1-bit CFB (cfb1), and 8-bit CFB (cfb8). Unfortunately, while old (read: 0.9.7) versions of OpenSSL appear to test these variants, newer versions have a comment stating that cfb{1,8} are unsupported. Accordingly, I've backed out any support for the variants for now. We can add it back into the CFB class if and when we gain a backend that supports arbitrary s for 1 <= s <= block_size
Diffstat (limited to 'tests')
-rw-r--r--tests/primitives/test_nist.py47
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/primitives/test_nist.py b/tests/primitives/test_nist.py
index 0e16cc9c..1e5d2396 100644
--- a/tests/primitives/test_nist.py
+++ b/tests/primitives/test_nist.py
@@ -180,3 +180,50 @@ class TestAES_OFB(object):
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"),
+ [
+ "CFB128GFSbox128.rsp",
+ "CFB128GFSbox192.rsp",
+ "CFB128GFSbox256.rsp",
+ "CFB128KeySbox128.rsp",
+ "CFB128KeySbox192.rsp",
+ "CFB128KeySbox256.rsp",
+ "CFB128VarKey128.rsp",
+ "CFB128VarKey192.rsp",
+ "CFB128VarKey256.rsp",
+ "CFB128VarTxt128.rsp",
+ "CFB128VarTxt192.rsp",
+ "CFB128VarTxt256.rsp",
+ ]
+ )
+ def test_KAT(self, key, iv, plaintext, ciphertext):
+ cipher = BlockCipher(
+ ciphers.AES(binascii.unhexlify(key)),
+ modes.CFB(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"),
+ [
+ "CFB128MMT128.rsp",
+ "CFB128MMT192.rsp",
+ "CFB128MMT256.rsp",
+ ]
+ )
+ def test_MMT(self, key, iv, plaintext, ciphertext):
+ cipher = BlockCipher(
+ ciphers.AES(binascii.unhexlify(key)),
+ modes.CFB(binascii.unhexlify(iv))
+ )
+ actual_ciphertext = cipher.encrypt(binascii.unhexlify(plaintext))
+ actual_ciphertext += cipher.finalize()
+ assert binascii.hexlify(actual_ciphertext) == ciphertext