summaryrefslogtreecommitdiff
path: root/src/leap/soledad/client/_db/blobs.py
diff options
context:
space:
mode:
authorVictor Shyba <victor1984@riseup.net>2017-07-25 05:53:10 -0300
committerVictor Shyba <victor1984@riseup.net>2017-08-03 05:33:01 -0300
commit7e624f40b2b60a582db9bf297f00b743e3a91c96 (patch)
tree095449314f072e2894a6c34c80b1e714ce1fc25f /src/leap/soledad/client/_db/blobs.py
parent7007606e2fc10a836bb52ef3eb40db8b15f3c4ac (diff)
[feature] handle unsupported encryption schemes by saving directly
Diffstat (limited to 'src/leap/soledad/client/_db/blobs.py')
-rw-r--r--src/leap/soledad/client/_db/blobs.py27
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):