]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/man3/OSSL_PARAM_BLD_init.pod
Param builder: make the OSSL_PARAM_BLD APIs public.
[thirdparty/openssl.git] / doc / man3 / OSSL_PARAM_BLD_init.pod
CommitLineData
3c93fbac
P
1=pod
2
3=head1 NAME
4
110bff61
P
5OSSL_PARAM_BLD_init, OSSL_PARAM_BLD_to_param,
6OSSL_PARAM_BLD_free, OSSL_PARAM_BLD_push_int, OSSL_PARAM_BLD_push_uint,
7OSSL_PARAM_BLD_push_long, OSSL_PARAM_BLD_push_ulong,
8OSSL_PARAM_BLD_push_int32, OSSL_PARAM_BLD_push_uint32,
9OSSL_PARAM_BLD_push_int64, OSSL_PARAM_BLD_push_uint64,
10OSSL_PARAM_BLD_push_size_t, OSSL_PARAM_BLD_push_double,
11OSSL_PARAM_BLD_push_BN, OSSL_PARAM_BLD_push_BN_pad,
12OSSL_PARAM_BLD_push_utf8_string, OSSL_PARAM_BLD_push_utf8_ptr,
13OSSL_PARAM_BLD_push_octet_string, OSSL_PARAM_BLD_push_octet_ptr
3c93fbac
P
14- functions to assist in the creation of OSSL_PARAM arrays
15
16=head1 SYNOPSIS
17
bb82531f 18=for openssl generic
3c93fbac 19
110bff61 20 #include "openssl/param_build.h"
3c93fbac
P
21
22 #define OSSL_PARAM_BLD_MAX 10
23 typedef struct { ... } OSSL_PARAM_BLD;
24
110bff61
P
25 void OSSL_PARAM_BLD_init(OSSL_PARAM_BLD *bld);
26 OSSL_PARAM *OSSL_PARAM_BLD_to_param(OSSL_PARAM_BLD *bld);
27 void OSSL_PARAM_BLD_free(OSSL_PARAM *params);
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
110bff61 51OSSL_PARAM_BLD_init() initialises the OSSL_PARAM_BLD structure so that values
3c93fbac
P
52can be added.
53Any existing values are cleared.
54
110bff61 55OSSL_PARAM_BLD_to_param() converts a built up OSSL_PARAM_BLD structure
dfabee82 56I<bld> into an allocated OSSL_PARAM array.
7312ef3f 57The OSSL_PARAM array and all associated storage must be freed by calling
110bff61 58OSSL_PARAM_BLD_free() with the functions return value.
7312ef3f 59
110bff61
P
60OSSL_PARAM_BLD_free() deallocates the memory allocated by
61OSSL_PARAM_BLD_to_param().
3c93fbac 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
110bff61 116OSSL_PARAM_BLD_to_param() returns the allocated OSSL_PARAM array, or NULL
903f5820 117on error.
3c93fbac 118
110bff61 119All of the OSSL_PARAM_BLD_push_TYPE functions return 1 on success and 0
3c93fbac
P
120on error.
121
122=head1 NOTES
123
124The constant B<OSSL_PARAM_BLD_MAX> specifies the maximum number of parameters
125that can be added.
126Exceeding this will result in the push functions returning errors.
110bff61
P
127The define used for this will always be at least 10 but otherwise no assumption
128should be made about it's specific value.
3c93fbac
P
129
130The structure B<OSSL_PARAM_BLD> should be considered opaque and subject to
131change between versions.
132
133=head1 EXAMPLES
134
135Both examples creating an OSSL_PARAM array that contains an RSA key.
136For both, the predefined key variables are:
137
138 BIGNUM *p, *q; /* both prime */
139 BIGNUM *n; /* = p * q */
140 unsigned int e; /* exponent, usually 65537 */
141 BIGNUM *d; /* e^-1 */
142
143=head2 Example 1
144
145This example shows how to create an OSSL_PARAM array that contains an RSA
146private key.
147
148 OSSL_PARAM_BLD bld;
149 OSSL_PARAM *params;
3c93fbac 150
110bff61
P
151 OSSL_PARAM_BLD_init(&bld, &secure);
152 if (!OSSL_PARAM_BLD_push_BN(&bld, "p", p)
153 || !OSSL_PARAM_BLD_push_BN(&bld, "q", q)
154 || !OSSL_PARAM_BLD_push_uint(&bld, "e", e)
155 || !OSSL_PARAM_BLD_push_BN(&bld, "n", n)
156 || !OSSL_PARAM_BLD_push_BN(&bld, "d", d)
157 || (params = OSSL_PARAM_BLD_to_param(&bld)) == NULL)
3c93fbac
P
158 goto err;
159 /* Use params */
160 ...
110bff61 161 OSSL_PARAM_BLD_free(params);
3c93fbac
P
162
163=head2 Example 2
164
165This example shows how to create an OSSL_PARAM array that contains an RSA
166public key.
167
168 OSSL_PARAM_BLD bld;
169 OSSL_PARAM *params;
3c93fbac 170
110bff61
P
171 OSSL_PARAM_BLD_init(&bld, &secure);
172 if (!OSSL_PARAM_BLD_push_BN(&bld, "n", n)
173 || !OSSL_PARAM_BLD_push_BN(&bld, "d", d)
174 || (params = OSSL_PARAM_BLD_to_param(&bld)) == NULL)
3c93fbac
P
175 goto err;
176 /* Use params */
177 ...
110bff61 178 OSSL_PARAM_BLD_free(params);
3c93fbac
P
179
180=head1 SEE ALSO
181
6e4618a0 182L<OSSL_PARAM_int(3)>, L<OSSL_PARAM(3)>
3c93fbac
P
183
184=head1 HISTORY
185
186The functions described here were all added in OpenSSL 3.0.
187
188=head1 COPYRIGHT
189
190Copyright 2019 The OpenSSL Project Authors. All Rights Reserved.
191
192Licensed under the Apache License 2.0 (the "License"). You may not use
193this file except in compliance with the License. You can obtain a copy
194in the file LICENSE in the source distribution or at
195L<https://www.openssl.org/source/license.html>.
196
197=cut