]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - secure/lib/libcrypto/man/man3/EVP_PKEY_CTX_ctrl.3
Merge OpenSSL 1.1.1i.
[FreeBSD/FreeBSD.git] / secure / lib / libcrypto / man / man3 / EVP_PKEY_CTX_ctrl.3
1 .\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.41)
2 .\"
3 .\" Standard preamble:
4 .\" ========================================================================
5 .de Sp \" Vertical space (when we can't use .PP)
6 .if t .sp .5v
7 .if n .sp
8 ..
9 .de Vb \" Begin verbatim text
10 .ft CW
11 .nf
12 .ne \\$1
13 ..
14 .de Ve \" End verbatim text
15 .ft R
16 .fi
17 ..
18 .\" Set up some character translations and predefined strings.  \*(-- will
19 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
20 .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
21 .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
22 .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
23 .\" nothing in troff, for use with C<>.
24 .tr \(*W-
25 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
26 .ie n \{\
27 .    ds -- \(*W-
28 .    ds PI pi
29 .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
30 .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
31 .    ds L" ""
32 .    ds R" ""
33 .    ds C` ""
34 .    ds C' ""
35 'br\}
36 .el\{\
37 .    ds -- \|\(em\|
38 .    ds PI \(*p
39 .    ds L" ``
40 .    ds R" ''
41 .    ds C`
42 .    ds C'
43 'br\}
44 .\"
45 .\" Escape single quotes in literal strings from groff's Unicode transform.
46 .ie \n(.g .ds Aq \(aq
47 .el       .ds Aq '
48 .\"
49 .\" If the F register is >0, we'll generate index entries on stderr for
50 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
51 .\" entries marked with X<> in POD.  Of course, you'll have to process the
52 .\" output yourself in some meaningful fashion.
53 .\"
54 .\" Avoid warning from groff about undefined register 'F'.
55 .de IX
56 ..
57 .nr rF 0
58 .if \n(.g .if rF .nr rF 1
59 .if (\n(rF:(\n(.g==0)) \{\
60 .    if \nF \{\
61 .        de IX
62 .        tm Index:\\$1\t\\n%\t"\\$2"
63 ..
64 .        if !\nF==2 \{\
65 .            nr % 0
66 .            nr F 2
67 .        \}
68 .    \}
69 .\}
70 .rr rF
71 .\"
72 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
73 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
74 .    \" fudge factors for nroff and troff
75 .if n \{\
76 .    ds #H 0
77 .    ds #V .8m
78 .    ds #F .3m
79 .    ds #[ \f1
80 .    ds #] \fP
81 .\}
82 .if t \{\
83 .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
84 .    ds #V .6m
85 .    ds #F 0
86 .    ds #[ \&
87 .    ds #] \&
88 .\}
89 .    \" simple accents for nroff and troff
90 .if n \{\
91 .    ds ' \&
92 .    ds ` \&
93 .    ds ^ \&
94 .    ds , \&
95 .    ds ~ ~
96 .    ds /
97 .\}
98 .if t \{\
99 .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
100 .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
101 .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
102 .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
103 .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
104 .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
105 .\}
106 .    \" troff and (daisy-wheel) nroff accents
107 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
108 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
109 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
110 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
111 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
112 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
113 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
114 .ds ae a\h'-(\w'a'u*4/10)'e
115 .ds Ae A\h'-(\w'A'u*4/10)'E
116 .    \" corrections for vroff
117 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
118 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
119 .    \" for low resolution devices (crt and lpr)
120 .if \n(.H>23 .if \n(.V>19 \
121 \{\
122 .    ds : e
123 .    ds 8 ss
124 .    ds o a
125 .    ds d- d\h'-1'\(ga
126 .    ds D- D\h'-1'\(hy
127 .    ds th \o'bp'
128 .    ds Th \o'LP'
129 .    ds ae ae
130 .    ds Ae AE
131 .\}
132 .rm #[ #] #H #V #F C
133 .\" ========================================================================
134 .\"
135 .IX Title "EVP_PKEY_CTX_CTRL 3"
136 .TH EVP_PKEY_CTX_CTRL 3 "2020-12-08" "1.1.1i" "OpenSSL"
137 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
138 .\" way too many mistakes in technical documents.
139 .if n .ad l
140 .nh
141 .SH "NAME"
142 EVP_PKEY_CTX_ctrl, EVP_PKEY_CTX_ctrl_str, EVP_PKEY_CTX_ctrl_uint64, EVP_PKEY_CTX_md, EVP_PKEY_CTX_set_signature_md, EVP_PKEY_CTX_get_signature_md, EVP_PKEY_CTX_set_mac_key, EVP_PKEY_CTX_set_rsa_padding, EVP_PKEY_CTX_get_rsa_padding, EVP_PKEY_CTX_set_rsa_pss_saltlen, EVP_PKEY_CTX_get_rsa_pss_saltlen, EVP_PKEY_CTX_set_rsa_keygen_bits, EVP_PKEY_CTX_set_rsa_keygen_pubexp, EVP_PKEY_CTX_set_rsa_keygen_primes, EVP_PKEY_CTX_set_rsa_mgf1_md, EVP_PKEY_CTX_get_rsa_mgf1_md, EVP_PKEY_CTX_set_rsa_oaep_md, EVP_PKEY_CTX_get_rsa_oaep_md, EVP_PKEY_CTX_set0_rsa_oaep_label, EVP_PKEY_CTX_get0_rsa_oaep_label, EVP_PKEY_CTX_set_dsa_paramgen_bits, EVP_PKEY_CTX_set_dsa_paramgen_q_bits, EVP_PKEY_CTX_set_dsa_paramgen_md, EVP_PKEY_CTX_set_dh_paramgen_prime_len, EVP_PKEY_CTX_set_dh_paramgen_subprime_len, EVP_PKEY_CTX_set_dh_paramgen_generator, EVP_PKEY_CTX_set_dh_paramgen_type, EVP_PKEY_CTX_set_dh_rfc5114, EVP_PKEY_CTX_set_dhx_rfc5114, EVP_PKEY_CTX_set_dh_pad, EVP_PKEY_CTX_set_dh_nid, EVP_PKEY_CTX_set_dh_kdf_type, EVP_PKEY_CTX_get_dh_kdf_type, EVP_PKEY_CTX_set0_dh_kdf_oid, EVP_PKEY_CTX_get0_dh_kdf_oid, EVP_PKEY_CTX_set_dh_kdf_md, EVP_PKEY_CTX_get_dh_kdf_md, EVP_PKEY_CTX_set_dh_kdf_outlen, EVP_PKEY_CTX_get_dh_kdf_outlen, EVP_PKEY_CTX_set0_dh_kdf_ukm, EVP_PKEY_CTX_get0_dh_kdf_ukm, EVP_PKEY_CTX_set_ec_paramgen_curve_nid, EVP_PKEY_CTX_set_ec_param_enc, EVP_PKEY_CTX_set_ecdh_cofactor_mode, EVP_PKEY_CTX_get_ecdh_cofactor_mode, EVP_PKEY_CTX_set_ecdh_kdf_type, EVP_PKEY_CTX_get_ecdh_kdf_type, EVP_PKEY_CTX_set_ecdh_kdf_md, EVP_PKEY_CTX_get_ecdh_kdf_md, EVP_PKEY_CTX_set_ecdh_kdf_outlen, EVP_PKEY_CTX_get_ecdh_kdf_outlen, EVP_PKEY_CTX_set0_ecdh_kdf_ukm, EVP_PKEY_CTX_get0_ecdh_kdf_ukm, EVP_PKEY_CTX_set1_id, EVP_PKEY_CTX_get1_id, EVP_PKEY_CTX_get1_id_len \&\- algorithm specific control operations
143 .SH "SYNOPSIS"
144 .IX Header "SYNOPSIS"
145 .Vb 1
146 \& #include <openssl/evp.h>
147 \&
148 \& int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype,
149 \&                       int cmd, int p1, void *p2);
150 \& int EVP_PKEY_CTX_ctrl_uint64(EVP_PKEY_CTX *ctx, int keytype, int optype,
151 \&                              int cmd, uint64_t value);
152 \& int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type,
153 \&                           const char *value);
154 \&
155 \& int EVP_PKEY_CTX_md(EVP_PKEY_CTX *ctx, int optype, int cmd, const char *md);
156 \&
157 \& int EVP_PKEY_CTX_set_signature_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
158 \& int EVP_PKEY_CTX_get_signature_md(EVP_PKEY_CTX *ctx, const EVP_MD **pmd);
159 \&
160 \& int EVP_PKEY_CTX_set_mac_key(EVP_PKEY_CTX *ctx, unsigned char *key, int len);
161 \&
162 \& #include <openssl/rsa.h>
163 \&
164 \& int EVP_PKEY_CTX_set_rsa_padding(EVP_PKEY_CTX *ctx, int pad);
165 \& int EVP_PKEY_CTX_get_rsa_padding(EVP_PKEY_CTX *ctx, int *pad);
166 \& int EVP_PKEY_CTX_set_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int len);
167 \& int EVP_PKEY_CTX_get_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int *len);
168 \& int EVP_PKEY_CTX_set_rsa_keygen_bits(EVP_PKEY_CTX *ctx, int mbits);
169 \& int EVP_PKEY_CTX_set_rsa_keygen_pubexp(EVP_PKEY_CTX *ctx, BIGNUM *pubexp);
170 \& int EVP_PKEY_CTX_set_rsa_keygen_primes(EVP_PKEY_CTX *ctx, int primes);
171 \& int EVP_PKEY_CTX_set_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
172 \& int EVP_PKEY_CTX_get_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD **md);
173 \& int EVP_PKEY_CTX_set_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
174 \& int EVP_PKEY_CTX_get_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD **md);
175 \& int EVP_PKEY_CTX_set0_rsa_oaep_label(EVP_PKEY_CTX *ctx, unsigned char *label, int len);
176 \& int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx, unsigned char **label);
177 \&
178 \& #include <openssl/dsa.h>
179 \&
180 \& int EVP_PKEY_CTX_set_dsa_paramgen_bits(EVP_PKEY_CTX *ctx, int nbits);
181 \& int EVP_PKEY_CTX_set_dsa_paramgen_q_bits(EVP_PKEY_CTX *ctx, int qbits);
182 \& int EVP_PKEY_CTX_set_dsa_paramgen_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
183 \&
184 \& #include <openssl/dh.h>
185 \&
186 \& int EVP_PKEY_CTX_set_dh_paramgen_prime_len(EVP_PKEY_CTX *ctx, int len);
187 \& int EVP_PKEY_CTX_set_dh_paramgen_subprime_len(EVP_PKEY_CTX *ctx, int len);
188 \& int EVP_PKEY_CTX_set_dh_paramgen_generator(EVP_PKEY_CTX *ctx, int gen);
189 \& int EVP_PKEY_CTX_set_dh_paramgen_type(EVP_PKEY_CTX *ctx, int type);
190 \& int EVP_PKEY_CTX_set_dh_pad(EVP_PKEY_CTX *ctx, int pad);
191 \& int EVP_PKEY_CTX_set_dh_nid(EVP_PKEY_CTX *ctx, int nid);
192 \& int EVP_PKEY_CTX_set_dh_rfc5114(EVP_PKEY_CTX *ctx, int rfc5114);
193 \& int EVP_PKEY_CTX_set_dhx_rfc5114(EVP_PKEY_CTX *ctx, int rfc5114);
194 \& int EVP_PKEY_CTX_set_dh_kdf_type(EVP_PKEY_CTX *ctx, int kdf);
195 \& int EVP_PKEY_CTX_get_dh_kdf_type(EVP_PKEY_CTX *ctx);
196 \& int EVP_PKEY_CTX_set0_dh_kdf_oid(EVP_PKEY_CTX *ctx, ASN1_OBJECT *oid);
197 \& int EVP_PKEY_CTX_get0_dh_kdf_oid(EVP_PKEY_CTX *ctx, ASN1_OBJECT **oid);
198 \& int EVP_PKEY_CTX_set_dh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
199 \& int EVP_PKEY_CTX_get_dh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD **md);
200 \& int EVP_PKEY_CTX_set_dh_kdf_outlen(EVP_PKEY_CTX *ctx, int len);
201 \& int EVP_PKEY_CTX_get_dh_kdf_outlen(EVP_PKEY_CTX *ctx, int *len);
202 \& int EVP_PKEY_CTX_set0_dh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char *ukm, int len);
203 \& int EVP_PKEY_CTX_get0_dh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char **ukm);
204 \&
205 \& #include <openssl/ec.h>
206 \&
207 \& int EVP_PKEY_CTX_set_ec_paramgen_curve_nid(EVP_PKEY_CTX *ctx, int nid);
208 \& int EVP_PKEY_CTX_set_ec_param_enc(EVP_PKEY_CTX *ctx, int param_enc);
209 \& int EVP_PKEY_CTX_set_ecdh_cofactor_mode(EVP_PKEY_CTX *ctx, int cofactor_mode);
210 \& int EVP_PKEY_CTX_get_ecdh_cofactor_mode(EVP_PKEY_CTX *ctx);
211 \& int EVP_PKEY_CTX_set_ecdh_kdf_type(EVP_PKEY_CTX *ctx, int kdf);
212 \& int EVP_PKEY_CTX_get_ecdh_kdf_type(EVP_PKEY_CTX *ctx);
213 \& int EVP_PKEY_CTX_set_ecdh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
214 \& int EVP_PKEY_CTX_get_ecdh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD **md);
215 \& int EVP_PKEY_CTX_set_ecdh_kdf_outlen(EVP_PKEY_CTX *ctx, int len);
216 \& int EVP_PKEY_CTX_get_ecdh_kdf_outlen(EVP_PKEY_CTX *ctx, int *len);
217 \& int EVP_PKEY_CTX_set0_ecdh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char *ukm, int len);
218 \& int EVP_PKEY_CTX_get0_ecdh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char **ukm);
219 \&
220 \& int EVP_PKEY_CTX_set1_id(EVP_PKEY_CTX *ctx, void *id, size_t id_len);
221 \& int EVP_PKEY_CTX_get1_id(EVP_PKEY_CTX *ctx, void *id);
222 \& int EVP_PKEY_CTX_get1_id_len(EVP_PKEY_CTX *ctx, size_t *id_len);
223 .Ve
224 .SH "DESCRIPTION"
225 .IX Header "DESCRIPTION"
226 The function \fBEVP_PKEY_CTX_ctrl()\fR sends a control operation to the context
227 \&\fBctx\fR. The key type used must match \fBkeytype\fR if it is not \-1. The parameter
228 \&\fBoptype\fR is a mask indicating which operations the control can be applied to.
229 The control command is indicated in \fBcmd\fR and any additional arguments in
230 \&\fBp1\fR and \fBp2\fR.
231 .PP
232 For \fBcmd\fR = \fB\s-1EVP_PKEY_CTRL_SET_MAC_KEY\s0\fR, \fBp1\fR is the length of the \s-1MAC\s0 key,
233 and \fBp2\fR is \s-1MAC\s0 key. This is used by Poly1305, SipHash, \s-1HMAC\s0 and \s-1CMAC.\s0
234 .PP
235 Applications will not normally call \fBEVP_PKEY_CTX_ctrl()\fR directly but will
236 instead call one of the algorithm specific macros below.
237 .PP
238 The function \fBEVP_PKEY_CTX_ctrl_uint64()\fR is a wrapper that directly passes a
239 uint64 value as \fBp2\fR to \fBEVP_PKEY_CTX_ctrl()\fR.
240 .PP
241 The function \fBEVP_PKEY_CTX_ctrl_str()\fR allows an application to send an algorithm
242 specific control operation to a context \fBctx\fR in string form. This is
243 intended to be used for options specified on the command line or in text
244 files. The commands supported are documented in the openssl utility
245 command line pages for the option \fB\-pkeyopt\fR which is supported by the
246 \&\fBpkeyutl\fR, \fBgenpkey\fR and \fBreq\fR commands.
247 .PP
248 The function \fBEVP_PKEY_CTX_md()\fR sends a message digest control operation
249 to the context \fBctx\fR. The message digest is specified by its name \fBmd\fR.
250 .PP
251 All the remaining \*(L"functions\*(R" are implemented as macros.
252 .PP
253 The \fBEVP_PKEY_CTX_set_signature_md()\fR macro sets the message digest type used
254 in a signature. It can be used in the \s-1RSA, DSA\s0 and \s-1ECDSA\s0 algorithms.
255 .PP
256 The \fBEVP_PKEY_CTX_get_signature_md()\fR macro gets the message digest type used in a
257 signature. It can be used in the \s-1RSA, DSA\s0 and \s-1ECDSA\s0 algorithms.
258 .PP
259 Key generation typically involves setting up parameters to be used and
260 generating the private and public key data. Some algorithm implementations
261 allow private key data to be set explicitly using the \fBEVP_PKEY_CTX_set_mac_key()\fR
262 macro. In this case key generation is simply the process of setting up the
263 parameters for the key and then setting the raw key data to the value explicitly
264 provided by that macro. Normally applications would call
265 \&\fBEVP_PKEY_new_raw_private_key\fR\|(3) or similar functions instead of this macro.
266 .PP
267 The \fBEVP_PKEY_CTX_set_mac_key()\fR macro can be used with any of the algorithms
268 supported by the \fBEVP_PKEY_new_raw_private_key\fR\|(3) function.
269 .SS "\s-1RSA\s0 parameters"
270 .IX Subsection "RSA parameters"
271 The \fBEVP_PKEY_CTX_set_rsa_padding()\fR macro sets the \s-1RSA\s0 padding mode for \fBctx\fR.
272 The \fBpad\fR parameter can take the value \fB\s-1RSA_PKCS1_PADDING\s0\fR for PKCS#1
273 padding, \fB\s-1RSA_SSLV23_PADDING\s0\fR for SSLv23 padding, \fB\s-1RSA_NO_PADDING\s0\fR for
274 no padding, \fB\s-1RSA_PKCS1_OAEP_PADDING\s0\fR for \s-1OAEP\s0 padding (encrypt and
275 decrypt only), \fB\s-1RSA_X931_PADDING\s0\fR for X9.31 padding (signature operations
276 only) and \fB\s-1RSA_PKCS1_PSS_PADDING\s0\fR (sign and verify only).
277 .PP
278 Two \s-1RSA\s0 padding modes behave differently if \fBEVP_PKEY_CTX_set_signature_md()\fR
279 is used. If this macro is called for PKCS#1 padding the plaintext buffer is
280 an actual digest value and is encapsulated in a DigestInfo structure according
281 to PKCS#1 when signing and this structure is expected (and stripped off) when
282 verifying. If this control is not used with \s-1RSA\s0 and PKCS#1 padding then the
283 supplied data is used directly and not encapsulated. In the case of X9.31
284 padding for \s-1RSA\s0 the algorithm identifier byte is added or checked and removed
285 if this control is called. If it is not called then the first byte of the plaintext
286 buffer is expected to be the algorithm identifier byte.
287 .PP
288 The \fBEVP_PKEY_CTX_get_rsa_padding()\fR macro gets the \s-1RSA\s0 padding mode for \fBctx\fR.
289 .PP
290 The \fBEVP_PKEY_CTX_set_rsa_pss_saltlen()\fR macro sets the \s-1RSA PSS\s0 salt length to
291 \&\fBlen\fR. As its name implies it is only supported for \s-1PSS\s0 padding. Three special
292 values are supported: \fB\s-1RSA_PSS_SALTLEN_DIGEST\s0\fR sets the salt length to the
293 digest length, \fB\s-1RSA_PSS_SALTLEN_MAX\s0\fR sets the salt length to the maximum
294 permissible value. When verifying \fB\s-1RSA_PSS_SALTLEN_AUTO\s0\fR causes the salt length
295 to be automatically determined based on the \fB\s-1PSS\s0\fR block structure. If this
296 macro is not called maximum salt length is used when signing and auto detection
297 when verifying is used by default.
298 .PP
299 The \fBEVP_PKEY_CTX_get_rsa_pss_saltlen()\fR macro gets the \s-1RSA PSS\s0 salt length
300 for \fBctx\fR. The padding mode must have been set to \fB\s-1RSA_PKCS1_PSS_PADDING\s0\fR.
301 .PP
302 The \fBEVP_PKEY_CTX_set_rsa_keygen_bits()\fR macro sets the \s-1RSA\s0 key length for
303 \&\s-1RSA\s0 key generation to \fBbits\fR. If not specified 1024 bits is used.
304 .PP
305 The \fBEVP_PKEY_CTX_set_rsa_keygen_pubexp()\fR macro sets the public exponent value
306 for \s-1RSA\s0 key generation to \fBpubexp\fR. Currently it should be an odd integer. The
307 \&\fBpubexp\fR pointer is used internally by this function so it should not be
308 modified or freed after the call. If not specified 65537 is used.
309 .PP
310 The \fBEVP_PKEY_CTX_set_rsa_keygen_primes()\fR macro sets the number of primes for
311 \&\s-1RSA\s0 key generation to \fBprimes\fR. If not specified 2 is used.
312 .PP
313 The \fBEVP_PKEY_CTX_set_rsa_mgf1_md()\fR macro sets the \s-1MGF1\s0 digest for \s-1RSA\s0 padding
314 schemes to \fBmd\fR. If not explicitly set the signing digest is used. The
315 padding mode must have been set to \fB\s-1RSA_PKCS1_OAEP_PADDING\s0\fR
316 or \fB\s-1RSA_PKCS1_PSS_PADDING\s0\fR.
317 .PP
318 The \fBEVP_PKEY_CTX_get_rsa_mgf1_md()\fR macro gets the \s-1MGF1\s0 digest for \fBctx\fR.
319 If not explicitly set the signing digest is used. The padding mode must have
320 been set to \fB\s-1RSA_PKCS1_OAEP_PADDING\s0\fR or \fB\s-1RSA_PKCS1_PSS_PADDING\s0\fR.
321 .PP
322 The \fBEVP_PKEY_CTX_set_rsa_oaep_md()\fR macro sets the message digest type used
323 in \s-1RSA OAEP\s0 to \fBmd\fR. The padding mode must have been set to
324 \&\fB\s-1RSA_PKCS1_OAEP_PADDING\s0\fR.
325 .PP
326 The \fBEVP_PKEY_CTX_get_rsa_oaep_md()\fR macro gets the message digest type used
327 in \s-1RSA OAEP\s0 to \fBmd\fR. The padding mode must have been set to
328 \&\fB\s-1RSA_PKCS1_OAEP_PADDING\s0\fR.
329 .PP
330 The \fBEVP_PKEY_CTX_set0_rsa_oaep_label()\fR macro sets the \s-1RSA OAEP\s0 label to
331 \&\fBlabel\fR and its length to \fBlen\fR. If \fBlabel\fR is \s-1NULL\s0 or \fBlen\fR is 0,
332 the label is cleared. The library takes ownership of the label so the
333 caller should not free the original memory pointed to by \fBlabel\fR.
334 The padding mode must have been set to \fB\s-1RSA_PKCS1_OAEP_PADDING\s0\fR.
335 .PP
336 The \fBEVP_PKEY_CTX_get0_rsa_oaep_label()\fR macro gets the \s-1RSA OAEP\s0 label to
337 \&\fBlabel\fR. The return value is the label length. The padding mode
338 must have been set to \fB\s-1RSA_PKCS1_OAEP_PADDING\s0\fR. The resulting pointer is owned
339 by the library and should not be freed by the caller.
340 .SS "\s-1DSA\s0 parameters"
341 .IX Subsection "DSA parameters"
342 The \fBEVP_PKEY_CTX_set_dsa_paramgen_bits()\fR macro sets the number of bits used
343 for \s-1DSA\s0 parameter generation to \fBnbits\fR. If not specified, 1024 is used.
344 .PP
345 The \fBEVP_PKEY_CTX_set_dsa_paramgen_q_bits()\fR macro sets the number of bits in the
346 subprime parameter \fBq\fR for \s-1DSA\s0 parameter generation to \fBqbits\fR. If not
347 specified, 160 is used. If a digest function is specified below, this parameter
348 is ignored and instead, the number of bits in \fBq\fR matches the size of the
349 digest.
350 .PP
351 The \fBEVP_PKEY_CTX_set_dsa_paramgen_md()\fR macro sets the digest function used for
352 \&\s-1DSA\s0 parameter generation to \fBmd\fR. If not specified, one of \s-1SHA\-1, SHA\-224,\s0 or
353 \&\s-1SHA\-256\s0 is selected to match the bit length of \fBq\fR above.
354 .SS "\s-1DH\s0 parameters"
355 .IX Subsection "DH parameters"
356 The \fBEVP_PKEY_CTX_set_dh_paramgen_prime_len()\fR macro sets the length of the \s-1DH\s0
357 prime parameter \fBp\fR for \s-1DH\s0 parameter generation. If this macro is not called
358 then 1024 is used. Only accepts lengths greater than or equal to 256.
359 .PP
360 The \fBEVP_PKEY_CTX_set_dh_paramgen_subprime_len()\fR macro sets the length of the \s-1DH\s0
361 optional subprime parameter \fBq\fR for \s-1DH\s0 parameter generation. The default is
362 256 if the prime is at least 2048 bits long or 160 otherwise. The \s-1DH\s0
363 paramgen type must have been set to x9.42.
364 .PP
365 The \fBEVP_PKEY_CTX_set_dh_paramgen_generator()\fR macro sets \s-1DH\s0 generator to \fBgen\fR
366 for \s-1DH\s0 parameter generation. If not specified 2 is used.
367 .PP
368 The \fBEVP_PKEY_CTX_set_dh_paramgen_type()\fR macro sets the key type for \s-1DH\s0
369 parameter generation. Use 0 for PKCS#3 \s-1DH\s0 and 1 for X9.42 \s-1DH.\s0
370 The default is 0.
371 .PP
372 The \fBEVP_PKEY_CTX_set_dh_pad()\fR macro sets the \s-1DH\s0 padding mode. If \fBpad\fR is
373 1 the shared secret is padded with zeros up to the size of the \s-1DH\s0 prime \fBp\fR.
374 If \fBpad\fR is zero (the default) then no padding is performed.
375 .PP
376 \&\fBEVP_PKEY_CTX_set_dh_nid()\fR sets the \s-1DH\s0 parameters to values corresponding to
377 \&\fBnid\fR as defined in \s-1RFC7919.\s0 The \fBnid\fR parameter must be \fBNID_ffdhe2048\fR,
378 \&\fBNID_ffdhe3072\fR, \fBNID_ffdhe4096\fR, \fBNID_ffdhe6144\fR, \fBNID_ffdhe8192\fR
379 or \fBNID_undef\fR to clear the stored value. This macro can be called during
380 parameter or key generation.
381 The nid parameter and the rfc5114 parameter are mutually exclusive.
382 .PP
383 The \fBEVP_PKEY_CTX_set_dh_rfc5114()\fR and \fBEVP_PKEY_CTX_set_dhx_rfc5114()\fR macros are
384 synonymous. They set the \s-1DH\s0 parameters to the values defined in \s-1RFC5114.\s0 The
385 \&\fBrfc5114\fR parameter must be 1, 2 or 3 corresponding to \s-1RFC5114\s0 sections
386 2.1, 2.2 and 2.3. or 0 to clear the stored value. This macro can be called
387 during parameter generation. The \fBctx\fR must have a key type of
388 \&\fB\s-1EVP_PKEY_DHX\s0\fR.
389 The rfc5114 parameter and the nid parameter are mutually exclusive.
390 .SS "\s-1DH\s0 key derivation function parameters"
391 .IX Subsection "DH key derivation function parameters"
392 Note that all of the following functions require that the \fBctx\fR parameter has
393 a private key type of \fB\s-1EVP_PKEY_DHX\s0\fR. When using key derivation, the output of
394 \&\fBEVP_PKEY_derive()\fR is the output of the \s-1KDF\s0 instead of the \s-1DH\s0 shared secret.
395 The \s-1KDF\s0 output is typically used as a Key Encryption Key (\s-1KEK\s0) that in turn
396 encrypts a Content Encryption Key (\s-1CEK\s0).
397 .PP
398 The \fBEVP_PKEY_CTX_set_dh_kdf_type()\fR macro sets the key derivation function type
399 to \fBkdf\fR for \s-1DH\s0 key derivation. Possible values are \fB\s-1EVP_PKEY_DH_KDF_NONE\s0\fR
400 and \fB\s-1EVP_PKEY_DH_KDF_X9_42\s0\fR which uses the key derivation specified in \s-1RFC2631\s0
401 (based on the keying algorithm described in X9.42). When using key derivation,
402 the \fBkdf_oid\fR, \fBkdf_md\fR and \fBkdf_outlen\fR parameters must also be specified.
403 .PP
404 The \fBEVP_PKEY_CTX_get_dh_kdf_type()\fR macro gets the key derivation function type
405 for \fBctx\fR used for \s-1DH\s0 key derivation. Possible values are \fB\s-1EVP_PKEY_DH_KDF_NONE\s0\fR
406 and \fB\s-1EVP_PKEY_DH_KDF_X9_42\s0\fR.
407 .PP
408 The \fBEVP_PKEY_CTX_set0_dh_kdf_oid()\fR macro sets the key derivation function
409 object identifier to \fBoid\fR for \s-1DH\s0 key derivation. This \s-1OID\s0 should identify
410 the algorithm to be used with the Content Encryption Key.
411 The library takes ownership of the object identifier so the caller should not
412 free the original memory pointed to by \fBoid\fR.
413 .PP
414 The \fBEVP_PKEY_CTX_get0_dh_kdf_oid()\fR macro gets the key derivation function oid
415 for \fBctx\fR used for \s-1DH\s0 key derivation. The resulting pointer is owned by the
416 library and should not be freed by the caller.
417 .PP
418 The \fBEVP_PKEY_CTX_set_dh_kdf_md()\fR macro sets the key derivation function
419 message digest to \fBmd\fR for \s-1DH\s0 key derivation. Note that \s-1RFC2631\s0 specifies
420 that this digest should be \s-1SHA1\s0 but OpenSSL tolerates other digests.
421 .PP
422 The \fBEVP_PKEY_CTX_get_dh_kdf_md()\fR macro gets the key derivation function
423 message digest for \fBctx\fR used for \s-1DH\s0 key derivation.
424 .PP
425 The \fBEVP_PKEY_CTX_set_dh_kdf_outlen()\fR macro sets the key derivation function
426 output length to \fBlen\fR for \s-1DH\s0 key derivation.
427 .PP
428 The \fBEVP_PKEY_CTX_get_dh_kdf_outlen()\fR macro gets the key derivation function
429 output length for \fBctx\fR used for \s-1DH\s0 key derivation.
430 .PP
431 The \fBEVP_PKEY_CTX_set0_dh_kdf_ukm()\fR macro sets the user key material to
432 \&\fBukm\fR and its length to \fBlen\fR for \s-1DH\s0 key derivation. This parameter is optional
433 and corresponds to the partyAInfo field in \s-1RFC2631\s0 terms. The specification
434 requires that it is 512 bits long but this is not enforced by OpenSSL.
435 The library takes ownership of the user key material so the caller should not
436 free the original memory pointed to by \fBukm\fR.
437 .PP
438 The \fBEVP_PKEY_CTX_get0_dh_kdf_ukm()\fR macro gets the user key material for \fBctx\fR.
439 The return value is the user key material length. The resulting pointer is owned
440 by the library and should not be freed by the caller.
441 .SS "\s-1EC\s0 parameters"
442 .IX Subsection "EC parameters"
443 The \fBEVP_PKEY_CTX_set_ec_paramgen_curve_nid()\fR sets the \s-1EC\s0 curve for \s-1EC\s0 parameter
444 generation to \fBnid\fR. For \s-1EC\s0 parameter generation this macro must be called
445 or an error occurs because there is no default curve.
446 This function can also be called to set the curve explicitly when
447 generating an \s-1EC\s0 key.
448 .PP
449 The \fBEVP_PKEY_CTX_set_ec_param_enc()\fR macro sets the \s-1EC\s0 parameter encoding to
450 \&\fBparam_enc\fR when generating \s-1EC\s0 parameters or an \s-1EC\s0 key. The encoding can be
451 \&\fB\s-1OPENSSL_EC_EXPLICIT_CURVE\s0\fR for explicit parameters (the default in versions
452 of OpenSSL before 1.1.0) or \fB\s-1OPENSSL_EC_NAMED_CURVE\s0\fR to use named curve form.
453 For maximum compatibility the named curve form should be used. Note: the
454 \&\fB\s-1OPENSSL_EC_NAMED_CURVE\s0\fR value was added in OpenSSL 1.1.0; previous
455 versions should use 0 instead.
456 .SS "\s-1ECDH\s0 parameters"
457 .IX Subsection "ECDH parameters"
458 The \fBEVP_PKEY_CTX_set_ecdh_cofactor_mode()\fR macro sets the cofactor mode to
459 \&\fBcofactor_mode\fR for \s-1ECDH\s0 key derivation. Possible values are 1 to enable
460 cofactor key derivation, 0 to disable it and \-1 to clear the stored cofactor
461 mode and fallback to the private key cofactor mode.
462 .PP
463 The \fBEVP_PKEY_CTX_get_ecdh_cofactor_mode()\fR macro returns the cofactor mode for
464 \&\fBctx\fR used for \s-1ECDH\s0 key derivation. Possible values are 1 when cofactor key
465 derivation is enabled and 0 otherwise.
466 .SS "\s-1ECDH\s0 key derivation function parameters"
467 .IX Subsection "ECDH key derivation function parameters"
468 The \fBEVP_PKEY_CTX_set_ecdh_kdf_type()\fR macro sets the key derivation function type
469 to \fBkdf\fR for \s-1ECDH\s0 key derivation. Possible values are \fB\s-1EVP_PKEY_ECDH_KDF_NONE\s0\fR
470 and \fB\s-1EVP_PKEY_ECDH_KDF_X9_63\s0\fR which uses the key derivation specified in X9.63.
471 When using key derivation, the \fBkdf_md\fR and \fBkdf_outlen\fR parameters must
472 also be specified.
473 .PP
474 The \fBEVP_PKEY_CTX_get_ecdh_kdf_type()\fR macro returns the key derivation function
475 type for \fBctx\fR used for \s-1ECDH\s0 key derivation. Possible values are
476 \&\fB\s-1EVP_PKEY_ECDH_KDF_NONE\s0\fR and \fB\s-1EVP_PKEY_ECDH_KDF_X9_63\s0\fR.
477 .PP
478 The \fBEVP_PKEY_CTX_set_ecdh_kdf_md()\fR macro sets the key derivation function
479 message digest to \fBmd\fR for \s-1ECDH\s0 key derivation. Note that X9.63 specifies
480 that this digest should be \s-1SHA1\s0 but OpenSSL tolerates other digests.
481 .PP
482 The \fBEVP_PKEY_CTX_get_ecdh_kdf_md()\fR macro gets the key derivation function
483 message digest for \fBctx\fR used for \s-1ECDH\s0 key derivation.
484 .PP
485 The \fBEVP_PKEY_CTX_set_ecdh_kdf_outlen()\fR macro sets the key derivation function
486 output length to \fBlen\fR for \s-1ECDH\s0 key derivation.
487 .PP
488 The \fBEVP_PKEY_CTX_get_ecdh_kdf_outlen()\fR macro gets the key derivation function
489 output length for \fBctx\fR used for \s-1ECDH\s0 key derivation.
490 .PP
491 The \fBEVP_PKEY_CTX_set0_ecdh_kdf_ukm()\fR macro sets the user key material to \fBukm\fR
492 for \s-1ECDH\s0 key derivation. This parameter is optional and corresponds to the
493 shared info in X9.63 terms. The library takes ownership of the user key material
494 so the caller should not free the original memory pointed to by \fBukm\fR.
495 .PP
496 The \fBEVP_PKEY_CTX_get0_ecdh_kdf_ukm()\fR macro gets the user key material for \fBctx\fR.
497 The return value is the user key material length. The resulting pointer is owned
498 by the library and should not be freed by the caller.
499 .SS "Other parameters"
500 .IX Subsection "Other parameters"
501 The \fBEVP_PKEY_CTX_set1_id()\fR, \fBEVP_PKEY_CTX_get1_id()\fR and \fBEVP_PKEY_CTX_get1_id_len()\fR
502 macros are used to manipulate the special identifier field for specific signature
503 algorithms such as \s-1SM2.\s0 The \fBEVP_PKEY_CTX_set1_id()\fR sets an \s-1ID\s0 pointed by \fBid\fR with
504 the length \fBid_len\fR to the library. The library takes a copy of the id so that
505 the caller can safely free the original memory pointed to by \fBid\fR. The
506 \&\fBEVP_PKEY_CTX_get1_id_len()\fR macro returns the length of the \s-1ID\s0 set via a previous
507 call to \fBEVP_PKEY_CTX_set1_id()\fR. The length is usually used to allocate adequate
508 memory for further calls to \fBEVP_PKEY_CTX_get1_id()\fR. The \fBEVP_PKEY_CTX_get1_id()\fR
509 macro returns the previously set \s-1ID\s0 value to caller in \fBid\fR. The caller should
510 allocate adequate memory space for the \fBid\fR before calling \fBEVP_PKEY_CTX_get1_id()\fR.
511 .SH "RETURN VALUES"
512 .IX Header "RETURN VALUES"
513 \&\fBEVP_PKEY_CTX_ctrl()\fR and its macros return a positive value for success and 0
514 or a negative value for failure. In particular a return value of \-2
515 indicates the operation is not supported by the public key algorithm.
516 .SH "SEE ALSO"
517 .IX Header "SEE ALSO"
518 \&\fBEVP_PKEY_CTX_new\fR\|(3),
519 \&\fBEVP_PKEY_encrypt\fR\|(3),
520 \&\fBEVP_PKEY_decrypt\fR\|(3),
521 \&\fBEVP_PKEY_sign\fR\|(3),
522 \&\fBEVP_PKEY_verify\fR\|(3),
523 \&\fBEVP_PKEY_verify_recover\fR\|(3),
524 \&\fBEVP_PKEY_derive\fR\|(3),
525 \&\fBEVP_PKEY_keygen\fR\|(3)
526 .SH "HISTORY"
527 .IX Header "HISTORY"
528 The
529 \&\fBEVP_PKEY_CTX_set1_id()\fR, \fBEVP_PKEY_CTX_get1_id()\fR and \fBEVP_PKEY_CTX_get1_id_len()\fR
530 macros were added in 1.1.1, other functions were added in OpenSSL 1.0.0.
531 .SH "COPYRIGHT"
532 .IX Header "COPYRIGHT"
533 Copyright 2006\-2020 The OpenSSL Project Authors. All Rights Reserved.
534 .PP
535 Licensed under the OpenSSL license (the \*(L"License\*(R").  You may not use
536 this file except in compliance with the License.  You can obtain a copy
537 in the file \s-1LICENSE\s0 in the source distribution or at
538 <https://www.openssl.org/source/license.html>.