Mercurial > hgrepos > Python > apps > py-cutils
comparison shasum.py @ 52:5935055edea6
More proper formal checks (with regexp) for valid hex and base64 encoding of digests
| author | Franz Glasner <f.glasner@feldmann-mg.com> |
|---|---|
| date | Wed, 26 Jan 2022 14:49:24 +0100 |
| parents | 58d5a0b6e5b3 |
| children | 6e91c530545f |
comparison
equal
deleted
inserted
replaced
| 51:58d5a0b6e5b3 | 52:5935055edea6 |
|---|---|
| 175 :rtype: bool | 175 :rtype: bool |
| 176 | 176 |
| 177 """ | 177 """ |
| 178 if len(expected_digest) == algo().digest_size * 2: | 178 if len(expected_digest) == algo().digest_size * 2: |
| 179 # hex | 179 # hex |
| 180 try: | 180 if re.search(r"\A[a-fA-F0-9]+\Z", expected_digest): |
| 181 exd = binascii.unhexlify(expected_digest) | 181 try: |
| 182 except TypeError: | 182 exd = binascii.unhexlify(expected_digest) |
| 183 except TypeError: | |
| 184 return False | |
| 185 else: | |
| 183 return False | 186 return False |
| 184 else: | 187 else: |
| 185 # base64 | 188 # base64 |
| 186 try: | 189 if re.search( |
| 187 exd = base64.b64decode(expected_digest) | 190 r"\A(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?\Z", |
| 188 except TypeError: | 191 expected_digest): |
| 192 try: | |
| 193 exd = base64.b64decode(expected_digest) | |
| 194 except TypeError: | |
| 195 return False | |
| 196 else: | |
| 189 return False | 197 return False |
| 190 return given_digest == exd | 198 return given_digest == exd |
| 191 | 199 |
| 192 | 200 |
| 193 def verify_digests_with_checklist(opts): | 201 def verify_digests_with_checklist(opts): |
