Mercurial > hgrepos > Python > apps > py-cutils
changeset 71:29fb33aa639a
"compare_digests_equal()" now accepts binary (aka un-encoded) expected digests also
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Sat, 26 Feb 2022 18:55:57 +0100 |
| parents | 7844f5136214 |
| children | ae2df602beb4 |
| files | shasum.py |
| diffstat | 1 files changed, 24 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/shasum.py Sat Feb 26 17:48:20 2022 +0100 +++ b/shasum.py Sat Feb 26 18:55:57 2022 +0100 @@ -186,32 +186,38 @@ string (hex or base64) in `expected_digest`. :param bytes given_digest: - :param str expected_digest: hexlified or base64 encoded digest + :param expected_digest: digest (as bytes) or hexlified or base64 encoded + digest (as str) + :type expected_digest: str or bytes or bytearray :param algo: The algorithm (factory) :return: `True` if the digests are equal, `False` if not :rtype: bool """ - if len(expected_digest) == algo().digest_size * 2: - # hex - if re.search(r"\A[a-fA-F0-9]+\Z", expected_digest): - try: - exd = binascii.unhexlify(expected_digest) - except TypeError: + if isinstance(expected_digest, (bytes, bytearray)) \ + and len(expected_digest) == algo().digest_size: + exd = expected_digest + else: + if len(expected_digest) == algo().digest_size * 2: + # hex + if re.search(r"\A[a-fA-F0-9]+\Z", expected_digest): + try: + exd = binascii.unhexlify(expected_digest) + except TypeError: + return False + else: return False else: - return False - else: - # base64 - if re.search( - r"\A(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?\Z", - expected_digest): - try: - exd = base64.b64decode(expected_digest) - except TypeError: + # base64 + if re.search( + r"\A(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?\Z", + expected_digest): + try: + exd = base64.b64decode(expected_digest) + except TypeError: + return False + else: return False - else: - return False if compare_digest: return compare_digest(given_digest, exd) else:
