Mercurial > hgrepos > Python > apps > py-cutils
changeset 184:6154b8e4ba94
Include some new algorithms: CRC
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Tue, 14 Jan 2025 11:26:38 +0100 |
| parents | 62436c255dc8 |
| children | f04d4b1c14b3 |
| files | cutils/util/__init__.py |
| diffstat | 1 files changed, 58 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/cutils/util/__init__.py Tue Jan 14 11:26:12 2025 +0100 +++ b/cutils/util/__init__.py Tue Jan 14 11:26:38 2025 +0100 @@ -84,6 +84,17 @@ return pyblake2.blake2s +def get_crc(name): + """Get the factory for a CRC""" + + from ..crcmod.predefined import PredefinedCrc + + def _crc_type(): + return PredefinedCrc(name) + + return _crc_type + + def argv2algo(s): """Convert a command line algorithm specifier into a tuple with the type/factory of the digest and the algorithms tag for output purposes. @@ -124,6 +135,35 @@ return (get_blake2b_256(), "BLAKE2b-256") elif s == "md5": return (hashlib.md5, "MD5") + elif s in ("crc24", "crc-24", + "crc24-openpgp", "crc-24-openpgp"): + return (get_crc("crc-24"), "CRC-24") + elif s in ("crc32", "crc-32", + "crc32-pkzip", "crc-32-pkzip", + "crc32-iso", "crc-32-iso", + "crc32-iso-hdlc", "crc-32-iso-hdlc"): + return (get_crc("crc-32"), "CRC-32-ISO") + elif s in ("crc32-posix", "crc-32-posix", + "crc32-cksum", "crc-32-cksum", + "posix"): + return (get_crc("posix"), "CRC-32-POSIX") + elif s in ("crc64", "crc-64", + "crc64-iso", "crc-64-iso"): + return (get_crc("crc-64"), "CRC-64-ISO") + elif s in ("crc64-2", "crc-64-2", + "crc64-iso-2", "crc-64-iso-2", + "crc64-mcrc64", "crc-64-mcrc64"): + return (get_crc("crc-64-2"), "CRC-64-ISO-2") + elif s in ("crc64-ecma", "crc-64-ecma"): + return (get_crc("crc-64-ecma"), "CRC-64-ECMA") + elif s in ("crc64-xz", "crc-64-xz", + "crc64-go-ecma", "crc-64-go-ecma"): + return (get_crc("crc-64-xz"), "CRC-64-XZ") + elif s in ("crc64-go", "crc-64-go", + "crc64-go-iso", "crc-64-go-iso"): + return (get_crc("crc-64-go"), "CRC-64-GO-ISO") + elif s in ("crc64-redis", "crc-64-redis"): + return (get_crc("crc-64-redis"), "CRC-64-REDIS") else: raise argparse.ArgumentTypeError( "`{}' is not a recognized algorithm".format(s)) @@ -166,6 +206,24 @@ return get_blake2b_256() elif s == "MD5": return hashlib.md5 + elif s == "CRC-24": + return get_crc("crc-24") + elif s == "CRC-32-ISO": + return get_crc("crc-32") + elif s == "CRC-32-POSIX": + return get_crc("posix") + elif s == "CRC-64-ISO": + return get_crc("crc-64") + elif s == "CRC-64-ISO-2": + return get_crc("crc-64-2") + elif s == "CRC-64-ECMA": + return get_crc("crc-64-ecma") + elif s == "CRC-64-XZ": + return get_crc("crc-64-xz") + elif s == "CRC-64-GO-ISO": + return get_crc("crc-64-go") + elif s == "CRC-64-REDIS": + return get_crc("crc-64-redis") else: raise ValueError("unknown algorithm: {}".format(s))
