]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/man3/OSSL_PARAM_BLD.pod
Replace OSSL_PARAM_BLD_free_params() with OSSL_PARAM_free().
[thirdparty/openssl.git] / doc / man3 / OSSL_PARAM_BLD.pod
CommitLineData
3c93fbac
P
1=pod
2
3=head1 NAME
4
20c98cd4 5OSSL_PARAM_BLD, OSSL_PARAM_BLD_new, OSSL_PARAM_BLD_to_param,
3f883c7c 6OSSL_PARAM_BLD_free, OSSL_PARAM_BLD_push_int,
20c98cd4
P
7OSSL_PARAM_BLD_push_uint, OSSL_PARAM_BLD_push_long,
8OSSL_PARAM_BLD_push_ulong, OSSL_PARAM_BLD_push_int32,
9OSSL_PARAM_BLD_push_uint32, OSSL_PARAM_BLD_push_int64,
10OSSL_PARAM_BLD_push_uint64, OSSL_PARAM_BLD_push_size_t,
dc4e74ef
P
11OSSL_PARAM_BLD_push_time_t, OSSL_PARAM_BLD_push_double,
12OSSL_PARAM_BLD_push_BN, OSSL_PARAM_BLD_push_BN_pad,
13OSSL_PARAM_BLD_push_utf8_string, OSSL_PARAM_BLD_push_utf8_ptr,
14OSSL_PARAM_BLD_push_octet_string, OSSL_PARAM_BLD_push_octet_ptr
3c93fbac
P
15- functions to assist in the creation of OSSL_PARAM arrays
16
17=head1 SYNOPSIS
18
bb82531f 19=for openssl generic
3c93fbac 20
879365e6 21 #include <openssl/param_build.h>
3c93fbac 22
6d4e6009 23 typedef struct OSSL_PARAM_BLD;
3c93fbac 24
6d4e6009 25 OSSL_PARAM_BLD *OSSL_PARAM_BLD_new(void);
110bff61 26 OSSL_PARAM *OSSL_PARAM_BLD_to_param(OSSL_PARAM_BLD *bld);
be19d3ca 27 void OSSL_PARAM_BLD_free(OSSL_PARAM_BLD *bld);
3c93fbac 28
110bff61 29 int OSSL_PARAM_BLD_push_TYPE(OSSL_PARAM_BLD *bld, const char *key, TYPE val);
3c93fbac 30
110bff61 31 int OSSL_PARAM_BLD_push_BN(OSSL_PARAM_BLD *bld, const char *key,
3c93fbac 32 const BIGNUM *bn);
110bff61 33 int OSSL_PARAM_BLD_push_BN_pad(OSSL_PARAM_BLD *bld, const char *key,
ac23078b 34 const BIGNUM *bn, size_t sz);
3c93fbac 35
110bff61 36 int OSSL_PARAM_BLD_push_utf8_string(OSSL_PARAM_BLD *bld, const char *key,
5fa7789f 37 const char *buf, size_t bsize);
110bff61 38 int OSSL_PARAM_BLD_push_utf8_ptr(OSSL_PARAM_BLD *bld, const char *key,
3c93fbac 39 char *buf, size_t bsize);
110bff61 40 int OSSL_PARAM_BLD_push_octet_string(OSSL_PARAM_BLD *bld, const char *key,
5fa7789f 41 const void *buf, size_t bsize);
110bff61 42 int OSSL_PARAM_BLD_push_octet_ptr(OSSL_PARAM_BLD *bld, const char *key,
3c93fbac
P
43 void *buf, size_t bsize);
44
45
46=head1 DESCRIPTION
47
48A collection of utility functions that simplify the creation of OSSL_PARAM
bbecf04e 49arrays. The B<I<TYPE>> names are as per L<OSSL_PARAM_int(3)>.
3c93fbac 50
6d4e6009
P
51OSSL_PARAM_BLD_new() allocates and initialises a new OSSL_PARAM_BLD structure
52so that values can be added.
3c93fbac
P
53Any existing values are cleared.
54
be19d3ca
P
55OSSL_PARAM_BLD_free() deallocates the memory allocates by OSSL_PARAM_BLD_new().
56
110bff61 57OSSL_PARAM_BLD_to_param() converts a built up OSSL_PARAM_BLD structure
dfabee82 58I<bld> into an allocated OSSL_PARAM array.
7312ef3f 59The OSSL_PARAM array and all associated storage must be freed by calling
3f883c7c 60OSSL_PARAM_free() with the functions return value.
be19d3ca 61OSSL_PARAM_BLD_free() can safely be called any time after this function is.
7312ef3f 62
c18d2d94
RL
63=begin comment
64
65POD is pretty good at recognising function names and making them appropriately
66bold... however, when part of the function name is variable, we have to help
67the processor along
68
69=end comment
70
110bff61 71B<OSSL_PARAM_BLD_push_I<TYPE>>() are a series of functions which will create
dfabee82 72OSSL_PARAM objects of the specified size and correct type for the I<val>
3c93fbac 73argument.
dfabee82 74I<val> is stored by value and an expression or auto variable can be used.
3c93fbac 75
110bff61 76OSSL_PARAM_BLD_push_BN() is a function that will create an OSSL_PARAM object
dfabee82 77that holds the specified BIGNUM I<bn>.
af61cbca 78If I<bn> is marked as being securely allocated, its OSSL_PARAM representation
7312ef3f 79will also be securely allocated.
dfabee82 80The I<bn> argument is stored by reference and the underlying BIGNUM object
110bff61 81must exist until after OSSL_PARAM_BLD_to_param() has been called.
3c93fbac 82
110bff61 83OSSL_PARAM_BLD_push_BN_pad() is a function that will create an OSSL_PARAM object
ac23078b
P
84that holds the specified BIGNUM I<bn>.
85The object will be padded to occupy exactly I<sz> bytes, if insufficient space
86is specified an error results.
af61cbca 87If I<bn> is marked as being securely allocated, its OSSL_PARAM representation
ac23078b
P
88will also be securely allocated.
89The I<bn> argument is stored by reference and the underlying BIGNUM object
110bff61 90must exist until after OSSL_PARAM_BLD_to_param() has been called.
ac23078b 91
110bff61 92OSSL_PARAM_BLD_push_utf8_string() is a function that will create an OSSL_PARAM
dfabee82
RL
93object that references the UTF8 string specified by I<buf>.
94If the length of the string, I<bsize>, is zero then it will be calculated.
95The string that I<buf> points to is stored by reference and must remain in
110bff61 96scope until after OSSL_PARAM_BLD_to_param() has been called.
3c93fbac 97
110bff61 98OSSL_PARAM_BLD_push_octet_string() is a function that will create an OSSL_PARAM
dfabee82
RL
99object that references the octet string specified by I<buf> and <bsize>.
100The memory that I<buf> points to is stored by reference and must remain in
110bff61 101scope until after OSSL_PARAM_BLD_to_param() has been called.
3c93fbac 102
110bff61 103OSSL_PARAM_BLD_push_utf8_ptr() is a function that will create an OSSL_PARAM
dfabee82
RL
104object that references the UTF8 string specified by I<buf>.
105If the length of the string, I<bsize>, is zero then it will be calculated.
106The string I<buf> points to is stored by reference and must remain in
3c93fbac
P
107scope until the OSSL_PARAM array is freed.
108
110bff61 109OSSL_PARAM_BLD_push_octet_ptr() is a function that will create an OSSL_PARAM
dfabee82
RL
110object that references the octet string specified by I<buf>.
111The memory I<buf> points to is stored by reference and must remain in
3c93fbac
P
112scope until the OSSL_PARAM array is freed.
113
114=head1 RETURN VALUES
115
6d4e6009
P
116OSSL_PARAM_BLD_new() returns the allocated OSSL_PARAM_BLD structure, or NULL
117on error.
118
110bff61 119OSSL_PARAM_BLD_to_param() returns the allocated OSSL_PARAM array, or NULL
903f5820 120on error.
3c93fbac 121
110bff61 122All of the OSSL_PARAM_BLD_push_TYPE functions return 1 on success and 0
3c93fbac
P
123on error.
124
3c93fbac
P
125=head1 EXAMPLES
126
127Both examples creating an OSSL_PARAM array that contains an RSA key.
128For both, the predefined key variables are:
129
130 BIGNUM *p, *q; /* both prime */
131 BIGNUM *n; /* = p * q */
132 unsigned int e; /* exponent, usually 65537 */
133 BIGNUM *d; /* e^-1 */
134
135=head2 Example 1
136
137This example shows how to create an OSSL_PARAM array that contains an RSA
138private key.
139
6d4e6009 140 OSSL_PARAM_BLD *bld = OSSL_PARAM_BLD_new();
3c93fbac 141 OSSL_PARAM *params;
3c93fbac 142
6d4e6009
P
143 if (bld == NULL
144 || !OSSL_PARAM_BLD_push_BN(&bld, "p", p)
110bff61
P
145 || !OSSL_PARAM_BLD_push_BN(&bld, "q", q)
146 || !OSSL_PARAM_BLD_push_uint(&bld, "e", e)
147 || !OSSL_PARAM_BLD_push_BN(&bld, "n", n)
148 || !OSSL_PARAM_BLD_push_BN(&bld, "d", d)
149 || (params = OSSL_PARAM_BLD_to_param(&bld)) == NULL)
3c93fbac 150 goto err;
be19d3ca 151 OSSL_PARAM_BLD_free(bld);
3c93fbac
P
152 /* Use params */
153 ...
3f883c7c 154 OSSL_PARAM_free(params);
3c93fbac
P
155
156=head2 Example 2
157
158This example shows how to create an OSSL_PARAM array that contains an RSA
159public key.
160
6d4e6009 161 OSSL_PARAM_BLD *bld = OSSL_PARAM_BLD_new();
3c93fbac 162 OSSL_PARAM *params;
3c93fbac 163
6d4e6009
P
164 if (nld == NULL
165 || !OSSL_PARAM_BLD_push_BN(bld, "n", n)
166 || !OSSL_PARAM_BLD_push_BN(bld, "d", d)
167 || (params = OSSL_PARAM_BLD_to_param(bld)) == NULL)
3c93fbac 168 goto err;
be19d3ca 169 OSSL_PARAM_BLD_free(bld);
3c93fbac
P
170 /* Use params */
171 ...
3f883c7c 172 OSSL_PARAM_free(params);
3c93fbac
P
173
174=head1 SEE ALSO
175
3f883c7c 176L<OSSL_PARAM_int(3)>, L<OSSL_PARAM(3)>, L<OSSL_PARAM_free(3)>
3c93fbac
P
177
178=head1 HISTORY
179
180The functions described here were all added in OpenSSL 3.0.
181
182=head1 COPYRIGHT
183
4333b89f 184Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
3c93fbac
P
185
186Licensed under the Apache License 2.0 (the "License"). You may not use
187this file except in compliance with the License. You can obtain a copy
188in the file LICENSE in the source distribution or at
189L<https://www.openssl.org/source/license.html>.
190
191=cut