Add a test for a names_do_all function

Make sure that if we change the namemap part way through calling a
names_do_all function it still works.

Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/14250)
This commit is contained in:
Matt Caswell 2021-02-19 17:47:21 +00:00 committed by Pauli
parent d84f5515fa
commit 5eb73cfb37

View File

@ -2439,6 +2439,53 @@ static int test_EVP_rsa_pss_with_keygen_bits(void)
return ret;
}
static int success = 1;
static void md_names(const char *name, void *vctx)
{
OSSL_LIB_CTX *ctx = (OSSL_LIB_CTX *)vctx;
/* Force a namemap update */
EVP_CIPHER *aes128 = EVP_CIPHER_fetch(ctx, "AES-128-CBC", NULL);
if (!TEST_ptr(aes128))
success = 0;
EVP_CIPHER_free(aes128);
}
/*
* Test that changing the namemap in a user callback works in a names_do_all
* function.
*/
static int test_names_do_all(void)
{
/* We use a custom libctx so that we know the state of the namemap */
OSSL_LIB_CTX *ctx = OSSL_LIB_CTX_new();
EVP_MD *sha256 = NULL;
int testresult = 0;
if (!TEST_ptr(ctx))
goto err;
sha256 = EVP_MD_fetch(ctx, "SHA2-256", NULL);
if (!TEST_ptr(sha256))
goto err;
/*
* We loop through all the names for a given digest. This should still work
* even if the namemap changes part way through.
*/
if (!TEST_true(EVP_MD_names_do_all(sha256, md_names, ctx)))
goto err;
if (!TEST_true(success))
goto err;
testresult = 1;
err:
EVP_MD_free(sha256);
OSSL_LIB_CTX_free(ctx);
return testresult;
}
int setup_tests(void)
{
@ -2513,6 +2560,8 @@ int setup_tests(void)
ADD_ALL_TESTS(test_evp_iv, 10);
ADD_TEST(test_EVP_rsa_pss_with_keygen_bits);
ADD_TEST(test_names_do_all);
return 1;
}