From: Pauli Date: Thu, 23 Apr 2020 10:23:48 +0000 (+1000) Subject: params: change OSSL_PARAM_set_unmodified() to operate on a params array X-Git-Tag: openssl-3.0.0-alpha2~161 X-Git-Url: https://git.librecmc.org/?p=oweals%2Fopenssl.git;a=commitdiff_plain;h=3873887e89ff12e7dc2cb7c166f21c79347da519 params: change OSSL_PARAM_set_unmodified() to operate on a params array Reviewed-by: Richard Levitte Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/11601) --- diff --git a/crypto/params.c b/crypto/params.c index 98c83bbe42..32161d0533 100644 --- a/crypto/params.c +++ b/crypto/params.c @@ -45,10 +45,11 @@ int OSSL_PARAM_modified(const OSSL_PARAM *p) return p != NULL && p->return_size != OSSL_PARAM_UNMODIFIED; } -void OSSL_PARAM_set_unmodified(OSSL_PARAM *p) +void OSSL_PARAM_set_all_unmodified(OSSL_PARAM *p) { if (p != NULL) - p->return_size = OSSL_PARAM_UNMODIFIED; + while (p->key != NULL) + p++->return_size = OSSL_PARAM_UNMODIFIED; } int OSSL_PARAM_get_int(const OSSL_PARAM *p, int *val) diff --git a/doc/man3/OSSL_PARAM_int.pod b/doc/man3/OSSL_PARAM_int.pod index b6faedb911..9126906883 100644 --- a/doc/man3/OSSL_PARAM_int.pod +++ b/doc/man3/OSSL_PARAM_int.pod @@ -93,8 +93,8 @@ OSSL_PARAM_set_octet_ptr, OSSL_PARAM_UNMODIFIED int OSSL_PARAM_set_octet_ptr(OSSL_PARAM *p, const void *val, size_t used_len); - int OSSL_PARAM_modified(const OSSL_PARAM *p); - void OSSL_PARAM_set_unmodified(OSSL_PARAM *p); + int OSSL_PARAM_modified(const OSSL_PARAM *param); + void OSSL_PARAM_set_all_unmodified(OSSL_PARAM *params); =head1 DESCRIPTION @@ -260,10 +260,11 @@ creation, via either the macros or construct calls, the I field is set to this. If the parameter is set using the calls defined herein, the I field is changed. -OSSL_PARAM_modified() queries if the parameter has been set or not using the -calls defined herein. +OSSL_PARAM_modified() queries if the parameter B has been set or not +using the calls defined herein. -OSSL_PARAM_set_unmodified() is used to reset unused indicator. +OSSL_PARAM_set_all_unmodified() resets the unused indicator for all parameters +in the array B. =head1 RETURN VALUES diff --git a/include/openssl/params.h b/include/openssl/params.h index 9f6dcb49ac..993ee8188e 100644 --- a/include/openssl/params.h +++ b/include/openssl/params.h @@ -138,7 +138,7 @@ int OSSL_PARAM_set_octet_ptr(OSSL_PARAM *p, const void *val, size_t used_len); int OSSL_PARAM_modified(const OSSL_PARAM *p); -void OSSL_PARAM_set_unmodified(OSSL_PARAM *p); +void OSSL_PARAM_set_all_unmodified(OSSL_PARAM *p); # ifdef __cplusplus } diff --git a/test/params_api_test.c b/test/params_api_test.c index 43cdd75531..110820c8d1 100644 --- a/test/params_api_test.c +++ b/test/params_api_test.c @@ -69,7 +69,11 @@ static int test_param_type_extra(OSSL_PARAM *param, const unsigned char *cmp, const int sizet = bit32 && sizeof(size_t) > sizeof(int32_t); const int signd = param->data_type == OSSL_PARAM_INTEGER; - OSSL_PARAM_set_unmodified(param); + /* + * Set the unmodified sentinal directly because there is no param array + * for these tests. + */ + param->return_size = OSSL_PARAM_UNMODIFIED; if (signd) { if ((bit32 && !TEST_true(OSSL_PARAM_get_int32(param, &i32))) || !TEST_true(OSSL_PARAM_get_int64(param, &i64))) @@ -568,6 +572,33 @@ err: return ret; } +static int test_param_modified(void) +{ + OSSL_PARAM param[3] = { OSSL_PARAM_int("a", NULL), + OSSL_PARAM_int("b", NULL), + OSSL_PARAM_END }; + int a, b; + + param->data = &a; + param[1].data = &b; + if (!TEST_false(OSSL_PARAM_modified(param)) + && !TEST_true(OSSL_PARAM_set_int32(param, 1234)) + && !TEST_true(OSSL_PARAM_modified(param)) + && !TEST_false(OSSL_PARAM_modified(param + 1)) + && !TEST_true(OSSL_PARAM_set_int32(param + 1, 1)) + && !TEST_true(OSSL_PARAM_modified(param + 1))) + return 0; + OSSL_PARAM_set_all_unmodified(param); + if (!TEST_false(OSSL_PARAM_modified(param)) + && !TEST_true(OSSL_PARAM_set_int32(param, 4321)) + && !TEST_true(OSSL_PARAM_modified(param)) + && !TEST_false(OSSL_PARAM_modified(param + 1)) + && !TEST_true(OSSL_PARAM_set_int32(param + 1, 2)) + && !TEST_true(OSSL_PARAM_modified(param + 1))) + return 0; + return 1; +} + int setup_tests(void) { ADD_ALL_TESTS(test_param_int, OSSL_NELEM(raw_values)); @@ -582,5 +613,6 @@ int setup_tests(void) ADD_ALL_TESTS(test_param_bignum, OSSL_NELEM(raw_values)); ADD_TEST(test_param_real); ADD_TEST(test_param_construct); + ADD_TEST(test_param_modified); return 1; } diff --git a/util/libcrypto.num b/util/libcrypto.num index dbaea8c716..79f8fd86c0 100644 --- a/util/libcrypto.num +++ b/util/libcrypto.num @@ -5078,4 +5078,4 @@ X509_ALGOR_copy ? 3_0_0 EXIST::FUNCTION: X509_REQ_set0_signature ? 3_0_0 EXIST::FUNCTION: X509_REQ_set1_signature_algo ? 3_0_0 EXIST::FUNCTION: OSSL_PARAM_modified ? 3_0_0 EXIST::FUNCTION: -OSSL_PARAM_set_unmodified ? 3_0_0 EXIST::FUNCTION: +OSSL_PARAM_set_all_unmodified ? 3_0_0 EXIST::FUNCTION: