From 6424e3f9dde7bb4c25c8dfe82673b95b52adf4ed Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Tue, 17 Jul 2018 22:29:48 +0800 Subject: [PATCH] raise ValueError on zero length GCM IV --- docs/hazmat/primitives/symmetric-encryption.rst | 3 ++- src/cryptography/hazmat/primitives/ciphers/modes.py | 2 ++ tests/hazmat/primitives/test_block.py | 4 ++++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/hazmat/primitives/symmetric-encryption.rst b/docs/hazmat/primitives/symmetric-encryption.rst index 5b6000902768..e74b4d665adb 100644 --- a/docs/hazmat/primitives/symmetric-encryption.rst +++ b/docs/hazmat/primitives/symmetric-encryption.rst @@ -399,7 +399,8 @@ Modes this is ``16``, meaning tag truncation is not allowed. Allowing tag truncation is strongly discouraged for most applications. - :raises ValueError: This is raised if ``len(tag) < min_tag_length``. + :raises ValueError: This is raised if ``len(tag) < min_tag_length`` or the + ``initialization_vector`` is too short. :raises NotImplementedError: This is raised if the version of the OpenSSL backend used is 1.0.1 or earlier. diff --git a/src/cryptography/hazmat/primitives/ciphers/modes.py b/src/cryptography/hazmat/primitives/ciphers/modes.py index 543015fef72c..e82c1a8d6a7e 100644 --- a/src/cryptography/hazmat/primitives/ciphers/modes.py +++ b/src/cryptography/hazmat/primitives/ciphers/modes.py @@ -208,6 +208,8 @@ def __init__(self, initialization_vector, tag=None, min_tag_length=16): # for it if not isinstance(initialization_vector, bytes): raise TypeError("initialization_vector must be bytes") + if len(initialization_vector) == 0: + raise ValueError("initialization_vector must be at least 1 byte") self._initialization_vector = initialization_vector if tag is not None: if not isinstance(tag, bytes): diff --git a/tests/hazmat/primitives/test_block.py b/tests/hazmat/primitives/test_block.py index c053feafb719..37158f153c7a 100644 --- a/tests/hazmat/primitives/test_block.py +++ b/tests/hazmat/primitives/test_block.py @@ -191,6 +191,10 @@ def test_ctr(self, backend): backend, ) + def test_gcm(self): + with pytest.raises(ValueError): + modes.GCM(b"") + class TestModesRequireBytes(object): def test_cbc(self):