VirtualBox

source: vbox/trunk/src/libs/openssl-3.3.2/doc/man3/EVP_EncryptInit.pod

Last change on this file was 108206, checked in by vboxsync, 3 months ago

openssl-3.3.2: Exported all files to OSE and removed .scm-settings ​bugref:10757

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