VirtualBox

source: vbox/trunk/src/libs/openssl-3.1.7/doc/man3/EVP_EncryptInit.pod@ 107713

Last change on this file since 107713 was 104078, checked in by vboxsync, 12 months ago

openssl-3.1.5: Applied and adjusted our OpenSSL changes to 3.1.4. bugref:10638

File size: 66.7 KB
Line 
1=pod
2
3=head1 NAME
4
5EVP_CIPHER_fetch,
6EVP_CIPHER_up_ref,
7EVP_CIPHER_free,
8EVP_CIPHER_CTX_new,
9EVP_CIPHER_CTX_reset,
10EVP_CIPHER_CTX_free,
11EVP_CIPHER_CTX_dup,
12EVP_CIPHER_CTX_copy,
13EVP_EncryptInit_ex,
14EVP_EncryptInit_ex2,
15EVP_EncryptUpdate,
16EVP_EncryptFinal_ex,
17EVP_DecryptInit_ex,
18EVP_DecryptInit_ex2,
19EVP_DecryptUpdate,
20EVP_DecryptFinal_ex,
21EVP_CipherInit_ex,
22EVP_CipherInit_ex2,
23EVP_CipherUpdate,
24EVP_CipherFinal_ex,
25EVP_CIPHER_CTX_set_key_length,
26EVP_CIPHER_CTX_ctrl,
27EVP_EncryptInit,
28EVP_EncryptFinal,
29EVP_DecryptInit,
30EVP_DecryptFinal,
31EVP_CipherInit,
32EVP_CipherFinal,
33EVP_Cipher,
34EVP_get_cipherbyname,
35EVP_get_cipherbynid,
36EVP_get_cipherbyobj,
37EVP_CIPHER_is_a,
38EVP_CIPHER_get0_name,
39EVP_CIPHER_get0_description,
40EVP_CIPHER_names_do_all,
41EVP_CIPHER_get0_provider,
42EVP_CIPHER_get_nid,
43EVP_CIPHER_get_params,
44EVP_CIPHER_gettable_params,
45EVP_CIPHER_get_block_size,
46EVP_CIPHER_get_key_length,
47EVP_CIPHER_get_iv_length,
48EVP_CIPHER_get_flags,
49EVP_CIPHER_get_mode,
50EVP_CIPHER_get_type,
51EVP_CIPHER_CTX_cipher,
52EVP_CIPHER_CTX_get0_cipher,
53EVP_CIPHER_CTX_get1_cipher,
54EVP_CIPHER_CTX_get0_name,
55EVP_CIPHER_CTX_get_nid,
56EVP_CIPHER_CTX_get_params,
57EVP_CIPHER_gettable_ctx_params,
58EVP_CIPHER_CTX_gettable_params,
59EVP_CIPHER_CTX_set_params,
60EVP_CIPHER_settable_ctx_params,
61EVP_CIPHER_CTX_settable_params,
62EVP_CIPHER_CTX_get_block_size,
63EVP_CIPHER_CTX_get_key_length,
64EVP_CIPHER_CTX_get_iv_length,
65EVP_CIPHER_CTX_get_tag_length,
66EVP_CIPHER_CTX_get_app_data,
67EVP_CIPHER_CTX_set_app_data,
68EVP_CIPHER_CTX_flags,
69EVP_CIPHER_CTX_set_flags,
70EVP_CIPHER_CTX_clear_flags,
71EVP_CIPHER_CTX_test_flags,
72EVP_CIPHER_CTX_get_type,
73EVP_CIPHER_CTX_get_mode,
74EVP_CIPHER_CTX_get_num,
75EVP_CIPHER_CTX_set_num,
76EVP_CIPHER_CTX_is_encrypting,
77EVP_CIPHER_param_to_asn1,
78EVP_CIPHER_asn1_to_param,
79EVP_CIPHER_CTX_set_padding,
80EVP_enc_null,
81EVP_CIPHER_do_all_provided,
82EVP_CIPHER_nid,
83EVP_CIPHER_name,
84EVP_CIPHER_block_size,
85EVP_CIPHER_key_length,
86EVP_CIPHER_iv_length,
87EVP_CIPHER_flags,
88EVP_CIPHER_mode,
89EVP_CIPHER_type,
90EVP_CIPHER_CTX_encrypting,
91EVP_CIPHER_CTX_nid,
92EVP_CIPHER_CTX_block_size,
93EVP_CIPHER_CTX_key_length,
94EVP_CIPHER_CTX_iv_length,
95EVP_CIPHER_CTX_tag_length,
96EVP_CIPHER_CTX_num,
97EVP_CIPHER_CTX_type,
98EVP_CIPHER_CTX_mode
99- EVP cipher routines
100
101=head1 SYNOPSIS
102
103=for openssl generic
104
105 #include <openssl/evp.h>
106
107 EVP_CIPHER *EVP_CIPHER_fetch(OSSL_LIB_CTX *ctx, const char *algorithm,
108 const char *properties);
109 int EVP_CIPHER_up_ref(EVP_CIPHER *cipher);
110 void EVP_CIPHER_free(EVP_CIPHER *cipher);
111 EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void);
112 int EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX *ctx);
113 void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *ctx);
114 EVP_CIPHER_CTX *EVP_CIPHER_CTX_dup(const EVP_CIPHER_CTX *in);
115 int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, const EVP_CIPHER_CTX *in);
116
117 int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
118 ENGINE *impl, const unsigned char *key, const unsigned char *iv);
119 int EVP_EncryptInit_ex2(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
120 const unsigned char *key, const unsigned char *iv,
121 const OSSL_PARAM params[]);
122 int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
123 int *outl, const unsigned char *in, int inl);
124 int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
125
126 int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
127 ENGINE *impl, const unsigned char *key, const unsigned char *iv);
128 int EVP_DecryptInit_ex2(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
129 const unsigned char *key, const unsigned char *iv,
130 const OSSL_PARAM params[]);
131 int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
132 int *outl, const unsigned char *in, int inl);
133 int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
134
135 int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
136 ENGINE *impl, const unsigned char *key, const unsigned char *iv, int enc);
137 int EVP_CipherInit_ex2(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
138 const unsigned char *key, const unsigned char *iv,
139 int enc, const OSSL_PARAM params[]);
140 int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
141 int *outl, const unsigned char *in, int inl);
142 int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
143
144 int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
145 const unsigned char *key, const unsigned char *iv);
146 int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
147
148 int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
149 const unsigned char *key, const unsigned char *iv);
150 int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
151
152 int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
153 const unsigned char *key, const unsigned char *iv, int enc);
154 int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
155
156 int EVP_Cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
157 const unsigned char *in, unsigned int inl);
158
159 int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *x, int padding);
160 int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen);
161 int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int cmd, int p1, void *p2);
162 int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key);
163 void EVP_CIPHER_CTX_set_flags(EVP_CIPHER_CTX *ctx, int flags);
164 void EVP_CIPHER_CTX_clear_flags(EVP_CIPHER_CTX *ctx, int flags);
165 int EVP_CIPHER_CTX_test_flags(const EVP_CIPHER_CTX *ctx, int flags);
166
167 const EVP_CIPHER *EVP_get_cipherbyname(const char *name);
168 const EVP_CIPHER *EVP_get_cipherbynid(int nid);
169 const EVP_CIPHER *EVP_get_cipherbyobj(const ASN1_OBJECT *a);
170
171 int EVP_CIPHER_get_nid(const EVP_CIPHER *e);
172 int EVP_CIPHER_is_a(const EVP_CIPHER *cipher, const char *name);
173 int EVP_CIPHER_names_do_all(const EVP_CIPHER *cipher,
174 void (*fn)(const char *name, void *data),
175 void *data);
176 const char *EVP_CIPHER_get0_name(const EVP_CIPHER *cipher);
177 const char *EVP_CIPHER_get0_description(const EVP_CIPHER *cipher);
178 const OSSL_PROVIDER *EVP_CIPHER_get0_provider(const EVP_CIPHER *cipher);
179 int EVP_CIPHER_get_block_size(const EVP_CIPHER *e);
180 int EVP_CIPHER_get_key_length(const EVP_CIPHER *e);
181 int EVP_CIPHER_get_iv_length(const EVP_CIPHER *e);
182 unsigned long EVP_CIPHER_get_flags(const EVP_CIPHER *e);
183 unsigned long EVP_CIPHER_get_mode(const EVP_CIPHER *e);
184 int EVP_CIPHER_get_type(const EVP_CIPHER *cipher);
185
186 const EVP_CIPHER *EVP_CIPHER_CTX_get0_cipher(const EVP_CIPHER_CTX *ctx);
187 EVP_CIPHER *EVP_CIPHER_CTX_get1_cipher(const EVP_CIPHER_CTX *ctx);
188 int EVP_CIPHER_CTX_get_nid(const EVP_CIPHER_CTX *ctx);
189 const char *EVP_CIPHER_CTX_get0_name(const EVP_CIPHER_CTX *ctx);
190
191 int EVP_CIPHER_get_params(EVP_CIPHER *cipher, OSSL_PARAM params[]);
192 int EVP_CIPHER_CTX_set_params(EVP_CIPHER_CTX *ctx, const OSSL_PARAM params[]);
193 int EVP_CIPHER_CTX_get_params(EVP_CIPHER_CTX *ctx, OSSL_PARAM params[]);
194 const OSSL_PARAM *EVP_CIPHER_gettable_params(const EVP_CIPHER *cipher);
195 const OSSL_PARAM *EVP_CIPHER_settable_ctx_params(const EVP_CIPHER *cipher);
196 const OSSL_PARAM *EVP_CIPHER_gettable_ctx_params(const EVP_CIPHER *cipher);
197 const OSSL_PARAM *EVP_CIPHER_CTX_settable_params(EVP_CIPHER_CTX *ctx);
198 const OSSL_PARAM *EVP_CIPHER_CTX_gettable_params(EVP_CIPHER_CTX *ctx);
199 int EVP_CIPHER_CTX_get_block_size(const EVP_CIPHER_CTX *ctx);
200 int EVP_CIPHER_CTX_get_key_length(const EVP_CIPHER_CTX *ctx);
201 int EVP_CIPHER_CTX_get_iv_length(const EVP_CIPHER_CTX *ctx);
202 int EVP_CIPHER_CTX_get_tag_length(const EVP_CIPHER_CTX *ctx);
203 void *EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx);
204 void EVP_CIPHER_CTX_set_app_data(const EVP_CIPHER_CTX *ctx, void *data);
205 int EVP_CIPHER_CTX_get_type(const EVP_CIPHER_CTX *ctx);
206 int EVP_CIPHER_CTX_get_mode(const EVP_CIPHER_CTX *ctx);
207 int EVP_CIPHER_CTX_get_num(const EVP_CIPHER_CTX *ctx);
208 int EVP_CIPHER_CTX_set_num(EVP_CIPHER_CTX *ctx, int num);
209 int EVP_CIPHER_CTX_is_encrypting(const EVP_CIPHER_CTX *ctx);
210
211 int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type);
212 int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type);
213
214 void EVP_CIPHER_do_all_provided(OSSL_LIB_CTX *libctx,
215 void (*fn)(EVP_CIPHER *cipher, void *arg),
216 void *arg);
217
218 #define EVP_CIPHER_nid EVP_CIPHER_get_nid
219 #define EVP_CIPHER_name EVP_CIPHER_get0_name
220 #define EVP_CIPHER_block_size EVP_CIPHER_get_block_size
221 #define EVP_CIPHER_key_length EVP_CIPHER_get_key_length
222 #define EVP_CIPHER_iv_length EVP_CIPHER_get_iv_length
223 #define EVP_CIPHER_flags EVP_CIPHER_get_flags
224 #define EVP_CIPHER_mode EVP_CIPHER_get_mode
225 #define EVP_CIPHER_type EVP_CIPHER_get_type
226 #define EVP_CIPHER_CTX_encrypting EVP_CIPHER_CTX_is_encrypting
227 #define EVP_CIPHER_CTX_nid EVP_CIPHER_CTX_get_nid
228 #define EVP_CIPHER_CTX_block_size EVP_CIPHER_CTX_get_block_size
229 #define EVP_CIPHER_CTX_key_length EVP_CIPHER_CTX_get_key_length
230 #define EVP_CIPHER_CTX_iv_length EVP_CIPHER_CTX_get_iv_length
231 #define EVP_CIPHER_CTX_tag_length EVP_CIPHER_CTX_get_tag_length
232 #define EVP_CIPHER_CTX_num EVP_CIPHER_CTX_get_num
233 #define EVP_CIPHER_CTX_type EVP_CIPHER_CTX_get_type
234 #define EVP_CIPHER_CTX_mode EVP_CIPHER_CTX_get_mode
235
236The following function has been deprecated since OpenSSL 3.0, and can be
237hidden entirely by defining B<OPENSSL_API_COMPAT> with a suitable version value,
238see L<openssl_user_macros(7)>:
239
240 const EVP_CIPHER *EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx);
241
242The following function has been deprecated since OpenSSL 1.1.0, and can be
243hidden entirely by defining B<OPENSSL_API_COMPAT> with a suitable version value,
244see L<openssl_user_macros(7)>:
245
246 int EVP_CIPHER_CTX_flags(const EVP_CIPHER_CTX *ctx);
247
248=head1 DESCRIPTION
249
250The EVP cipher routines are a high-level interface to certain
251symmetric ciphers.
252
253The B<EVP_CIPHER> type is a structure for cipher method implementation.
254
255=over 4
256
257=item EVP_CIPHER_fetch()
258
259Fetches the cipher implementation for the given I<algorithm> from any provider
260offering it, within the criteria given by the I<properties>.
261See L<crypto(7)/ALGORITHM FETCHING> for further information.
262
263The returned value must eventually be freed with EVP_CIPHER_free().
264
265Fetched B<EVP_CIPHER> structures are reference counted.
266
267=item EVP_CIPHER_up_ref()
268
269Increments the reference count for an B<EVP_CIPHER> structure.
270
271=item EVP_CIPHER_free()
272
273Decrements the reference count for the fetched B<EVP_CIPHER> structure.
274If the reference count drops to 0 then the structure is freed.
275
276=item EVP_CIPHER_CTX_new()
277
278Allocates and returns a cipher context.
279
280=item EVP_CIPHER_CTX_free()
281
282Clears all information from a cipher context and frees any allocated memory
283associated with it, including I<ctx> itself. This function should be called after
284all operations using a cipher are complete so sensitive information does not
285remain in memory.
286
287=item EVP_CIPHER_CTX_dup()
288
289Can be used to duplicate the cipher state from I<in>. This is useful
290to avoid multiple EVP_MD_fetch() calls or if large amounts of data are to be
291hashed which only differ in the last few bytes.
292
293=item EVP_CIPHER_CTX_copy()
294
295Can be used to copy the cipher state from I<in> to I<out>.
296
297=item EVP_CIPHER_CTX_ctrl()
298
299I<This is a legacy method.> EVP_CIPHER_CTX_set_params() and
300EVP_CIPHER_CTX_get_params() is the mechanism that should be used to set and get
301parameters that are used by providers.
302
303Performs cipher-specific control actions on context I<ctx>. The control command
304is indicated in I<cmd> and any additional arguments in I<p1> and I<p2>.
305EVP_CIPHER_CTX_ctrl() must be called after EVP_CipherInit_ex2(). Other restrictions
306may apply depending on the control type and cipher implementation.
307
308If this function happens to be used with a fetched B<EVP_CIPHER>, it will
309translate the controls that are known to OpenSSL into L<OSSL_PARAM(3)>
310parameters with keys defined by OpenSSL and call EVP_CIPHER_CTX_get_params() or
311EVP_CIPHER_CTX_set_params() as is appropriate for each control command.
312
313See L</CONTROLS> below for more information, including what translations are
314being done.
315
316=item EVP_CIPHER_get_params()
317
318Retrieves the requested list of algorithm I<params> from a CIPHER I<cipher>.
319See L</PARAMETERS> below for more information.
320
321=item EVP_CIPHER_CTX_get_params()
322
323Retrieves the requested list of I<params> from CIPHER context I<ctx>.
324See L</PARAMETERS> below for more information.
325
326=item EVP_CIPHER_CTX_set_params()
327
328Sets the list of I<params> into a CIPHER context I<ctx>.
329See L</PARAMETERS> below for more information.
330
331=item EVP_CIPHER_gettable_params()
332
333Get a constant L<OSSL_PARAM(3)> array that describes the retrievable parameters
334that can be used with EVP_CIPHER_get_params().
335
336=item EVP_CIPHER_gettable_ctx_params() and EVP_CIPHER_CTX_gettable_params()
337
338Get a constant L<OSSL_PARAM(3)> array that describes the retrievable parameters
339that can be used with EVP_CIPHER_CTX_get_params().
340EVP_CIPHER_gettable_ctx_params() returns the parameters that can be retrieved
341from the algorithm, whereas EVP_CIPHER_CTX_gettable_params() returns the
342parameters that can be retrieved in the context's current state.
343
344=item EVP_CIPHER_settable_ctx_params() and EVP_CIPHER_CTX_settable_params()
345
346Get a constant L<OSSL_PARAM(3)> array that describes the settable parameters
347that can be used with EVP_CIPHER_CTX_set_params().
348EVP_CIPHER_settable_ctx_params() returns the parameters that can be set from the
349algorithm, whereas EVP_CIPHER_CTX_settable_params() returns the parameters that
350can be set in the context's current state.
351
352=item EVP_EncryptInit_ex2()
353
354Sets up cipher context I<ctx> for encryption with cipher I<type>. I<type> is
355typically supplied by calling EVP_CIPHER_fetch(). I<type> may also be set
356using legacy functions such as EVP_aes_256_cbc(), but this is not recommended
357for new applications. I<key> is the symmetric key to use and I<iv> is the IV to
358use (if necessary), the actual number of bytes used for the key and IV depends
359on the cipher. The parameters I<params> will be set on the context after
360initialisation. It is possible to set all parameters to NULL except I<type> in
361an initial call and supply the remaining parameters in subsequent calls, all of
362which have I<type> set to NULL. This is done when the default cipher parameters
363are not appropriate.
364For B<EVP_CIPH_GCM_MODE> the IV will be generated internally if it is not
365specified.
366
367=item EVP_EncryptInit_ex()
368
369This legacy function is similar to EVP_EncryptInit_ex2() when I<impl> is NULL.
370The implementation of the I<type> from the I<impl> engine will be used if it
371exists.
372
373=item EVP_EncryptUpdate()
374
375Encrypts I<inl> bytes from the buffer I<in> and writes the encrypted version to
376I<out>. The pointers I<out> and I<in> may point to the same location, in which
377case the encryption will be done in-place. If I<out> and I<in> point to different
378locations, the two buffers must be disjoint, otherwise the operation might fail
379or the outcome might be undefined.
380
381This function can be called multiple times to encrypt successive blocks
382of data. The amount of data written depends on the block alignment of the
383encrypted data.
384For most ciphers and modes, the amount of data written can be anything
385from zero bytes to (inl + cipher_block_size - 1) bytes.
386For wrap cipher modes, the amount of data written can be anything
387from zero bytes to (inl + cipher_block_size) bytes.
388For stream ciphers, the amount of data written can be anything from zero
389bytes to inl bytes.
390Thus, the buffer pointed to by I<out> must contain sufficient room for the
391operation being performed.
392The actual number of bytes written is placed in I<outl>.
393
394If padding is enabled (the default) then EVP_EncryptFinal_ex() encrypts
395the "final" data, that is any data that remains in a partial block.
396It uses standard block padding (aka PKCS padding) as described in
397the NOTES section, below. The encrypted
398final data is written to I<out> which should have sufficient space for
399one cipher block. The number of bytes written is placed in I<outl>. After
400this function is called the encryption operation is finished and no further
401calls to EVP_EncryptUpdate() should be made.
402
403If padding is disabled then EVP_EncryptFinal_ex() will not encrypt any more
404data and it will return an error if any data remains in a partial block:
405that is if the total data length is not a multiple of the block size.
406
407=item EVP_DecryptInit_ex2(), EVP_DecryptInit_ex(), EVP_DecryptUpdate()
408and EVP_DecryptFinal_ex()
409
410These functions are the corresponding decryption operations.
411EVP_DecryptFinal() will return an error code if padding is enabled and the
412final block is not correctly formatted. The parameters and restrictions are
413identical to the encryption operations except that if padding is enabled the
414decrypted data buffer I<out> passed to EVP_DecryptUpdate() should have
415sufficient room for (I<inl> + cipher_block_size) bytes unless the cipher block
416size is 1 in which case I<inl> bytes is sufficient.
417
418=item EVP_CipherInit_ex2(), EVP_CipherInit_ex(), EVP_CipherUpdate() and
419EVP_CipherFinal_ex()
420
421These functions can be used for decryption or encryption. The operation
422performed depends on the value of the I<enc> parameter. It should be set to 1
423for encryption, 0 for decryption and -1 to leave the value unchanged
424(the actual value of 'enc' being supplied in a previous call).
425
426=item EVP_CIPHER_CTX_reset()
427
428Clears all information from a cipher context and free up any allocated memory
429associated with it, except the I<ctx> itself. This function should be called
430anytime I<ctx> is reused by another
431EVP_CipherInit() / EVP_CipherUpdate() / EVP_CipherFinal() series of calls.
432
433=item EVP_EncryptInit(), EVP_DecryptInit() and EVP_CipherInit()
434
435Behave in a similar way to EVP_EncryptInit_ex(), EVP_DecryptInit_ex() and
436EVP_CipherInit_ex() except if the I<type> is not a fetched cipher they use the
437default implementation of the I<type>.
438
439=item EVP_EncryptFinal(), EVP_DecryptFinal() and EVP_CipherFinal()
440
441Identical to EVP_EncryptFinal_ex(), EVP_DecryptFinal_ex() and
442EVP_CipherFinal_ex(). In previous releases they also cleaned up
443the I<ctx>, but this is no longer done and EVP_CIPHER_CTX_cleanup()
444must be called to free any context resources.
445
446=item EVP_Cipher()
447
448Encrypts or decrypts a maximum I<inl> amount of bytes from I<in> and leaves the
449result in I<out>.
450
451For legacy ciphers - If the cipher doesn't have the flag
452B<EVP_CIPH_FLAG_CUSTOM_CIPHER> set, then I<inl> must be a multiple of
453EVP_CIPHER_get_block_size(). If it isn't, the result is undefined. If the cipher
454has that flag set, then I<inl> can be any size.
455
456Due to the constraints of the API contract of this function it shouldn't be used
457in applications, please consider using EVP_CipherUpdate() and
458EVP_CipherFinal_ex() instead.
459
460=item EVP_get_cipherbyname(), EVP_get_cipherbynid() and EVP_get_cipherbyobj()
461
462Returns an B<EVP_CIPHER> structure when passed a cipher name, a cipher B<NID> or
463an B<ASN1_OBJECT> structure respectively.
464
465EVP_get_cipherbyname() will return NULL for algorithms such as "AES-128-SIV",
466"AES-128-CBC-CTS" and "CAMELLIA-128-CBC-CTS" which were previously only
467accessible via low level interfaces.
468
469The EVP_get_cipherbyname() function is present for backwards compatibility with
470OpenSSL prior to version 3 and is different to the EVP_CIPHER_fetch() function
471since it does not attempt to "fetch" an implementation of the cipher.
472Additionally, it only knows about ciphers that are built-in to OpenSSL and have
473an associated NID. Similarly EVP_get_cipherbynid() and EVP_get_cipherbyobj()
474also return objects without an associated implementation.
475
476When the cipher objects returned by these functions are used (such as in a call
477to EVP_EncryptInit_ex()) an implementation of the cipher will be implicitly
478fetched from the loaded providers. This fetch could fail if no suitable
479implementation is available. Use EVP_CIPHER_fetch() instead to explicitly fetch
480the algorithm and an associated implementation from a provider.
481
482See L<crypto(7)/ALGORITHM FETCHING> for more information about fetching.
483
484The cipher objects returned from these functions do not need to be freed with
485EVP_CIPHER_free().
486
487=item EVP_CIPHER_get_nid() and EVP_CIPHER_CTX_get_nid()
488
489Return the NID of a cipher when passed an B<EVP_CIPHER> or B<EVP_CIPHER_CTX>
490structure. The actual NID value is an internal value which may not have a
491corresponding OBJECT IDENTIFIER.
492
493=item EVP_CIPHER_CTX_set_flags(), EVP_CIPHER_CTX_clear_flags() and EVP_CIPHER_CTX_test_flags()
494
495Sets, clears and tests I<ctx> flags. See L</FLAGS> below for more information.
496
497For provided ciphers EVP_CIPHER_CTX_set_flags() should be called only after the
498fetched cipher has been assigned to the I<ctx>. It is recommended to use
499L</PARAMETERS> instead.
500
501=item EVP_CIPHER_CTX_set_padding()
502
503Enables or disables padding. This function should be called after the context
504is set up for encryption or decryption with EVP_EncryptInit_ex2(),
505EVP_DecryptInit_ex2() or EVP_CipherInit_ex2(). By default encryption operations
506are padded using standard block padding and the padding is checked and removed
507when decrypting. If the I<pad> parameter is zero then no padding is
508performed, the total amount of data encrypted or decrypted must then
509be a multiple of the block size or an error will occur.
510
511=item EVP_CIPHER_get_key_length() and EVP_CIPHER_CTX_get_key_length()
512
513Return the key length of a cipher when passed an B<EVP_CIPHER> or
514B<EVP_CIPHER_CTX> structure. The constant B<EVP_MAX_KEY_LENGTH> is the maximum
515key length for all ciphers. Note: although EVP_CIPHER_get_key_length() is fixed for
516a given cipher, the value of EVP_CIPHER_CTX_get_key_length() may be different for
517variable key length ciphers.
518
519=item EVP_CIPHER_CTX_set_key_length()
520
521Sets the key length of the cipher context.
522If the cipher is a fixed length cipher then attempting to set the key
523length to any value other than the fixed value is an error.
524
525=item EVP_CIPHER_get_iv_length() and EVP_CIPHER_CTX_get_iv_length()
526
527Return the IV length of a cipher when passed an B<EVP_CIPHER> or
528B<EVP_CIPHER_CTX>. It will return zero if the cipher does not use an IV.
529The constant B<EVP_MAX_IV_LENGTH> is the maximum IV length for all ciphers.
530
531=item EVP_CIPHER_CTX_get_tag_length()
532
533Returns the tag length of an AEAD cipher when passed a B<EVP_CIPHER_CTX>. It will
534return zero if the cipher does not support a tag. It returns a default value if
535the tag length has not been set.
536
537=item EVP_CIPHER_get_block_size() and EVP_CIPHER_CTX_get_block_size()
538
539Return the block size of a cipher when passed an B<EVP_CIPHER> or
540B<EVP_CIPHER_CTX> structure. The constant B<EVP_MAX_BLOCK_LENGTH> is also the
541maximum block length for all ciphers.
542
543=item EVP_CIPHER_get_type() and EVP_CIPHER_CTX_get_type()
544
545Return the type of the passed cipher or context. This "type" is the actual NID
546of the cipher OBJECT IDENTIFIER and as such it ignores the cipher parameters
547(40 bit RC2 and 128 bit RC2 have the same NID). If the cipher does not have an
548object identifier or does not have ASN1 support this function will return
549B<NID_undef>.
550
551=item EVP_CIPHER_is_a()
552
553Returns 1 if I<cipher> is an implementation of an algorithm that's identifiable
554with I<name>, otherwise 0. If I<cipher> is a legacy cipher (it's the return
555value from the likes of EVP_aes128() rather than the result of an
556EVP_CIPHER_fetch()), only cipher names registered with the default library
557context (see L<OSSL_LIB_CTX(3)>) will be considered.
558
559=item EVP_CIPHER_get0_name() and EVP_CIPHER_CTX_get0_name()
560
561Return the name of the passed cipher or context. For fetched ciphers with
562multiple names, only one of them is returned. See also EVP_CIPHER_names_do_all().
563
564=item EVP_CIPHER_names_do_all()
565
566Traverses all names for the I<cipher>, and calls I<fn> with each name and
567I<data>. This is only useful with fetched B<EVP_CIPHER>s.
568
569=item EVP_CIPHER_get0_description()
570
571Returns a description of the cipher, meant for display and human consumption.
572The description is at the discretion of the cipher implementation.
573
574=item EVP_CIPHER_get0_provider()
575
576Returns an B<OSSL_PROVIDER> pointer to the provider that implements the given
577B<EVP_CIPHER>.
578
579=item EVP_CIPHER_CTX_get0_cipher()
580
581Returns the B<EVP_CIPHER> structure when passed an B<EVP_CIPHER_CTX> structure.
582EVP_CIPHER_CTX_get1_cipher() is the same except the ownership is passed to
583the caller.
584
585=item EVP_CIPHER_get_mode() and EVP_CIPHER_CTX_get_mode()
586
587Return the block cipher mode:
588EVP_CIPH_ECB_MODE, EVP_CIPH_CBC_MODE, EVP_CIPH_CFB_MODE, EVP_CIPH_OFB_MODE,
589EVP_CIPH_CTR_MODE, EVP_CIPH_GCM_MODE, EVP_CIPH_CCM_MODE, EVP_CIPH_XTS_MODE,
590EVP_CIPH_WRAP_MODE, EVP_CIPH_OCB_MODE or EVP_CIPH_SIV_MODE.
591If the cipher is a stream cipher then EVP_CIPH_STREAM_CIPHER is returned.
592
593=item EVP_CIPHER_get_flags()
594
595Returns any flags associated with the cipher. See L</FLAGS>
596for a list of currently defined flags.
597
598=item EVP_CIPHER_CTX_get_num() and EVP_CIPHER_CTX_set_num()
599
600Gets or sets the cipher specific "num" parameter for the associated I<ctx>.
601Built-in ciphers typically use this to track how much of the current underlying block
602has been "used" already.
603
604=item EVP_CIPHER_CTX_is_encrypting()
605
606Reports whether the I<ctx> is being used for encryption or decryption.
607
608=item EVP_CIPHER_CTX_flags()
609
610A deprecated macro calling C<EVP_CIPHER_get_flags(EVP_CIPHER_CTX_get0_cipher(ctx))>.
611Do not use.
612
613=item EVP_CIPHER_param_to_asn1()
614
615Sets the AlgorithmIdentifier "parameter" based on the passed cipher. This will
616typically include any parameters and an IV. The cipher IV (if any) must be set
617when this call is made. This call should be made before the cipher is actually
618"used" (before any EVP_EncryptUpdate(), EVP_DecryptUpdate() calls for example).
619This function may fail if the cipher does not have any ASN1 support.
620
621=item EVP_CIPHER_asn1_to_param()
622
623Sets the cipher parameters based on an ASN1 AlgorithmIdentifier "parameter".
624The precise effect depends on the cipher. In the case of B<RC2>, for example,
625it will set the IV and effective key length.
626This function should be called after the base cipher type is set but before
627the key is set. For example EVP_CipherInit() will be called with the IV and
628key set to NULL, EVP_CIPHER_asn1_to_param() will be called and finally
629EVP_CipherInit() again with all parameters except the key set to NULL. It is
630possible for this function to fail if the cipher does not have any ASN1 support
631or the parameters cannot be set (for example the RC2 effective key length
632is not supported.
633
634=item EVP_CIPHER_CTX_rand_key()
635
636Generates a random key of the appropriate length based on the cipher context.
637The B<EVP_CIPHER> can provide its own random key generation routine to support
638keys of a specific form. I<key> must point to a buffer at least as big as the
639value returned by EVP_CIPHER_CTX_get_key_length().
640
641=item EVP_CIPHER_do_all_provided()
642
643Traverses all ciphers implemented by all activated providers in the given
644library context I<libctx>, and for each of the implementations, calls the given
645function I<fn> with the implementation method and the given I<arg> as argument.
646
647=back
648
649=head1 PARAMETERS
650
651See L<OSSL_PARAM(3)> for information about passing parameters.
652
653=head2 Gettable EVP_CIPHER parameters
654
655When EVP_CIPHER_fetch() is called it internally calls EVP_CIPHER_get_params()
656and caches the results.
657
658EVP_CIPHER_get_params() can be used with the following L<OSSL_PARAM(3)> keys:
659
660=over 4
661
662=item "mode" (B<OSSL_CIPHER_PARAM_MODE>) <unsigned integer>
663
664Gets the mode for the associated cipher algorithm I<cipher>.
665See L</EVP_CIPHER_get_mode() and EVP_CIPHER_CTX_get_mode()> for a list of valid modes.
666Use EVP_CIPHER_get_mode() to retrieve the cached value.
667
668=item "keylen" (B<OSSL_CIPHER_PARAM_KEYLEN>) <unsigned integer>
669
670Gets the key length for the associated cipher algorithm I<cipher>.
671Use EVP_CIPHER_get_key_length() to retrieve the cached value.
672
673=item "ivlen" (B<OSSL_CIPHER_PARAM_IVLEN>) <unsigned integer>
674
675Gets the IV length for the associated cipher algorithm I<cipher>.
676Use EVP_CIPHER_get_iv_length() to retrieve the cached value.
677
678=item "blocksize" (B<OSSL_CIPHER_PARAM_BLOCK_SIZE>) <unsigned integer>
679
680Gets the block size for the associated cipher algorithm I<cipher>.
681The block size should be 1 for stream ciphers.
682Note that the block size for a cipher may be different to the block size for
683the underlying encryption/decryption primitive.
684For example AES in CTR mode has a block size of 1 (because it operates like a
685stream cipher), even though AES has a block size of 16.
686Use EVP_CIPHER_get_block_size() to retrieve the cached value.
687
688=item "aead" (B<OSSL_CIPHER_PARAM_AEAD>) <integer>
689
690Gets 1 if this is an AEAD cipher algorithm, otherwise it gets 0.
691Use (EVP_CIPHER_get_flags(cipher) & EVP_CIPH_FLAG_AEAD_CIPHER) to retrieve the
692cached value.
693
694=item "custom-iv" (B<OSSL_CIPHER_PARAM_CUSTOM_IV>) <integer>
695
696Gets 1 if the cipher algorithm I<cipher> has a custom IV, otherwise it gets 0.
697Storing and initializing the IV is left entirely to the implementation, if a
698custom IV is used.
699Use (EVP_CIPHER_get_flags(cipher) & EVP_CIPH_CUSTOM_IV) to retrieve the
700cached value.
701
702=item "cts" (B<OSSL_CIPHER_PARAM_CTS>) <integer>
703
704Gets 1 if the cipher algorithm I<cipher> uses ciphertext stealing,
705otherwise it gets 0.
706This is currently used to indicate that the cipher is a one shot that only
707allows a single call to EVP_CipherUpdate().
708Use (EVP_CIPHER_get_flags(cipher) & EVP_CIPH_FLAG_CTS) to retrieve the
709cached value.
710
711=item "tls-multi" (B<OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK>) <integer>
712
713Gets 1 if the cipher algorithm I<cipher> supports interleaving of crypto blocks,
714otherwise it gets 0. The interleaving is an optimization only applicable to certain
715TLS ciphers.
716Use (EVP_CIPHER_get_flags(cipher) & EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK) to retrieve the
717cached value.
718
719=item "has-randkey" (B<OSSL_CIPHER_PARAM_HAS_RANDKEY>) <integer>
720
721Gets 1 if the cipher algorithm I<cipher> supports the gettable EVP_CIPHER_CTX
722parameter B<OSSL_CIPHER_PARAM_RANDOM_KEY>. Only DES and 3DES set this to 1,
723all other OpenSSL ciphers return 0.
724
725=back
726
727=head2 Gettable and Settable EVP_CIPHER_CTX parameters
728
729The following L<OSSL_PARAM(3)> keys can be used with both EVP_CIPHER_CTX_get_params()
730and EVP_CIPHER_CTX_set_params().
731
732=over 4
733
734=item "padding" (B<OSSL_CIPHER_PARAM_PADDING>) <unsigned integer>
735
736Gets or sets the padding mode for the cipher context I<ctx>.
737Padding is enabled if the value is 1, and disabled if the value is 0.
738See also EVP_CIPHER_CTX_set_padding().
739
740=item "num" (B<OSSL_CIPHER_PARAM_NUM>) <unsigned integer>
741
742Gets or sets the cipher specific "num" parameter for the cipher context I<ctx>.
743Built-in ciphers typically use this to track how much of the current underlying
744block has been "used" already.
745See also EVP_CIPHER_CTX_get_num() and EVP_CIPHER_CTX_set_num().
746
747=item "keylen" (B<OSSL_CIPHER_PARAM_KEYLEN>) <unsigned integer>
748
749Gets or sets the key length for the cipher context I<ctx>.
750The length of the "keylen" parameter should not exceed that of a B<size_t>.
751See also EVP_CIPHER_CTX_get_key_length() and EVP_CIPHER_CTX_set_key_length().
752
753=item "tag" (B<OSSL_CIPHER_PARAM_AEAD_TAG>) <octet string>
754
755Gets or sets the AEAD tag for the associated cipher context I<ctx>.
756See L<EVP_EncryptInit(3)/AEAD Interface>.
757
758=item "keybits" (B<OSSL_CIPHER_PARAM_RC2_KEYBITS>) <unsigned integer>
759
760Gets or sets the effective keybits used for a RC2 cipher.
761The length of the "keybits" parameter should not exceed that of a B<size_t>.
762
763=item "rounds" (B<OSSL_CIPHER_PARAM_ROUNDS>) <unsigned integer>
764
765Gets or sets the number of rounds to be used for a cipher.
766This is used by the RC5 cipher.
767
768=item "alg_id_param" (B<OSSL_CIPHER_PARAM_ALGORITHM_ID_PARAMS>) <octet string>
769
770Used to pass the DER encoded AlgorithmIdentifier parameter to or from
771the cipher implementation. Functions like L<EVP_CIPHER_param_to_asn1(3)>
772and L<EVP_CIPHER_asn1_to_param(3)> use this parameter for any implementation
773that has the flag B<EVP_CIPH_FLAG_CUSTOM_ASN1> set.
774
775=item "cts_mode" (B<OSSL_CIPHER_PARAM_CTS_MODE>) <UTF8 string>
776
777Gets or sets the cipher text stealing mode. For all modes the output size is the
778same as the input size. The input length must be greater than or equal to the
779block size. (The block size for AES and CAMELLIA is 16 bytes).
780
781Valid values for the mode are:
782
783=over 4
784
785=item "CS1"
786
787The NIST variant of cipher text stealing.
788For input lengths that are multiples of the block size it is equivalent to
789using a "AES-XXX-CBC" or "CAMELLIA-XXX-CBC" cipher otherwise the second last
790cipher text block is a partial block.
791
792=item "CS2"
793
794For input lengths that are multiples of the block size it is equivalent to
795using a "AES-XXX-CBC" or "CAMELLIA-XXX-CBC" cipher, otherwise it is the same as
796"CS3" mode.
797
798=item "CS3"
799
800The Kerberos5 variant of cipher text stealing which always swaps the last
801cipher text block with the previous block (which may be a partial or full block
802depending on the input length). If the input length is exactly one full block
803then this is equivalent to using a "AES-XXX-CBC" or "CAMELLIA-XXX-CBC" cipher.
804
805=back
806
807The default is "CS1".
808This is only supported for "AES-128-CBC-CTS", "AES-192-CBC-CTS", "AES-256-CBC-CTS",
809"CAMELLIA-128-CBC-CTS", "CAMELLIA-192-CBC-CTS" and "CAMELLIA-256-CBC-CTS".
810
811=item "tls1multi_interleave" (B<OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE>) <unsigned integer>
812
813Sets or gets the number of records being sent in one go for a tls1 multiblock
814cipher operation (either 4 or 8 records).
815
816=back
817
818=head2 Gettable EVP_CIPHER_CTX parameters
819
820The following L<OSSL_PARAM(3)> keys can be used with EVP_CIPHER_CTX_get_params():
821
822=over 4
823
824=item "ivlen" (B<OSSL_CIPHER_PARAM_IVLEN> and <B<OSSL_CIPHER_PARAM_AEAD_IVLEN>) <unsigned integer>
825
826Gets the IV length for the cipher context I<ctx>.
827The length of the "ivlen" parameter should not exceed that of a B<size_t>.
828See also EVP_CIPHER_CTX_get_iv_length().
829
830=item "iv" (B<OSSL_CIPHER_PARAM_IV>) <octet string OR octet ptr>
831
832Gets the IV used to initialize the associated cipher context I<ctx>.
833See also EVP_CIPHER_CTX_get_original_iv().
834
835=item "updated-iv" (B<OSSL_CIPHER_PARAM_UPDATED_IV>) <octet string OR octet ptr>
836
837Gets the updated pseudo-IV state for the associated cipher context, e.g.,
838the previous ciphertext block for CBC mode or the iteratively encrypted IV
839value for OFB mode. Note that octet pointer access is deprecated and is
840provided only for backwards compatibility with historical libcrypto APIs.
841See also EVP_CIPHER_CTX_get_updated_iv().
842
843=item "randkey" (B<OSSL_CIPHER_PARAM_RANDOM_KEY>) <octet string>
844
845Gets an implementation specific randomly generated key for the associated
846cipher context I<ctx>. This is currently only supported by DES and 3DES (which set
847the key to odd parity).
848
849=item "taglen" (B<OSSL_CIPHER_PARAM_AEAD_TAGLEN>) <unsigned integer>
850
851Gets the tag length to be used for an AEAD cipher for the associated cipher
852context I<ctx>. It gets a default value if it has not been set.
853The length of the "taglen" parameter should not exceed that of a B<size_t>.
854See also EVP_CIPHER_CTX_get_tag_length().
855
856=item "tlsaadpad" (B<OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD>) <unsigned integer>
857
858Gets the length of the tag that will be added to a TLS record for the AEAD
859tag for the associated cipher context I<ctx>.
860The length of the "tlsaadpad" parameter should not exceed that of a B<size_t>.
861
862=item "tlsivgen" (B<OSSL_CIPHER_PARAM_AEAD_TLS1_GET_IV_GEN>) <octet string>
863
864Gets the invocation field generated for encryption.
865Can only be called after "tlsivfixed" is set.
866This is only used for GCM mode.
867
868=item "tls1multi_enclen" (B<OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_LEN>) <unsigned integer>
869
870Get the total length of the record returned from the "tls1multi_enc" operation.
871
872=item "tls1multi_maxbufsz" (B<OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_BUFSIZE>) <unsigned integer>
873
874Gets the maximum record length for a TLS1 multiblock cipher operation.
875The length of the "tls1multi_maxbufsz" parameter should not exceed that of a B<size_t>.
876
877=item "tls1multi_aadpacklen" (B<OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD_PACKLEN>) <unsigned integer>
878
879Gets the result of running the "tls1multi_aad" operation.
880
881=item "tls-mac" (B<OSSL_CIPHER_PARAM_TLS_MAC>) <octet ptr>
882
883Used to pass the TLS MAC data.
884
885=back
886
887=head2 Settable EVP_CIPHER_CTX parameters
888
889The following L<OSSL_PARAM(3)> keys can be used with EVP_CIPHER_CTX_set_params():
890
891=over 4
892
893=item "mackey" (B<OSSL_CIPHER_PARAM_AEAD_MAC_KEY>) <octet string>
894
895Sets the MAC key used by composite AEAD ciphers such as AES-CBC-HMAC-SHA256.
896
897=item "speed" (B<OSSL_CIPHER_PARAM_SPEED>) <unsigned integer>
898
899Sets the speed option for the associated cipher context. This is only supported
900by AES SIV ciphers which disallow multiple operations by default.
901Setting "speed" to 1 allows another encrypt or decrypt operation to be
902performed. This is used for performance testing.
903
904=item "use-bits" (B<OSSL_CIPHER_PARAM_USE_BITS>) <unsigned integer>
905
906Determines if the input length I<inl> passed to EVP_EncryptUpdate(),
907EVP_DecryptUpdate() and EVP_CipherUpdate() is the number of bits or number of bytes.
908Setting "use-bits" to 1 uses bits. The default is in bytes.
909This is only used for B<CFB1> ciphers.
910
911This can be set using EVP_CIPHER_CTX_set_flags(ctx, EVP_CIPH_FLAG_LENGTH_BITS).
912
913=item "tls-version" (B<OSSL_CIPHER_PARAM_TLS_VERSION>) <integer>
914
915Sets the TLS version.
916
917=item "tls-mac-size" (B<OSSL_CIPHER_PARAM_TLS_MAC_SIZE>) <unsigned integer>
918
919Set the TLS MAC size.
920
921=item "tlsaad" (B<OSSL_CIPHER_PARAM_AEAD_TLS1_AAD>) <octet string>
922
923Sets TLSv1.2 AAD information for the associated cipher context I<ctx>.
924TLSv1.2 AAD information is always 13 bytes in length and is as defined for the
925"additional_data" field described in section 6.2.3.3 of RFC5246.
926
927=item "tlsivfixed" (B<OSSL_CIPHER_PARAM_AEAD_TLS1_IV_FIXED>) <octet string>
928
929Sets the fixed portion of an IV for an AEAD cipher used in a TLS record
930encryption/ decryption for the associated cipher context.
931TLS record encryption/decryption always occurs "in place" so that the input and
932output buffers are always the same memory location.
933AEAD IVs in TLSv1.2 consist of an implicit "fixed" part and an explicit part
934that varies with every record.
935Setting a TLS fixed IV changes a cipher to encrypt/decrypt TLS records.
936TLS records are encrypted/decrypted using a single OSSL_FUNC_cipher_cipher call per
937record.
938For a record decryption the first bytes of the input buffer will be the explicit
939part of the IV and the final bytes of the input buffer will be the AEAD tag.
940The length of the explicit part of the IV and the tag length will depend on the
941cipher in use and will be defined in the RFC for the relevant ciphersuite.
942In order to allow for "in place" decryption the plaintext output should be
943written to the same location in the output buffer that the ciphertext payload
944was read from, i.e. immediately after the explicit IV.
945
946When encrypting a record the first bytes of the input buffer should be empty to
947allow space for the explicit IV, as will the final bytes where the tag will
948be written.
949The length of the input buffer will include the length of the explicit IV, the
950payload, and the tag bytes.
951The cipher implementation should generate the explicit IV and write it to the
952beginning of the output buffer, do "in place" encryption of the payload and
953write that to the output buffer, and finally add the tag onto the end of the
954output buffer.
955
956Whether encrypting or decrypting the value written to I<*outl> in the
957OSSL_FUNC_cipher_cipher call should be the length of the payload excluding the explicit
958IV length and the tag length.
959
960=item "tlsivinv" (B<OSSL_CIPHER_PARAM_AEAD_TLS1_SET_IV_INV>) <octet string>
961
962Sets the invocation field used for decryption.
963Can only be called after "tlsivfixed" is set.
964This is only used for GCM mode.
965
966=item "tls1multi_enc" (B<OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC>) <octet string>
967
968Triggers a multiblock TLS1 encrypt operation for a TLS1 aware cipher that
969supports sending 4 or 8 records in one go.
970The cipher performs both the MAC and encrypt stages and constructs the record
971headers itself.
972"tls1multi_enc" supplies the output buffer for the encrypt operation,
973"tls1multi_encin" & "tls1multi_interleave" must also be set in order to supply
974values to the encrypt operation.
975
976=item "tls1multi_encin" (B<OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_IN>) <octet string>
977
978Supplies the data to encrypt for a TLS1 multiblock cipher operation.
979
980=item "tls1multi_maxsndfrag" (B<OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_SEND_FRAGMENT>) <unsigned integer>
981
982Sets the maximum send fragment size for a TLS1 multiblock cipher operation.
983It must be set before using "tls1multi_maxbufsz".
984The length of the "tls1multi_maxsndfrag" parameter should not exceed that of a B<size_t>.
985
986=item "tls1multi_aad" (B<OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD>) <octet string>
987
988Sets the authenticated additional data used by a TLS1 multiblock cipher operation.
989The supplied data consists of 13 bytes of record data containing:
990Bytes 0-7: The sequence number of the first record
991Byte 8: The record type
992Byte 9-10: The protocol version
993Byte 11-12: Input length (Always 0)
994
995"tls1multi_interleave" must also be set for this operation.
996
997=back
998
999=head1 CONTROLS
1000
1001The Mappings from EVP_CIPHER_CTX_ctrl() identifiers to PARAMETERS are listed
1002in the following section. See the L</PARAMETERS> section for more details.
1003
1004EVP_CIPHER_CTX_ctrl() can be used to send the following standard controls:
1005
1006=over 4
1007
1008=item EVP_CTRL_AEAD_SET_IVLEN and EVP_CTRL_GET_IVLEN
1009
1010When used with a fetched B<EVP_CIPHER>, EVP_CIPHER_CTX_set_params() and
1011EVP_CIPHER_CTX_get_params() get called with an L<OSSL_PARAM(3)> item with the
1012key "ivlen" (B<OSSL_CIPHER_PARAM_IVLEN>).
1013
1014=item EVP_CTRL_AEAD_SET_IV_FIXED
1015
1016When used with a fetched B<EVP_CIPHER>, EVP_CIPHER_CTX_set_params() gets called
1017with an L<OSSL_PARAM(3)> item with the key "tlsivfixed"
1018(B<OSSL_CIPHER_PARAM_AEAD_TLS1_IV_FIXED>).
1019
1020=item EVP_CTRL_AEAD_SET_MAC_KEY
1021
1022When used with a fetched B<EVP_CIPHER>, EVP_CIPHER_CTX_set_params() gets called
1023with an L<OSSL_PARAM(3)> item with the key "mackey"
1024(B<OSSL_CIPHER_PARAM_AEAD_MAC_KEY>).
1025
1026=item EVP_CTRL_AEAD_SET_TAG and EVP_CTRL_AEAD_GET_TAG
1027
1028When used with a fetched B<EVP_CIPHER>, EVP_CIPHER_CTX_set_params() and
1029EVP_CIPHER_CTX_get_params() get called with an L<OSSL_PARAM(3)> item with the
1030key "tag" (B<OSSL_CIPHER_PARAM_AEAD_TAG>).
1031
1032=item EVP_CTRL_CCM_SET_L
1033
1034When used with a fetched B<EVP_CIPHER>, EVP_CIPHER_CTX_set_params() gets called
1035with an L<OSSL_PARAM(3)> item with the key "ivlen" (B<OSSL_CIPHER_PARAM_IVLEN>)
1036with a value of (15 - L)
1037
1038=item EVP_CTRL_COPY
1039
1040There is no OSSL_PARAM mapping for this. Use EVP_CIPHER_CTX_copy() instead.
1041
1042=item EVP_CTRL_GCM_SET_IV_INV
1043
1044When used with a fetched B<EVP_CIPHER>, EVP_CIPHER_CTX_set_params() gets called
1045with an L<OSSL_PARAM(3)> item with the key "tlsivinv"
1046(B<OSSL_CIPHER_PARAM_AEAD_TLS1_SET_IV_INV>).
1047
1048=item EVP_CTRL_RAND_KEY
1049
1050When used with a fetched B<EVP_CIPHER>, EVP_CIPHER_CTX_set_params() gets called
1051with an L<OSSL_PARAM(3)> item with the key "randkey"
1052(B<OSSL_CIPHER_PARAM_RANDOM_KEY>).
1053
1054=item EVP_CTRL_SET_KEY_LENGTH
1055
1056When used with a fetched B<EVP_CIPHER>, EVP_CIPHER_CTX_set_params() gets called
1057with an L<OSSL_PARAM(3)> item with the key "keylen" (B<OSSL_CIPHER_PARAM_KEYLEN>).
1058
1059=item EVP_CTRL_SET_RC2_KEY_BITS and EVP_CTRL_GET_RC2_KEY_BITS
1060
1061When used with a fetched B<EVP_CIPHER>, EVP_CIPHER_CTX_set_params() and
1062EVP_CIPHER_CTX_get_params() get called with an L<OSSL_PARAM(3)> item with the
1063key "keybits" (B<OSSL_CIPHER_PARAM_RC2_KEYBITS>).
1064
1065=item EVP_CTRL_SET_RC5_ROUNDS and EVP_CTRL_GET_RC5_ROUNDS
1066
1067When used with a fetched B<EVP_CIPHER>, EVP_CIPHER_CTX_set_params() and
1068EVP_CIPHER_CTX_get_params() get called with an L<OSSL_PARAM(3)> item with the
1069key "rounds" (B<OSSL_CIPHER_PARAM_ROUNDS>).
1070
1071=item EVP_CTRL_SET_SPEED
1072
1073When used with a fetched B<EVP_CIPHER>, EVP_CIPHER_CTX_set_params() gets called
1074with an L<OSSL_PARAM(3)> item with the key "speed" (B<OSSL_CIPHER_PARAM_SPEED>).
1075
1076=item EVP_CTRL_GCM_IV_GEN
1077
1078When used with a fetched B<EVP_CIPHER>, EVP_CIPHER_CTX_get_params() gets called
1079with an L<OSSL_PARAM(3)> item with the key
1080"tlsivgen" (B<OSSL_CIPHER_PARAM_AEAD_TLS1_GET_IV_GEN>).
1081
1082=item EVP_CTRL_AEAD_TLS1_AAD
1083
1084When used with a fetched B<EVP_CIPHER>, EVP_CIPHER_CTX_set_params() get called
1085with an L<OSSL_PARAM(3)> item with the key
1086"tlsaad" (B<OSSL_CIPHER_PARAM_AEAD_TLS1_AAD>)
1087followed by EVP_CIPHER_CTX_get_params() with a key of
1088"tlsaadpad" (B<OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD>).
1089
1090=item EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE
1091
1092When used with a fetched B<EVP_CIPHER>,
1093EVP_CIPHER_CTX_set_params() gets called with an L<OSSL_PARAM(3)> item with the
1094key OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_SEND_FRAGMENT
1095followed by EVP_CIPHER_CTX_get_params() with a key of
1096"tls1multi_maxbufsz" (B<OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_BUFSIZE>).
1097
1098=item EVP_CTRL_TLS1_1_MULTIBLOCK_AAD
1099
1100When used with a fetched B<EVP_CIPHER>, EVP_CIPHER_CTX_set_params() gets called
1101with L<OSSL_PARAM(3)> items with the keys
1102"tls1multi_aad" (B<OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD>) and
1103"tls1multi_interleave" (B<OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE>)
1104followed by EVP_CIPHER_CTX_get_params() with keys of
1105"tls1multi_aadpacklen" (B<OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD_PACKLEN>) and
1106"tls1multi_interleave" (B<OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE>).
1107
1108=item EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT
1109
1110When used with a fetched B<EVP_CIPHER>, EVP_CIPHER_CTX_set_params() gets called
1111with L<OSSL_PARAM(3)> items with the keys
1112"tls1multi_enc" (B<OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC>),
1113"tls1multi_encin" (B<OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_IN>) and
1114"tls1multi_interleave" (B<OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE>),
1115followed by EVP_CIPHER_CTX_get_params() with a key of
1116"tls1multi_enclen" (B<OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_LEN>).
1117
1118=back
1119
1120=head1 FLAGS
1121
1122EVP_CIPHER_CTX_set_flags(), EVP_CIPHER_CTX_clear_flags() and EVP_CIPHER_CTX_test_flags().
1123can be used to manipulate and test these B<EVP_CIPHER_CTX> flags:
1124
1125=over 4
1126
1127=item EVP_CIPH_NO_PADDING
1128
1129Used by EVP_CIPHER_CTX_set_padding().
1130
1131See also L</Gettable and Settable EVP_CIPHER_CTX parameters> "padding"
1132
1133=item EVP_CIPH_FLAG_LENGTH_BITS
1134
1135See L</Settable EVP_CIPHER_CTX parameters> "use-bits".
1136
1137=item EVP_CIPHER_CTX_FLAG_WRAP_ALLOW
1138
1139Used for Legacy purposes only. This flag needed to be set to indicate the
1140cipher handled wrapping.
1141
1142=back
1143
1144EVP_CIPHER_flags() uses the following flags that
1145have mappings to L</Gettable EVP_CIPHER parameters>:
1146
1147=over 4
1148
1149=item EVP_CIPH_FLAG_AEAD_CIPHER
1150
1151See L</Gettable EVP_CIPHER parameters> "aead".
1152
1153=item EVP_CIPH_CUSTOM_IV
1154
1155See L</Gettable EVP_CIPHER parameters> "custom-iv".
1156
1157=item EVP_CIPH_FLAG_CTS
1158
1159See L</Gettable EVP_CIPHER parameters> "cts".
1160
1161=item EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK;
1162
1163See L</Gettable EVP_CIPHER parameters> "tls-multi".
1164
1165=item EVP_CIPH_RAND_KEY
1166
1167See L</Gettable EVP_CIPHER parameters> "has-randkey".
1168
1169=back
1170
1171EVP_CIPHER_flags() uses the following flags for legacy purposes only:
1172
1173=over 4
1174
1175=item EVP_CIPH_VARIABLE_LENGTH
1176
1177=item EVP_CIPH_FLAG_CUSTOM_CIPHER
1178
1179=item EVP_CIPH_ALWAYS_CALL_INIT
1180
1181=item EVP_CIPH_CTRL_INIT
1182
1183=item EVP_CIPH_CUSTOM_KEY_LENGTH
1184
1185=item EVP_CIPH_CUSTOM_COPY
1186
1187=item EVP_CIPH_FLAG_DEFAULT_ASN1
1188
1189See L<EVP_CIPHER_meth_set_flags(3)> for further information related to the above
1190flags.
1191
1192=back
1193
1194=head1 RETURN VALUES
1195
1196EVP_CIPHER_fetch() returns a pointer to a B<EVP_CIPHER> for success
1197and B<NULL> for failure.
1198
1199EVP_CIPHER_up_ref() returns 1 for success or 0 otherwise.
1200
1201EVP_CIPHER_CTX_new() returns a pointer to a newly created
1202B<EVP_CIPHER_CTX> for success and B<NULL> for failure.
1203
1204EVP_CIPHER_CTX_dup() returns a new EVP_MD_CTX if successful or NULL on failure.
1205
1206EVP_CIPHER_CTX_copy() returns 1 if successful or 0 for failure.
1207
1208EVP_EncryptInit_ex2(), EVP_EncryptUpdate() and EVP_EncryptFinal_ex()
1209return 1 for success and 0 for failure.
1210
1211EVP_DecryptInit_ex2() and EVP_DecryptUpdate() return 1 for success and 0 for failure.
1212EVP_DecryptFinal_ex() returns 0 if the decrypt failed or 1 for success.
1213
1214EVP_CipherInit_ex2() and EVP_CipherUpdate() return 1 for success and 0 for failure.
1215EVP_CipherFinal_ex() returns 0 for a decryption failure or 1 for success.
1216
1217EVP_Cipher() returns 1 on success or 0 on failure, if the flag
1218B<EVP_CIPH_FLAG_CUSTOM_CIPHER> is not set for the cipher.
1219EVP_Cipher() returns the number of bytes written to I<out> for encryption / decryption, or
1220the number of bytes authenticated in a call specifying AAD for an AEAD cipher, if the flag
1221B<EVP_CIPH_FLAG_CUSTOM_CIPHER> is set for the cipher.
1222
1223EVP_CIPHER_CTX_reset() returns 1 for success and 0 for failure.
1224
1225EVP_get_cipherbyname(), EVP_get_cipherbynid() and EVP_get_cipherbyobj()
1226return an B<EVP_CIPHER> structure or NULL on error.
1227
1228EVP_CIPHER_get_nid() and EVP_CIPHER_CTX_get_nid() return a NID.
1229
1230EVP_CIPHER_get_block_size() and EVP_CIPHER_CTX_get_block_size() return the
1231block size.
1232
1233EVP_CIPHER_get_key_length() and EVP_CIPHER_CTX_get_key_length() return the key
1234length.
1235
1236EVP_CIPHER_CTX_set_padding() always returns 1.
1237
1238EVP_CIPHER_get_iv_length() and EVP_CIPHER_CTX_get_iv_length() return the IV
1239length or zero if the cipher does not use an IV.
1240
1241EVP_CIPHER_CTX_get_tag_length() return the tag length or zero if the cipher
1242does not use a tag.
1243
1244EVP_CIPHER_get_type() and EVP_CIPHER_CTX_get_type() return the NID of the
1245cipher's OBJECT IDENTIFIER or NID_undef if it has no defined
1246OBJECT IDENTIFIER.
1247
1248EVP_CIPHER_CTX_cipher() returns an B<EVP_CIPHER> structure.
1249
1250EVP_CIPHER_CTX_get_num() returns a nonnegative num value or
1251B<EVP_CTRL_RET_UNSUPPORTED> if the implementation does not support the call
1252or on any other error.
1253
1254EVP_CIPHER_CTX_set_num() returns 1 on success and 0 if the implementation
1255does not support the call or on any other error.
1256
1257EVP_CIPHER_CTX_is_encrypting() returns 1 if the I<ctx> is set up for encryption
12580 otherwise.
1259
1260EVP_CIPHER_param_to_asn1() and EVP_CIPHER_asn1_to_param() return greater
1261than zero for success and zero or a negative number on failure.
1262
1263EVP_CIPHER_CTX_rand_key() returns 1 for success and zero or a negative number
1264for failure.
1265
1266EVP_CIPHER_names_do_all() returns 1 if the callback was called for all names.
1267A return value of 0 means that the callback was not called for any names.
1268
1269=head1 CIPHER LISTING
1270
1271All algorithms have a fixed key length unless otherwise stated.
1272
1273Refer to L</SEE ALSO> for the full list of ciphers available through the EVP
1274interface.
1275
1276=over 4
1277
1278=item EVP_enc_null()
1279
1280Null cipher: does nothing.
1281
1282=back
1283
1284=head1 AEAD INTERFACE
1285
1286The EVP interface for Authenticated Encryption with Associated Data (AEAD)
1287modes are subtly altered and several additional I<ctrl> operations are supported
1288depending on the mode specified.
1289
1290To specify additional authenticated data (AAD), a call to EVP_CipherUpdate(),
1291EVP_EncryptUpdate() or EVP_DecryptUpdate() should be made with the output
1292parameter I<out> set to B<NULL>. In this case, on success, the parameter
1293I<outl> is set to the number of bytes authenticated.
1294
1295When decrypting, the return value of EVP_DecryptFinal() or EVP_CipherFinal()
1296indicates whether the operation was successful. If it does not indicate success,
1297the authentication operation has failed and any output data B<MUST NOT> be used
1298as it is corrupted.
1299
1300=head2 GCM and OCB Modes
1301
1302The following I<ctrl>s are supported in GCM and OCB modes.
1303
1304=over 4
1305
1306=item EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, ivlen, NULL)
1307
1308Sets the IV length. This call can only be made before specifying an IV. If
1309not called a default IV length is used.
1310
1311For GCM AES and OCB AES the default is 12 (i.e. 96 bits). For OCB mode the
1312maximum is 15.
1313
1314=item EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, taglen, tag)
1315
1316Writes C<taglen> bytes of the tag value to the buffer indicated by C<tag>.
1317This call can only be made when encrypting data and B<after> all data has been
1318processed (e.g. after an EVP_EncryptFinal() call).
1319
1320For OCB, C<taglen> must either be 16 or the value previously set via
1321B<EVP_CTRL_AEAD_SET_TAG>.
1322
1323=item EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen, tag)
1324
1325When decrypting, this call sets the expected tag to C<taglen> bytes from C<tag>.
1326C<taglen> must be between 1 and 16 inclusive.
1327The tag must be set prior to any call to EVP_DecryptFinal() or
1328EVP_DecryptFinal_ex().
1329
1330For GCM, this call is only valid when decrypting data.
1331
1332For OCB, this call is valid when decrypting data to set the expected tag,
1333and when encrypting to set the desired tag length.
1334
1335In OCB mode, calling this when encrypting with C<tag> set to C<NULL> sets the
1336tag length. The tag length can only be set before specifying an IV. If this is
1337not called prior to setting the IV during encryption, then a default tag length
1338is used.
1339
1340For OCB AES, the default tag length is 16 (i.e. 128 bits). It is also the
1341maximum tag length for OCB.
1342
1343=back
1344
1345=head2 CCM Mode
1346
1347The EVP interface for CCM mode is similar to that of the GCM mode but with a
1348few additional requirements and different I<ctrl> values.
1349
1350For CCM mode, the total plaintext or ciphertext length B<MUST> be passed to
1351EVP_CipherUpdate(), EVP_EncryptUpdate() or EVP_DecryptUpdate() with the output
1352and input parameters (I<in> and I<out>) set to B<NULL> and the length passed in
1353the I<inl> parameter.
1354
1355The following I<ctrl>s are supported in CCM mode.
1356
1357=over 4
1358
1359=item EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen, tag)
1360
1361This call is made to set the expected B<CCM> tag value when decrypting or
1362the length of the tag (with the C<tag> parameter set to NULL) when encrypting.
1363The tag length is often referred to as B<M>. If not set a default value is
1364used (12 for AES). When decrypting, the tag needs to be set before passing
1365in data to be decrypted, but as in GCM and OCB mode, it can be set after
1366passing additional authenticated data (see L</AEAD INTERFACE>).
1367
1368=item EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_L, ivlen, NULL)
1369
1370Sets the CCM B<L> value. If not set a default is used (8 for AES).
1371
1372=item EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, ivlen, NULL)
1373
1374Sets the CCM nonce (IV) length. This call can only be made before specifying a
1375nonce value. The nonce length is given by B<15 - L> so it is 7 by default for
1376AES.
1377
1378=back
1379
1380=head2 SIV Mode
1381
1382For SIV mode ciphers the behaviour of the EVP interface is subtly
1383altered and several additional ctrl operations are supported.
1384
1385To specify any additional authenticated data (AAD) and/or a Nonce, a call to
1386EVP_CipherUpdate(), EVP_EncryptUpdate() or EVP_DecryptUpdate() should be made
1387with the output parameter I<out> set to B<NULL>.
1388
1389RFC5297 states that the Nonce is the last piece of AAD before the actual
1390encrypt/decrypt takes place. The API does not differentiate the Nonce from
1391other AAD.
1392
1393When decrypting the return value of EVP_DecryptFinal() or EVP_CipherFinal()
1394indicates if the operation was successful. If it does not indicate success
1395the authentication operation has failed and any output data B<MUST NOT>
1396be used as it is corrupted.
1397
1398The API does not store the the SIV (Synthetic Initialization Vector) in
1399the cipher text. Instead, it is stored as the tag within the EVP_CIPHER_CTX.
1400The SIV must be retrieved from the context after encryption, and set into
1401the context before decryption.
1402
1403This differs from RFC5297 in that the cipher output from encryption, and
1404the cipher input to decryption, does not contain the SIV. This also means
1405that the plain text and cipher text lengths are identical.
1406
1407The following ctrls are supported in SIV mode, and are used to get and set
1408the Synthetic Initialization Vector:
1409
1410=over 4
1411
1412=item EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, taglen, tag);
1413
1414Writes I<taglen> bytes of the tag value (the Synthetic Initialization Vector)
1415to the buffer indicated by I<tag>. This call can only be made when encrypting
1416data and B<after> all data has been processed (e.g. after an EVP_EncryptFinal()
1417call). For SIV mode the taglen must be 16.
1418
1419=item EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen, tag);
1420
1421Sets the expected tag (the Synthetic Initialization Vector) to I<taglen>
1422bytes from I<tag>. This call is only legal when decrypting data and must be
1423made B<before> any data is processed (e.g. before any EVP_DecryptUpdate()
1424calls). For SIV mode the taglen must be 16.
1425
1426=back
1427
1428SIV mode makes two passes over the input data, thus, only one call to
1429EVP_CipherUpdate(), EVP_EncryptUpdate() or EVP_DecryptUpdate() should be made
1430with I<out> set to a non-B<NULL> value. A call to EVP_DecryptFinal() or
1431EVP_CipherFinal() is not required, but will indicate if the update
1432operation succeeded.
1433
1434=head2 ChaCha20-Poly1305
1435
1436The following I<ctrl>s are supported for the ChaCha20-Poly1305 AEAD algorithm.
1437
1438=over 4
1439
1440=item EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, ivlen, NULL)
1441
1442Sets the nonce length. This call is now redundant since the only valid value
1443is the default length of 12 (i.e. 96 bits).
1444Prior to OpenSSL 3.0 a nonce of less than 12 bytes could be used to automatically
1445pad the iv with leading 0 bytes to make it 12 bytes in length.
1446
1447=item EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, taglen, tag)
1448
1449Writes C<taglen> bytes of the tag value to the buffer indicated by C<tag>.
1450This call can only be made when encrypting data and B<after> all data has been
1451processed (e.g. after an EVP_EncryptFinal() call).
1452
1453C<taglen> specified here must be 16 (B<POLY1305_BLOCK_SIZE>, i.e. 128-bits) or
1454less.
1455
1456=item EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen, tag)
1457
1458Sets the expected tag to C<taglen> bytes from C<tag>.
1459The tag length can only be set before specifying an IV.
1460C<taglen> must be between 1 and 16 (B<POLY1305_BLOCK_SIZE>) inclusive.
1461This call is only valid when decrypting data.
1462
1463=back
1464
1465=head1 NOTES
1466
1467Where possible the B<EVP> interface to symmetric ciphers should be used in
1468preference to the low-level interfaces. This is because the code then becomes
1469transparent to the cipher used and much more flexible. Additionally, the
1470B<EVP> interface will ensure the use of platform specific cryptographic
1471acceleration such as AES-NI (the low-level interfaces do not provide the
1472guarantee).
1473
1474PKCS padding works by adding B<n> padding bytes of value B<n> to make the total
1475length of the encrypted data a multiple of the block size. Padding is always
1476added so if the data is already a multiple of the block size B<n> will equal
1477the block size. For example if the block size is 8 and 11 bytes are to be
1478encrypted then 5 padding bytes of value 5 will be added.
1479
1480When decrypting the final block is checked to see if it has the correct form.
1481
1482Although the decryption operation can produce an error if padding is enabled,
1483it is not a strong test that the input data or key is correct. A random block
1484has better than 1 in 256 chance of being of the correct format and problems with
1485the input data earlier on will not produce a final decrypt error.
1486
1487If padding is disabled then the decryption operation will always succeed if
1488the total amount of data decrypted is a multiple of the block size.
1489
1490The functions EVP_EncryptInit(), EVP_EncryptInit_ex(),
1491EVP_EncryptFinal(), EVP_DecryptInit(), EVP_DecryptInit_ex(),
1492EVP_CipherInit(), EVP_CipherInit_ex() and EVP_CipherFinal() are obsolete
1493but are retained for compatibility with existing code. New code should
1494use EVP_EncryptInit_ex2(), EVP_EncryptFinal_ex(), EVP_DecryptInit_ex2(),
1495EVP_DecryptFinal_ex(), EVP_CipherInit_ex2() and EVP_CipherFinal_ex()
1496because they can reuse an existing context without allocating and freeing
1497it up on each call.
1498
1499There are some differences between functions EVP_CipherInit() and
1500EVP_CipherInit_ex(), significant in some circumstances. EVP_CipherInit() fills
1501the passed context object with zeros. As a consequence, EVP_CipherInit() does
1502not allow step-by-step initialization of the ctx when the I<key> and I<iv> are
1503passed in separate calls. It also means that the flags set for the CTX are
1504removed, and it is especially important for the
1505B<EVP_CIPHER_CTX_FLAG_WRAP_ALLOW> flag treated specially in
1506EVP_CipherInit_ex().
1507
1508Ignoring failure returns of the B<EVP_CIPHER_CTX> initialization functions can
1509lead to subsequent undefined behavior when calling the functions that update or
1510finalize the context. The only valid calls on the B<EVP_CIPHER_CTX> when
1511initialization fails are calls that attempt another initialization of the
1512context or release the context.
1513
1514EVP_get_cipherbynid(), and EVP_get_cipherbyobj() are implemented as macros.
1515
1516=head1 BUGS
1517
1518B<EVP_MAX_KEY_LENGTH> and B<EVP_MAX_IV_LENGTH> only refer to the internal
1519ciphers with default key lengths. If custom ciphers exceed these values the
1520results are unpredictable. This is because it has become standard practice to
1521define a generic key as a fixed unsigned char array containing
1522B<EVP_MAX_KEY_LENGTH> bytes.
1523
1524The ASN1 code is incomplete (and sometimes inaccurate) it has only been tested
1525for certain common S/MIME ciphers (RC2, DES, triple DES) in CBC mode.
1526
1527=head1 EXAMPLES
1528
1529Encrypt a string using IDEA:
1530
1531 int do_crypt(char *outfile)
1532 {
1533 unsigned char outbuf[1024];
1534 int outlen, tmplen;
1535 /*
1536 * Bogus key and IV: we'd normally set these from
1537 * another source.
1538 */
1539 unsigned char key[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
1540 unsigned char iv[] = {1,2,3,4,5,6,7,8};
1541 char intext[] = "Some Crypto Text";
1542 EVP_CIPHER_CTX *ctx;
1543 FILE *out;
1544
1545 ctx = EVP_CIPHER_CTX_new();
1546 if (!EVP_EncryptInit_ex2(ctx, EVP_idea_cbc(), key, iv, NULL)) {
1547 /* Error */
1548 EVP_CIPHER_CTX_free(ctx);
1549 return 0;
1550 }
1551
1552 if (!EVP_EncryptUpdate(ctx, outbuf, &outlen, intext, strlen(intext))) {
1553 /* Error */
1554 EVP_CIPHER_CTX_free(ctx);
1555 return 0;
1556 }
1557 /*
1558 * Buffer passed to EVP_EncryptFinal() must be after data just
1559 * encrypted to avoid overwriting it.
1560 */
1561 if (!EVP_EncryptFinal_ex(ctx, outbuf + outlen, &tmplen)) {
1562 /* Error */
1563 EVP_CIPHER_CTX_free(ctx);
1564 return 0;
1565 }
1566 outlen += tmplen;
1567 EVP_CIPHER_CTX_free(ctx);
1568 /*
1569 * Need binary mode for fopen because encrypted data is
1570 * binary data. Also cannot use strlen() on it because
1571 * it won't be NUL terminated and may contain embedded
1572 * NULs.
1573 */
1574 out = fopen(outfile, "wb");
1575 if (out == NULL) {
1576 /* Error */
1577 return 0;
1578 }
1579 fwrite(outbuf, 1, outlen, out);
1580 fclose(out);
1581 return 1;
1582 }
1583
1584The ciphertext from the above example can be decrypted using the B<openssl>
1585utility with the command line (shown on two lines for clarity):
1586
1587 openssl idea -d \
1588 -K 000102030405060708090A0B0C0D0E0F -iv 0102030405060708 <filename
1589
1590General encryption and decryption function example using FILE I/O and AES128
1591with a 128-bit key:
1592
1593 int do_crypt(FILE *in, FILE *out, int do_encrypt)
1594 {
1595 /* Allow enough space in output buffer for additional block */
1596 unsigned char inbuf[1024], outbuf[1024 + EVP_MAX_BLOCK_LENGTH];
1597 int inlen, outlen;
1598 EVP_CIPHER_CTX *ctx;
1599 /*
1600 * Bogus key and IV: we'd normally set these from
1601 * another source.
1602 */
1603 unsigned char key[] = "0123456789abcdeF";
1604 unsigned char iv[] = "1234567887654321";
1605
1606 /* Don't set key or IV right away; we want to check lengths */
1607 ctx = EVP_CIPHER_CTX_new();
1608 if (!EVP_CipherInit_ex2(ctx, EVP_aes_128_cbc(), NULL, NULL,
1609 do_encrypt, NULL)) {
1610 /* Error */
1611 EVP_CIPHER_CTX_free(ctx);
1612 return 0;
1613 }
1614 OPENSSL_assert(EVP_CIPHER_CTX_get_key_length(ctx) == 16);
1615 OPENSSL_assert(EVP_CIPHER_CTX_get_iv_length(ctx) == 16);
1616
1617 /* Now we can set key and IV */
1618 if (!EVP_CipherInit_ex2(ctx, NULL, key, iv, do_encrypt, NULL)) {
1619 /* Error */
1620 EVP_CIPHER_CTX_free(ctx);
1621 return 0;
1622 }
1623
1624 for (;;) {
1625 inlen = fread(inbuf, 1, 1024, in);
1626 if (inlen <= 0)
1627 break;
1628 if (!EVP_CipherUpdate(ctx, outbuf, &outlen, inbuf, inlen)) {
1629 /* Error */
1630 EVP_CIPHER_CTX_free(ctx);
1631 return 0;
1632 }
1633 fwrite(outbuf, 1, outlen, out);
1634 }
1635 if (!EVP_CipherFinal_ex(ctx, outbuf, &outlen)) {
1636 /* Error */
1637 EVP_CIPHER_CTX_free(ctx);
1638 return 0;
1639 }
1640 fwrite(outbuf, 1, outlen, out);
1641
1642 EVP_CIPHER_CTX_free(ctx);
1643 return 1;
1644 }
1645
1646Encryption using AES-CBC with a 256-bit key with "CS1" ciphertext stealing.
1647
1648 int encrypt(const unsigned char *key, const unsigned char *iv,
1649 const unsigned char *msg, size_t msg_len, unsigned char *out)
1650 {
1651 /*
1652 * This assumes that key size is 32 bytes and the iv is 16 bytes.
1653 * For ciphertext stealing mode the length of the ciphertext "out" will be
1654 * the same size as the plaintext size "msg_len".
1655 * The "msg_len" can be any size >= 16.
1656 */
1657 int ret = 0, encrypt = 1, outlen, len;
1658 EVP_CIPHER_CTX *ctx = NULL;
1659 EVP_CIPHER *cipher = NULL;
1660 OSSL_PARAM params[2];
1661
1662 ctx = EVP_CIPHER_CTX_new();
1663 cipher = EVP_CIPHER_fetch(NULL, "AES-256-CBC-CTS", NULL);
1664 if (ctx == NULL || cipher == NULL)
1665 goto err;
1666
1667 /*
1668 * The default is "CS1" so this is not really needed,
1669 * but would be needed to set either "CS2" or "CS3".
1670 */
1671 params[0] = OSSL_PARAM_construct_utf8_string(OSSL_CIPHER_PARAM_CTS_MODE,
1672 "CS1", 0);
1673 params[1] = OSSL_PARAM_construct_end();
1674
1675 if (!EVP_CipherInit_ex2(ctx, cipher, key, iv, encrypt, params))
1676 goto err;
1677
1678 /* NOTE: CTS mode does not support multiple calls to EVP_CipherUpdate() */
1679 if (!EVP_CipherUpdate(ctx, out, &outlen, msg, msg_len))
1680 goto err;
1681 if (!EVP_CipherFinal_ex(ctx, out + outlen, &len))
1682 goto err;
1683 ret = 1;
1684 err:
1685 EVP_CIPHER_free(cipher);
1686 EVP_CIPHER_CTX_free(ctx);
1687 return ret;
1688 }
1689
1690=head1 SEE ALSO
1691
1692L<evp(7)>,
1693L<property(7)>,
1694L<crypto(7)/ALGORITHM FETCHING>,
1695L<provider-cipher(7)>,
1696L<life_cycle-cipher(7)>
1697
1698Supported ciphers are listed in:
1699
1700L<EVP_aes_128_gcm(3)>,
1701L<EVP_aria_128_gcm(3)>,
1702L<EVP_bf_cbc(3)>,
1703L<EVP_camellia_128_ecb(3)>,
1704L<EVP_cast5_cbc(3)>,
1705L<EVP_chacha20(3)>,
1706L<EVP_des_cbc(3)>,
1707L<EVP_desx_cbc(3)>,
1708L<EVP_idea_cbc(3)>,
1709L<EVP_rc2_cbc(3)>,
1710L<EVP_rc4(3)>,
1711L<EVP_rc5_32_12_16_cbc(3)>,
1712L<EVP_seed_cbc(3)>,
1713L<EVP_sm4_cbc(3)>,
1714
1715=head1 HISTORY
1716
1717Support for OCB mode was added in OpenSSL 1.1.0.
1718
1719B<EVP_CIPHER_CTX> was made opaque in OpenSSL 1.1.0. As a result,
1720EVP_CIPHER_CTX_reset() appeared and EVP_CIPHER_CTX_cleanup()
1721disappeared. EVP_CIPHER_CTX_init() remains as an alias for
1722EVP_CIPHER_CTX_reset().
1723
1724The EVP_CIPHER_CTX_cipher() function was deprecated in OpenSSL 3.0; use
1725EVP_CIPHER_CTX_get0_cipher() instead.
1726
1727The EVP_EncryptInit_ex2(), EVP_DecryptInit_ex2(), EVP_CipherInit_ex2(),
1728EVP_CIPHER_fetch(), EVP_CIPHER_free(), EVP_CIPHER_up_ref(),
1729EVP_CIPHER_CTX_get0_cipher(), EVP_CIPHER_CTX_get1_cipher(),
1730EVP_CIPHER_get_params(), EVP_CIPHER_CTX_set_params(),
1731EVP_CIPHER_CTX_get_params(), EVP_CIPHER_gettable_params(),
1732EVP_CIPHER_settable_ctx_params(), EVP_CIPHER_gettable_ctx_params(),
1733EVP_CIPHER_CTX_settable_params() and EVP_CIPHER_CTX_gettable_params()
1734functions were added in 3.0.
1735
1736The EVP_CIPHER_nid(), EVP_CIPHER_name(), EVP_CIPHER_block_size(),
1737EVP_CIPHER_key_length(), EVP_CIPHER_iv_length(), EVP_CIPHER_flags(),
1738EVP_CIPHER_mode(), EVP_CIPHER_type(), EVP_CIPHER_CTX_nid(),
1739EVP_CIPHER_CTX_block_size(), EVP_CIPHER_CTX_key_length(),
1740EVP_CIPHER_CTX_iv_length(), EVP_CIPHER_CTX_tag_length(),
1741EVP_CIPHER_CTX_num(), EVP_CIPHER_CTX_type(), and EVP_CIPHER_CTX_mode()
1742functions were renamed to include C<get> or C<get0> in their names in
1743OpenSSL 3.0, respectively. The old names are kept as non-deprecated
1744alias macros.
1745
1746The EVP_CIPHER_CTX_encrypting() function was renamed to
1747EVP_CIPHER_CTX_is_encrypting() in OpenSSL 3.0. The old name is kept as
1748non-deprecated alias macro.
1749
1750The EVP_CIPHER_CTX_flags() macro was deprecated in OpenSSL 1.1.0.
1751
1752EVP_CIPHER_CTX_dup() was added in OpenSSL 3.1.
1753
1754=head1 COPYRIGHT
1755
1756Copyright 2000-2023 The OpenSSL Project Authors. All Rights Reserved.
1757
1758Licensed under the Apache License 2.0 (the "License"). You may not use
1759this file except in compliance with the License. You can obtain a copy
1760in the file LICENSE in the source distribution or at
1761L<https://www.openssl.org/source/license.html>.
1762
1763=cut
Note: See TracBrowser for help on using the repository browser.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette