1 /*
2 * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved.
3 * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
4 *
5 * Licensed under the Apache License 2.0 (the "License"). You may not use
6 * this file except in compliance with the License. You can obtain a copy
7 * in the file LICENSE in the source distribution or at
8 * https://www.openssl.org/source/license.html
9 */
10
11 #include <string.h>
12 #include <openssl/params.h>
13 #include <openssl/param_build.h>
14 #include "internal/nelem.h"
15 #include "testutil.h"
16
17 static const OSSL_PARAM params_empty[] = { OSSL_PARAM_END };
18
template_public_single_zero_test(int idx)19 static int template_public_single_zero_test(int idx)
20 {
21 OSSL_PARAM_BLD *bld = NULL;
22 OSSL_PARAM *params = NULL, *params_blt = NULL, *p;
23 BIGNUM *zbn = NULL, *zbn_res = NULL;
24 int res = 0;
25
26 if (!TEST_ptr(bld = OSSL_PARAM_BLD_new())
27 || !TEST_ptr(zbn = BN_new())
28 || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, "zeronumber",
29 idx == 0 ? zbn : NULL))
30 || !TEST_ptr(params_blt = OSSL_PARAM_BLD_to_param(bld)))
31 goto err;
32
33 params = params_blt;
34 /* Check BN (zero BN becomes unsigned integer) */
35 if (!TEST_ptr(p = OSSL_PARAM_locate(params, "zeronumber"))
36 || !TEST_str_eq(p->key, "zeronumber")
37 || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
38 || !TEST_true(OSSL_PARAM_get_BN(p, &zbn_res))
39 || !TEST_BN_eq(zbn_res, zbn))
40 goto err;
41 res = 1;
42 err:
43 if (params != params_blt)
44 OPENSSL_free(params);
45 OSSL_PARAM_free(params_blt);
46 OSSL_PARAM_BLD_free(bld);
47 BN_free(zbn);
48 BN_free(zbn_res);
49 return res;
50 }
51
template_private_single_zero_test(void)52 static int template_private_single_zero_test(void)
53 {
54 OSSL_PARAM_BLD *bld = NULL;
55 OSSL_PARAM *params = NULL, *params_blt = NULL, *p;
56 BIGNUM *zbn = NULL, *zbn_res = NULL;
57 int res = 0;
58
59 if (!TEST_ptr(bld = OSSL_PARAM_BLD_new())
60 || !TEST_ptr(zbn = BN_secure_new())
61 || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, "zeronumber", zbn))
62 || !TEST_ptr(params_blt = OSSL_PARAM_BLD_to_param(bld)))
63 goto err;
64
65 params = params_blt;
66 /* Check BN (zero BN becomes unsigned integer) */
67 if (!TEST_ptr(p = OSSL_PARAM_locate(params, "zeronumber"))
68 || !TEST_true(CRYPTO_secure_allocated(p->data))
69 || !TEST_str_eq(p->key, "zeronumber")
70 || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
71 || !TEST_true(OSSL_PARAM_get_BN(p, &zbn_res))
72 || !TEST_int_eq(BN_get_flags(zbn, BN_FLG_SECURE), BN_FLG_SECURE)
73 || !TEST_BN_eq(zbn_res, zbn))
74 goto err;
75 res = 1;
76 err:
77 if (params != params_blt)
78 OPENSSL_free(params);
79 OSSL_PARAM_free(params_blt);
80 OSSL_PARAM_BLD_free(bld);
81 BN_free(zbn);
82 BN_free(zbn_res);
83 return res;
84 }
85
template_public_test(int tstid)86 static int template_public_test(int tstid)
87 {
88 OSSL_PARAM_BLD *bld = OSSL_PARAM_BLD_new();
89 OSSL_PARAM *params = NULL, *params_blt = NULL, *p1 = NULL, *p;
90 BIGNUM *zbn = NULL, *zbn_res = NULL;
91 BIGNUM *pbn = NULL, *pbn_res = NULL;
92 BIGNUM *nbn = NULL, *nbn_res = NULL;
93 int i;
94 long int l;
95 int32_t i32;
96 int64_t i64;
97 double d;
98 time_t t;
99 char *utf = NULL;
100 const char *cutf;
101 int res = 0;
102
103 if (!TEST_ptr(bld)
104 || !TEST_true(OSSL_PARAM_BLD_push_long(bld, "l", 42))
105 || !TEST_true(OSSL_PARAM_BLD_push_int32(bld, "i32", 1532))
106 || !TEST_true(OSSL_PARAM_BLD_push_int64(bld, "i64", -9999999))
107 || !TEST_true(OSSL_PARAM_BLD_push_time_t(bld, "t", 11224))
108 || !TEST_true(OSSL_PARAM_BLD_push_double(bld, "d", 1.61803398875))
109 || !TEST_ptr(zbn = BN_new())
110 || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, "zeronumber", zbn))
111 || !TEST_ptr(pbn = BN_new())
112 || !TEST_true(BN_set_word(pbn, 1729))
113 || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, "bignumber", pbn))
114 || !TEST_ptr(nbn = BN_secure_new())
115 || !TEST_true(BN_set_word(nbn, 1733))
116 || !TEST_true((BN_set_negative(nbn, 1), 1))
117 || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, "negativebignumber", nbn))
118 || !TEST_true(OSSL_PARAM_BLD_push_utf8_string(bld, "utf8_s", "foo",
119 sizeof("foo")))
120 || !TEST_true(OSSL_PARAM_BLD_push_utf8_ptr(bld, "utf8_p", "bar-boom",
121 0))
122 || !TEST_true(OSSL_PARAM_BLD_push_int(bld, "i", -6))
123 || !TEST_ptr(params_blt = OSSL_PARAM_BLD_to_param(bld)))
124 goto err;
125
126 switch (tstid) {
127 case 0:
128 params = params_blt;
129 break;
130 case 1:
131 params = OSSL_PARAM_merge(params_blt, params_empty);
132 break;
133 case 2:
134 params = OSSL_PARAM_dup(params_blt);
135 break;
136 case 3:
137 p1 = OSSL_PARAM_merge(params_blt, params_empty);
138 params = OSSL_PARAM_dup(p1);
139 break;
140 default:
141 p1 = OSSL_PARAM_dup(params_blt);
142 params = OSSL_PARAM_merge(p1, params_empty);
143 break;
144 }
145 /* Check int */
146 if (!TEST_ptr(p = OSSL_PARAM_locate(params, "i"))
147 || !TEST_true(OSSL_PARAM_get_int(p, &i))
148 || !TEST_str_eq(p->key, "i")
149 || !TEST_uint_eq(p->data_type, OSSL_PARAM_INTEGER)
150 || !TEST_size_t_eq(p->data_size, sizeof(int))
151 || !TEST_int_eq(i, -6)
152 /* Check int32 */
153 || !TEST_ptr(p = OSSL_PARAM_locate(params, "i32"))
154 || !TEST_true(OSSL_PARAM_get_int32(p, &i32))
155 || !TEST_str_eq(p->key, "i32")
156 || !TEST_uint_eq(p->data_type, OSSL_PARAM_INTEGER)
157 || !TEST_size_t_eq(p->data_size, sizeof(int32_t))
158 || !TEST_int_eq((int)i32, 1532)
159 /* Check int64 */
160 || !TEST_ptr(p = OSSL_PARAM_locate(params, "i64"))
161 || !TEST_str_eq(p->key, "i64")
162 || !TEST_uint_eq(p->data_type, OSSL_PARAM_INTEGER)
163 || !TEST_size_t_eq(p->data_size, sizeof(int64_t))
164 || !TEST_true(OSSL_PARAM_get_int64(p, &i64))
165 || !TEST_long_eq((long)i64, -9999999)
166 /* Check long */
167 || !TEST_ptr(p = OSSL_PARAM_locate(params, "l"))
168 || !TEST_str_eq(p->key, "l")
169 || !TEST_uint_eq(p->data_type, OSSL_PARAM_INTEGER)
170 || !TEST_size_t_eq(p->data_size, sizeof(long int))
171 || !TEST_true(OSSL_PARAM_get_long(p, &l))
172 || !TEST_long_eq(l, 42)
173 /* Check time_t */
174 || !TEST_ptr(p = OSSL_PARAM_locate(params, "t"))
175 || !TEST_str_eq(p->key, "t")
176 || !TEST_uint_eq(p->data_type, OSSL_PARAM_INTEGER)
177 || !TEST_size_t_eq(p->data_size, sizeof(time_t))
178 || !TEST_true(OSSL_PARAM_get_time_t(p, &t))
179 || !TEST_time_t_eq(t, 11224)
180 /* Check double */
181 || !TEST_ptr(p = OSSL_PARAM_locate(params, "d"))
182 || !TEST_true(OSSL_PARAM_get_double(p, &d))
183 || !TEST_str_eq(p->key, "d")
184 || !TEST_uint_eq(p->data_type, OSSL_PARAM_REAL)
185 || !TEST_size_t_eq(p->data_size, sizeof(double))
186 || !TEST_double_eq(d, 1.61803398875)
187 /* Check UTF8 string */
188 || !TEST_ptr(p = OSSL_PARAM_locate(params, "utf8_s"))
189 || !TEST_str_eq(p->data, "foo")
190 || !TEST_true(OSSL_PARAM_get_utf8_string(p, &utf, 0))
191 || !TEST_str_eq(utf, "foo")
192 /* Check UTF8 pointer */
193 || !TEST_ptr(p = OSSL_PARAM_locate(params, "utf8_p"))
194 || !TEST_true(OSSL_PARAM_get_utf8_ptr(p, &cutf))
195 || !TEST_str_eq(cutf, "bar-boom")
196 /* Check BN (zero BN becomes unsigned integer) */
197 || !TEST_ptr(p = OSSL_PARAM_locate(params, "zeronumber"))
198 || !TEST_str_eq(p->key, "zeronumber")
199 || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
200 || !TEST_true(OSSL_PARAM_get_BN(p, &zbn_res))
201 || !TEST_BN_eq(zbn_res, zbn)
202 /* Check BN (positive BN becomes unsigned integer) */
203 || !TEST_ptr(p = OSSL_PARAM_locate(params, "bignumber"))
204 || !TEST_str_eq(p->key, "bignumber")
205 || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
206 || !TEST_true(OSSL_PARAM_get_BN(p, &pbn_res))
207 || !TEST_BN_eq(pbn_res, pbn)
208 /* Check BN (negative BN becomes signed integer) */
209 || !TEST_ptr(p = OSSL_PARAM_locate(params, "negativebignumber"))
210 || !TEST_str_eq(p->key, "negativebignumber")
211 || !TEST_uint_eq(p->data_type, OSSL_PARAM_INTEGER)
212 || !TEST_true(OSSL_PARAM_get_BN(p, &nbn_res))
213 || !TEST_BN_eq(nbn_res, nbn))
214 goto err;
215 res = 1;
216 err:
217 OPENSSL_free(p1);
218 if (params != params_blt)
219 OPENSSL_free(params);
220 OSSL_PARAM_free(params_blt);
221 OSSL_PARAM_BLD_free(bld);
222 OPENSSL_free(utf);
223 BN_free(zbn);
224 BN_free(zbn_res);
225 BN_free(pbn);
226 BN_free(pbn_res);
227 BN_free(nbn);
228 BN_free(nbn_res);
229 return res;
230 }
231
template_private_test(int tstid)232 static int template_private_test(int tstid)
233 {
234 int *data1 = NULL, *data2 = NULL, j;
235 const int data1_num = 12;
236 const int data1_size = data1_num * sizeof(int);
237 const int data2_num = 5;
238 const int data2_size = data2_num * sizeof(int);
239 OSSL_PARAM_BLD *bld = NULL;
240 OSSL_PARAM *params = NULL, *params_blt = NULL, *p1 = NULL, *p;
241 unsigned int i;
242 unsigned long int l;
243 uint32_t i32;
244 uint64_t i64;
245 size_t st;
246 BIGNUM *zbn = NULL, *zbn_res = NULL;
247 BIGNUM *pbn = NULL, *pbn_res = NULL;
248 BIGNUM *nbn = NULL, *nbn_res = NULL;
249 int res = 0;
250
251 if (!TEST_ptr(data1 = OPENSSL_secure_malloc(data1_size))
252 || !TEST_ptr(data2 = OPENSSL_secure_malloc(data2_size))
253 || !TEST_ptr(bld = OSSL_PARAM_BLD_new()))
254 goto err;
255
256 for (j = 0; j < data1_num; j++)
257 data1[j] = -16 * j;
258 for (j = 0; j < data2_num; j++)
259 data2[j] = 2 * j;
260
261 if (!TEST_true(OSSL_PARAM_BLD_push_uint(bld, "i", 6))
262 || !TEST_true(OSSL_PARAM_BLD_push_ulong(bld, "l", 42))
263 || !TEST_true(OSSL_PARAM_BLD_push_uint32(bld, "i32", 1532))
264 || !TEST_true(OSSL_PARAM_BLD_push_uint64(bld, "i64", 9999999))
265 || !TEST_true(OSSL_PARAM_BLD_push_size_t(bld, "st", 65537))
266 || !TEST_ptr(zbn = BN_secure_new())
267 || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, "zeronumber", zbn))
268 || !TEST_ptr(pbn = BN_secure_new())
269 || !TEST_true(BN_set_word(pbn, 1729))
270 || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, "bignumber", pbn))
271 || !TEST_ptr(nbn = BN_secure_new())
272 || !TEST_true(BN_set_word(nbn, 1733))
273 || !TEST_true((BN_set_negative(nbn, 1), 1))
274 || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, "negativebignumber", nbn))
275 || !TEST_true(OSSL_PARAM_BLD_push_octet_string(bld, "oct_s", data1,
276 data1_size))
277 || !TEST_true(OSSL_PARAM_BLD_push_octet_ptr(bld, "oct_p", data2,
278 data2_size))
279 || !TEST_ptr(params_blt = OSSL_PARAM_BLD_to_param(bld)))
280 goto err;
281 switch (tstid) {
282 case 0:
283 params = params_blt;
284 break;
285 case 1:
286 params = OSSL_PARAM_merge(params_blt, params_empty);
287 break;
288 case 2:
289 params = OSSL_PARAM_dup(params_blt);
290 break;
291 case 3:
292 p1 = OSSL_PARAM_merge(params_blt, params_empty);
293 params = OSSL_PARAM_dup(p1);
294 break;
295 default:
296 p1 = OSSL_PARAM_dup(params_blt);
297 params = OSSL_PARAM_merge(p1, params_empty);
298 break;
299 }
300 /* Check unsigned int */
301 if (!TEST_ptr(p = OSSL_PARAM_locate(params, "i"))
302 || !TEST_false(CRYPTO_secure_allocated(p->data))
303 || !TEST_true(OSSL_PARAM_get_uint(p, &i))
304 || !TEST_str_eq(p->key, "i")
305 || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
306 || !TEST_size_t_eq(p->data_size, sizeof(int))
307 || !TEST_uint_eq(i, 6)
308 /* Check unsigned int32 */
309 || !TEST_ptr(p = OSSL_PARAM_locate(params, "i32"))
310 || !TEST_false(CRYPTO_secure_allocated(p->data))
311 || !TEST_true(OSSL_PARAM_get_uint32(p, &i32))
312 || !TEST_str_eq(p->key, "i32")
313 || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
314 || !TEST_size_t_eq(p->data_size, sizeof(int32_t))
315 || !TEST_uint_eq((unsigned int)i32, 1532)
316 /* Check unsigned int64 */
317 || !TEST_ptr(p = OSSL_PARAM_locate(params, "i64"))
318 || !TEST_false(CRYPTO_secure_allocated(p->data))
319 || !TEST_str_eq(p->key, "i64")
320 || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
321 || !TEST_size_t_eq(p->data_size, sizeof(int64_t))
322 || !TEST_true(OSSL_PARAM_get_uint64(p, &i64))
323 || !TEST_ulong_eq((unsigned long)i64, 9999999)
324 /* Check unsigned long int */
325 || !TEST_ptr(p = OSSL_PARAM_locate(params, "l"))
326 || !TEST_false(CRYPTO_secure_allocated(p->data))
327 || !TEST_str_eq(p->key, "l")
328 || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
329 || !TEST_size_t_eq(p->data_size, sizeof(unsigned long int))
330 || !TEST_true(OSSL_PARAM_get_ulong(p, &l))
331 || !TEST_ulong_eq(l, 42)
332 /* Check size_t */
333 || !TEST_ptr(p = OSSL_PARAM_locate(params, "st"))
334 || !TEST_false(CRYPTO_secure_allocated(p->data))
335 || !TEST_str_eq(p->key, "st")
336 || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
337 || !TEST_size_t_eq(p->data_size, sizeof(size_t))
338 || !TEST_true(OSSL_PARAM_get_size_t(p, &st))
339 || !TEST_size_t_eq(st, 65537)
340 /* Check octet string */
341 || !TEST_ptr(p = OSSL_PARAM_locate(params, "oct_s"))
342 || !TEST_true(CRYPTO_secure_allocated(p->data))
343 || !TEST_str_eq(p->key, "oct_s")
344 || !TEST_uint_eq(p->data_type, OSSL_PARAM_OCTET_STRING)
345 || !TEST_mem_eq(p->data, p->data_size, data1, data1_size)
346 /* Check octet pointer */
347 || !TEST_ptr(p = OSSL_PARAM_locate(params, "oct_p"))
348 || !TEST_false(CRYPTO_secure_allocated(p->data))
349 || !TEST_true(CRYPTO_secure_allocated(*(void **)p->data))
350 || !TEST_str_eq(p->key, "oct_p")
351 || !TEST_uint_eq(p->data_type, OSSL_PARAM_OCTET_PTR)
352 || !TEST_mem_eq(*(void **)p->data, p->data_size, data2, data2_size)
353 /* Check BN (zero BN becomes unsigned integer) */
354 || !TEST_ptr(p = OSSL_PARAM_locate(params, "zeronumber"))
355 || !TEST_true(CRYPTO_secure_allocated(p->data))
356 || !TEST_str_eq(p->key, "zeronumber")
357 || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
358 || !TEST_true(OSSL_PARAM_get_BN(p, &zbn_res))
359 || !TEST_int_eq(BN_get_flags(pbn, BN_FLG_SECURE), BN_FLG_SECURE)
360 || !TEST_BN_eq(zbn_res, zbn)
361 /* Check BN (positive BN becomes unsigned integer) */
362 || !TEST_ptr(p = OSSL_PARAM_locate(params, "bignumber"))
363 || !TEST_true(CRYPTO_secure_allocated(p->data))
364 || !TEST_str_eq(p->key, "bignumber")
365 || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
366 || !TEST_true(OSSL_PARAM_get_BN(p, &pbn_res))
367 || !TEST_int_eq(BN_get_flags(pbn, BN_FLG_SECURE), BN_FLG_SECURE)
368 || !TEST_BN_eq(pbn_res, pbn)
369 /* Check BN (negative BN becomes signed integer) */
370 || !TEST_ptr(p = OSSL_PARAM_locate(params, "negativebignumber"))
371 || !TEST_true(CRYPTO_secure_allocated(p->data))
372 || !TEST_str_eq(p->key, "negativebignumber")
373 || !TEST_uint_eq(p->data_type, OSSL_PARAM_INTEGER)
374 || !TEST_true(OSSL_PARAM_get_BN(p, &nbn_res))
375 || !TEST_int_eq(BN_get_flags(nbn, BN_FLG_SECURE), BN_FLG_SECURE)
376 || !TEST_BN_eq(nbn_res, nbn))
377 goto err;
378 res = 1;
379 err:
380 OSSL_PARAM_free(p1);
381 if (params != params_blt)
382 OSSL_PARAM_free(params);
383 OSSL_PARAM_free(params_blt);
384 OSSL_PARAM_BLD_free(bld);
385 OPENSSL_secure_free(data1);
386 OPENSSL_secure_free(data2);
387 BN_free(zbn);
388 BN_free(zbn_res);
389 BN_free(pbn);
390 BN_free(pbn_res);
391 BN_free(nbn);
392 BN_free(nbn_res);
393 return res;
394 }
395
builder_limit_test(void)396 static int builder_limit_test(void)
397 {
398 const int n = 100;
399 char names[100][3];
400 OSSL_PARAM_BLD *bld = OSSL_PARAM_BLD_new();
401 OSSL_PARAM *params = NULL;
402 int i, res = 0;
403
404 if (!TEST_ptr(bld))
405 goto err;
406
407 for (i = 0; i < n; i++) {
408 names[i][0] = 'A' + (i / 26) - 1;
409 names[i][1] = 'a' + (i % 26) - 1;
410 names[i][2] = '\0';
411 if (!TEST_true(OSSL_PARAM_BLD_push_int(bld, names[i], 3 * i + 1)))
412 goto err;
413 }
414 if (!TEST_ptr(params = OSSL_PARAM_BLD_to_param(bld)))
415 goto err;
416 /* Count the elements in the params array, expecting n */
417 for (i = 0; params[i].key != NULL; i++);
418 if (!TEST_int_eq(i, n))
419 goto err;
420
421 /* Verify that the build, cleared the builder structure */
422 OSSL_PARAM_free(params);
423 params = NULL;
424
425 if (!TEST_true(OSSL_PARAM_BLD_push_int(bld, "g", 2))
426 || !TEST_ptr(params = OSSL_PARAM_BLD_to_param(bld)))
427 goto err;
428 /* Count the elements in the params array, expecting 1 */
429 for (i = 0; params[i].key != NULL; i++);
430 if (!TEST_int_eq(i, 1))
431 goto err;
432 res = 1;
433 err:
434 OSSL_PARAM_free(params);
435 OSSL_PARAM_BLD_free(bld);
436 return res;
437 }
438
builder_merge_test(void)439 static int builder_merge_test(void)
440 {
441 static int data1[] = { 2, 3, 5, 7, 11, 15, 17 };
442 static unsigned char data2[] = { 2, 4, 6, 8, 10 };
443 OSSL_PARAM_BLD *bld = OSSL_PARAM_BLD_new();
444 OSSL_PARAM_BLD *bld2 = OSSL_PARAM_BLD_new();
445 OSSL_PARAM *params = NULL, *params_blt = NULL, *params2_blt = NULL, *p;
446 unsigned int i;
447 unsigned long int l;
448 uint32_t i32;
449 uint64_t i64;
450 size_t st;
451 BIGNUM *bn_priv = NULL, *bn_priv_res = NULL;
452 BIGNUM *bn_pub = NULL, *bn_pub_res = NULL;
453 int res = 0;
454
455 if (!TEST_ptr(bld)
456 || !TEST_true(OSSL_PARAM_BLD_push_uint(bld, "i", 6))
457 || !TEST_true(OSSL_PARAM_BLD_push_ulong(bld, "l", 42))
458 || !TEST_true(OSSL_PARAM_BLD_push_uint32(bld, "i32", 1532))
459 || !TEST_true(OSSL_PARAM_BLD_push_uint64(bld, "i64", 9999999))
460 || !TEST_true(OSSL_PARAM_BLD_push_size_t(bld, "st", 65537))
461 || !TEST_ptr(bn_priv = BN_secure_new())
462 || !TEST_true(BN_set_word(bn_priv, 1729))
463 || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, "bignumber_priv", bn_priv))
464 || !TEST_ptr(params_blt = OSSL_PARAM_BLD_to_param(bld)))
465 goto err;
466
467 if (!TEST_ptr(bld2)
468 || !TEST_true(OSSL_PARAM_BLD_push_octet_string(bld2, "oct_s", data1,
469 sizeof(data1)))
470 || !TEST_true(OSSL_PARAM_BLD_push_octet_ptr(bld2, "oct_p", data2,
471 sizeof(data2)))
472 || !TEST_true(OSSL_PARAM_BLD_push_uint32(bld2, "i32", 99))
473 || !TEST_ptr(bn_pub = BN_new())
474 || !TEST_true(BN_set_word(bn_pub, 0x42))
475 || !TEST_true(OSSL_PARAM_BLD_push_BN(bld2, "bignumber_pub", bn_pub))
476 || !TEST_ptr(params2_blt = OSSL_PARAM_BLD_to_param(bld2)))
477 goto err;
478
479 if (!TEST_ptr(params = OSSL_PARAM_merge(params_blt, params2_blt)))
480 goto err;
481
482 if (!TEST_ptr(p = OSSL_PARAM_locate(params, "i"))
483 || !TEST_true(OSSL_PARAM_get_uint(p, &i))
484 || !TEST_str_eq(p->key, "i")
485 || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
486 || !TEST_size_t_eq(p->data_size, sizeof(int))
487 || !TEST_uint_eq(i, 6)
488 /* Check unsigned int32 */
489 || !TEST_ptr(p = OSSL_PARAM_locate(params, "i32"))
490 || !TEST_true(OSSL_PARAM_get_uint32(p, &i32))
491 || !TEST_str_eq(p->key, "i32")
492 || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
493 || !TEST_size_t_eq(p->data_size, sizeof(int32_t))
494 || !TEST_uint_eq((unsigned int)i32, 99)
495 /* Check unsigned int64 */
496 || !TEST_ptr(p = OSSL_PARAM_locate(params, "i64"))
497 || !TEST_str_eq(p->key, "i64")
498 || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
499 || !TEST_size_t_eq(p->data_size, sizeof(int64_t))
500 || !TEST_true(OSSL_PARAM_get_uint64(p, &i64))
501 || !TEST_ulong_eq((unsigned long)i64, 9999999)
502 /* Check unsigned long int */
503 || !TEST_ptr(p = OSSL_PARAM_locate(params, "l"))
504 || !TEST_str_eq(p->key, "l")
505 || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
506 || !TEST_size_t_eq(p->data_size, sizeof(unsigned long int))
507 || !TEST_true(OSSL_PARAM_get_ulong(p, &l))
508 || !TEST_ulong_eq(l, 42)
509 /* Check size_t */
510 || !TEST_ptr(p = OSSL_PARAM_locate(params, "st"))
511 || !TEST_str_eq(p->key, "st")
512 || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
513 || !TEST_size_t_eq(p->data_size, sizeof(size_t))
514 || !TEST_true(OSSL_PARAM_get_size_t(p, &st))
515 || !TEST_size_t_eq(st, 65537)
516 /* Check octet string */
517 || !TEST_ptr(p = OSSL_PARAM_locate(params, "oct_s"))
518 || !TEST_str_eq(p->key, "oct_s")
519 || !TEST_uint_eq(p->data_type, OSSL_PARAM_OCTET_STRING)
520 || !TEST_mem_eq(p->data, p->data_size, data1, sizeof(data1))
521 /* Check octet pointer */
522 || !TEST_ptr(p = OSSL_PARAM_locate(params, "oct_p"))
523 || !TEST_str_eq(p->key, "oct_p")
524 || !TEST_uint_eq(p->data_type, OSSL_PARAM_OCTET_PTR)
525 || !TEST_mem_eq(*(void **)p->data, p->data_size, data2, sizeof(data2))
526 /* Check BN */
527 || !TEST_ptr(p = OSSL_PARAM_locate(params, "bignumber_pub"))
528 || !TEST_str_eq(p->key, "bignumber_pub")
529 || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
530 || !TEST_true(OSSL_PARAM_get_BN(p, &bn_pub_res))
531 || !TEST_int_eq(BN_cmp(bn_pub_res, bn_pub), 0)
532 || !TEST_ptr(p = OSSL_PARAM_locate(params, "bignumber_priv"))
533 || !TEST_str_eq(p->key, "bignumber_priv")
534 || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
535 || !TEST_true(OSSL_PARAM_get_BN(p, &bn_priv_res))
536 || !TEST_int_eq(BN_cmp(bn_priv_res, bn_priv), 0))
537 goto err;
538 res = 1;
539 err:
540 OSSL_PARAM_free(params);
541 OSSL_PARAM_free(params_blt);
542 OSSL_PARAM_free(params2_blt);
543 OSSL_PARAM_BLD_free(bld);
544 OSSL_PARAM_BLD_free(bld2);
545 BN_free(bn_priv);
546 BN_free(bn_priv_res);
547 BN_free(bn_pub);
548 BN_free(bn_pub_res);
549 return res;
550 }
551
setup_tests(void)552 int setup_tests(void)
553 {
554 ADD_ALL_TESTS(template_public_single_zero_test, 2);
555 ADD_ALL_TESTS(template_public_test, 5);
556 /* Only run the secure memory testing if we have secure memory available */
557 if (CRYPTO_secure_malloc_init(1<<16, 16)) {
558 ADD_TEST(template_private_single_zero_test);
559 ADD_ALL_TESTS(template_private_test, 5);
560 }
561 ADD_TEST(builder_limit_test);
562 ADD_TEST(builder_merge_test);
563 return 1;
564 }
565