diff options
author | Victor Shyba <victor1984@riseup.net> | 2017-09-20 03:54:51 -0300 |
---|---|---|
committer | Victor Shyba <victor1984@riseup.net> | 2017-10-05 05:41:40 -0300 |
commit | aef72180f681a46534c0d934a62c1376ea2489db (patch) | |
tree | 91591d6e4d3cd91d4b97213aee3d1de3d65f71fe /src | |
parent | fd99f15f1da1bed6c223876b7e2e72477ca8b2ee (diff) |
[feature] improve preamble comparisons
We were comparing the raw content of preambles. This commit adds a way
to compare excluding time so comparisons don't suffer from false
negatives caused by time deltas.
-- Resolves: #8920
Diffstat (limited to 'src')
-rw-r--r-- | src/leap/soledad/common/blobs/preamble.py | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/leap/soledad/common/blobs/preamble.py b/src/leap/soledad/common/blobs/preamble.py index d4065c38..a8446c0d 100644 --- a/src/leap/soledad/common/blobs/preamble.py +++ b/src/leap/soledad/common/blobs/preamble.py @@ -26,6 +26,7 @@ holds data about encryption scheme, iv, document id and sync related data. str(self.rev), -> current revision self._content_size) -> size, rounded to ceiling """ +import base64 import warnings import struct import time @@ -66,8 +67,24 @@ class Preamble(object): self.content_size) return preamble + def __eq__(self, other): + # timestamp insn't included on comparison on purpose since it's not + # part of the document identity (you can have the very same document at + # two different times, but you can't have any other field changed and + # still be able to consider it as the same document). + fields = ['doc_id', 'rev', 'scheme', 'method', 'iv', 'magic', + 'content_size'] + for field in fields: + if not hasattr(other, field): + return False + if getattr(self, field) != getattr(other, field): + return False + return True -def decode_preamble(encoded_preamble): + +def decode_preamble(encoded_preamble, armored=False): + if armored: + encoded_preamble = base64.b64decode(encoded_preamble) preamble_size = len(encoded_preamble) try: if preamble_size == LEGACY_PACMAN.size: |