Replace some boldened types with a corresponding man page link
[openssl.git] / doc / man3 / OSSL_PARAM_int.pod
index 2bc2cc0dfc46daf4c402c0d460f71cadf219d6a1..ffe7c8c76a1852ffde49f37e5e9ad064edbb8378 100644 (file)
@@ -7,7 +7,7 @@ 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_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,
@@ -58,6 +58,9 @@ OSSL_PARAM_UNMODIFIED, OSSL_PARAM_modified, OSSL_PARAM_set_all_unmodified
 
  #define OSSL_PARAM_UNMODIFIED
 
+ #define OSSL_PARAM_DEFN(key, type, addr, sz)    \
+    { (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);
@@ -107,7 +110,7 @@ OSSL_PARAM_UNMODIFIED, OSSL_PARAM_modified, OSSL_PARAM_set_all_unmodified
 =head1 DESCRIPTION
 
 A collection of utility functions that simplify and add type safety to the
-OSSL_PARAM arrays.  The following B<I<TYPE>> names are supported:
+L<OSSL_PARAM(3)> arrays.  The following B<I<TYPE>> names are supported:
 
 =over 1
 
@@ -158,7 +161,7 @@ unsigned long int (ulong)
 =back
 
 OSSL_PARAM_TYPE() are a series of macros designed to assist initialising an
-array of OSSL_PARAM structures.
+array of L<OSSL_PARAM(3)> structures.
 Each of these macros defines a parameter of the specified B<I<TYPE>> with the
 provided I<key> and parameter variable I<address>.
 
@@ -169,41 +172,46 @@ A parameter with name I<key> is defined.
 The storage for this parameter is at I<address> and is of I<size> bytes.
 
 OSSL_PARAM_END provides an end of parameter list marker.
-This should terminate all OSSL_PARAM arrays.
+This should terminate all L<OSSL_PARAM(3)> arrays.
+
+The OSSL_PARAM_DEFN() macro provides the ability to construct a single
+L<OSSL_PARAM(3)> (typically used in the construction of B<OSSL_PARAM> arrays). The
+I<key>, I<type>, I<addr> and I<sz> arguments correspond to the I<key>,
+I<data_type>, I<data> and I<data_size> fields of the L<OSSL_PARAM(3)> structure as
+described on the L<OSSL_PARAM(3)> page.
 
-OSSL_PARAM_construct_TYPE() are a series of functions that create OSSL_PARAM
+OSSL_PARAM_construct_TYPE() are a series of functions that create L<OSSL_PARAM(3)>
 records dynamically.
 A parameter with name I<key> is created.
 The parameter will use storage pointed to by I<buf> and return size of I<ret>.
 
 OSSL_PARAM_construct_BN() is a function that constructs a large integer
-OSSL_PARAM structure.
+L<OSSL_PARAM(3)> structure.
 A parameter with name I<key>, storage I<buf>, size I<bsize> and return
 size I<rsize> is created.
 
 OSSL_PARAM_construct_utf8_string() is a function that constructs a UTF8
-string OSSL_PARAM structure.
+string L<OSSL_PARAM(3)> structure.
 A parameter with name I<key>, storage I<buf> and size I<bsize> is created.
-If I<bsize> is zero, the string length is determined using strlen(3) + 1 for the
-null termination byte.
+If I<bsize> is zero, the string length is determined using strlen(3).
 Generally pass zero for I<bsize> instead of calling strlen(3) yourself.
 
 OSSL_PARAM_construct_octet_string() is a function that constructs an OCTET
-string OSSL_PARAM structure.
+string L<OSSL_PARAM(3)> structure.
 A parameter with name I<key>, storage I<buf> and size I<bsize> is created.
 
-OSSL_PARAM_construct_utf8_ptr() is a function that constructs a UTF string
-pointer OSSL_PARAM structure.
+OSSL_PARAM_construct_utf8_ptr() is a function that constructs a UTF8 string
+pointer L<OSSL_PARAM(3)> structure.
 A parameter with name I<key>, storage pointer I<*buf> and size I<bsize>
 is created.
 
 OSSL_PARAM_construct_octet_ptr() is a function that constructs an OCTET string
-pointer OSSL_PARAM structure.
+pointer L<OSSL_PARAM(3)> structure.
 A parameter with name I<key>, storage pointer I<*buf> and size I<bsize>
 is created.
 
 OSSL_PARAM_construct_end() is a function that constructs the terminating
-OSSL_PARAM structure.
+L<OSSL_PARAM(3)> structure.
 
 OSSL_PARAM_locate() is a function that searches an I<array> of parameters for
 the one matching the I<key> name.
@@ -232,15 +240,24 @@ will be assigned the size the parameter's I<data> buffer should have.
 
 OSSL_PARAM_get_utf8_string() retrieves a UTF8 string from the parameter
 pointed to by I<p>.
-The string is either stored into I<*val> with a length limit of I<max_len> or,
-in the case when I<*val> is NULL, memory is allocated for the string and
-I<max_len> is ignored.
+The string is stored into I<*val> with a size limit of I<max_len>,
+which must be large enough to accommodate a terminating NUL byte,
+otherwise this function will fail.
+If I<*val> is NULL, memory is allocated for the string (including the
+terminating  NUL byte) and I<max_len> is ignored.
 If memory is allocated by this function, it must be freed by the caller.
 
 OSSL_PARAM_set_utf8_string() sets a UTF8 string from the parameter pointed to
 by I<p> to the value referenced by I<val>.
+If the parameter's I<data> field isn't NULL, its I<data_size> must indicate
+that the buffer is large enough to accommodate the string that I<val> points at,
+not including the terminating NUL byte, or this function will fail.
+A terminating NUL byte is added only if the parameter's I<data_size> indicates
+the buffer is longer than the string length, otherwise the string will not be
+NUL terminated.
 If the parameter's I<data> field is NULL, then only its I<return_size> field
-will be assigned the size the parameter's I<data> buffer should have.
+will be assigned the minimum size the parameter's I<data> buffer should have
+to accommodate the string, not including a terminating NUL byte.
 
 OSSL_PARAM_get_octet_string() retrieves an OCTET string from the parameter
 pointed to by I<p>.
@@ -297,10 +314,10 @@ in the array I<params>.
 OSSL_PARAM_construct_TYPE(), OSSL_PARAM_construct_BN(),
 OSSL_PARAM_construct_utf8_string(), OSSL_PARAM_construct_octet_string(),
 OSSL_PARAM_construct_utf8_ptr() and OSSL_PARAM_construct_octet_ptr()
-return a populated OSSL_PARAM structure.
+return a populated L<OSSL_PARAM(3)> structure.
 
 OSSL_PARAM_locate() and OSSL_PARAM_locate_const() return a pointer to
-the matching OSSL_PARAM object.  They return NULL on error or when
+the matching L<OSSL_PARAM(3)> object.  They return NULL on error or when
 no object matching I<key> exists in the I<array>.
 
 OSSL_PARAM_modified() returns 1 if the parameter was set and 0 otherwise.
@@ -314,8 +331,13 @@ representable by the target type or parameter.
 Apart from that, the functions must be used appropriately for the
 expected type of the parameter.
 
+OSSL_PARAM_get_BN() and OSSL_PARAM_set_BN() only support nonnegative
+B<BIGNUM>s when the desired data type is B<OSSL_PARAM_UNSIGNED_INTEGER>.
+OSSL_PARAM_construct_BN() currently constructs an L<OSSL_PARAM(3)> structure
+with the data type B<OSSL_PARAM_UNSIGNED_INTEGER>.
+
 For OSSL_PARAM_construct_utf8_ptr() and OSSL_PARAM_consstruct_octet_ptr(),
-I<bsize> is not relevant if the purpose is to send the B<OSSL_PARAM> array
+I<bsize> is not relevant if the purpose is to send the L<OSSL_PARAM(3)> array
 to a I<responder>, i.e. to get parameter data back.
 In that case, I<bsize> can safely be given zero.
 See L<OSSL_PARAM(3)/DESCRIPTION> for further information on the
@@ -324,7 +346,7 @@ possible purposes.
 =head1 EXAMPLES
 
 Reusing the examples from L<OSSL_PARAM(3)> to just show how
-C<OSSL_PARAM> arrays can be handled using the macros and functions
+L<OSSL_PARAM(3)> arrays can be handled using the macros and functions
 defined herein.
 
 =head2 Example 1
@@ -334,11 +356,11 @@ This example is for setting parameters on some object:
     #include <openssl/core.h>
 
     const char *foo = "some string";
-    size_t foo_l = strlen(foo) + 1;
+    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)),
+        OSSL_PARAM_utf8_string("bar", bar, sizeof(bar) - 1),
         OSSL_PARAM_END
     };
 
@@ -366,7 +388,7 @@ could fill in the parameters like this:
     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_ptr(p, "bar value");
+        OSSL_PARAM_set_utf8_string(p, "bar value");
     if ((p = OSSL_PARAM_locate(params, "cookie")) != NULL)
         OSSL_PARAM_set_utf8_ptr(p, "cookie value");
 
@@ -380,7 +402,7 @@ These APIs were introduced in OpenSSL 3.0.
 
 =head1 COPYRIGHT
 
-Copyright 2019-2020 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved.
 
 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