diff options
author | Donald Stufft <donald@stufft.io> | 2013-08-10 15:10:38 -0400 |
---|---|---|
committer | Donald Stufft <donald@stufft.io> | 2013-08-10 15:10:38 -0400 |
commit | 93e768b52c03fb33ff46124c17d4e1b2a13693fe (patch) | |
tree | ba6f336f82d1d458c103ec9d68932ff1712cbfd0 | |
parent | 6e9f1e5cef4e905e3076f778ff63f4c032602c89 (diff) | |
download | cryptography-93e768b52c03fb33ff46124c17d4e1b2a13693fe.tar.gz cryptography-93e768b52c03fb33ff46124c17d4e1b2a13693fe.tar.bz2 cryptography-93e768b52c03fb33ff46124c17d4e1b2a13693fe.zip |
Ciphers should know what size their keys are
-rw-r--r-- | cryptography/bindings/openssl/api.py | 2 | ||||
-rw-r--r-- | cryptography/primitives/block/ciphers.py | 4 | ||||
-rw-r--r-- | tests/primitives/test_ciphers.py | 29 |
3 files changed, 34 insertions, 1 deletions
diff --git a/cryptography/bindings/openssl/api.py b/cryptography/bindings/openssl/api.py index 07079415..720a6ad4 100644 --- a/cryptography/bindings/openssl/api.py +++ b/cryptography/bindings/openssl/api.py @@ -68,7 +68,7 @@ class API(object): ctx = self._ffi.gc(ctx, self._lib.EVP_CIPHER_CTX_cleanup) # TODO: compute name using a better algorithm ciphername = "{0}-{1}-{2}".format( - cipher.name, len(cipher.key) * 8, mode.name + cipher.name, cipher.key_size, mode.name ) evp_cipher = self._lib.EVP_get_cipherbyname(ciphername.encode("ascii")) if evp_cipher == self._ffi.NULL: diff --git a/cryptography/primitives/block/ciphers.py b/cryptography/primitives/block/ciphers.py index 3bd5daad..f40fc2a1 100644 --- a/cryptography/primitives/block/ciphers.py +++ b/cryptography/primitives/block/ciphers.py @@ -18,3 +18,7 @@ class AES(object): def __init__(self, key): super(AES, self).__init__() self.key = key + + @property + def key_size(self): + return len(self.key) * 8 diff --git a/tests/primitives/test_ciphers.py b/tests/primitives/test_ciphers.py new file mode 100644 index 00000000..31b4275e --- /dev/null +++ b/tests/primitives/test_ciphers.py @@ -0,0 +1,29 @@ +# 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. + +import binascii + +import pytest + +from cryptography.primitives.block.ciphers import AES + + +class TestAES(object): + @pytest.mark.parametrize(("key", "keysize"), [ + (b"0" * 32, 128), + (b"0" * 48, 192), + (b"0" * 64, 256), + ]) + def test_key_size(self, key, keysize): + cipher = AES(binascii.unhexlify(key)) + assert cipher.key_size == keysize |