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):