diff options
author | Victor Shyba <victor1984@riseup.net> | 2017-07-25 05:53:10 -0300 |
---|---|---|
committer | Victor Shyba <victor1984@riseup.net> | 2017-08-03 05:33:01 -0300 |
commit | 7e624f40b2b60a582db9bf297f00b743e3a91c96 (patch) | |
tree | 095449314f072e2894a6c34c80b1e714ce1fc25f /src/leap/soledad/client/_db | |
parent | 7007606e2fc10a836bb52ef3eb40db8b15f3c4ac (diff) |
[feature] handle unsupported encryption schemes by saving directly
Diffstat (limited to 'src/leap/soledad/client/_db')
-rw-r--r-- | src/leap/soledad/client/_db/blobs.py | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/src/leap/soledad/client/_db/blobs.py b/src/leap/soledad/client/_db/blobs.py index e95f9d9e..5334ffe5 100644 --- a/src/leap/soledad/client/_db/blobs.py +++ b/src/leap/soledad/client/_db/blobs.py @@ -42,6 +42,7 @@ from .._document import BlobDoc from .._crypto import DocInfo from .._crypto import BlobEncryptor from .._crypto import BlobDecryptor +from .._crypto import EncryptionSchemeNotImplementedException from .._http import HTTPClient from .._pipes import TruncatedTailPipe from .._pipes import PreamblePipe @@ -124,22 +125,30 @@ class DecrypterBuffer(object): self.secret = secret self.tag = tag self.preamble_pipe = PreamblePipe(self._make_decryptor) + self.decrypter = None def _make_decryptor(self, preamble): - self.decrypter = BlobDecryptor( - self.doc_info, preamble, - secret=self.secret, - armor=False, - start_stream=False, - tag=self.tag) - return TruncatedTailPipe(self.decrypter, tail_size=len(self.tag)) + try: + self.decrypter = BlobDecryptor( + self.doc_info, preamble, + secret=self.secret, + armor=False, + start_stream=False, + tag=self.tag) + return TruncatedTailPipe(self.decrypter, tail_size=len(self.tag)) + except EncryptionSchemeNotImplementedException: + self.raw_data = BytesIO() + return self.raw_data def write(self, data): self.preamble_pipe.write(data) def close(self): - real_size = self.decrypter.decrypted_content_size - return self.decrypter._end_stream(), real_size + if self.decrypter: + real_size = self.decrypter.decrypted_content_size + return self.decrypter._end_stream(), real_size + else: + return self.raw_data, self.raw_data.tell() class BlobManager(object): |