summaryrefslogtreecommitdiff
path: root/client/src/leap/soledad/client/_crypto.py
diff options
context:
space:
mode:
Diffstat (limited to 'client/src/leap/soledad/client/_crypto.py')
-rw-r--r--client/src/leap/soledad/client/_crypto.py13
1 files changed, 9 insertions, 4 deletions
diff --git a/client/src/leap/soledad/client/_crypto.py b/client/src/leap/soledad/client/_crypto.py
index 1492c1ab..d8d37f55 100644
--- a/client/src/leap/soledad/client/_crypto.py
+++ b/client/src/leap/soledad/client/_crypto.py
@@ -372,11 +372,16 @@ class AESDecryptor(object):
self.done = True
-def is_symmetrically_encrypted(payload):
- if not payload or len(payload) < 24 \
- or not payload.startswith('{"raw": "'):
+def is_symmetrically_encrypted(doc):
+ payload = doc.content
+ if not payload or 'raw' not in payload:
+ return False
+ payload = str(payload['raw'])
+ if len(payload) < 16:
+ return False
+ header = base64.urlsafe_b64decode(payload[:18] + '==')
+ if six.indexbytes(header, 0) != 0x80:
return False
- header = base64.urlsafe_b64decode(payload[9:24] + '==')
ts, sch, meth = struct.unpack('Qbb', header[1:11])
return sch == ENC_SCHEME.symkey and meth == ENC_METHOD.aes_256_ctr