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