From: Philipp Gesang Date: Tue, 29 Aug 2017 07:53:46 +0000 (+0200) Subject: include description of object validation with crypto.py scan mode X-Git-Tag: v2.2~7^2~38 X-Git-Url: http://developer.intra2net.com/git/?p=python-delta-tar;a=commitdiff_plain;h=5ed4c57ddd47b06215ae6580da5f3a0d8b3e102e include description of object validation with crypto.py scan mode Example output for a second object with a corrupt byte in the size field: PDT: obj 1: read payload @64 PDT: · version = 1 : 0100 PDT: · paramversion = 1 : 0100 PDT: · nacl : 1dc1 154a 5405 ef5e df81 173f 2821 7a0c PDT: · iv : 7cae 452a a05b 5182 0300 0000 PDT: · ctsize = 230 : e600 0000 0000 0000 PDT: · tag : 42c0 8774 3309 88eb 0e1a 71dc 8fd9 80c1 PDT: 0 → ✓ valid object 64–294 PDT: 294 → EOF inside object (358≤5312627≤1095216701872); adjusting size to 5312269 PDT: obj 2: read payload @358 PDT: · version = 1 : 0100 PDT: · paramversion = 1 : 0100 PDT: · nacl : 1dc1 154a 5405 ef5e df81 173f 2821 7a0c PDT: · iv : 7cae 452a a05b 5182 0400 0000 PDT: · ctsize = 5312269 : 0d0f 5100 0000 0000 PDT: · tag : 5946 dbcf 41b9 ac7e 4729 9e09 46c7 3388 PDT: GCM tag mismatch for object 358–5312627 PDT: 294 → × fishy object 358–5312627, corrupt header --- diff --git a/deltatar/crypto.py b/deltatar/crypto.py index 41f0cbd..676fa18 100755 --- a/deltatar/crypto.py +++ b/deltatar/crypto.py @@ -553,6 +553,16 @@ HDR_CAND_GOOD = 0 # header marks begin of valid object HDR_CAND_FISHY = 1 # inconclusive (tag mismatch, obj overlap etc.) HDR_CAND_JUNK = 2 # not a header / object unreadable +HDR_VERDICT_NAME = \ + { HDR_CAND_GOOD : "valid" + , HDR_CAND_FISHY : "fishy" + , HDR_CAND_JUNK : "junk" + } + + +def verdict_fmt (vdt): + return HDR_VERDICT_NAME [vdt] + def inspect_hdr (fd, off): """ @@ -1911,7 +1921,10 @@ def mode_scan (secret, fname, outs=None, nacl=None): nobj += 1 vdt, hdr = inspect_hdr (ifd, cand) + vdts = verdict_fmt (vdt) + if vdt == HDR_CAND_JUNK: + noise ("PDT: obj %d: %s object: bad header, skipping" % vdts) junk.append (cand) else: off0 = cand + PDTCRYPT_HDR_SIZE @@ -1935,17 +1948,17 @@ def mode_scan (secret, fname, outs=None, nacl=None): if ofd != -1: os.close (ofd) if vdt == HDR_CAND_GOOD and ok is True: - noise ("PDT: %d → ✓ valid object %d–%d" - % (cand, off0, off0 + ctsize)) + noise ("PDT: %d → ✓ %s object %d–%d" + % (cand, vdts, off0, off0 + ctsize)) elif vdt == HDR_CAND_FISHY and ok is True: - noise ("PDT: %d → × object %d–%d, corrupt header" - % (cand, off0, off0 + ctsize)) + noise ("PDT: %d → × %s object %d–%d, corrupt header" + % (cand, vdts, off0, off0 + ctsize)) elif vdt == HDR_CAND_GOOD and ok is False: - noise ("PDT: %d → × object %d–%d, problematic payload" - % (cand, off0, off0 + ctsize)) + noise ("PDT: %d → × %s object %d–%d, problematic payload" + % (cand, vdts, off0, off0 + ctsize)) elif vdt == HDR_CAND_FISHY and ok is False: - noise ("PDT: %d → × object %d–%d, corrupt header, problematic " - "ciphertext" % (cand, off0, off0 + ctsize)) + noise ("PDT: %d → × %s object %d–%d, corrupt header, problematic " + "ciphertext" % (cand, vdts, off0, off0 + ctsize)) else: raise Unreachable finally: