*/
const EVP_MD *openssl_get_md(hash_algorithm_t hash)
{
+ const EVP_MD *md;
char *name;
- name = enum_to_name(hash_algorithm_short_names, hash);
+ name = strdupnull(enum_to_name(hash_algorithm_short_names, hash));
if (!name)
{
return NULL;
}
- return EVP_get_digestbyname(name);
+ /* for SHA3, we use underscores, while OpenSSL uses dashes */
+ translate(name, "_", "-");
+ md = EVP_get_digestbyname(name);
+ free(name);
+ return md;
}
/*
PLUGIN_PROVIDE(HASHER, HASH_SHA384),
PLUGIN_PROVIDE(HASHER, HASH_SHA512),
#endif
+/* SHA3 was added with OpenSSL 1.1.1, it doesn't seem to be possible to
+ * disable it, defining the checked var prevents registration, though */
+#if OPENSSL_VERSION_NUMBER >= 0x1010100fL && !defined(OPENSSL_NO_SHA3)
+ PLUGIN_PROVIDE(HASHER, HASH_SHA3_224),
+ PLUGIN_PROVIDE(HASHER, HASH_SHA3_256),
+ PLUGIN_PROVIDE(HASHER, HASH_SHA3_384),
+ PLUGIN_PROVIDE(HASHER, HASH_SHA3_512),
+#endif
#ifndef OPENSSL_NO_SHA1
/* keyed sha1 hasher (aka prf) */
PLUGIN_REGISTER(PRF, openssl_sha1_prf_create),