1 | =pod
|
---|
2 |
|
---|
3 | =head1 NAME
|
---|
4 |
|
---|
5 | EVP_PKEY_CTX_ctrl,
|
---|
6 | EVP_PKEY_CTX_ctrl_str,
|
---|
7 | EVP_PKEY_CTX_ctrl_uint64,
|
---|
8 | EVP_PKEY_CTX_md,
|
---|
9 | EVP_PKEY_CTX_set_signature_md,
|
---|
10 | EVP_PKEY_CTX_get_signature_md,
|
---|
11 | EVP_PKEY_CTX_set_mac_key,
|
---|
12 | EVP_PKEY_CTX_set_rsa_padding,
|
---|
13 | EVP_PKEY_CTX_get_rsa_padding,
|
---|
14 | EVP_PKEY_CTX_set_rsa_pss_saltlen,
|
---|
15 | EVP_PKEY_CTX_get_rsa_pss_saltlen,
|
---|
16 | EVP_PKEY_CTX_set_rsa_keygen_bits,
|
---|
17 | EVP_PKEY_CTX_set_rsa_keygen_pubexp,
|
---|
18 | EVP_PKEY_CTX_set_rsa_keygen_primes,
|
---|
19 | EVP_PKEY_CTX_set_rsa_mgf1_md,
|
---|
20 | EVP_PKEY_CTX_get_rsa_mgf1_md,
|
---|
21 | EVP_PKEY_CTX_set_rsa_oaep_md,
|
---|
22 | EVP_PKEY_CTX_get_rsa_oaep_md,
|
---|
23 | EVP_PKEY_CTX_set0_rsa_oaep_label,
|
---|
24 | EVP_PKEY_CTX_get0_rsa_oaep_label,
|
---|
25 | EVP_PKEY_CTX_set_dsa_paramgen_bits,
|
---|
26 | EVP_PKEY_CTX_set_dsa_paramgen_q_bits,
|
---|
27 | EVP_PKEY_CTX_set_dsa_paramgen_md,
|
---|
28 | EVP_PKEY_CTX_set_dh_paramgen_prime_len,
|
---|
29 | EVP_PKEY_CTX_set_dh_paramgen_subprime_len,
|
---|
30 | EVP_PKEY_CTX_set_dh_paramgen_generator,
|
---|
31 | EVP_PKEY_CTX_set_dh_paramgen_type,
|
---|
32 | EVP_PKEY_CTX_set_dh_rfc5114,
|
---|
33 | EVP_PKEY_CTX_set_dhx_rfc5114,
|
---|
34 | EVP_PKEY_CTX_set_dh_pad,
|
---|
35 | EVP_PKEY_CTX_set_dh_nid,
|
---|
36 | EVP_PKEY_CTX_set_dh_kdf_type,
|
---|
37 | EVP_PKEY_CTX_get_dh_kdf_type,
|
---|
38 | EVP_PKEY_CTX_set0_dh_kdf_oid,
|
---|
39 | EVP_PKEY_CTX_get0_dh_kdf_oid,
|
---|
40 | EVP_PKEY_CTX_set_dh_kdf_md,
|
---|
41 | EVP_PKEY_CTX_get_dh_kdf_md,
|
---|
42 | EVP_PKEY_CTX_set_dh_kdf_outlen,
|
---|
43 | EVP_PKEY_CTX_get_dh_kdf_outlen,
|
---|
44 | EVP_PKEY_CTX_set0_dh_kdf_ukm,
|
---|
45 | EVP_PKEY_CTX_get0_dh_kdf_ukm,
|
---|
46 | EVP_PKEY_CTX_set_ec_paramgen_curve_nid,
|
---|
47 | EVP_PKEY_CTX_set_ec_param_enc,
|
---|
48 | EVP_PKEY_CTX_set_ecdh_cofactor_mode,
|
---|
49 | EVP_PKEY_CTX_get_ecdh_cofactor_mode,
|
---|
50 | EVP_PKEY_CTX_set_ecdh_kdf_type,
|
---|
51 | EVP_PKEY_CTX_get_ecdh_kdf_type,
|
---|
52 | EVP_PKEY_CTX_set_ecdh_kdf_md,
|
---|
53 | EVP_PKEY_CTX_get_ecdh_kdf_md,
|
---|
54 | EVP_PKEY_CTX_set_ecdh_kdf_outlen,
|
---|
55 | EVP_PKEY_CTX_get_ecdh_kdf_outlen,
|
---|
56 | EVP_PKEY_CTX_set0_ecdh_kdf_ukm,
|
---|
57 | EVP_PKEY_CTX_get0_ecdh_kdf_ukm,
|
---|
58 | EVP_PKEY_CTX_set1_id, EVP_PKEY_CTX_get1_id, EVP_PKEY_CTX_get1_id_len
|
---|
59 | - algorithm specific control operations
|
---|
60 |
|
---|
61 | =head1 SYNOPSIS
|
---|
62 |
|
---|
63 | #include <openssl/evp.h>
|
---|
64 |
|
---|
65 | int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype,
|
---|
66 | int cmd, int p1, void *p2);
|
---|
67 | int EVP_PKEY_CTX_ctrl_uint64(EVP_PKEY_CTX *ctx, int keytype, int optype,
|
---|
68 | int cmd, uint64_t value);
|
---|
69 | int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type,
|
---|
70 | const char *value);
|
---|
71 |
|
---|
72 | int EVP_PKEY_CTX_md(EVP_PKEY_CTX *ctx, int optype, int cmd, const char *md);
|
---|
73 |
|
---|
74 | int EVP_PKEY_CTX_set_signature_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
|
---|
75 | int EVP_PKEY_CTX_get_signature_md(EVP_PKEY_CTX *ctx, const EVP_MD **pmd);
|
---|
76 |
|
---|
77 | int EVP_PKEY_CTX_set_mac_key(EVP_PKEY_CTX *ctx, unsigned char *key, int len);
|
---|
78 |
|
---|
79 | #include <openssl/rsa.h>
|
---|
80 |
|
---|
81 | int EVP_PKEY_CTX_set_rsa_padding(EVP_PKEY_CTX *ctx, int pad);
|
---|
82 | int EVP_PKEY_CTX_get_rsa_padding(EVP_PKEY_CTX *ctx, int *pad);
|
---|
83 | int EVP_PKEY_CTX_set_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int len);
|
---|
84 | int EVP_PKEY_CTX_get_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int *len);
|
---|
85 | int EVP_PKEY_CTX_set_rsa_keygen_bits(EVP_PKEY_CTX *ctx, int mbits);
|
---|
86 | int EVP_PKEY_CTX_set_rsa_keygen_pubexp(EVP_PKEY_CTX *ctx, BIGNUM *pubexp);
|
---|
87 | int EVP_PKEY_CTX_set_rsa_keygen_primes(EVP_PKEY_CTX *ctx, int primes);
|
---|
88 | int EVP_PKEY_CTX_set_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
|
---|
89 | int EVP_PKEY_CTX_get_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD **md);
|
---|
90 | int EVP_PKEY_CTX_set_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
|
---|
91 | int EVP_PKEY_CTX_get_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD **md);
|
---|
92 | int EVP_PKEY_CTX_set0_rsa_oaep_label(EVP_PKEY_CTX *ctx, unsigned char *label, int len);
|
---|
93 | int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx, unsigned char **label);
|
---|
94 |
|
---|
95 | #include <openssl/dsa.h>
|
---|
96 |
|
---|
97 | int EVP_PKEY_CTX_set_dsa_paramgen_bits(EVP_PKEY_CTX *ctx, int nbits);
|
---|
98 | int EVP_PKEY_CTX_set_dsa_paramgen_q_bits(EVP_PKEY_CTX *ctx, int qbits);
|
---|
99 | int EVP_PKEY_CTX_set_dsa_paramgen_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
|
---|
100 |
|
---|
101 | #include <openssl/dh.h>
|
---|
102 |
|
---|
103 | int EVP_PKEY_CTX_set_dh_paramgen_prime_len(EVP_PKEY_CTX *ctx, int len);
|
---|
104 | int EVP_PKEY_CTX_set_dh_paramgen_subprime_len(EVP_PKEY_CTX *ctx, int len);
|
---|
105 | int EVP_PKEY_CTX_set_dh_paramgen_generator(EVP_PKEY_CTX *ctx, int gen);
|
---|
106 | int EVP_PKEY_CTX_set_dh_paramgen_type(EVP_PKEY_CTX *ctx, int type);
|
---|
107 | int EVP_PKEY_CTX_set_dh_pad(EVP_PKEY_CTX *ctx, int pad);
|
---|
108 | int EVP_PKEY_CTX_set_dh_nid(EVP_PKEY_CTX *ctx, int nid);
|
---|
109 | int EVP_PKEY_CTX_set_dh_rfc5114(EVP_PKEY_CTX *ctx, int rfc5114);
|
---|
110 | int EVP_PKEY_CTX_set_dhx_rfc5114(EVP_PKEY_CTX *ctx, int rfc5114);
|
---|
111 | int EVP_PKEY_CTX_set_dh_kdf_type(EVP_PKEY_CTX *ctx, int kdf);
|
---|
112 | int EVP_PKEY_CTX_get_dh_kdf_type(EVP_PKEY_CTX *ctx);
|
---|
113 | int EVP_PKEY_CTX_set0_dh_kdf_oid(EVP_PKEY_CTX *ctx, ASN1_OBJECT *oid);
|
---|
114 | int EVP_PKEY_CTX_get0_dh_kdf_oid(EVP_PKEY_CTX *ctx, ASN1_OBJECT **oid);
|
---|
115 | int EVP_PKEY_CTX_set_dh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
|
---|
116 | int EVP_PKEY_CTX_get_dh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD **md);
|
---|
117 | int EVP_PKEY_CTX_set_dh_kdf_outlen(EVP_PKEY_CTX *ctx, int len);
|
---|
118 | int EVP_PKEY_CTX_get_dh_kdf_outlen(EVP_PKEY_CTX *ctx, int *len);
|
---|
119 | int EVP_PKEY_CTX_set0_dh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char *ukm, int len);
|
---|
120 | int EVP_PKEY_CTX_get0_dh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char **ukm);
|
---|
121 |
|
---|
122 | #include <openssl/ec.h>
|
---|
123 |
|
---|
124 | int EVP_PKEY_CTX_set_ec_paramgen_curve_nid(EVP_PKEY_CTX *ctx, int nid);
|
---|
125 | int EVP_PKEY_CTX_set_ec_param_enc(EVP_PKEY_CTX *ctx, int param_enc);
|
---|
126 | int EVP_PKEY_CTX_set_ecdh_cofactor_mode(EVP_PKEY_CTX *ctx, int cofactor_mode);
|
---|
127 | int EVP_PKEY_CTX_get_ecdh_cofactor_mode(EVP_PKEY_CTX *ctx);
|
---|
128 | int EVP_PKEY_CTX_set_ecdh_kdf_type(EVP_PKEY_CTX *ctx, int kdf);
|
---|
129 | int EVP_PKEY_CTX_get_ecdh_kdf_type(EVP_PKEY_CTX *ctx);
|
---|
130 | int EVP_PKEY_CTX_set_ecdh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
|
---|
131 | int EVP_PKEY_CTX_get_ecdh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD **md);
|
---|
132 | int EVP_PKEY_CTX_set_ecdh_kdf_outlen(EVP_PKEY_CTX *ctx, int len);
|
---|
133 | int EVP_PKEY_CTX_get_ecdh_kdf_outlen(EVP_PKEY_CTX *ctx, int *len);
|
---|
134 | int EVP_PKEY_CTX_set0_ecdh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char *ukm, int len);
|
---|
135 | int EVP_PKEY_CTX_get0_ecdh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char **ukm);
|
---|
136 |
|
---|
137 | int EVP_PKEY_CTX_set1_id(EVP_PKEY_CTX *ctx, void *id, size_t id_len);
|
---|
138 | int EVP_PKEY_CTX_get1_id(EVP_PKEY_CTX *ctx, void *id);
|
---|
139 | int EVP_PKEY_CTX_get1_id_len(EVP_PKEY_CTX *ctx, size_t *id_len);
|
---|
140 |
|
---|
141 | =head1 DESCRIPTION
|
---|
142 |
|
---|
143 | The function EVP_PKEY_CTX_ctrl() sends a control operation to the context
|
---|
144 | B<ctx>. The key type used must match B<keytype> if it is not -1. The parameter
|
---|
145 | B<optype> is a mask indicating which operations the control can be applied to.
|
---|
146 | The control command is indicated in B<cmd> and any additional arguments in
|
---|
147 | B<p1> and B<p2>.
|
---|
148 |
|
---|
149 | For B<cmd> = B<EVP_PKEY_CTRL_SET_MAC_KEY>, B<p1> is the length of the MAC key,
|
---|
150 | and B<p2> is MAC key. This is used by Poly1305, SipHash, HMAC and CMAC.
|
---|
151 |
|
---|
152 | Applications will not normally call EVP_PKEY_CTX_ctrl() directly but will
|
---|
153 | instead call one of the algorithm specific macros below.
|
---|
154 |
|
---|
155 | The function EVP_PKEY_CTX_ctrl_uint64() is a wrapper that directly passes a
|
---|
156 | uint64 value as B<p2> to EVP_PKEY_CTX_ctrl().
|
---|
157 |
|
---|
158 | The function EVP_PKEY_CTX_ctrl_str() allows an application to send an algorithm
|
---|
159 | specific control operation to a context B<ctx> in string form. This is
|
---|
160 | intended to be used for options specified on the command line or in text
|
---|
161 | files. The commands supported are documented in the openssl utility
|
---|
162 | command line pages for the option B<-pkeyopt> which is supported by the
|
---|
163 | B<pkeyutl>, B<genpkey> and B<req> commands.
|
---|
164 |
|
---|
165 | The function EVP_PKEY_CTX_md() sends a message digest control operation
|
---|
166 | to the context B<ctx>. The message digest is specified by its name B<md>.
|
---|
167 |
|
---|
168 | All the remaining "functions" are implemented as macros.
|
---|
169 |
|
---|
170 | The EVP_PKEY_CTX_set_signature_md() macro sets the message digest type used
|
---|
171 | in a signature. It can be used in the RSA, DSA and ECDSA algorithms.
|
---|
172 |
|
---|
173 | The EVP_PKEY_CTX_get_signature_md() macro gets the message digest type used in a
|
---|
174 | signature. It can be used in the RSA, DSA and ECDSA algorithms.
|
---|
175 |
|
---|
176 | Key generation typically involves setting up parameters to be used and
|
---|
177 | generating the private and public key data. Some algorithm implementations
|
---|
178 | allow private key data to be set explicitly using the EVP_PKEY_CTX_set_mac_key()
|
---|
179 | macro. In this case key generation is simply the process of setting up the
|
---|
180 | parameters for the key and then setting the raw key data to the value explicitly
|
---|
181 | provided by that macro. Normally applications would call
|
---|
182 | L<EVP_PKEY_new_raw_private_key(3)> or similar functions instead of this macro.
|
---|
183 |
|
---|
184 | The EVP_PKEY_CTX_set_mac_key() macro can be used with any of the algorithms
|
---|
185 | supported by the L<EVP_PKEY_new_raw_private_key(3)> function.
|
---|
186 |
|
---|
187 | =head2 RSA parameters
|
---|
188 |
|
---|
189 | The EVP_PKEY_CTX_set_rsa_padding() macro sets the RSA padding mode for B<ctx>.
|
---|
190 | The B<pad> parameter can take the value B<RSA_PKCS1_PADDING> for PKCS#1
|
---|
191 | padding, B<RSA_SSLV23_PADDING> for SSLv23 padding, B<RSA_NO_PADDING> for
|
---|
192 | no padding, B<RSA_PKCS1_OAEP_PADDING> for OAEP padding (encrypt and
|
---|
193 | decrypt only), B<RSA_X931_PADDING> for X9.31 padding (signature operations
|
---|
194 | only) and B<RSA_PKCS1_PSS_PADDING> (sign and verify only).
|
---|
195 |
|
---|
196 | Two RSA padding modes behave differently if EVP_PKEY_CTX_set_signature_md()
|
---|
197 | is used. If this macro is called for PKCS#1 padding the plaintext buffer is
|
---|
198 | an actual digest value and is encapsulated in a DigestInfo structure according
|
---|
199 | to PKCS#1 when signing and this structure is expected (and stripped off) when
|
---|
200 | verifying. If this control is not used with RSA and PKCS#1 padding then the
|
---|
201 | supplied data is used directly and not encapsulated. In the case of X9.31
|
---|
202 | padding for RSA the algorithm identifier byte is added or checked and removed
|
---|
203 | if this control is called. If it is not called then the first byte of the plaintext
|
---|
204 | buffer is expected to be the algorithm identifier byte.
|
---|
205 |
|
---|
206 | The EVP_PKEY_CTX_get_rsa_padding() macro gets the RSA padding mode for B<ctx>.
|
---|
207 |
|
---|
208 | The EVP_PKEY_CTX_set_rsa_pss_saltlen() macro sets the RSA PSS salt length to
|
---|
209 | B<len>. As its name implies it is only supported for PSS padding. Three special
|
---|
210 | values are supported: B<RSA_PSS_SALTLEN_DIGEST> sets the salt length to the
|
---|
211 | digest length, B<RSA_PSS_SALTLEN_MAX> sets the salt length to the maximum
|
---|
212 | permissible value. When verifying B<RSA_PSS_SALTLEN_AUTO> causes the salt length
|
---|
213 | to be automatically determined based on the B<PSS> block structure. If this
|
---|
214 | macro is not called maximum salt length is used when signing and auto detection
|
---|
215 | when verifying is used by default.
|
---|
216 |
|
---|
217 | The EVP_PKEY_CTX_get_rsa_pss_saltlen() macro gets the RSA PSS salt length
|
---|
218 | for B<ctx>. The padding mode must have been set to B<RSA_PKCS1_PSS_PADDING>.
|
---|
219 |
|
---|
220 | The EVP_PKEY_CTX_set_rsa_keygen_bits() macro sets the RSA key length for
|
---|
221 | RSA key generation to B<bits>. If not specified 1024 bits is used.
|
---|
222 |
|
---|
223 | The EVP_PKEY_CTX_set_rsa_keygen_pubexp() macro sets the public exponent value
|
---|
224 | for RSA key generation to B<pubexp>. Currently it should be an odd integer. The
|
---|
225 | B<pubexp> pointer is used internally by this function so it should not be
|
---|
226 | modified or freed after the call. If not specified 65537 is used.
|
---|
227 |
|
---|
228 | The EVP_PKEY_CTX_set_rsa_keygen_primes() macro sets the number of primes for
|
---|
229 | RSA key generation to B<primes>. If not specified 2 is used.
|
---|
230 |
|
---|
231 | The EVP_PKEY_CTX_set_rsa_mgf1_md() macro sets the MGF1 digest for RSA padding
|
---|
232 | schemes to B<md>. If not explicitly set the signing digest is used. The
|
---|
233 | padding mode must have been set to B<RSA_PKCS1_OAEP_PADDING>
|
---|
234 | or B<RSA_PKCS1_PSS_PADDING>.
|
---|
235 |
|
---|
236 | The EVP_PKEY_CTX_get_rsa_mgf1_md() macro gets the MGF1 digest for B<ctx>.
|
---|
237 | If not explicitly set the signing digest is used. The padding mode must have
|
---|
238 | been set to B<RSA_PKCS1_OAEP_PADDING> or B<RSA_PKCS1_PSS_PADDING>.
|
---|
239 |
|
---|
240 | The EVP_PKEY_CTX_set_rsa_oaep_md() macro sets the message digest type used
|
---|
241 | in RSA OAEP to B<md>. The padding mode must have been set to
|
---|
242 | B<RSA_PKCS1_OAEP_PADDING>.
|
---|
243 |
|
---|
244 | The EVP_PKEY_CTX_get_rsa_oaep_md() macro gets the message digest type used
|
---|
245 | in RSA OAEP to B<md>. The padding mode must have been set to
|
---|
246 | B<RSA_PKCS1_OAEP_PADDING>.
|
---|
247 |
|
---|
248 | The EVP_PKEY_CTX_set0_rsa_oaep_label() macro sets the RSA OAEP label to
|
---|
249 | B<label> and its length to B<len>. If B<label> is NULL or B<len> is 0,
|
---|
250 | the label is cleared. The library takes ownership of the label so the
|
---|
251 | caller should not free the original memory pointed to by B<label>.
|
---|
252 | The padding mode must have been set to B<RSA_PKCS1_OAEP_PADDING>.
|
---|
253 |
|
---|
254 | The EVP_PKEY_CTX_get0_rsa_oaep_label() macro gets the RSA OAEP label to
|
---|
255 | B<label>. The return value is the label length. The padding mode
|
---|
256 | must have been set to B<RSA_PKCS1_OAEP_PADDING>. The resulting pointer is owned
|
---|
257 | by the library and should not be freed by the caller.
|
---|
258 |
|
---|
259 | =head2 DSA parameters
|
---|
260 |
|
---|
261 | The EVP_PKEY_CTX_set_dsa_paramgen_bits() macro sets the number of bits used
|
---|
262 | for DSA parameter generation to B<nbits>. If not specified, 1024 is used.
|
---|
263 |
|
---|
264 | The EVP_PKEY_CTX_set_dsa_paramgen_q_bits() macro sets the number of bits in the
|
---|
265 | subprime parameter B<q> for DSA parameter generation to B<qbits>. If not
|
---|
266 | specified, 160 is used. If a digest function is specified below, this parameter
|
---|
267 | is ignored and instead, the number of bits in B<q> matches the size of the
|
---|
268 | digest.
|
---|
269 |
|
---|
270 | The EVP_PKEY_CTX_set_dsa_paramgen_md() macro sets the digest function used for
|
---|
271 | DSA parameter generation to B<md>. If not specified, one of SHA-1, SHA-224, or
|
---|
272 | SHA-256 is selected to match the bit length of B<q> above.
|
---|
273 |
|
---|
274 | =head2 DH parameters
|
---|
275 |
|
---|
276 | The EVP_PKEY_CTX_set_dh_paramgen_prime_len() macro sets the length of the DH
|
---|
277 | prime parameter B<p> for DH parameter generation. If this macro is not called
|
---|
278 | then 1024 is used. Only accepts lengths greater than or equal to 256.
|
---|
279 |
|
---|
280 | The EVP_PKEY_CTX_set_dh_paramgen_subprime_len() macro sets the length of the DH
|
---|
281 | optional subprime parameter B<q> for DH parameter generation. The default is
|
---|
282 | 256 if the prime is at least 2048 bits long or 160 otherwise. The DH
|
---|
283 | paramgen type must have been set to x9.42.
|
---|
284 |
|
---|
285 | The EVP_PKEY_CTX_set_dh_paramgen_generator() macro sets DH generator to B<gen>
|
---|
286 | for DH parameter generation. If not specified 2 is used.
|
---|
287 |
|
---|
288 | The EVP_PKEY_CTX_set_dh_paramgen_type() macro sets the key type for DH
|
---|
289 | parameter generation. Use 0 for PKCS#3 DH and 1 for X9.42 DH.
|
---|
290 | The default is 0.
|
---|
291 |
|
---|
292 | The EVP_PKEY_CTX_set_dh_pad() macro sets the DH padding mode. If B<pad> is
|
---|
293 | 1 the shared secret is padded with zeros up to the size of the DH prime B<p>.
|
---|
294 | If B<pad> is zero (the default) then no padding is performed.
|
---|
295 |
|
---|
296 | EVP_PKEY_CTX_set_dh_nid() sets the DH parameters to values corresponding to
|
---|
297 | B<nid> as defined in RFC7919. The B<nid> parameter must be B<NID_ffdhe2048>,
|
---|
298 | B<NID_ffdhe3072>, B<NID_ffdhe4096>, B<NID_ffdhe6144>, B<NID_ffdhe8192>
|
---|
299 | or B<NID_undef> to clear the stored value. This macro can be called during
|
---|
300 | parameter or key generation.
|
---|
301 | The nid parameter and the rfc5114 parameter are mutually exclusive.
|
---|
302 |
|
---|
303 | The EVP_PKEY_CTX_set_dh_rfc5114() and EVP_PKEY_CTX_set_dhx_rfc5114() macros are
|
---|
304 | synonymous. They set the DH parameters to the values defined in RFC5114. The
|
---|
305 | B<rfc5114> parameter must be 1, 2 or 3 corresponding to RFC5114 sections
|
---|
306 | 2.1, 2.2 and 2.3. or 0 to clear the stored value. This macro can be called
|
---|
307 | during parameter generation. The B<ctx> must have a key type of
|
---|
308 | B<EVP_PKEY_DHX>.
|
---|
309 | The rfc5114 parameter and the nid parameter are mutually exclusive.
|
---|
310 |
|
---|
311 | =head2 DH key derivation function parameters
|
---|
312 |
|
---|
313 | Note that all of the following functions require that the B<ctx> parameter has
|
---|
314 | a private key type of B<EVP_PKEY_DHX>. When using key derivation, the output of
|
---|
315 | EVP_PKEY_derive() is the output of the KDF instead of the DH shared secret.
|
---|
316 | The KDF output is typically used as a Key Encryption Key (KEK) that in turn
|
---|
317 | encrypts a Content Encryption Key (CEK).
|
---|
318 |
|
---|
319 | The EVP_PKEY_CTX_set_dh_kdf_type() macro sets the key derivation function type
|
---|
320 | to B<kdf> for DH key derivation. Possible values are B<EVP_PKEY_DH_KDF_NONE>
|
---|
321 | and B<EVP_PKEY_DH_KDF_X9_42> which uses the key derivation specified in RFC2631
|
---|
322 | (based on the keying algorithm described in X9.42). When using key derivation,
|
---|
323 | the B<kdf_oid>, B<kdf_md> and B<kdf_outlen> parameters must also be specified.
|
---|
324 |
|
---|
325 | The EVP_PKEY_CTX_get_dh_kdf_type() macro gets the key derivation function type
|
---|
326 | for B<ctx> used for DH key derivation. Possible values are B<EVP_PKEY_DH_KDF_NONE>
|
---|
327 | and B<EVP_PKEY_DH_KDF_X9_42>.
|
---|
328 |
|
---|
329 | The EVP_PKEY_CTX_set0_dh_kdf_oid() macro sets the key derivation function
|
---|
330 | object identifier to B<oid> for DH key derivation. This OID should identify
|
---|
331 | the algorithm to be used with the Content Encryption Key.
|
---|
332 | The library takes ownership of the object identifier so the caller should not
|
---|
333 | free the original memory pointed to by B<oid>.
|
---|
334 |
|
---|
335 | The EVP_PKEY_CTX_get0_dh_kdf_oid() macro gets the key derivation function oid
|
---|
336 | for B<ctx> used for DH key derivation. The resulting pointer is owned by the
|
---|
337 | library and should not be freed by the caller.
|
---|
338 |
|
---|
339 | The EVP_PKEY_CTX_set_dh_kdf_md() macro sets the key derivation function
|
---|
340 | message digest to B<md> for DH key derivation. Note that RFC2631 specifies
|
---|
341 | that this digest should be SHA1 but OpenSSL tolerates other digests.
|
---|
342 |
|
---|
343 | The EVP_PKEY_CTX_get_dh_kdf_md() macro gets the key derivation function
|
---|
344 | message digest for B<ctx> used for DH key derivation.
|
---|
345 |
|
---|
346 | The EVP_PKEY_CTX_set_dh_kdf_outlen() macro sets the key derivation function
|
---|
347 | output length to B<len> for DH key derivation.
|
---|
348 |
|
---|
349 | The EVP_PKEY_CTX_get_dh_kdf_outlen() macro gets the key derivation function
|
---|
350 | output length for B<ctx> used for DH key derivation.
|
---|
351 |
|
---|
352 | The EVP_PKEY_CTX_set0_dh_kdf_ukm() macro sets the user key material to
|
---|
353 | B<ukm> and its length to B<len> for DH key derivation. This parameter is optional
|
---|
354 | and corresponds to the partyAInfo field in RFC2631 terms. The specification
|
---|
355 | requires that it is 512 bits long but this is not enforced by OpenSSL.
|
---|
356 | The library takes ownership of the user key material so the caller should not
|
---|
357 | free the original memory pointed to by B<ukm>.
|
---|
358 |
|
---|
359 | The EVP_PKEY_CTX_get0_dh_kdf_ukm() macro gets the user key material for B<ctx>.
|
---|
360 | The return value is the user key material length. The resulting pointer is owned
|
---|
361 | by the library and should not be freed by the caller.
|
---|
362 |
|
---|
363 | =head2 EC parameters
|
---|
364 |
|
---|
365 | The EVP_PKEY_CTX_set_ec_paramgen_curve_nid() sets the EC curve for EC parameter
|
---|
366 | generation to B<nid>. For EC parameter generation this macro must be called
|
---|
367 | or an error occurs because there is no default curve.
|
---|
368 | This function can also be called to set the curve explicitly when
|
---|
369 | generating an EC key.
|
---|
370 |
|
---|
371 | The EVP_PKEY_CTX_set_ec_param_enc() macro sets the EC parameter encoding to
|
---|
372 | B<param_enc> when generating EC parameters or an EC key. The encoding can be
|
---|
373 | B<OPENSSL_EC_EXPLICIT_CURVE> for explicit parameters (the default in versions
|
---|
374 | of OpenSSL before 1.1.0) or B<OPENSSL_EC_NAMED_CURVE> to use named curve form.
|
---|
375 | For maximum compatibility the named curve form should be used. Note: the
|
---|
376 | B<OPENSSL_EC_NAMED_CURVE> value was added in OpenSSL 1.1.0; previous
|
---|
377 | versions should use 0 instead.
|
---|
378 |
|
---|
379 | =head2 ECDH parameters
|
---|
380 |
|
---|
381 | The EVP_PKEY_CTX_set_ecdh_cofactor_mode() macro sets the cofactor mode to
|
---|
382 | B<cofactor_mode> for ECDH key derivation. Possible values are 1 to enable
|
---|
383 | cofactor key derivation, 0 to disable it and -1 to clear the stored cofactor
|
---|
384 | mode and fallback to the private key cofactor mode.
|
---|
385 |
|
---|
386 | The EVP_PKEY_CTX_get_ecdh_cofactor_mode() macro returns the cofactor mode for
|
---|
387 | B<ctx> used for ECDH key derivation. Possible values are 1 when cofactor key
|
---|
388 | derivation is enabled and 0 otherwise.
|
---|
389 |
|
---|
390 | =head2 ECDH key derivation function parameters
|
---|
391 |
|
---|
392 | The EVP_PKEY_CTX_set_ecdh_kdf_type() macro sets the key derivation function type
|
---|
393 | to B<kdf> for ECDH key derivation. Possible values are B<EVP_PKEY_ECDH_KDF_NONE>
|
---|
394 | and B<EVP_PKEY_ECDH_KDF_X9_63> which uses the key derivation specified in X9.63.
|
---|
395 | When using key derivation, the B<kdf_md> and B<kdf_outlen> parameters must
|
---|
396 | also be specified.
|
---|
397 |
|
---|
398 | The EVP_PKEY_CTX_get_ecdh_kdf_type() macro returns the key derivation function
|
---|
399 | type for B<ctx> used for ECDH key derivation. Possible values are
|
---|
400 | B<EVP_PKEY_ECDH_KDF_NONE> and B<EVP_PKEY_ECDH_KDF_X9_63>.
|
---|
401 |
|
---|
402 | The EVP_PKEY_CTX_set_ecdh_kdf_md() macro sets the key derivation function
|
---|
403 | message digest to B<md> for ECDH key derivation. Note that X9.63 specifies
|
---|
404 | that this digest should be SHA1 but OpenSSL tolerates other digests.
|
---|
405 |
|
---|
406 | The EVP_PKEY_CTX_get_ecdh_kdf_md() macro gets the key derivation function
|
---|
407 | message digest for B<ctx> used for ECDH key derivation.
|
---|
408 |
|
---|
409 | The EVP_PKEY_CTX_set_ecdh_kdf_outlen() macro sets the key derivation function
|
---|
410 | output length to B<len> for ECDH key derivation.
|
---|
411 |
|
---|
412 | The EVP_PKEY_CTX_get_ecdh_kdf_outlen() macro gets the key derivation function
|
---|
413 | output length for B<ctx> used for ECDH key derivation.
|
---|
414 |
|
---|
415 | The EVP_PKEY_CTX_set0_ecdh_kdf_ukm() macro sets the user key material to B<ukm>
|
---|
416 | for ECDH key derivation. This parameter is optional and corresponds to the
|
---|
417 | shared info in X9.63 terms. The library takes ownership of the user key material
|
---|
418 | so the caller should not free the original memory pointed to by B<ukm>.
|
---|
419 |
|
---|
420 | The EVP_PKEY_CTX_get0_ecdh_kdf_ukm() macro gets the user key material for B<ctx>.
|
---|
421 | The return value is the user key material length. The resulting pointer is owned
|
---|
422 | by the library and should not be freed by the caller.
|
---|
423 |
|
---|
424 | =head2 Other parameters
|
---|
425 |
|
---|
426 | The EVP_PKEY_CTX_set1_id(), EVP_PKEY_CTX_get1_id() and EVP_PKEY_CTX_get1_id_len()
|
---|
427 | macros are used to manipulate the special identifier field for specific signature
|
---|
428 | algorithms such as SM2. The EVP_PKEY_CTX_set1_id() sets an ID pointed by B<id> with
|
---|
429 | the length B<id_len> to the library. The library takes a copy of the id so that
|
---|
430 | the caller can safely free the original memory pointed to by B<id>. The
|
---|
431 | EVP_PKEY_CTX_get1_id_len() macro returns the length of the ID set via a previous
|
---|
432 | call to EVP_PKEY_CTX_set1_id(). The length is usually used to allocate adequate
|
---|
433 | memory for further calls to EVP_PKEY_CTX_get1_id(). The EVP_PKEY_CTX_get1_id()
|
---|
434 | macro returns the previously set ID value to caller in B<id>. The caller should
|
---|
435 | allocate adequate memory space for the B<id> before calling EVP_PKEY_CTX_get1_id().
|
---|
436 |
|
---|
437 | =head1 RETURN VALUES
|
---|
438 |
|
---|
439 | EVP_PKEY_CTX_ctrl() and its macros return a positive value for success and 0
|
---|
440 | or a negative value for failure. In particular a return value of -2
|
---|
441 | indicates the operation is not supported by the public key algorithm.
|
---|
442 |
|
---|
443 | =head1 SEE ALSO
|
---|
444 |
|
---|
445 | L<EVP_PKEY_CTX_new(3)>,
|
---|
446 | L<EVP_PKEY_encrypt(3)>,
|
---|
447 | L<EVP_PKEY_decrypt(3)>,
|
---|
448 | L<EVP_PKEY_sign(3)>,
|
---|
449 | L<EVP_PKEY_verify(3)>,
|
---|
450 | L<EVP_PKEY_verify_recover(3)>,
|
---|
451 | L<EVP_PKEY_derive(3)>,
|
---|
452 | L<EVP_PKEY_keygen(3)>
|
---|
453 |
|
---|
454 | =head1 HISTORY
|
---|
455 |
|
---|
456 | The
|
---|
457 | EVP_PKEY_CTX_set1_id(), EVP_PKEY_CTX_get1_id() and EVP_PKEY_CTX_get1_id_len()
|
---|
458 | macros were added in 1.1.1, other functions were added in OpenSSL 1.0.0.
|
---|
459 |
|
---|
460 | =head1 COPYRIGHT
|
---|
461 |
|
---|
462 | Copyright 2006-2020 The OpenSSL Project Authors. All Rights Reserved.
|
---|
463 |
|
---|
464 | Licensed under the OpenSSL license (the "License"). You may not use
|
---|
465 | this file except in compliance with the License. You can obtain a copy
|
---|
466 | in the file LICENSE in the source distribution or at
|
---|
467 | L<https://www.openssl.org/source/license.html>.
|
---|
468 |
|
---|
469 | =cut
|
---|