[openssl] master update
Dr. Paul Dale
pauli at openssl.org
Sat Nov 27 07:09:09 UTC 2021
The branch master has been updated
via 6f87463b62f9b2849510d74ff0fd6a62955ea947 (commit)
from 23750f677ef61b6bea4e81f23f335ad08fc49b51 (commit)
- Log -----------------------------------------------------------------
commit 6f87463b62f9b2849510d74ff0fd6a62955ea947
Author: Tom Cosgrove <tom.cosgrove at arm.com>
Date: Thu Nov 25 15:49:26 2021 +0000
Fix EVP_PKEY_CTX_get_rsa_pss_saltlen() not returning a value
When an integer value was specified, it was not being passed back via
the orig_p2 weirdness.
Regression test included.
Reviewed-by: Tomas Mraz <tomas at openssl.org>
Reviewed-by: Paul Dale <pauli at openssl.org>
(Merged from https://github.com/openssl/openssl/pull/17136)
-----------------------------------------------------------------------
Summary of changes:
crypto/evp/ctrl_params_translate.c | 12 +++++++-----
test/evp_extra_test.c | 27 +++++++++++++++++++++++++++
2 files changed, 34 insertions(+), 5 deletions(-)
diff --git a/crypto/evp/ctrl_params_translate.c b/crypto/evp/ctrl_params_translate.c
index cfde29dac2..f6a2d1d0f8 100644
--- a/crypto/evp/ctrl_params_translate.c
+++ b/crypto/evp/ctrl_params_translate.c
@@ -1392,21 +1392,23 @@ static int fix_rsa_pss_saltlen(enum state state,
if ((ctx->action_type == SET && state == PRE_PARAMS_TO_CTRL)
|| (ctx->action_type == GET && state == POST_CTRL_TO_PARAMS)) {
size_t i;
+ int val;
for (i = 0; i < OSSL_NELEM(str_value_map); i++) {
if (strcmp(ctx->p2, str_value_map[i].ptr) == 0)
break;
}
- if (i == OSSL_NELEM(str_value_map)) {
- ctx->p1 = atoi(ctx->p2);
- } else if (state == POST_CTRL_TO_PARAMS) {
+
+ val = i == OSSL_NELEM(str_value_map) ? atoi(ctx->p2)
+ : (int)str_value_map[i].id;
+ if (state == POST_CTRL_TO_PARAMS) {
/*
* EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN weirdness explained further
* up
*/
- *(int *)ctx->orig_p2 = str_value_map[i].id;
+ *(int *)ctx->orig_p2 = val;
} else {
- ctx->p1 = (int)str_value_map[i].id;
+ ctx->p1 = val;
}
ctx->p2 = NULL;
}
diff --git a/test/evp_extra_test.c b/test/evp_extra_test.c
index 444b2796de..62b61bdd45 100644
--- a/test/evp_extra_test.c
+++ b/test/evp_extra_test.c
@@ -3283,6 +3283,32 @@ static int test_EVP_rsa_pss_with_keygen_bits(void)
return ret;
}
+static int test_EVP_rsa_pss_set_saltlen(void)
+{
+ int ret = 0;
+ EVP_PKEY *pkey = NULL;
+ EVP_PKEY_CTX *pkey_ctx = NULL;
+ EVP_MD *sha256 = NULL;
+ EVP_MD_CTX *sha256_ctx = NULL;
+ int saltlen = 9999; /* buggy EVP_PKEY_CTX_get_rsa_pss_saltlen() didn't update this */
+ const int test_value = 32;
+
+ ret = TEST_ptr(pkey = load_example_rsa_key())
+ && TEST_ptr(sha256 = EVP_MD_fetch(testctx, "sha256", NULL))
+ && TEST_ptr(sha256_ctx = EVP_MD_CTX_new())
+ && TEST_true(EVP_DigestSignInit(sha256_ctx, &pkey_ctx, sha256, NULL, pkey))
+ && TEST_true(EVP_PKEY_CTX_set_rsa_padding(pkey_ctx, RSA_PKCS1_PSS_PADDING))
+ && TEST_true(EVP_PKEY_CTX_set_rsa_pss_saltlen(pkey_ctx, test_value))
+ && TEST_true(EVP_PKEY_CTX_get_rsa_pss_saltlen(pkey_ctx, &saltlen))
+ && TEST_int_eq(saltlen, test_value);
+
+ EVP_MD_CTX_free(sha256_ctx);
+ EVP_PKEY_free(pkey);
+ EVP_MD_free(sha256);
+
+ return ret;
+}
+
static int success = 1;
static void md_names(const char *name, void *vctx)
{
@@ -4368,6 +4394,7 @@ int setup_tests(void)
ADD_ALL_TESTS(test_evp_iv_des, 6);
#endif
ADD_TEST(test_EVP_rsa_pss_with_keygen_bits);
+ ADD_TEST(test_EVP_rsa_pss_set_saltlen);
#ifndef OPENSSL_NO_EC
ADD_ALL_TESTS(test_ecpub, OSSL_NELEM(ecpub_nids));
#endif
More information about the openssl-commits
mailing list