X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/63af6f3a15c5c4779761761bd4d6185e4679eafc..a85c067ba6c6940512cf57ec213277a370d87e70:/src/src/hash.h diff --git a/src/src/hash.h b/src/src/hash.h index d3531ccd9..c94e53129 100644 --- a/src/src/hash.h +++ b/src/src/hash.h @@ -1,7 +1,7 @@ /* * Exim - an Internet mail transport agent - * - * Copyright (C) 2016 Exim maintainers + * Copyright (c) The Exim Maintainers 1995 - 2022 + * SPDX-License-Identifier: GPL-2.0-only * * Hash interface functions */ @@ -12,7 +12,6 @@ #define HASH_H #include "sha_ver.h" -#include "blob.h" #ifdef SHA_OPENSSL # include @@ -29,14 +28,33 @@ /* Hash context for the exim_sha_* routines */ +typedef enum hashmethod { + HASH_BADTYPE, + HASH_NULL, + HASH_SHA1, + + HASH_SHA2_256, + HASH_SHA2_384, + HASH_SHA2_512, + + HASH_SHA3_224, + HASH_SHA3_256, + HASH_SHA3_384, + HASH_SHA3_512, +} hashmethod; + typedef struct { - int sha1; - int hashlen; + hashmethod method; + int hashlen; #ifdef SHA_OPENSSL union { SHA_CTX sha1; /* SHA1 block */ - SHA256_CTX sha2; /* SHA256 block */ + SHA256_CTX sha2_256; /* SHA256 or 224 block */ + SHA512_CTX sha2_512; /* SHA512 or 384 block */ +#ifdef EXIM_HAVE_SHA3 + EVP_MD_CTX * mctx; /* SHA3 block */ +#endif } u; #elif defined(SHA_GNUTLS) @@ -50,14 +68,17 @@ typedef struct { sha1_context sha1; /* SHA1 block */ sha2_context sha2; /* SHA256 block */ } u; + +#elif defined(SHA_NATIVE) + sha1 sha1; #endif } hctx; -extern void exim_sha_init(hctx *, BOOL); +extern BOOL exim_sha_init(hctx *, hashmethod); extern void exim_sha_update(hctx *, const uschar *a, int); +extern void exim_sha_update_string(hctx *, const uschar *a); extern void exim_sha_finish(hctx *, blob *); -extern int exim_sha_hashlen(hctx *); #endif /* End of File */