From: Matt Caswell Date: Wed, 25 Sep 2019 10:49:04 +0000 (+0100) Subject: Add a test for the newly added md params code X-Git-Tag: openssl-3.0.0-alpha1~1221 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=9a071fef00a6d58cfbce4dab4848eda12f1c7dcf;p=oweals%2Fopenssl.git Add a test for the newly added md params code Previous commits added code for routing md related parameters via and EVP_SIGNATURE implementation during a DigestSign operation. This adds a test to make sure this works as expected. Reviewed-by: Paul Dale (Merged from https://github.com/openssl/openssl/pull/10013) --- diff --git a/test/evp_extra_test.c b/test/evp_extra_test.c index 12c21e195c..d7f63f0247 100644 --- a/test/evp_extra_test.c +++ b/test/evp_extra_test.c @@ -1077,6 +1077,7 @@ done: /* Test getting and setting parameters on an EVP_PKEY_CTX */ static int test_EVP_PKEY_CTX_get_set_params(void) { + EVP_MD_CTX *mdctx = NULL; EVP_PKEY_CTX *ctx = NULL; EVP_SIGNATURE *dsaimpl = NULL; const OSSL_PARAM *params; @@ -1087,6 +1088,7 @@ static int test_EVP_PKEY_CTX_get_set_params(void) int ret = 0; const EVP_MD *md; size_t mdsize = SHA512_DIGEST_LENGTH; + char ssl3ms[48]; /* * Setup the parameters for our DSA object. For our purposes they don't have @@ -1171,9 +1173,39 @@ static int test_EVP_PKEY_CTX_get_set_params(void) || !TEST_ptr_eq(md, EVP_sha256())) goto err; + /* + * Test getting MD parameters via an associated EVP_PKEY_CTX + */ + mdctx = EVP_MD_CTX_new(); + if (!TEST_ptr(mdctx) + || !TEST_true(EVP_DigestSignInit_ex(mdctx, NULL, "SHA1", NULL, + pkey, dsaimpl))) + goto err; + + /* + * We now have an EVP_MD_CTX with an EVP_PKEY_CTX inside it. We should be + * able to obtain the digest's settable parameters from the provider. + */ + params = EVP_MD_CTX_settable_params(mdctx); + if (!TEST_ptr(params) + || !TEST_int_eq(strcmp(params[0].key, OSSL_DIGEST_PARAM_SSL3_MS), 0) + /* The final key should be NULL */ + || !TEST_ptr_null(params[1].key)) + goto err; + + param = ourparams; + memset(ssl3ms, 0, sizeof(ssl3ms)); + *param++ = OSSL_PARAM_construct_octet_string(OSSL_DIGEST_PARAM_SSL3_MS, + ssl3ms, sizeof(ssl3ms)); + *param++ = OSSL_PARAM_construct_end(); + + if (!TEST_true(EVP_MD_CTX_set_params(mdctx, ourparams))) + goto err; + ret = 1; err: + EVP_MD_CTX_free(mdctx); EVP_PKEY_CTX_free(ctx); EVP_SIGNATURE_free(dsaimpl); EVP_PKEY_free(pkey);