diff options
author | Alex Gaynor <alex.gaynor@gmail.com> | 2016-03-07 10:04:22 -0500 |
---|---|---|
committer | Alex Gaynor <alex.gaynor@gmail.com> | 2016-03-07 10:04:22 -0500 |
commit | b6e1f6f23f02dd9534688c5ca88b511894b90faa (patch) | |
tree | b00a50ef9397a5cc6a740852bd481fc0977c906f | |
parent | 83c9cdaf1d8cb0d1a60f89935e237fa5fffcc571 (diff) | |
parent | b352531220a2718ca5dddce09ff0cdda1a4bd227 (diff) | |
download | cryptography-b6e1f6f23f02dd9534688c5ca88b511894b90faa.tar.gz cryptography-b6e1f6f23f02dd9534688c5ca88b511894b90faa.tar.bz2 cryptography-b6e1f6f23f02dd9534688c5ca88b511894b90faa.zip |
Merge pull request #2769 from reaperhulk/enforce-more-bytes
require mode nonce/iv/tag data to be bytes
-rw-r--r-- | src/cryptography/hazmat/primitives/ciphers/modes.py | 21 | ||||
-rw-r--r-- | tests/hazmat/primitives/test_block.py | 30 |
2 files changed, 51 insertions, 0 deletions
diff --git a/src/cryptography/hazmat/primitives/ciphers/modes.py b/src/cryptography/hazmat/primitives/ciphers/modes.py index 4284042d..802e544a 100644 --- a/src/cryptography/hazmat/primitives/ciphers/modes.py +++ b/src/cryptography/hazmat/primitives/ciphers/modes.py @@ -67,6 +67,9 @@ class CBC(object): name = "CBC" def __init__(self, initialization_vector): + if not isinstance(initialization_vector, bytes): + raise TypeError("initialization_vector must be bytes") + self._initialization_vector = initialization_vector initialization_vector = utils.read_only_property("_initialization_vector") @@ -87,6 +90,9 @@ class OFB(object): name = "OFB" def __init__(self, initialization_vector): + if not isinstance(initialization_vector, bytes): + raise TypeError("initialization_vector must be bytes") + self._initialization_vector = initialization_vector initialization_vector = utils.read_only_property("_initialization_vector") @@ -99,6 +105,9 @@ class CFB(object): name = "CFB" def __init__(self, initialization_vector): + if not isinstance(initialization_vector, bytes): + raise TypeError("initialization_vector must be bytes") + self._initialization_vector = initialization_vector initialization_vector = utils.read_only_property("_initialization_vector") @@ -111,6 +120,9 @@ class CFB8(object): name = "CFB8" def __init__(self, initialization_vector): + if not isinstance(initialization_vector, bytes): + raise TypeError("initialization_vector must be bytes") + self._initialization_vector = initialization_vector initialization_vector = utils.read_only_property("_initialization_vector") @@ -123,6 +135,9 @@ class CTR(object): name = "CTR" def __init__(self, nonce): + if not isinstance(nonce, bytes): + raise TypeError("nonce must be bytes") + self._nonce = nonce nonce = utils.read_only_property("_nonce") @@ -154,6 +169,12 @@ class GCM(object): min_tag_length) ) + if not isinstance(initialization_vector, bytes): + raise TypeError("initialization_vector must be bytes") + + if tag is not None and not isinstance(tag, bytes): + raise TypeError("tag must be bytes or None") + self._initialization_vector = initialization_vector self._tag = tag diff --git a/tests/hazmat/primitives/test_block.py b/tests/hazmat/primitives/test_block.py index 5d77877d..eb0a2c3b 100644 --- a/tests/hazmat/primitives/test_block.py +++ b/tests/hazmat/primitives/test_block.py @@ -177,3 +177,33 @@ class TestModeValidation(object): modes.CTR(b"abc"), backend, ) + + +class TestModesRequireBytes(object): + def test_cbc(self): + with pytest.raises(TypeError): + modes.CBC([1] * 16) + + def test_cfb(self): + with pytest.raises(TypeError): + modes.CFB([1] * 16) + + def test_cfb8(self): + with pytest.raises(TypeError): + modes.CFB8([1] * 16) + + def test_ofb(self): + with pytest.raises(TypeError): + modes.OFB([1] * 16) + + def test_ctr(self): + with pytest.raises(TypeError): + modes.CTR([1] * 16) + + def test_gcm_iv(self): + with pytest.raises(TypeError): + modes.GCM([1] * 16) + + def test_gcm_tag(self): + with pytest.raises(TypeError): + modes.GCM(b"\x00" * 16, [1] * 16) |