openssl: add openssl_digest_size()

Add function to get digest hash size for provided digest name.
This commit is contained in:
Dan Streetman
2023-09-28 16:44:13 -04:00
parent 081c50ed3c
commit c52a003dc8
3 changed files with 85 additions and 0 deletions
+51
View File
@@ -102,4 +102,55 @@ TEST(invalid) {
assert_se(pkey == NULL);
}
static const struct {
const char *alg;
size_t size;
} digest_size_table[] = {
/* SHA1 "family" */
{ "sha1", 20, },
#if OPENSSL_VERSION_MAJOR >= 3
{ "sha-1", 20, },
#endif
/* SHA2 family */
{ "sha224", 28, },
{ "sha256", 32, },
{ "sha384", 48, },
{ "sha512", 64, },
#if OPENSSL_VERSION_MAJOR >= 3
{ "sha-224", 28, },
{ "sha2-224", 28, },
{ "sha-256", 32, },
{ "sha2-256", 32, },
{ "sha-384", 48, },
{ "sha2-384", 48, },
{ "sha-512", 64, },
{ "sha2-512", 64, },
#endif
/* SHA3 family */
{ "sha3-224", 28, },
{ "sha3-256", 32, },
{ "sha3-384", 48, },
{ "sha3-512", 64, },
/* SM3 family */
{ "sm3", 32, },
/* MD5 family */
{ "md5", 16, },
};
TEST(digest_size) {
size_t size;
FOREACH_ARRAY(t, digest_size_table, ELEMENTSOF(digest_size_table)) {
assert(openssl_digest_size(t->alg, &size) >= 0);
assert_se(size == t->size);
_cleanup_free_ char *uppercase_alg = strdup(t->alg);
assert_se(uppercase_alg);
assert_se(openssl_digest_size(ascii_strupper(uppercase_alg), &size) >= 0);
assert_se(size == t->size);
}
assert_se(openssl_digest_size("invalid.alg", &size) == -EOPNOTSUPP);
}
DEFINE_TEST_MAIN(LOG_DEBUG);