From 59703c95fb529386574a334c9cff7cd5d4f16255 Mon Sep 17 00:00:00 2001 From: Dimitri Staessens Date: Sun, 19 Feb 2023 13:18:52 +0100 Subject: lib: Refactor hash internals The internal hash enum now matches the public one w.r.t. directory hash policies. This removes some unnecessary conversion. Signed-off-by: Dimitri Staessens Signed-off-by: Sander Vrijders --- src/lib/dev.c | 3 +++ src/lib/hash.c | 54 ++++++++++++++++++++++++++++++------------------------ 2 files changed, 33 insertions(+), 24 deletions(-) (limited to 'src/lib') diff --git a/src/lib/dev.c b/src/lib/dev.c index 360b65d5..c46bbdd7 100644 --- a/src/lib/dev.c +++ b/src/lib/dev.c @@ -50,6 +50,9 @@ #include #endif +#ifdef HAVE_LIBGCRYPT +#include +#endif #include #include #include diff --git a/src/lib/hash.c b/src/lib/hash.c index 438c43f4..12a8b09f 100644 --- a/src/lib/hash.c +++ b/src/lib/hash.c @@ -31,41 +31,47 @@ #include -#ifndef HAVE_LIBGCRYPT +#ifdef HAVE_LIBGCRYPT +#include +#else #include #include #include -#else -#include #endif #include #include #include +#ifdef HAVE_LIBGCRYPT +int gcry_algo_tbl [] = { + /* DIR_HASH policies first */ + GCRY_MD_SHA3_224, + GCRY_MD_SHA3_256, + GCRY_MD_SHA3_384, + GCRY_MD_SHA3_512, + /* Below for internal use only */ + GCRY_MD_CRC32, + GCRY_MD_MD5, +}; +#else +int hash_len_tbl [] = { + /* DIR_HASH policies first */ + SHA3_224_HASH_LEN, + SHA3_256_HASH_LEN, + SHA3_384_HASH_LEN, + SHA3_512_HASH_LEN, + /* Below for internal use only */ + CRC32_HASH_LEN, + MD5_HASH_LEN +}; +#endif + uint16_t hash_len(enum hash_algo algo) { #ifdef HAVE_LIBGCRYPT - return (uint16_t) gcry_md_get_algo_dlen(algo); + return (uint16_t) gcry_md_get_algo_dlen(gcry_algo_tbl[algo]); #else - switch (algo) { - case HASH_CRC32: - return CRC32_HASH_LEN; - case HASH_MD5: - return MD5_HASH_LEN; - case HASH_SHA3_224: - return SHA3_224_HASH_LEN; - case HASH_SHA3_256: - return SHA3_256_HASH_LEN; - case HASH_SHA3_384: - return SHA3_384_HASH_LEN; - case HASH_SHA3_512: - return SHA3_512_HASH_LEN; - default: - assert(false); - break; - } - - return 0; + return hash_len_tbl[algo]; #endif } @@ -75,7 +81,7 @@ void mem_hash(enum hash_algo algo, size_t len) { #ifdef HAVE_LIBGCRYPT - gcry_md_hash_buffer(algo, dst, buf, len); + gcry_md_hash_buffer(gcry_algo_tbl[algo], dst, buf, len); #else struct sha3_ctx sha3_ctx; struct md5_ctx md5_ctx; -- cgit v1.2.3