summaryrefslogtreecommitdiffstats
path: root/upstream/archlinux/man3/OSSL_PARAM_int.3ssl
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 19:43:11 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 19:43:11 +0000
commitfc22b3d6507c6745911b9dfcc68f1e665ae13dbc (patch)
treece1e3bce06471410239a6f41282e328770aa404a /upstream/archlinux/man3/OSSL_PARAM_int.3ssl
parentInitial commit. (diff)
downloadmanpages-l10n-fc22b3d6507c6745911b9dfcc68f1e665ae13dbc.tar.xz
manpages-l10n-fc22b3d6507c6745911b9dfcc68f1e665ae13dbc.zip
Adding upstream version 4.22.0.upstream/4.22.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'upstream/archlinux/man3/OSSL_PARAM_int.3ssl')
-rw-r--r--upstream/archlinux/man3/OSSL_PARAM_int.3ssl439
1 files changed, 439 insertions, 0 deletions
diff --git a/upstream/archlinux/man3/OSSL_PARAM_int.3ssl b/upstream/archlinux/man3/OSSL_PARAM_int.3ssl
new file mode 100644
index 00000000..ae97b67b
--- /dev/null
+++ b/upstream/archlinux/man3/OSSL_PARAM_int.3ssl
@@ -0,0 +1,439 @@
+.\" -*- mode: troff; coding: utf-8 -*-
+.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
+.ie n \{\
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+. if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{\
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\" ========================================================================
+.\"
+.IX Title "OSSL_PARAM_INT 3ssl"
+.TH OSSL_PARAM_INT 3ssl 2024-01-30 3.2.1 OpenSSL
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH NAME
+OSSL_PARAM_double, OSSL_PARAM_int, OSSL_PARAM_int32, OSSL_PARAM_int64,
+OSSL_PARAM_long, OSSL_PARAM_size_t, OSSL_PARAM_time_t, OSSL_PARAM_uint,
+OSSL_PARAM_uint32, OSSL_PARAM_uint64, OSSL_PARAM_ulong, OSSL_PARAM_BN,
+OSSL_PARAM_utf8_string, OSSL_PARAM_octet_string, OSSL_PARAM_utf8_ptr,
+OSSL_PARAM_octet_ptr,
+OSSL_PARAM_END, OSSL_PARAM_DEFN,
+OSSL_PARAM_construct_double, OSSL_PARAM_construct_int,
+OSSL_PARAM_construct_int32, OSSL_PARAM_construct_int64,
+OSSL_PARAM_construct_long, OSSL_PARAM_construct_size_t,
+OSSL_PARAM_construct_time_t, OSSL_PARAM_construct_uint,
+OSSL_PARAM_construct_uint32, OSSL_PARAM_construct_uint64,
+OSSL_PARAM_construct_ulong, 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_construct_end,
+OSSL_PARAM_locate, OSSL_PARAM_locate_const,
+OSSL_PARAM_get_double, OSSL_PARAM_get_int, OSSL_PARAM_get_int32,
+OSSL_PARAM_get_int64, OSSL_PARAM_get_long, OSSL_PARAM_get_size_t,
+OSSL_PARAM_get_time_t, OSSL_PARAM_get_uint, OSSL_PARAM_get_uint32,
+OSSL_PARAM_get_uint64, OSSL_PARAM_get_ulong, OSSL_PARAM_get_BN,
+OSSL_PARAM_get_utf8_string, OSSL_PARAM_get_octet_string,
+OSSL_PARAM_get_utf8_ptr, OSSL_PARAM_get_octet_ptr,
+OSSL_PARAM_get_utf8_string_ptr, OSSL_PARAM_get_octet_string_ptr,
+OSSL_PARAM_set_double, OSSL_PARAM_set_int, OSSL_PARAM_set_int32,
+OSSL_PARAM_set_int64, OSSL_PARAM_set_long, OSSL_PARAM_set_size_t,
+OSSL_PARAM_set_time_t, OSSL_PARAM_set_uint, OSSL_PARAM_set_uint32,
+OSSL_PARAM_set_uint64, OSSL_PARAM_set_ulong, OSSL_PARAM_set_BN,
+OSSL_PARAM_set_utf8_string, OSSL_PARAM_set_octet_string,
+OSSL_PARAM_set_utf8_ptr, OSSL_PARAM_set_octet_ptr,
+OSSL_PARAM_UNMODIFIED, OSSL_PARAM_modified, OSSL_PARAM_set_all_unmodified
+\&\- OSSL_PARAM helpers
+.SH SYNOPSIS
+.IX Header "SYNOPSIS"
+.Vb 1
+\& #include <openssl/params.h>
+\&
+\& /*
+\& * TYPE in function names is one of:
+\& * double, int, int32, int64, long, size_t, time_t, uint, uint32, uint64, ulong
+\& * Corresponding TYPE in function arguments is one of:
+\& * double, int, int32_t, int64_t, long, size_t, time_t, unsigned int, uint32_t,
+\& * uint64_t, unsigned long
+\& */
+\&
+\& #define OSSL_PARAM_TYPE(key, address)
+\& #define OSSL_PARAM_BN(key, address, size)
+\& #define OSSL_PARAM_utf8_string(key, address, size)
+\& #define OSSL_PARAM_octet_string(key, address, size)
+\& #define OSSL_PARAM_utf8_ptr(key, address, size)
+\& #define OSSL_PARAM_octet_ptr(key, address, size)
+\& #define OSSL_PARAM_END
+\&
+\& #define OSSL_PARAM_UNMODIFIED
+\&
+\& #define OSSL_PARAM_DEFN(key, type, addr, sz) \e
+\& { (key), (type), (addr), (sz), OSSL_PARAM_UNMODIFIED }
+\&
+\& OSSL_PARAM OSSL_PARAM_construct_TYPE(const char *key, TYPE *buf);
+\& OSSL_PARAM OSSL_PARAM_construct_BN(const char *key, unsigned char *buf,
+\& size_t bsize);
+\& OSSL_PARAM OSSL_PARAM_construct_utf8_string(const char *key, char *buf,
+\& size_t bsize);
+\& OSSL_PARAM OSSL_PARAM_construct_octet_string(const char *key, void *buf,
+\& size_t bsize);
+\& OSSL_PARAM OSSL_PARAM_construct_utf8_ptr(const char *key, char **buf,
+\& size_t bsize);
+\& OSSL_PARAM OSSL_PARAM_construct_octet_ptr(const char *key, void **buf,
+\& size_t bsize);
+\& OSSL_PARAM OSSL_PARAM_construct_end(void);
+\&
+\& OSSL_PARAM *OSSL_PARAM_locate(OSSL_PARAM *array, const char *key);
+\& const OSSL_PARAM *OSSL_PARAM_locate_const(const OSSL_PARAM *array,
+\& const char *key);
+\&
+\& int OSSL_PARAM_get_TYPE(const OSSL_PARAM *p, TYPE *val);
+\& int OSSL_PARAM_set_TYPE(OSSL_PARAM *p, TYPE val);
+\&
+\& int OSSL_PARAM_get_BN(const OSSL_PARAM *p, BIGNUM **val);
+\& int OSSL_PARAM_set_BN(OSSL_PARAM *p, const BIGNUM *val);
+\&
+\& int OSSL_PARAM_get_utf8_string(const OSSL_PARAM *p, char **val,
+\& size_t max_len);
+\& int OSSL_PARAM_set_utf8_string(OSSL_PARAM *p, const char *val);
+\&
+\& int OSSL_PARAM_get_octet_string(const OSSL_PARAM *p, void **val,
+\& size_t max_len, size_t *used_len);
+\& int OSSL_PARAM_set_octet_string(OSSL_PARAM *p, const void *val, size_t len);
+\&
+\& int OSSL_PARAM_get_utf8_ptr(const OSSL_PARAM *p, const char **val);
+\& int OSSL_PARAM_set_utf8_ptr(OSSL_PARAM *p, const char *val);
+\&
+\& int OSSL_PARAM_get_octet_ptr(const OSSL_PARAM *p, const void **val,
+\& size_t *used_len);
+\& int OSSL_PARAM_set_octet_ptr(OSSL_PARAM *p, const void *val,
+\& size_t used_len);
+\&
+\& int OSSL_PARAM_get_utf8_string_ptr(const OSSL_PARAM *p, const char **val);
+\& int OSSL_PARAM_get_octet_string_ptr(const OSSL_PARAM *p, const void **val,
+\& size_t *used_len);
+\&
+\& int OSSL_PARAM_modified(const OSSL_PARAM *param);
+\& void OSSL_PARAM_set_all_unmodified(OSSL_PARAM *params);
+.Ve
+.SH DESCRIPTION
+.IX Header "DESCRIPTION"
+A collection of utility functions that simplify and add type safety to the
+\&\fBOSSL_PARAM\fR\|(3) arrays. The following \fR\f(BITYPE\fR\fB\fR names are supported:
+.IP \(bu 2
+double
+.IP \(bu 2
+int
+.IP \(bu 2
+int32 (int32_t)
+.IP \(bu 2
+int64 (int64_t)
+.IP \(bu 2
+long int (long)
+.IP \(bu 2
+time_t
+.IP \(bu 2
+size_t
+.IP \(bu 2
+uint32 (uint32_t)
+.IP \(bu 2
+uint64 (uint64_t)
+.IP \(bu 2
+unsigned int (uint)
+.IP \(bu 2
+unsigned long int (ulong)
+.PP
+\&\fBOSSL_PARAM_TYPE()\fR are a series of macros designed to assist initialising an
+array of \fBOSSL_PARAM\fR\|(3) structures.
+Each of these macros defines a parameter of the specified \fR\f(BITYPE\fR\fB\fR with the
+provided \fIkey\fR and parameter variable \fIaddress\fR.
+.PP
+\&\fBOSSL_PARAM_utf8_string()\fR, \fBOSSL_PARAM_octet_string()\fR, \fBOSSL_PARAM_utf8_ptr()\fR,
+\&\fBOSSL_PARAM_octet_ptr()\fR, \fBOSSL_PARAM_BN()\fR are macros that provide support
+for defining UTF8 strings, OCTET strings and big numbers.
+A parameter with name \fIkey\fR is defined.
+The storage for this parameter is at \fIaddress\fR and is of \fIsize\fR bytes.
+.PP
+OSSL_PARAM_END provides an end of parameter list marker.
+This should terminate all \fBOSSL_PARAM\fR\|(3) arrays.
+.PP
+The \fBOSSL_PARAM_DEFN()\fR macro provides the ability to construct a single
+\&\fBOSSL_PARAM\fR\|(3) (typically used in the construction of \fBOSSL_PARAM\fR arrays). The
+\&\fIkey\fR, \fItype\fR, \fIaddr\fR and \fIsz\fR arguments correspond to the \fIkey\fR,
+\&\fIdata_type\fR, \fIdata\fR and \fIdata_size\fR fields of the \fBOSSL_PARAM\fR\|(3) structure as
+described on the \fBOSSL_PARAM\fR\|(3) page.
+.PP
+\&\fBOSSL_PARAM_construct_TYPE()\fR are a series of functions that create \fBOSSL_PARAM\fR\|(3)
+records dynamically.
+A parameter with name \fIkey\fR is created.
+The parameter will use storage pointed to by \fIbuf\fR and return size of \fIret\fR.
+.PP
+\&\fBOSSL_PARAM_construct_BN()\fR is a function that constructs a large integer
+\&\fBOSSL_PARAM\fR\|(3) structure.
+A parameter with name \fIkey\fR, storage \fIbuf\fR, size \fIbsize\fR and return
+size \fIrsize\fR is created.
+.PP
+\&\fBOSSL_PARAM_construct_utf8_string()\fR is a function that constructs a UTF8
+string \fBOSSL_PARAM\fR\|(3) structure.
+A parameter with name \fIkey\fR, storage \fIbuf\fR and size \fIbsize\fR is created.
+If \fIbsize\fR is zero, the string length is determined using \fBstrlen\fR\|(3).
+Generally pass zero for \fIbsize\fR instead of calling \fBstrlen\fR\|(3) yourself.
+.PP
+\&\fBOSSL_PARAM_construct_octet_string()\fR is a function that constructs an OCTET
+string \fBOSSL_PARAM\fR\|(3) structure.
+A parameter with name \fIkey\fR, storage \fIbuf\fR and size \fIbsize\fR is created.
+.PP
+\&\fBOSSL_PARAM_construct_utf8_ptr()\fR is a function that constructs a UTF8 string
+pointer \fBOSSL_PARAM\fR\|(3) structure.
+A parameter with name \fIkey\fR, storage pointer \fI*buf\fR and size \fIbsize\fR
+is created.
+.PP
+\&\fBOSSL_PARAM_construct_octet_ptr()\fR is a function that constructs an OCTET string
+pointer \fBOSSL_PARAM\fR\|(3) structure.
+A parameter with name \fIkey\fR, storage pointer \fI*buf\fR and size \fIbsize\fR
+is created.
+.PP
+\&\fBOSSL_PARAM_construct_end()\fR is a function that constructs the terminating
+\&\fBOSSL_PARAM\fR\|(3) structure.
+.PP
+\&\fBOSSL_PARAM_locate()\fR is a function that searches an \fIarray\fR of parameters for
+the one matching the \fIkey\fR name.
+.PP
+\&\fBOSSL_PARAM_locate_const()\fR behaves exactly like \fBOSSL_PARAM_locate()\fR except for
+the presence of \fIconst\fR for the \fIarray\fR argument and its return value.
+.PP
+\&\fBOSSL_PARAM_get_TYPE()\fR retrieves a value of type \fR\f(BITYPE\fR\fB\fR from the parameter
+\&\fIp\fR.
+The value is copied to the address \fIval\fR.
+Type coercion takes place as discussed in the NOTES section.
+.PP
+\&\fBOSSL_PARAM_set_TYPE()\fR stores a value \fIval\fR of type \fR\f(BITYPE\fR\fB\fR into the
+parameter \fIp\fR.
+If the parameter's \fIdata\fR field is NULL, then only its \fIreturn_size\fR field
+will be assigned the size the parameter's \fIdata\fR buffer should have.
+Type coercion takes place as discussed in the NOTES section.
+.PP
+\&\fBOSSL_PARAM_get_BN()\fR retrieves a BIGNUM from the parameter pointed to by \fIp\fR.
+The BIGNUM referenced by \fIval\fR is updated and is allocated if \fI*val\fR is
+NULL.
+.PP
+\&\fBOSSL_PARAM_set_BN()\fR stores the BIGNUM \fIval\fR into the parameter \fIp\fR.
+If the parameter's \fIdata\fR field is NULL, then only its \fIreturn_size\fR field
+will be assigned the size the parameter's \fIdata\fR buffer should have.
+.PP
+\&\fBOSSL_PARAM_get_utf8_string()\fR retrieves a UTF8 string from the parameter
+pointed to by \fIp\fR.
+The string is stored into \fI*val\fR with a size limit of \fImax_len\fR,
+which must be large enough to accommodate a terminating NUL byte,
+otherwise this function will fail.
+If \fI*val\fR is NULL, memory is allocated for the string (including the
+terminating NUL byte) and \fImax_len\fR is ignored.
+If memory is allocated by this function, it must be freed by the caller.
+.PP
+\&\fBOSSL_PARAM_set_utf8_string()\fR sets a UTF8 string from the parameter pointed to
+by \fIp\fR to the value referenced by \fIval\fR.
+If the parameter's \fIdata\fR field isn't NULL, its \fIdata_size\fR must indicate
+that the buffer is large enough to accommodate the string that \fIval\fR points at,
+not including the terminating NUL byte, or this function will fail.
+A terminating NUL byte is added only if the parameter's \fIdata_size\fR indicates
+the buffer is longer than the string length, otherwise the string will not be
+NUL terminated.
+If the parameter's \fIdata\fR field is NULL, then only its \fIreturn_size\fR field
+will be assigned the minimum size the parameter's \fIdata\fR buffer should have
+to accommodate the string, not including a terminating NUL byte.
+.PP
+\&\fBOSSL_PARAM_get_octet_string()\fR retrieves an OCTET string from the parameter
+pointed to by \fIp\fR.
+The OCTETs are either stored into \fI*val\fR with a length limit of \fImax_len\fR or,
+in the case when \fI*val\fR is NULL, memory is allocated and
+\&\fImax_len\fR is ignored. \fI*used_len\fR is populated with the number of OCTETs
+stored. If \fIval\fR is NULL then the OCTETS are not stored, but \fI*used_len\fR is
+still populated.
+If memory is allocated by this function, it must be freed by the caller.
+.PP
+\&\fBOSSL_PARAM_set_octet_string()\fR sets an OCTET string from the parameter
+pointed to by \fIp\fR to the value referenced by \fIval\fR.
+If the parameter's \fIdata\fR field is NULL, then only its \fIreturn_size\fR field
+will be assigned the size the parameter's \fIdata\fR buffer should have.
+.PP
+\&\fBOSSL_PARAM_get_utf8_ptr()\fR retrieves the UTF8 string pointer from the parameter
+referenced by \fIp\fR and stores it in \fI*val\fR.
+.PP
+\&\fBOSSL_PARAM_set_utf8_ptr()\fR sets the UTF8 string pointer in the parameter
+referenced by \fIp\fR to the values \fIval\fR.
+.PP
+\&\fBOSSL_PARAM_get_octet_ptr()\fR retrieves the OCTET string pointer from the parameter
+referenced by \fIp\fR and stores it in \fI*val\fR.
+The length of the OCTET string is stored in \fI*used_len\fR.
+.PP
+\&\fBOSSL_PARAM_set_octet_ptr()\fR sets the OCTET string pointer in the parameter
+referenced by \fIp\fR to the values \fIval\fR.
+The length of the OCTET string is provided by \fIused_len\fR.
+.PP
+\&\fBOSSL_PARAM_get_utf8_string_ptr()\fR retrieves the pointer to a UTF8 string from
+the parameter pointed to by \fIp\fR, and stores that pointer in \fI*val\fR.
+This is different from \fBOSSL_PARAM_get_utf8_string()\fR, which copies the
+string.
+.PP
+\&\fBOSSL_PARAM_get_octet_string_ptr()\fR retrieves the pointer to a octet string
+from the parameter pointed to by \fIp\fR, and stores that pointer in \fI*val\fR,
+along with the string's length in \fI*used_len\fR.
+This is different from \fBOSSL_PARAM_get_octet_string()\fR, which copies the
+string.
+.PP
+The OSSL_PARAM_UNMODIFIED macro is used to detect if a parameter was set. On
+creation, via either the macros or construct calls, the \fIreturn_size\fR field
+is set to this. If the parameter is set using the calls defined herein, the
+\&\fIreturn_size\fR field is changed.
+.PP
+\&\fBOSSL_PARAM_modified()\fR queries if the parameter \fIparam\fR has been set or not
+using the calls defined herein.
+.PP
+\&\fBOSSL_PARAM_set_all_unmodified()\fR resets the unused indicator for all parameters
+in the array \fIparams\fR.
+.SH "RETURN VALUES"
+.IX Header "RETURN VALUES"
+\&\fBOSSL_PARAM_construct_TYPE()\fR, \fBOSSL_PARAM_construct_BN()\fR,
+\&\fBOSSL_PARAM_construct_utf8_string()\fR, \fBOSSL_PARAM_construct_octet_string()\fR,
+\&\fBOSSL_PARAM_construct_utf8_ptr()\fR and \fBOSSL_PARAM_construct_octet_ptr()\fR
+return a populated \fBOSSL_PARAM\fR\|(3) structure.
+.PP
+\&\fBOSSL_PARAM_locate()\fR and \fBOSSL_PARAM_locate_const()\fR return a pointer to
+the matching \fBOSSL_PARAM\fR\|(3) object. They return NULL on error or when
+no object matching \fIkey\fR exists in the \fIarray\fR.
+.PP
+\&\fBOSSL_PARAM_modified()\fR returns 1 if the parameter was set and 0 otherwise.
+.PP
+All other functions return 1 on success and 0 on failure.
+.SH NOTES
+.IX Header "NOTES"
+Native types will be converted as required only if the value is exactly
+representable by the target type or parameter.
+Apart from that, the functions must be used appropriately for the
+expected type of the parameter.
+.PP
+\&\fBOSSL_PARAM_get_BN()\fR and \fBOSSL_PARAM_set_BN()\fR only support nonnegative
+\&\fBBIGNUM\fRs when the desired data type is \fBOSSL_PARAM_UNSIGNED_INTEGER\fR.
+\&\fBOSSL_PARAM_construct_BN()\fR currently constructs an \fBOSSL_PARAM\fR\|(3) structure
+with the data type \fBOSSL_PARAM_UNSIGNED_INTEGER\fR.
+.PP
+For \fBOSSL_PARAM_construct_utf8_ptr()\fR and \fBOSSL_PARAM_consstruct_octet_ptr()\fR,
+\&\fIbsize\fR is not relevant if the purpose is to send the \fBOSSL_PARAM\fR\|(3) array
+to a \fIresponder\fR, i.e. to get parameter data back.
+In that case, \fIbsize\fR can safely be given zero.
+See "DESCRIPTION" in \fBOSSL_PARAM\fR\|(3) for further information on the
+possible purposes.
+.SH EXAMPLES
+.IX Header "EXAMPLES"
+Reusing the examples from \fBOSSL_PARAM\fR\|(3) to just show how
+\&\fBOSSL_PARAM\fR\|(3) arrays can be handled using the macros and functions
+defined herein.
+.SS "Example 1"
+.IX Subsection "Example 1"
+This example is for setting parameters on some object:
+.PP
+.Vb 1
+\& #include <openssl/core.h>
+\&
+\& const char *foo = "some string";
+\& size_t foo_l = strlen(foo);
+\& const char bar[] = "some other string";
+\& const OSSL_PARAM set[] = {
+\& OSSL_PARAM_utf8_ptr("foo", &foo, foo_l),
+\& OSSL_PARAM_utf8_string("bar", bar, sizeof(bar) \- 1),
+\& OSSL_PARAM_END
+\& };
+.Ve
+.SS "Example 2"
+.IX Subsection "Example 2"
+This example is for requesting parameters on some object, and also
+demonstrates that the requester isn't obligated to request all
+available parameters:
+.PP
+.Vb 7
+\& const char *foo = NULL;
+\& char bar[1024];
+\& OSSL_PARAM request[] = {
+\& OSSL_PARAM_utf8_ptr("foo", &foo, 0),
+\& OSSL_PARAM_utf8_string("bar", bar, sizeof(bar)),
+\& OSSL_PARAM_END
+\& };
+.Ve
+.PP
+A \fIresponder\fR that receives this array (as \f(CW\*(C`params\*(C'\fR in this example)
+could fill in the parameters like this:
+.PP
+.Vb 1
+\& /* OSSL_PARAM *params */
+\&
+\& OSSL_PARAM *p;
+\&
+\& if ((p = OSSL_PARAM_locate(params, "foo")) != NULL)
+\& OSSL_PARAM_set_utf8_ptr(p, "foo value");
+\& if ((p = OSSL_PARAM_locate(params, "bar")) != NULL)
+\& OSSL_PARAM_set_utf8_string(p, "bar value");
+\& if ((p = OSSL_PARAM_locate(params, "cookie")) != NULL)
+\& OSSL_PARAM_set_utf8_ptr(p, "cookie value");
+.Ve
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fBopenssl\-core.h\fR\|(7), \fBOSSL_PARAM\fR\|(3)
+.SH HISTORY
+.IX Header "HISTORY"
+These APIs were introduced in OpenSSL 3.0.
+.SH COPYRIGHT
+.IX Header "COPYRIGHT"
+Copyright 2019\-2023 The OpenSSL Project Authors. All Rights Reserved.
+.PP
+Licensed under the Apache License 2.0 (the "License"). You may not use
+this file except in compliance with the License. You can obtain a copy
+in the file LICENSE in the source distribution or at
+<https://www.openssl.org/source/license.html>.