diff options
Diffstat (limited to 'client/src/leap/soledad/client/_crypto.py')
-rw-r--r-- | client/src/leap/soledad/client/_crypto.py | 13 |
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 |