mirror of
https://github.com/openssl/openssl.git
synced 2025-01-18 13:44:20 +08:00
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:
parent
d84f5515fa
commit
5eb73cfb37
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user