2 * Copyright 2019-2020 The OpenSSL Project Authors. All Rights Reserved.
3 * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
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
12 #include <openssl/params.h>
13 #include "internal/thread_once.h"
14 #include "internal/numbers.h"
16 OSSL_PARAM
*OSSL_PARAM_locate(OSSL_PARAM
*p
, const char *key
)
18 if (p
!= NULL
&& key
!= NULL
)
19 for (; p
->key
!= NULL
; p
++)
20 if (strcmp(key
, p
->key
) == 0)
25 const OSSL_PARAM
*OSSL_PARAM_locate_const(const OSSL_PARAM
*p
, const char *key
)
27 return OSSL_PARAM_locate((OSSL_PARAM
*)p
, key
);
30 static OSSL_PARAM
ossl_param_construct(const char *key
, unsigned int data_type
,
31 void *data
, size_t data_size
)
36 res
.data_type
= data_type
;
38 res
.data_size
= data_size
;
39 res
.return_size
= OSSL_PARAM_UNMODIFIED
;
43 int OSSL_PARAM_modified(const OSSL_PARAM
*p
)
45 return p
!= NULL
&& p
->return_size
!= OSSL_PARAM_UNMODIFIED
;
48 void OSSL_PARAM_set_unmodified(OSSL_PARAM
*p
)
51 p
->return_size
= OSSL_PARAM_UNMODIFIED
;
54 int OSSL_PARAM_get_int(const OSSL_PARAM
*p
, int *val
)
56 switch (sizeof(int)) {
58 return OSSL_PARAM_get_int32(p
, (int32_t *)val
);
60 return OSSL_PARAM_get_int64(p
, (int64_t *)val
);
65 int OSSL_PARAM_set_int(OSSL_PARAM
*p
, int val
)
67 switch (sizeof(int)) {
69 return OSSL_PARAM_set_int32(p
, (int32_t)val
);
71 return OSSL_PARAM_set_int64(p
, (int64_t)val
);
76 OSSL_PARAM
OSSL_PARAM_construct_int(const char *key
, int *buf
)
78 return ossl_param_construct(key
, OSSL_PARAM_INTEGER
, buf
, sizeof(int));
81 int OSSL_PARAM_get_uint(const OSSL_PARAM
*p
, unsigned int *val
)
83 switch (sizeof(unsigned int)) {
84 case sizeof(uint32_t):
85 return OSSL_PARAM_get_uint32(p
, (uint32_t *)val
);
86 case sizeof(uint64_t):
87 return OSSL_PARAM_get_uint64(p
, (uint64_t *)val
);
92 int OSSL_PARAM_set_uint(OSSL_PARAM
*p
, unsigned int val
)
94 switch (sizeof(unsigned int)) {
95 case sizeof(uint32_t):
96 return OSSL_PARAM_set_uint32(p
, (uint32_t)val
);
97 case sizeof(uint64_t):
98 return OSSL_PARAM_set_uint64(p
, (uint64_t)val
);
103 OSSL_PARAM
OSSL_PARAM_construct_uint(const char *key
, unsigned int *buf
)
105 return ossl_param_construct(key
, OSSL_PARAM_UNSIGNED_INTEGER
, buf
,
106 sizeof(unsigned int));
109 int OSSL_PARAM_get_long(const OSSL_PARAM
*p
, long int *val
)
111 switch (sizeof(long int)) {
112 case sizeof(int32_t):
113 return OSSL_PARAM_get_int32(p
, (int32_t *)val
);
114 case sizeof(int64_t):
115 return OSSL_PARAM_get_int64(p
, (int64_t *)val
);
120 int OSSL_PARAM_set_long(OSSL_PARAM
*p
, long int val
)
122 switch (sizeof(long int)) {
123 case sizeof(int32_t):
124 return OSSL_PARAM_set_int32(p
, (int32_t)val
);
125 case sizeof(int64_t):
126 return OSSL_PARAM_set_int64(p
, (int64_t)val
);
131 OSSL_PARAM
OSSL_PARAM_construct_long(const char *key
, long int *buf
)
133 return ossl_param_construct(key
, OSSL_PARAM_INTEGER
, buf
, sizeof(long int));
136 int OSSL_PARAM_get_ulong(const OSSL_PARAM
*p
, unsigned long int *val
)
138 switch (sizeof(unsigned long int)) {
139 case sizeof(uint32_t):
140 return OSSL_PARAM_get_uint32(p
, (uint32_t *)val
);
141 case sizeof(uint64_t):
142 return OSSL_PARAM_get_uint64(p
, (uint64_t *)val
);
147 int OSSL_PARAM_set_ulong(OSSL_PARAM
*p
, unsigned long int val
)
149 switch (sizeof(unsigned long int)) {
150 case sizeof(uint32_t):
151 return OSSL_PARAM_set_uint32(p
, (uint32_t)val
);
152 case sizeof(uint64_t):
153 return OSSL_PARAM_set_uint64(p
, (uint64_t)val
);
158 OSSL_PARAM
OSSL_PARAM_construct_ulong(const char *key
, unsigned long int *buf
)
160 return ossl_param_construct(key
, OSSL_PARAM_UNSIGNED_INTEGER
, buf
,
161 sizeof(unsigned long int));
164 int OSSL_PARAM_get_int32(const OSSL_PARAM
*p
, int32_t *val
)
171 if (val
== NULL
|| p
== NULL
)
174 if (p
->data_type
== OSSL_PARAM_INTEGER
) {
175 switch (p
->data_size
) {
176 case sizeof(int32_t):
177 *val
= *(const int32_t *)p
->data
;
179 case sizeof(int64_t):
180 i64
= *(const int64_t *)p
->data
;
181 if (i64
>= INT32_MIN
&& i64
<= INT32_MAX
) {
187 } else if (p
->data_type
== OSSL_PARAM_UNSIGNED_INTEGER
) {
188 switch (p
->data_size
) {
189 case sizeof(uint32_t):
190 u32
= *(const uint32_t *)p
->data
;
191 if (u32
<= INT32_MAX
) {
196 case sizeof(uint64_t):
197 u64
= *(const uint64_t *)p
->data
;
198 if (u64
<= INT32_MAX
) {
204 } else if (p
->data_type
== OSSL_PARAM_REAL
) {
205 switch (p
->data_size
) {
207 d
= *(const double *)p
->data
;
208 if (d
>= INT32_MIN
&& d
<= INT32_MAX
&& d
== (int32_t)d
) {
218 int OSSL_PARAM_set_int32(OSSL_PARAM
*p
, int32_t val
)
223 if (p
->data_type
== OSSL_PARAM_INTEGER
) {
224 p
->return_size
= sizeof(int32_t); /* Minimum expected size */
227 switch (p
->data_size
) {
228 case sizeof(int32_t):
229 *(int32_t *)p
->data
= val
;
231 case sizeof(int64_t):
232 p
->return_size
= sizeof(int64_t);
233 *(int64_t *)p
->data
= (int64_t)val
;
236 } else if (p
->data_type
== OSSL_PARAM_UNSIGNED_INTEGER
&& val
>= 0) {
237 p
->return_size
= sizeof(uint32_t); /* Minimum expected size */
240 switch (p
->data_size
) {
241 case sizeof(uint32_t):
242 *(uint32_t *)p
->data
= (uint32_t)val
;
244 case sizeof(uint64_t):
245 p
->return_size
= sizeof(uint64_t);
246 *(uint64_t *)p
->data
= (uint64_t)val
;
249 } else if (p
->data_type
== OSSL_PARAM_REAL
) {
250 p
->return_size
= sizeof(double);
253 switch (p
->data_size
) {
255 *(double *)p
->data
= (double)val
;
262 OSSL_PARAM
OSSL_PARAM_construct_int32(const char *key
, int32_t *buf
)
264 return ossl_param_construct(key
, OSSL_PARAM_INTEGER
, buf
,
268 int OSSL_PARAM_get_uint32(const OSSL_PARAM
*p
, uint32_t *val
)
275 if (val
== NULL
|| p
== NULL
)
278 if (p
->data_type
== OSSL_PARAM_UNSIGNED_INTEGER
) {
279 switch (p
->data_size
) {
280 case sizeof(uint32_t):
281 *val
= *(const uint32_t *)p
->data
;
283 case sizeof(uint64_t):
284 u64
= *(const uint64_t *)p
->data
;
285 if (u64
<= UINT32_MAX
) {
286 *val
= (uint32_t)u64
;
291 } else if (p
->data_type
== OSSL_PARAM_INTEGER
) {
292 switch (p
->data_size
) {
293 case sizeof(int32_t):
294 i32
= *(const int32_t *)p
->data
;
300 case sizeof(int64_t):
301 i64
= *(const int64_t *)p
->data
;
302 if (i64
>= 0 && i64
<= UINT32_MAX
) {
303 *val
= (uint32_t)i64
;
308 } else if (p
->data_type
== OSSL_PARAM_REAL
) {
309 switch (p
->data_size
) {
311 d
= *(const double *)p
->data
;
312 if (d
>= 0 && d
<= UINT32_MAX
&& d
== (uint32_t)d
) {
322 int OSSL_PARAM_set_uint32(OSSL_PARAM
*p
, uint32_t val
)
328 if (p
->data_type
== OSSL_PARAM_UNSIGNED_INTEGER
) {
329 p
->return_size
= sizeof(uint32_t); /* Minimum expected size */
332 switch (p
->data_size
) {
333 case sizeof(uint32_t):
334 *(uint32_t *)p
->data
= val
;
336 case sizeof(uint64_t):
337 p
->return_size
= sizeof(uint64_t);
338 *(uint64_t *)p
->data
= val
;
341 } else if (p
->data_type
== OSSL_PARAM_INTEGER
) {
342 p
->return_size
= sizeof(int32_t); /* Minimum expected size */
345 switch (p
->data_size
) {
346 case sizeof(int32_t):
347 if (val
<= INT32_MAX
) {
348 *(int32_t *)p
->data
= (int32_t)val
;
352 case sizeof(int64_t):
353 p
->return_size
= sizeof(int64_t);
354 *(int64_t *)p
->data
= (int64_t)val
;
357 } else if (p
->data_type
== OSSL_PARAM_REAL
) {
358 p
->return_size
= sizeof(double);
361 switch (p
->data_size
) {
363 *(double *)p
->data
= (double)val
;
370 OSSL_PARAM
OSSL_PARAM_construct_uint32(const char *key
, uint32_t *buf
)
372 return ossl_param_construct(key
, OSSL_PARAM_UNSIGNED_INTEGER
, buf
,
376 int OSSL_PARAM_get_int64(const OSSL_PARAM
*p
, int64_t *val
)
381 if (val
== NULL
|| p
== NULL
)
384 if (p
->data_type
== OSSL_PARAM_INTEGER
) {
385 switch (p
->data_size
) {
386 case sizeof(int32_t):
387 *val
= *(const int32_t *)p
->data
;
389 case sizeof(int64_t):
390 *val
= *(const int64_t *)p
->data
;
393 } else if (p
->data_type
== OSSL_PARAM_UNSIGNED_INTEGER
) {
394 switch (p
->data_size
) {
395 case sizeof(uint32_t):
396 *val
= *(const uint32_t *)p
->data
;
398 case sizeof(uint64_t):
399 u64
= *(const uint64_t *)p
->data
;
400 if (u64
<= INT64_MAX
) {
406 } else if (p
->data_type
== OSSL_PARAM_REAL
) {
407 switch (p
->data_size
) {
409 d
= *(const double *)p
->data
;
410 if (d
>= INT64_MIN
&& d
<= INT64_MAX
&& d
== (int64_t)d
) {
420 int OSSL_PARAM_set_int64(OSSL_PARAM
*p
, int64_t val
)
427 if (p
->data_type
== OSSL_PARAM_INTEGER
) {
428 p
->return_size
= sizeof(int64_t); /* Expected size */
431 switch (p
->data_size
) {
432 case sizeof(int32_t):
433 if (val
>= INT32_MIN
&& val
<= INT32_MAX
) {
434 p
->return_size
= sizeof(int32_t);
435 *(int32_t *)p
->data
= (int32_t)val
;
439 case sizeof(int64_t):
440 *(int64_t *)p
->data
= val
;
443 } else if (p
->data_type
== OSSL_PARAM_UNSIGNED_INTEGER
&& val
>= 0) {
444 p
->return_size
= sizeof(uint64_t); /* Expected size */
447 switch (p
->data_size
) {
448 case sizeof(uint32_t):
449 if (val
<= UINT32_MAX
) {
450 p
->return_size
= sizeof(uint32_t);
451 *(uint32_t *)p
->data
= (uint32_t)val
;
455 case sizeof(uint64_t):
456 *(uint64_t *)p
->data
= (uint64_t)val
;
459 } else if (p
->data_type
== OSSL_PARAM_REAL
) {
460 p
->return_size
= sizeof(double);
463 switch (p
->data_size
) {
465 u64
= val
< 0 ? -val
: val
;
466 if ((u64
>> 53) == 0) { /* 53 significant bits in the mantissa */
467 *(double *)p
->data
= (double)val
;
476 OSSL_PARAM
OSSL_PARAM_construct_int64(const char *key
, int64_t *buf
)
478 return ossl_param_construct(key
, OSSL_PARAM_INTEGER
, buf
, sizeof(int64_t));
481 int OSSL_PARAM_get_uint64(const OSSL_PARAM
*p
, uint64_t *val
)
487 if (val
== NULL
|| p
== NULL
)
490 if (p
->data_type
== OSSL_PARAM_UNSIGNED_INTEGER
) {
491 switch (p
->data_size
) {
492 case sizeof(uint32_t):
493 *val
= *(const uint32_t *)p
->data
;
495 case sizeof(uint64_t):
496 *val
= *(const uint64_t *)p
->data
;
499 } else if (p
->data_type
== OSSL_PARAM_INTEGER
) {
500 switch (p
->data_size
) {
501 case sizeof(int32_t):
502 i32
= *(const int32_t *)p
->data
;
504 *val
= (uint64_t)i32
;
508 case sizeof(int64_t):
509 i64
= *(const int64_t *)p
->data
;
511 *val
= (uint64_t)i64
;
516 } else if (p
->data_type
== OSSL_PARAM_REAL
) {
517 switch (p
->data_size
) {
519 d
= *(const double *)p
->data
;
520 if (d
>= 0 && d
<= INT64_MAX
&& d
== (uint64_t)d
) {
530 int OSSL_PARAM_set_uint64(OSSL_PARAM
*p
, uint64_t val
)
536 if (p
->data_type
== OSSL_PARAM_UNSIGNED_INTEGER
) {
537 p
->return_size
= sizeof(uint64_t); /* Expected size */
540 switch (p
->data_size
) {
541 case sizeof(uint32_t):
542 if (val
<= UINT32_MAX
) {
543 p
->return_size
= sizeof(uint32_t);
544 *(uint32_t *)p
->data
= (uint32_t)val
;
548 case sizeof(uint64_t):
549 *(uint64_t *)p
->data
= val
;
552 } else if (p
->data_type
== OSSL_PARAM_INTEGER
) {
553 p
->return_size
= sizeof(int64_t); /* Expected size */
556 switch (p
->data_size
) {
557 case sizeof(int32_t):
558 if (val
<= INT32_MAX
) {
559 p
->return_size
= sizeof(int32_t);
560 *(int32_t *)p
->data
= (int32_t)val
;
564 case sizeof(int64_t):
565 if (val
<= INT64_MAX
) {
566 *(int64_t *)p
->data
= (int64_t)val
;
571 } else if (p
->data_type
== OSSL_PARAM_REAL
) {
572 p
->return_size
= sizeof(double);
573 switch (p
->data_size
) {
575 if ((val
>> 53) == 0) { /* 53 significant bits in the mantissa */
576 *(double *)p
->data
= (double)val
;
585 OSSL_PARAM
OSSL_PARAM_construct_uint64(const char *key
, uint64_t *buf
)
587 return ossl_param_construct(key
, OSSL_PARAM_UNSIGNED_INTEGER
, buf
,
591 int OSSL_PARAM_get_size_t(const OSSL_PARAM
*p
, size_t *val
)
593 switch (sizeof(size_t)) {
594 case sizeof(uint32_t):
595 return OSSL_PARAM_get_uint32(p
, (uint32_t *)val
);
596 case sizeof(uint64_t):
597 return OSSL_PARAM_get_uint64(p
, (uint64_t *)val
);
602 int OSSL_PARAM_set_size_t(OSSL_PARAM
*p
, size_t val
)
604 switch (sizeof(size_t)) {
605 case sizeof(uint32_t):
606 return OSSL_PARAM_set_uint32(p
, (uint32_t)val
);
607 case sizeof(uint64_t):
608 return OSSL_PARAM_set_uint64(p
, (uint64_t)val
);
613 OSSL_PARAM
OSSL_PARAM_construct_size_t(const char *key
, size_t *buf
)
615 return ossl_param_construct(key
, OSSL_PARAM_UNSIGNED_INTEGER
, buf
,
619 int OSSL_PARAM_get_BN(const OSSL_PARAM
*p
, BIGNUM
**val
)
625 || p
->data_type
!= OSSL_PARAM_UNSIGNED_INTEGER
)
628 b
= BN_native2bn(p
->data
, (int)p
->data_size
, *val
);
636 int OSSL_PARAM_set_BN(OSSL_PARAM
*p
, const BIGNUM
*val
)
643 if (val
== NULL
|| p
->data_type
!= OSSL_PARAM_UNSIGNED_INTEGER
)
646 /* For the moment, only positive values are permitted */
647 if (BN_is_negative(val
))
650 bytes
= (size_t)BN_num_bytes(val
);
651 p
->return_size
= bytes
;
654 if (p
->data_size
>= bytes
) {
655 p
->return_size
= p
->data_size
;
656 return BN_bn2nativepad(val
, p
->data
, p
->data_size
) >= 0;
661 OSSL_PARAM
OSSL_PARAM_construct_BN(const char *key
, unsigned char *buf
,
664 return ossl_param_construct(key
, OSSL_PARAM_UNSIGNED_INTEGER
,
668 int OSSL_PARAM_get_double(const OSSL_PARAM
*p
, double *val
)
673 if (val
== NULL
|| p
== NULL
)
676 if (p
->data_type
== OSSL_PARAM_REAL
) {
677 switch (p
->data_size
) {
679 *val
= *(const double *)p
->data
;
682 } else if (p
->data_type
== OSSL_PARAM_UNSIGNED_INTEGER
) {
683 switch (p
->data_size
) {
684 case sizeof(uint32_t):
685 *val
= *(const uint32_t *)p
->data
;
687 case sizeof(uint64_t):
688 u64
= *(const uint64_t *)p
->data
;
689 if ((u64
>> 53) == 0) { /* 53 significant bits in the mantissa */
695 } else if (p
->data_type
== OSSL_PARAM_INTEGER
) {
696 switch (p
->data_size
) {
697 case sizeof(int32_t):
698 *val
= *(const int32_t *)p
->data
;
700 case sizeof(int64_t):
701 i64
= *(const int64_t *)p
->data
;
702 u64
= i64
< 0 ? -i64
: i64
;
703 if ((u64
>> 53) == 0) { /* 53 significant bits in the mantissa */
713 int OSSL_PARAM_set_double(OSSL_PARAM
*p
, double val
)
719 if (p
->data_type
== OSSL_PARAM_REAL
) {
720 p
->return_size
= sizeof(double);
723 switch (p
->data_size
) {
725 *(double *)p
->data
= val
;
728 } else if (p
->data_type
== OSSL_PARAM_UNSIGNED_INTEGER
729 && val
== (ossl_uintmax_t
)val
) {
730 p
->return_size
= sizeof(double);
733 switch (p
->data_size
) {
734 case sizeof(uint32_t):
735 if (val
>= 0 && val
<= UINT32_MAX
) {
736 p
->return_size
= sizeof(uint32_t);
737 *(uint32_t *)p
->data
= (uint32_t)val
;
741 case sizeof(uint64_t):
742 if (val
>= 0 && val
<= UINT64_MAX
) {
743 p
->return_size
= sizeof(uint64_t);
744 *(uint64_t *)p
->data
= (uint64_t)val
;
748 } else if (p
->data_type
== OSSL_PARAM_INTEGER
&& val
== (ossl_intmax_t
)val
) {
749 p
->return_size
= sizeof(double);
752 switch (p
->data_size
) {
753 case sizeof(int32_t):
754 if (val
>= INT32_MIN
&& val
<= INT32_MAX
) {
755 p
->return_size
= sizeof(int32_t);
756 *(int32_t *)p
->data
= (int32_t)val
;
760 case sizeof(int64_t):
761 if (val
>= INT64_MIN
&& val
<= INT64_MAX
) {
762 p
->return_size
= sizeof(int64_t);
763 *(int64_t *)p
->data
= (int64_t)val
;
772 OSSL_PARAM
OSSL_PARAM_construct_double(const char *key
, double *buf
)
774 return ossl_param_construct(key
, OSSL_PARAM_REAL
, buf
, sizeof(double));
777 static int get_string_internal(const OSSL_PARAM
*p
, void **val
, size_t max_len
,
778 size_t *used_len
, unsigned int type
)
782 if (val
== NULL
|| p
== NULL
|| p
->data_type
!= type
)
787 if (used_len
!= NULL
)
796 char *const q
= OPENSSL_malloc(sz
);
801 memcpy(q
, p
->data
, sz
);
806 memcpy(*val
, p
->data
, sz
);
810 int OSSL_PARAM_get_utf8_string(const OSSL_PARAM
*p
, char **val
, size_t max_len
)
812 return get_string_internal(p
, (void **)val
, max_len
, NULL
,
813 OSSL_PARAM_UTF8_STRING
);
816 int OSSL_PARAM_get_octet_string(const OSSL_PARAM
*p
, void **val
, size_t max_len
,
819 return get_string_internal(p
, val
, max_len
, used_len
,
820 OSSL_PARAM_OCTET_STRING
);
823 static int set_string_internal(OSSL_PARAM
*p
, const void *val
, size_t len
,
826 p
->return_size
= len
;
829 if (p
->data_type
!= type
|| p
->data_size
< len
)
832 memcpy(p
->data
, val
, len
);
836 int OSSL_PARAM_set_utf8_string(OSSL_PARAM
*p
, const char *val
)
844 return set_string_internal(p
, val
, strlen(val
) + 1, OSSL_PARAM_UTF8_STRING
);
847 int OSSL_PARAM_set_octet_string(OSSL_PARAM
*p
, const void *val
,
856 return set_string_internal(p
, val
, len
, OSSL_PARAM_OCTET_STRING
);
859 OSSL_PARAM
OSSL_PARAM_construct_utf8_string(const char *key
, char *buf
,
862 if (buf
!= NULL
&& bsize
== 0)
863 bsize
= strlen(buf
) + 1;
864 return ossl_param_construct(key
, OSSL_PARAM_UTF8_STRING
, buf
, bsize
);
867 OSSL_PARAM
OSSL_PARAM_construct_octet_string(const char *key
, void *buf
,
870 return ossl_param_construct(key
, OSSL_PARAM_OCTET_STRING
, buf
, bsize
);
873 static int get_ptr_internal(const OSSL_PARAM
*p
, const void **val
,
874 size_t *used_len
, unsigned int type
)
876 if (val
== NULL
|| p
== NULL
|| p
->data_type
!= type
)
878 if (used_len
!= NULL
)
879 *used_len
= p
->data_size
;
880 *val
= *(const void **)p
->data
;
884 int OSSL_PARAM_get_utf8_ptr(const OSSL_PARAM
*p
, const char **val
)
886 return get_ptr_internal(p
, (const void **)val
, NULL
, OSSL_PARAM_UTF8_PTR
);
889 int OSSL_PARAM_get_octet_ptr(const OSSL_PARAM
*p
, const void **val
,
892 return get_ptr_internal(p
, val
, used_len
, OSSL_PARAM_OCTET_PTR
);
895 static int set_ptr_internal(OSSL_PARAM
*p
, const void *val
,
896 unsigned int type
, size_t len
)
898 p
->return_size
= len
;
899 if (p
->data_type
!= type
)
902 *(const void **)p
->data
= val
;
906 int OSSL_PARAM_set_utf8_ptr(OSSL_PARAM
*p
, const char *val
)
911 return set_ptr_internal(p
, val
, OSSL_PARAM_UTF8_PTR
,
912 val
== NULL
? 0 : strlen(val
) + 1);
915 int OSSL_PARAM_set_octet_ptr(OSSL_PARAM
*p
, const void *val
,
921 return set_ptr_internal(p
, val
, OSSL_PARAM_OCTET_PTR
, used_len
);
924 OSSL_PARAM
OSSL_PARAM_construct_utf8_ptr(const char *key
, char **buf
,
927 return ossl_param_construct(key
, OSSL_PARAM_UTF8_PTR
, buf
, bsize
);
930 OSSL_PARAM
OSSL_PARAM_construct_octet_ptr(const char *key
, void **buf
,
933 return ossl_param_construct(key
, OSSL_PARAM_OCTET_PTR
, buf
, bsize
);
936 OSSL_PARAM
OSSL_PARAM_construct_end(void)
938 OSSL_PARAM end
= OSSL_PARAM_END
;