diff options
author | Ayrx <terrycwk1994@gmail.com> | 2014-03-16 14:36:17 +0800 |
---|---|---|
committer | Ayrx <terrycwk1994@gmail.com> | 2014-03-16 14:36:17 +0800 |
commit | f56c54e36ce06e8e29691c3c4dfd000e8477a41d (patch) | |
tree | 4a3e86f945b37c950b35d8eb0d11930485c907d4 | |
parent | 3fb221f1fb02ffed7a558bd06ba41bb75c329fc5 (diff) | |
download | cryptography-f56c54e36ce06e8e29691c3c4dfd000e8477a41d.tar.gz cryptography-f56c54e36ce06e8e29691c3c4dfd000e8477a41d.tar.bz2 cryptography-f56c54e36ce06e8e29691c3c4dfd000e8477a41d.zip |
Added backend check to cipher primitives
-rw-r--r-- | cryptography/hazmat/primitives/ciphers/base.py | 8 | ||||
-rw-r--r-- | docs/hazmat/primitives/symmetric-encryption.rst | 4 | ||||
-rw-r--r-- | tests/hazmat/primitives/test_ciphers.py | 11 |
3 files changed, 22 insertions, 1 deletions
diff --git a/cryptography/hazmat/primitives/ciphers/base.py b/cryptography/hazmat/primitives/ciphers/base.py index d366e4cf..2c804cac 100644 --- a/cryptography/hazmat/primitives/ciphers/base.py +++ b/cryptography/hazmat/primitives/ciphers/base.py @@ -16,12 +16,18 @@ from __future__ import absolute_import, division, print_function from cryptography import utils from cryptography.exceptions import ( AlreadyFinalized, NotYetFinalized, AlreadyUpdated, -) + UnsupportedInterface) + +from cryptography.hazmat.backends.interfaces import CipherBackend from cryptography.hazmat.primitives import interfaces class Cipher(object): def __init__(self, algorithm, mode, backend): + if not isinstance(backend, CipherBackend): + raise UnsupportedInterface( + "Backend object does not implement CipherBackend") + if not isinstance(algorithm, interfaces.CipherAlgorithm): raise TypeError("Expected interface of interfaces.CipherAlgorithm") diff --git a/docs/hazmat/primitives/symmetric-encryption.rst b/docs/hazmat/primitives/symmetric-encryption.rst index 741091b2..71a1064e 100644 --- a/docs/hazmat/primitives/symmetric-encryption.rst +++ b/docs/hazmat/primitives/symmetric-encryption.rst @@ -56,6 +56,10 @@ an "encrypt-then-MAC" formulation as `described by Colin Percival`_. :class:`~cryptography.hazmat.backends.interfaces.CipherBackend` provider. + :raises cryptography.exceptions.UnsupportedInterface: This is raised if the + provided ``backend`` does not implement + :class:`~cryptography.hazmat.backends.interfaces.CipherBackend` + .. method:: encryptor() :return: An encrypting diff --git a/tests/hazmat/primitives/test_ciphers.py b/tests/hazmat/primitives/test_ciphers.py index d9f83535..dfed63a8 100644 --- a/tests/hazmat/primitives/test_ciphers.py +++ b/tests/hazmat/primitives/test_ciphers.py @@ -14,9 +14,13 @@ from __future__ import absolute_import, division, print_function import binascii +from cryptography.hazmat.primitives.ciphers.modes import ECB import pytest +from cryptography.exceptions import UnsupportedInterface + +from cryptography.hazmat.primitives import ciphers from cryptography.hazmat.primitives.ciphers.algorithms import ( AES, Camellia, TripleDES, Blowfish, ARC4, CAST5, IDEA ) @@ -120,3 +124,10 @@ class TestIDEA(object): def test_invalid_key_size(self): with pytest.raises(ValueError): IDEA(b"\x00" * 17) + + +def test_invalid_backend(): + pretend_backend = object() + + with pytest.raises(UnsupportedInterface): + ciphers.Cipher(AES(b"AAAAAAAAAAAAAAAA"), ECB, pretend_backend) |