diff options
Diffstat (limited to 'tests/hazmat/primitives/test_block.py')
| -rw-r--r-- | tests/hazmat/primitives/test_block.py | 86 | 
1 files changed, 86 insertions, 0 deletions
| diff --git a/tests/hazmat/primitives/test_block.py b/tests/hazmat/primitives/test_block.py new file mode 100644 index 00000000..e0ed6697 --- /dev/null +++ b/tests/hazmat/primitives/test_block.py @@ -0,0 +1,86 @@ +# 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 pytest + +from cryptography.hazmat.primitives import interfaces +from cryptography.hazmat.primitives.block import BlockCipher, ciphers, modes + + +class TestBlockCipher(object): +    def test_instantiate_without_backend(self): +        BlockCipher( +            ciphers.AES(binascii.unhexlify(b"0" * 32)), +            modes.CBC(binascii.unhexlify(b"0" * 32)) +        ) + +    def test_creates_encryptor(self): +        cipher = BlockCipher( +            ciphers.AES(binascii.unhexlify(b"0" * 32)), +            modes.CBC(binascii.unhexlify(b"0" * 32)) +        ) +        assert isinstance(cipher.encryptor(), interfaces.CipherContext) + +    def test_creates_decryptor(self): +        cipher = BlockCipher( +            ciphers.AES(binascii.unhexlify(b"0" * 32)), +            modes.CBC(binascii.unhexlify(b"0" * 32)) +        ) +        assert isinstance(cipher.decryptor(), interfaces.CipherContext) + + +class TestBlockCipherContext(object): +    def test_use_after_finalize(self, backend): +        cipher = BlockCipher( +            ciphers.AES(binascii.unhexlify(b"0" * 32)), +            modes.CBC(binascii.unhexlify(b"0" * 32)), +            backend +        ) +        encryptor = cipher.encryptor() +        encryptor.update(b"a" * 16) +        encryptor.finalize() +        with pytest.raises(ValueError): +            encryptor.update(b"b" * 16) +        with pytest.raises(ValueError): +            encryptor.finalize() +        decryptor = cipher.decryptor() +        decryptor.update(b"a" * 16) +        decryptor.finalize() +        with pytest.raises(ValueError): +            decryptor.update(b"b" * 16) +        with pytest.raises(ValueError): +            decryptor.finalize() + +    def test_unaligned_block_encryption(self, backend): +        cipher = BlockCipher( +            ciphers.AES(binascii.unhexlify(b"0" * 32)), +            modes.ECB(), +            backend +        ) +        encryptor = cipher.encryptor() +        ct = encryptor.update(b"a" * 15) +        assert ct == b"" +        ct += encryptor.update(b"a" * 65) +        assert len(ct) == 80 +        ct += encryptor.finalize() +        decryptor = cipher.decryptor() +        pt = decryptor.update(ct[:3]) +        assert pt == b"" +        pt += decryptor.update(ct[3:]) +        assert len(pt) == 80 +        assert pt == b"a" * 80 +        decryptor.finalize() | 
