diff options
author | Alex Gaynor <alex.gaynor@gmail.com> | 2013-10-28 10:09:15 -0700 |
---|---|---|
committer | Alex Gaynor <alex.gaynor@gmail.com> | 2013-10-28 10:09:15 -0700 |
commit | 9d683f71433ca4f2a09052159dc10d2f2dcb3222 (patch) | |
tree | 86928a635b22a4dc36bce266550323533e166ff8 /tests/hazmat/primitives/test_block.py | |
parent | 01fbdf74967f8e22e3ea2d15f195898c64d34cc3 (diff) | |
parent | 0a1550e86fbb8a64a1f534babd76da5afd1c4c11 (diff) | |
download | cryptography-9d683f71433ca4f2a09052159dc10d2f2dcb3222.tar.gz cryptography-9d683f71433ca4f2a09052159dc10d2f2dcb3222.tar.bz2 cryptography-9d683f71433ca4f2a09052159dc10d2f2dcb3222.zip |
Merge pull request #188 from dstufft/hazmat
Create a Hazardous Materials Area
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() |