From b47f6e1a9f8389224b80b5c3489bafa9e0b57273 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 30 Oct 2013 16:47:06 -0500 Subject: CAST5 support + ECB vectors --- tests/hazmat/primitives/test_cast5.py | 38 ++++++++++++++++++++++ tests/hazmat/primitives/test_ciphers.py | 15 ++++++++- .../primitives/vectors/ciphers/CAST5/cast5-ecb.txt | 19 +++++++++++ 3 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 tests/hazmat/primitives/test_cast5.py create mode 100644 tests/hazmat/primitives/vectors/ciphers/CAST5/cast5-ecb.txt (limited to 'tests/hazmat') diff --git a/tests/hazmat/primitives/test_cast5.py b/tests/hazmat/primitives/test_cast5.py new file mode 100644 index 00000000..bd861150 --- /dev/null +++ b/tests/hazmat/primitives/test_cast5.py @@ -0,0 +1,38 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import, division, print_function + +import binascii +import os + +from cryptography.hazmat.primitives.block import ciphers, modes + +from .utils import generate_encrypt_test +from ...utils import load_nist_vectors_from_file + + +class TestCAST5(object): + test_ECB = generate_encrypt_test( + lambda path: load_nist_vectors_from_file(path, "ENCRYPT"), + os.path.join("ciphers", "CAST5"), + [ + "cast5-ecb.txt", + ], + lambda key: ciphers.CAST5(binascii.unhexlify((key))), + lambda key: modes.ECB(), + only_if=lambda backend: backend.ciphers.supported( + ciphers.CAST5("\x00" * 16), modes.ECB() + ), + skip_message="Does not support CAST5 ECB", + ) diff --git a/tests/hazmat/primitives/test_ciphers.py b/tests/hazmat/primitives/test_ciphers.py index 2a20eb7a..d3870a0b 100644 --- a/tests/hazmat/primitives/test_ciphers.py +++ b/tests/hazmat/primitives/test_ciphers.py @@ -18,7 +18,7 @@ import binascii import pytest from cryptography.hazmat.primitives.block.ciphers import ( - AES, Camellia, TripleDES, Blowfish + AES, Camellia, TripleDES, Blowfish, CAST5 ) @@ -78,3 +78,16 @@ class TestBlowfish(object): def test_invalid_key_size(self): with pytest.raises(ValueError): Blowfish(binascii.unhexlify(b"0" * 6)) + + +class TestCAST5(object): + @pytest.mark.parametrize(("key", "keysize"), [ + (b"0" * (keysize // 4), keysize) for keysize in range(40, 129, 8) + ]) + def test_key_size(self, key, keysize): + cipher = CAST5(binascii.unhexlify(key)) + assert cipher.key_size == keysize + + def test_invalid_key_size(self): + with pytest.raises(ValueError): + CAST5(binascii.unhexlify(b"0" * 34)) diff --git a/tests/hazmat/primitives/vectors/ciphers/CAST5/cast5-ecb.txt b/tests/hazmat/primitives/vectors/ciphers/CAST5/cast5-ecb.txt new file mode 100644 index 00000000..04c78615 --- /dev/null +++ b/tests/hazmat/primitives/vectors/ciphers/CAST5/cast5-ecb.txt @@ -0,0 +1,19 @@ +# CAST5 (CAST128) ECB vectors from RFC 2144 +[ENCRYPT] +# 128-bit key +COUNT = 0 +key = 0123456712345678234567893456789A +plaintext = 0123456789ABCDEF +ciphertext = 238B4FE5847E44B2 + +# 80-bit key +COUNT = 1 +key = 01234567123456782345 +plaintext = 0123456789ABCDEF +ciphertext = EB6A711A2C02271B + +# 40-bit key +COUNT = 2 +key = 0123456712 +plaintext = 0123456789ABCDEF +ciphertext = 7AC816D16E9B302E -- cgit v1.2.3