From 195852fefc1ef090977ed3cc3334f1dfbd6bac34 Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Tue, 9 Apr 2019 09:49:58 +0200 Subject: [PATCH] Params: add OSSL_PARAM_construct_end() OSSL_PARAM_END is a macro that can only be used to initialize an OSSL_PARAM array, not to assign an array element later on. For completion, we add an end constructor to facilitate that kind of assignment. Reviewed-by: Paul Dale (Merged from https://github.com/openssl/openssl/pull/8704) --- crypto/params.c | 7 +++++++ doc/man3/OSSL_PARAM_TYPE.pod | 7 ++++++- include/openssl/params.h | 1 + test/params_api_test.c | 3 +-- test/params_test.c | 3 +-- util/libcrypto.num | 1 + 6 files changed, 17 insertions(+), 5 deletions(-) diff --git a/crypto/params.c b/crypto/params.c index 465bb32711..8b75e04839 100644 --- a/crypto/params.c +++ b/crypto/params.c @@ -590,3 +590,10 @@ OSSL_PARAM OSSL_PARAM_construct_octet_ptr(const char *key, void **buf, { return ossl_param_construct(key, OSSL_PARAM_OCTET_PTR, buf, 0, rsize); } + +OSSL_PARAM OSSL_PARAM_construct_end(void) +{ + OSSL_PARAM end = OSSL_PARAM_END; + + return end; +} diff --git a/doc/man3/OSSL_PARAM_TYPE.pod b/doc/man3/OSSL_PARAM_TYPE.pod index 2842eae317..dd887f3089 100644 --- a/doc/man3/OSSL_PARAM_TYPE.pod +++ b/doc/man3/OSSL_PARAM_TYPE.pod @@ -10,7 +10,8 @@ OSSL_PARAM_SIZED_octet_ptr, OSSL_PARAM_END, OSSL_PARAM_construct_TYPE, OSSL_PARAM_END, OSSL_PARAM_construct_BN, OSSL_PARAM_construct_utf8_string, OSSL_PARAM_construct_utf8_ptr, OSSL_PARAM_construct_octet_string, -OSSL_PARAM_construct_octet_ptr, OSSL_PARAM_locate, OSSL_PARAM_get_TYPE, +OSSL_PARAM_construct_octet_ptr, OSSL_PARAM_construct_end, +OSSL_PARAM_locate, OSSL_PARAM_get_TYPE, OSSL_PARAM_set_TYPE, OSSL_PARAM_get_BN, OSSL_PARAM_set_BN, OSSL_PARAM_get_utf8_string, OSSL_PARAM_set_utf8_string, OSSL_PARAM_get_octet_string, OSSL_PARAM_set_octet_string, @@ -46,6 +47,7 @@ OSSL_PARAM_set_octet_ptr size_t *rsize); OSSL_PARAM OSSL_PARAM_construct_octet_ptr(const char *key, void **buf, size_t *rsize); + OSSL_PARAM OSSL_PARAM_construct_end(void); OSSL_PARAM *OSSL_PARAM_locate(OSSL_PARAM *array, const char *key); @@ -179,6 +181,9 @@ pointer OSSL_PARAM structure. A parameter with name B, storage pointer B<*buf> and return size B is created. +OSSL_PARAM_construct_end() is a function that constructs the terminating +OSSL_PARAM structure. + OSSL_PARAM_locate() is a function that searches an B of parameters for the one matching the B name. diff --git a/include/openssl/params.h b/include/openssl/params.h index 10ed28d356..cf9ffa8c7a 100644 --- a/include/openssl/params.h +++ b/include/openssl/params.h @@ -137,6 +137,7 @@ OSSL_PARAM OSSL_PARAM_construct_octet_string(const char *key, void *buf, size_t bsize, size_t *rsize); OSSL_PARAM OSSL_PARAM_construct_octet_ptr(const char *key, void **buf, size_t *rsize); +OSSL_PARAM OSSL_PARAM_construct_end(void); int OSSL_PARAM_get_int(const OSSL_PARAM *p, int *val); int OSSL_PARAM_get_uint(const OSSL_PARAM *p, unsigned int *val); diff --git a/test/params_api_test.c b/test/params_api_test.c index c78a42bade..a3d2337745 100644 --- a/test/params_api_test.c +++ b/test/params_api_test.c @@ -448,7 +448,6 @@ static int test_param_construct(void) void *vp, *vpn = NULL, *vp2; OSSL_PARAM *p; const OSSL_PARAM *cp; - static const OSSL_PARAM pend = OSSL_PARAM_END; int i, n = 0, ret = 0; unsigned int u; long int l; @@ -478,7 +477,7 @@ static int test_param_construct(void) &sz); params[n++] = OSSL_PARAM_construct_utf8_ptr("utf8ptr", &bufp, &sz); params[n++] = OSSL_PARAM_construct_octet_ptr("octptr", &vp, &sz); - params[n] = pend; + params[n] = OSSL_PARAM_construct_end(); /* Search failure */ if (!TEST_ptr_null(OSSL_PARAM_locate(params, "fnord"))) diff --git a/test/params_test.c b/test/params_test.c index 338e6b2043..8d456bbbde 100644 --- a/test/params_test.c +++ b/test/params_test.c @@ -391,7 +391,6 @@ static OSSL_PARAM *construct_api_params(void) { size_t n = 0; static OSSL_PARAM params[10]; - OSSL_PARAM param_end = OSSL_PARAM_END; params[n++] = OSSL_PARAM_construct_int("p1", &app_p1, NULL); params[n++] = OSSL_PARAM_construct_BN("p3", bignumbin, sizeof(bignumbin), @@ -404,7 +403,7 @@ static OSSL_PARAM *construct_api_params(void) &app_p6_l); params[n++] = OSSL_PARAM_construct_octet_string("foo", &foo, sizeof(foo), &foo_l); - params[n++] = param_end; + params[n++] = OSSL_PARAM_construct_end(); return params; } diff --git a/util/libcrypto.num b/util/libcrypto.num index 6388973066..d275e579ba 100644 --- a/util/libcrypto.num +++ b/util/libcrypto.num @@ -4794,3 +4794,4 @@ EVP_PKEY_get0_engine 4741 3_0_0 EXIST::FUNCTION:ENGINE EVP_MD_upref 4742 3_0_0 EXIST::FUNCTION: EVP_MD_fetch 4743 3_0_0 EXIST::FUNCTION: EVP_set_default_properties 4744 3_0_0 EXIST::FUNCTION: +OSSL_PARAM_construct_end 4745 3_0_0 EXIST::FUNCTION: -- 2.25.1