aboutsummaryrefslogtreecommitdiffstats
path: root/cryptography
diff options
context:
space:
mode:
authorAlex Gaynor <alex.gaynor@gmail.com>2013-10-29 14:10:37 -0700
committerAlex Gaynor <alex.gaynor@gmail.com>2013-10-29 14:10:37 -0700
commit25f96e511f1e1bf70393cdd34c83f57a4b45d458 (patch)
treec03e7b60e64cbee35672dba9ee9a61c92456a4c8 /cryptography
parentf0bec9c3efe7f6def1b9b4ae53f0278e7cfbadba (diff)
downloadcryptography-25f96e511f1e1bf70393cdd34c83f57a4b45d458.tar.gz
cryptography-25f96e511f1e1bf70393cdd34c83f57a4b45d458.tar.bz2
cryptography-25f96e511f1e1bf70393cdd34c83f57a4b45d458.zip
Optimize + test cases
Diffstat (limited to 'cryptography')
-rw-r--r--cryptography/hazmat/primitives/padding.py22
1 files changed, 14 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):