X-Git-Url: https://git.openssl.org/gitweb/?a=blobdiff_plain;f=test%2Fparams_api_test.c;h=7ad974b02a99946f61590a03332fef16dcc55330;hb=ecf15b16ee8223a9a383b97ee41126fbedf89bb5;hp=43cdd755315323bf1ae3c67210eb1fbd248bbfff;hpb=33388b44b67145af2181b1e9528c381c8ea0d1b6;p=openssl.git diff --git a/test/params_api_test.c b/test/params_api_test.c index 43cdd75531..7ad974b02a 100644 --- a/test/params_api_test.c +++ b/test/params_api_test.c @@ -11,7 +11,7 @@ #include #include "testutil.h" #include "internal/nelem.h" -#include "ossl_test_endian.h" +#include "internal/endian.h" #include #include @@ -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))) @@ -375,6 +379,33 @@ static int test_param_size_t(int n) return test_param_type_extra(¶m, raw_values[n].value, sizeof(size_t)); } +static int test_param_time_t(int n) +{ + time_t in, out; + unsigned char buf[MAX_LEN], cmp[sizeof(size_t)]; + const size_t len = raw_values[n].len >= sizeof(size_t) + ? sizeof(time_t) : raw_values[n].len; + OSSL_PARAM param = OSSL_PARAM_time_t("a", NULL); + + memset(buf, 0, sizeof(buf)); + le_copy(buf, raw_values[n].value, sizeof(in)); + memcpy(&in, buf, sizeof(in)); + param.data = &out; + if (!TEST_true(OSSL_PARAM_set_time_t(¶m, in))) + return 0; + le_copy(cmp, &out, sizeof(out)); + if (!TEST_mem_eq(cmp, len, raw_values[n].value, len)) + return 0; + in = 0; + if (!TEST_true(OSSL_PARAM_get_time_t(¶m, &in))) + return 0; + le_copy(cmp, &in, sizeof(in)); + if (!TEST_mem_eq(cmp, sizeof(in), raw_values[n].value, sizeof(in))) + return 0; + param.data = &out; + return test_param_type_extra(¶m, raw_values[n].value, sizeof(size_t)); +} + static int test_param_bignum(int n) { unsigned char buf[MAX_LEN], bnbuf[MAX_LEN]; @@ -568,6 +599,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)); @@ -577,10 +635,12 @@ int setup_tests(void) ADD_ALL_TESTS(test_param_int32, OSSL_NELEM(raw_values)); ADD_ALL_TESTS(test_param_uint32, OSSL_NELEM(raw_values)); ADD_ALL_TESTS(test_param_size_t, OSSL_NELEM(raw_values)); + ADD_ALL_TESTS(test_param_time_t, OSSL_NELEM(raw_values)); ADD_ALL_TESTS(test_param_int64, OSSL_NELEM(raw_values)); ADD_ALL_TESTS(test_param_uint64, OSSL_NELEM(raw_values)); 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; }