diff options
author | Alex Gaynor <alex.gaynor@gmail.com> | 2013-10-29 14:10:37 -0700 |
---|---|---|
committer | Alex Gaynor <alex.gaynor@gmail.com> | 2013-10-29 14:10:37 -0700 |
commit | 25f96e511f1e1bf70393cdd34c83f57a4b45d458 (patch) | |
tree | c03e7b60e64cbee35672dba9ee9a61c92456a4c8 | |
parent | f0bec9c3efe7f6def1b9b4ae53f0278e7cfbadba (diff) | |
download | cryptography-25f96e511f1e1bf70393cdd34c83f57a4b45d458.tar.gz cryptography-25f96e511f1e1bf70393cdd34c83f57a4b45d458.tar.bz2 cryptography-25f96e511f1e1bf70393cdd34c83f57a4b45d458.zip |
Optimize + test cases
-rw-r--r-- | cryptography/hazmat/primitives/padding.py | 22 | ||||
-rw-r--r-- | tests/hazmat/primitives/test_padding.py | 10 |
2 files changed, 24 insertions, 8 deletions
diff --git a/cryptography/hazmat/primitives/padding.py b/cryptography/hazmat/primitives/padding.py index 27a1face..5c7c7e91 100644 --- a/cryptography/hazmat/primitives/padding.py +++ b/cryptography/hazmat/primitives/padding.py @@ -48,11 +48,12 @@ class _PKCS7PaddingContext(object): raise ValueError("Context was already finalized") self._buffer += data - result = b"" - while len(self._buffer) >= self.block_size // 8: - result += self._buffer[:self.block_size // 8] - self._buffer = self._buffer[self.block_size // 8:] + finished_blocks = len(self._buffer) // (self.block_size // 8) + + result = self._buffer[:finished_blocks * (self.block_size // 8)] + self._buffer = self._buffer[finished_blocks * (self.block_size // 8):] + return result def finalize(self): @@ -79,10 +80,15 @@ class _PKCS7UnpaddingContext(object): raise ValueError("Context was already finalized") self._buffer += data - result = b"" - while len(self._buffer) >= 2 * (self.block_size // 8): - result += self._buffer[:self.block_size // 8] - self._buffer = self._buffer[self.block_size // 8:] + + finished_blocks = max( + len(self._buffer) // (self.block_size // 8) - 1, + 0 + ) + + result = self._buffer[:finished_blocks * (self.block_size // 8)] + self._buffer = self._buffer[finished_blocks * (self.block_size // 8):] + return result def finalize(self): diff --git a/tests/hazmat/primitives/test_padding.py b/tests/hazmat/primitives/test_padding.py index c47b6c5c..f689dda0 100644 --- a/tests/hazmat/primitives/test_padding.py +++ b/tests/hazmat/primitives/test_padding.py @@ -47,6 +47,16 @@ class TestPKCS7(object): b"111111111111111122222222222222", b"111111111111111122222222222222\x02\x02", ), + ( + 128, + b"1" * 16, + b"1" * 16 + b"\x10" * 16, + ), + ( + 128, + b"1" * 17, + b"1" * 17 + b"\x0F" * 15, + ) ]) def test_pad(self, size, unpadded, padded): padder = padding.PKCS7(size) |