]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/crypto/EVP_EncryptInit.pod
Remove HAMC_cleanup
[thirdparty/openssl.git] / doc / crypto / EVP_EncryptInit.pod
CommitLineData
72b60351
DSH
1=pod
2
3=head1 NAME
4
3811eed8
DSH
5EVP_CIPHER_CTX_init, EVP_EncryptInit_ex, EVP_EncryptUpdate,
6EVP_EncryptFinal_ex, EVP_DecryptInit_ex, EVP_DecryptUpdate,
7EVP_DecryptFinal_ex, EVP_CipherInit_ex, EVP_CipherUpdate,
8EVP_CipherFinal_ex, EVP_CIPHER_CTX_set_key_length,
9EVP_CIPHER_CTX_ctrl, EVP_CIPHER_CTX_cleanup, EVP_EncryptInit,
10EVP_EncryptFinal, EVP_DecryptInit, EVP_DecryptFinal,
11EVP_CipherInit, EVP_CipherFinal, EVP_get_cipherbyname,
12EVP_get_cipherbynid, EVP_get_cipherbyobj, EVP_CIPHER_nid,
13EVP_CIPHER_block_size, EVP_CIPHER_key_length, EVP_CIPHER_iv_length,
14EVP_CIPHER_flags, EVP_CIPHER_mode, EVP_CIPHER_type, EVP_CIPHER_CTX_cipher,
15EVP_CIPHER_CTX_nid, EVP_CIPHER_CTX_block_size, EVP_CIPHER_CTX_key_length,
16EVP_CIPHER_CTX_iv_length, EVP_CIPHER_CTX_get_app_data,
17EVP_CIPHER_CTX_set_app_data, EVP_CIPHER_CTX_type, EVP_CIPHER_CTX_flags,
18EVP_CIPHER_CTX_mode, EVP_CIPHER_param_to_asn1, EVP_CIPHER_asn1_to_param,
aafbe1cc
MC
19EVP_CIPHER_CTX_set_padding, EVP_enc_null, EVP_des_cbc, EVP_des_ecb,
20EVP_des_cfb, EVP_des_ofb, EVP_des_ede_cbc, EVP_des_ede, EVP_des_ede_ofb,
21EVP_des_ede_cfb, EVP_des_ede3_cbc, EVP_des_ede3, EVP_des_ede3_ofb,
22EVP_des_ede3_cfb, EVP_desx_cbc, EVP_rc4, EVP_rc4_40, EVP_idea_cbc,
e03af178 23EVP_idea_ecb, EVP_idea_cfb, EVP_idea_ofb, EVP_rc2_cbc,
aafbe1cc
MC
24EVP_rc2_ecb, EVP_rc2_cfb, EVP_rc2_ofb, EVP_rc2_40_cbc, EVP_rc2_64_cbc,
25EVP_bf_cbc, EVP_bf_ecb, EVP_bf_cfb, EVP_bf_ofb, EVP_cast5_cbc,
26EVP_cast5_ecb, EVP_cast5_cfb, EVP_cast5_ofb, EVP_rc5_32_12_16_cbc,
c7497f34
RS
27EVP_rc5_32_12_16_ecb, EVP_rc5_32_12_16_cfb, EVP_rc5_32_12_16_ofb,
28EVP_aes_128_cbc, EVP_aes_128_ecb, EVP_aes_128_cfb, EVP_aes_128_ofb,
29EVP_aes_192_cbc, EVP_aes_192_ecb, EVP_aes_192_cfb, EVP_aes_192_ofb,
30EVP_aes_256_cbc, EVP_aes_256_ecb, EVP_aes_256_cfb, EVP_aes_256_ofb,
31EVP_aes_128_gcm, EVP_aes_192_gcm, EVP_aes_256_gcm,
32EVP_aes_128_ccm, EVP_aes_192_ccm, EVP_aes_256_ccm - EVP cipher routines
72b60351
DSH
33
34=head1 SYNOPSIS
35
36 #include <openssl/evp.h>
37
0e304b7f 38 void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *a);
3811eed8
DSH
39
40 int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
41 ENGINE *impl, unsigned char *key, unsigned char *iv);
a91dedca 42 int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
4d524e10 43 int *outl, unsigned char *in, int inl);
3811eed8
DSH
44 int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out,
45 int *outl);
46
47 int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
48 ENGINE *impl, unsigned char *key, unsigned char *iv);
49 int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
50 int *outl, unsigned char *in, int inl);
51 int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm,
52 int *outl);
53
54 int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
55 ENGINE *impl, unsigned char *key, unsigned char *iv, int enc);
56 int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
57 int *outl, unsigned char *in, int inl);
58 int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm,
59 int *outl);
60
61 int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
62 unsigned char *key, unsigned char *iv);
a91dedca 63 int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out,
4d524e10
UM
64 int *outl);
65
a91dedca 66 int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
4d524e10 67 unsigned char *key, unsigned char *iv);
4d524e10
UM
68 int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm,
69 int *outl);
70
a91dedca 71 int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
4d524e10 72 unsigned char *key, unsigned char *iv, int enc);
4d524e10
UM
73 int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm,
74 int *outl);
72b60351 75
f2e5ca84 76 int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *x, int padding);
a91dedca
DSH
77 int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen);
78 int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr);
79 int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *a);
72b60351
DSH
80
81 const EVP_CIPHER *EVP_get_cipherbyname(const char *name);
82 #define EVP_get_cipherbynid(a) EVP_get_cipherbyname(OBJ_nid2sn(a))
83 #define EVP_get_cipherbyobj(a) EVP_get_cipherbynid(OBJ_obj2nid(a))
84
85 #define EVP_CIPHER_nid(e) ((e)->nid)
86 #define EVP_CIPHER_block_size(e) ((e)->block_size)
87 #define EVP_CIPHER_key_length(e) ((e)->key_len)
a91dedca
DSH
88 #define EVP_CIPHER_iv_length(e) ((e)->iv_len)
89 #define EVP_CIPHER_flags(e) ((e)->flags)
90 #define EVP_CIPHER_mode(e) ((e)->flags) & EVP_CIPH_MODE)
72b60351 91 int EVP_CIPHER_type(const EVP_CIPHER *ctx);
a91dedca 92
72b60351
DSH
93 #define EVP_CIPHER_CTX_cipher(e) ((e)->cipher)
94 #define EVP_CIPHER_CTX_nid(e) ((e)->cipher->nid)
95 #define EVP_CIPHER_CTX_block_size(e) ((e)->cipher->block_size)
a91dedca 96 #define EVP_CIPHER_CTX_key_length(e) ((e)->key_len)
72b60351 97 #define EVP_CIPHER_CTX_iv_length(e) ((e)->cipher->iv_len)
a91dedca
DSH
98 #define EVP_CIPHER_CTX_get_app_data(e) ((e)->app_data)
99 #define EVP_CIPHER_CTX_set_app_data(e,d) ((e)->app_data=(char *)(d))
72b60351 100 #define EVP_CIPHER_CTX_type(c) EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c))
a91dedca
DSH
101 #define EVP_CIPHER_CTX_flags(e) ((e)->cipher->flags)
102 #define EVP_CIPHER_CTX_mode(e) ((e)->cipher->flags & EVP_CIPH_MODE)
72b60351 103
3f2b5a88
DSH
104 int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type);
105 int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type);
106
72b60351
DSH
107=head1 DESCRIPTION
108
109The EVP cipher routines are a high level interface to certain
110symmetric ciphers.
111
3811eed8
DSH
112EVP_CIPHER_CTX_init() initializes cipher contex B<ctx>.
113
114EVP_EncryptInit_ex() sets up cipher context B<ctx> for encryption
115with cipher B<type> from ENGINE B<impl>. B<ctx> must be initialized
116before calling this function. B<type> is normally supplied
740ceb5b 117by a function such as EVP_aes_256_cbc(). If B<impl> is NULL then the
3811eed8
DSH
118default implementation is used. B<key> is the symmetric key to use
119and B<iv> is the IV to use (if necessary), the actual number of bytes
120used for the key and IV depends on the cipher. It is possible to set
121all parameters to NULL except B<type> in an initial call and supply
122the remaining parameters in subsequent calls, all of which have B<type>
123set to NULL. This is done when the default cipher parameters are not
124appropriate.
72b60351
DSH
125
126EVP_EncryptUpdate() encrypts B<inl> bytes from the buffer B<in> and
127writes the encrypted version to B<out>. This function can be called
128multiple times to encrypt successive blocks of data. The amount
129of data written depends on the block alignment of the encrypted data:
130as a result the amount of data written may be anything from zero bytes
5211e094 131to (inl + cipher_block_size - 1) so B<out> should contain sufficient
f2e5ca84 132room. The actual number of bytes written is placed in B<outl>.
72b60351 133
3811eed8 134If padding is enabled (the default) then EVP_EncryptFinal_ex() encrypts
f2e5ca84 135the "final" data, that is any data that remains in a partial block.
a09474dd
RS
136It uses standard block padding (aka PKCS padding) as described in
137the NOTES section, below. The encrypted
f2e5ca84
DSH
138final data is written to B<out> which should have sufficient space for
139one cipher block. The number of bytes written is placed in B<outl>. After
140this function is called the encryption operation is finished and no further
141calls to EVP_EncryptUpdate() should be made.
142
3811eed8 143If padding is disabled then EVP_EncryptFinal_ex() will not encrypt any more
f2e5ca84 144data and it will return an error if any data remains in a partial block:
c7497f34 145that is if the total data length is not a multiple of the block size.
72b60351 146
3811eed8 147EVP_DecryptInit_ex(), EVP_DecryptUpdate() and EVP_DecryptFinal_ex() are the
72b60351 148corresponding decryption operations. EVP_DecryptFinal() will return an
f2e5ca84
DSH
149error code if padding is enabled and the final block is not correctly
150formatted. The parameters and restrictions are identical to the encryption
151operations except that if padding is enabled the decrypted data buffer B<out>
152passed to EVP_DecryptUpdate() should have sufficient room for
153(B<inl> + cipher_block_size) bytes unless the cipher block size is 1 in
154which case B<inl> bytes is sufficient.
72b60351 155
3811eed8
DSH
156EVP_CipherInit_ex(), EVP_CipherUpdate() and EVP_CipherFinal_ex() are
157functions that can be used for decryption or encryption. The operation
158performed depends on the value of the B<enc> parameter. It should be set
159to 1 for encryption, 0 for decryption and -1 to leave the value unchanged
160(the actual value of 'enc' being supplied in a previous call).
161
162EVP_CIPHER_CTX_cleanup() clears all information from a cipher context
163and free up any allocated memory associate with it. It should be called
164after all operations using a cipher are complete so sensitive information
165does not remain in memory.
166
167EVP_EncryptInit(), EVP_DecryptInit() and EVP_CipherInit() behave in a
d4a43700 168similar way to EVP_EncryptInit_ex(), EVP_DecryptInit_ex() and
2b4ffc65 169EVP_CipherInit_ex() except the B<ctx> parameter does not need to be
3811eed8 170initialized and they always use the default cipher implementation.
72b60351 171
538860a3
RS
172EVP_EncryptFinal(), EVP_DecryptFinal() and EVP_CipherFinal() are
173identical to EVP_EncryptFinal_ex(), EVP_DecryptFinal_ex() and
174EVP_CipherFinal_ex(). In previous releases they also cleaned up
175the B<ctx>, but this is no longer done and EVP_CIPHER_CTX_clean()
176must be called to free any context resources.
72b60351 177
3f2b5a88
DSH
178EVP_get_cipherbyname(), EVP_get_cipherbynid() and EVP_get_cipherbyobj()
179return an EVP_CIPHER structure when passed a cipher name, a NID or an
180ASN1_OBJECT structure.
181
182EVP_CIPHER_nid() and EVP_CIPHER_CTX_nid() return the NID of a cipher when
183passed an B<EVP_CIPHER> or B<EVP_CIPHER_CTX> structure. The actual NID
184value is an internal value which may not have a corresponding OBJECT
185IDENTIFIER.
186
f2e5ca84
DSH
187EVP_CIPHER_CTX_set_padding() enables or disables padding. By default
188encryption operations are padded using standard block padding and the
189padding is checked and removed when decrypting. If the B<pad> parameter
190is zero then no padding is performed, the total amount of data encrypted
191or decrypted must then be a multiple of the block size or an error will
192occur.
193
3f2b5a88
DSH
194EVP_CIPHER_key_length() and EVP_CIPHER_CTX_key_length() return the key
195length of a cipher when passed an B<EVP_CIPHER> or B<EVP_CIPHER_CTX>
196structure. The constant B<EVP_MAX_KEY_LENGTH> is the maximum key length
a91dedca
DSH
197for all ciphers. Note: although EVP_CIPHER_key_length() is fixed for a
198given cipher, the value of EVP_CIPHER_CTX_key_length() may be different
199for variable key length ciphers.
200
201EVP_CIPHER_CTX_set_key_length() sets the key length of the cipher ctx.
202If the cipher is a fixed length cipher then attempting to set the key
203length to any value other than the fixed value is an error.
3f2b5a88
DSH
204
205EVP_CIPHER_iv_length() and EVP_CIPHER_CTX_iv_length() return the IV
206length of a cipher when passed an B<EVP_CIPHER> or B<EVP_CIPHER_CTX>.
207It will return zero if the cipher does not use an IV. The constant
208B<EVP_MAX_IV_LENGTH> is the maximum IV length for all ciphers.
209
210EVP_CIPHER_block_size() and EVP_CIPHER_CTX_block_size() return the block
211size of a cipher when passed an B<EVP_CIPHER> or B<EVP_CIPHER_CTX>
212structure. The constant B<EVP_MAX_IV_LENGTH> is also the maximum block
213length for all ciphers.
214
215EVP_CIPHER_type() and EVP_CIPHER_CTX_type() return the type of the passed
216cipher or context. This "type" is the actual NID of the cipher OBJECT
217IDENTIFIER as such it ignores the cipher parameters and 40 bit RC2 and
41e68ef2
DSH
218128 bit RC2 have the same NID. If the cipher does not have an object
219identifier or does not have ASN1 support this function will return
220B<NID_undef>.
3f2b5a88
DSH
221
222EVP_CIPHER_CTX_cipher() returns the B<EVP_CIPHER> structure when passed
223an B<EVP_CIPHER_CTX> structure.
224
a91dedca
DSH
225EVP_CIPHER_mode() and EVP_CIPHER_CTX_mode() return the block cipher mode:
226EVP_CIPH_ECB_MODE, EVP_CIPH_CBC_MODE, EVP_CIPH_CFB_MODE or
227EVP_CIPH_OFB_MODE. If the cipher is a stream cipher then
228EVP_CIPH_STREAM_CIPHER is returned.
229
3f2b5a88
DSH
230EVP_CIPHER_param_to_asn1() sets the AlgorithmIdentifier "parameter" based
231on the passed cipher. This will typically include any parameters and an
232IV. The cipher IV (if any) must be set when this call is made. This call
233should be made before the cipher is actually "used" (before any
234EVP_EncryptUpdate(), EVP_DecryptUpdate() calls for example). This function
235may fail if the cipher does not have any ASN1 support.
236
237EVP_CIPHER_asn1_to_param() sets the cipher parameters based on an ASN1
238AlgorithmIdentifier "parameter". The precise effect depends on the cipher
239In the case of RC2, for example, it will set the IV and effective key length.
240This function should be called after the base cipher type is set but before
241the key is set. For example EVP_CipherInit() will be called with the IV and
242key set to NULL, EVP_CIPHER_asn1_to_param() will be called and finally
243EVP_CipherInit() again with all parameters except the key set to NULL. It is
244possible for this function to fail if the cipher does not have any ASN1 support
245or the parameters cannot be set (for example the RC2 effective key length
a91dedca
DSH
246is not supported.
247
248EVP_CIPHER_CTX_ctrl() allows various cipher specific parameters to be determined
aa714f3a 249and set.
3f2b5a88 250
72b60351
DSH
251=head1 RETURN VALUES
252
0e304b7f
NL
253EVP_EncryptInit_ex(), EVP_EncryptUpdate() and EVP_EncryptFinal_ex()
254return 1 for success and 0 for failure.
72b60351 255
3811eed8
DSH
256EVP_DecryptInit_ex() and EVP_DecryptUpdate() return 1 for success and 0 for failure.
257EVP_DecryptFinal_ex() returns 0 if the decrypt failed or 1 for success.
72b60351 258
3811eed8 259EVP_CipherInit_ex() and EVP_CipherUpdate() return 1 for success and 0 for failure.
21d5ed98 260EVP_CipherFinal_ex() returns 0 for a decryption failure or 1 for success.
72b60351 261
a91dedca 262EVP_CIPHER_CTX_cleanup() returns 1 for success and 0 for failure.
3f2b5a88
DSH
263
264EVP_get_cipherbyname(), EVP_get_cipherbynid() and EVP_get_cipherbyobj()
265return an B<EVP_CIPHER> structure or NULL on error.
266
267EVP_CIPHER_nid() and EVP_CIPHER_CTX_nid() return a NID.
268
269EVP_CIPHER_block_size() and EVP_CIPHER_CTX_block_size() return the block
270size.
271
272EVP_CIPHER_key_length() and EVP_CIPHER_CTX_key_length() return the key
273length.
274
f2e5ca84
DSH
275EVP_CIPHER_CTX_set_padding() always returns 1.
276
3f2b5a88
DSH
277EVP_CIPHER_iv_length() and EVP_CIPHER_CTX_iv_length() return the IV
278length or zero if the cipher does not use an IV.
279
41e68ef2
DSH
280EVP_CIPHER_type() and EVP_CIPHER_CTX_type() return the NID of the cipher's
281OBJECT IDENTIFIER or NID_undef if it has no defined OBJECT IDENTIFIER.
282
283EVP_CIPHER_CTX_cipher() returns an B<EVP_CIPHER> structure.
284
c03726ca
RS
285EVP_CIPHER_param_to_asn1() and EVP_CIPHER_asn1_to_param() return greater
286than zero for success and zero or a negative number.
41e68ef2 287
a91dedca
DSH
288=head1 CIPHER LISTING
289
290All algorithms have a fixed key length unless otherwise stated.
291
292=over 4
293
294=item EVP_enc_null()
295
296Null cipher: does nothing.
297
c7497f34 298=item EVP_aes_128_cbc(), EVP_aes_128_ecb(), EVP_aes_128_cfb(), EVP_aes_128_ofb()
a91dedca 299
c7497f34 300AES with a 128-bit key in CBC, ECB, CFB and OFB modes respectively.
a91dedca 301
c7497f34
RS
302=item EVP_aes_192_cbc(), EVP_aes_192_ecb(), EVP_aes_192_cfb(), EVP_aes_192_ofb()
303
304AES with a 192-bit key in CBC, ECB, CFB and OFB modes respectively.
305
306=item EVP_aes_256_cbc(), EVP_aes_256_ecb(), EVP_aes_256_cfb(), EVP_aes_256_ofb()
307
308AES with a 256-bit key in CBC, ECB, CFB and OFB modes respectively.
309
310=item EVP_des_cbc(), EVP_des_ecb(), EVP_des_cfb(), EVP_des_ofb()
311
312DES in CBC, ECB, CFB and OFB modes respectively.
313
314=item EVP_des_ede_cbc(), EVP_des_ede(), EVP_des_ede_ofb(), EVP_des_ede_cfb()
a91dedca
DSH
315
316Two key triple DES in CBC, ECB, CFB and OFB modes respectively.
317
c7497f34 318=item EVP_des_ede3_cbc(), EVP_des_ede3(), EVP_des_ede3_ofb(), EVP_des_ede3_cfb()
a91dedca
DSH
319
320Three key triple DES in CBC, ECB, CFB and OFB modes respectively.
321
c7497f34 322=item EVP_desx_cbc()
a91dedca
DSH
323
324DESX algorithm in CBC mode.
325
c7497f34 326=item EVP_rc4()
a91dedca
DSH
327
328RC4 stream cipher. This is a variable key length cipher with default key length 128 bits.
329
c7497f34 330=item EVP_rc4_40()
a91dedca 331
c7497f34
RS
332RC4 stream cipher with 40 bit key length.
333This is obsolete and new code should use EVP_rc4()
a91dedca
DSH
334and the EVP_CIPHER_CTX_set_key_length() function.
335
e03af178 336=item EVP_idea_cbc() EVP_idea_ecb(), EVP_idea_cfb(), EVP_idea_ofb()
a91dedca 337
c8973693 338IDEA encryption algorithm in CBC, ECB, CFB and OFB modes respectively.
a91dedca 339
c7497f34 340=item EVP_rc2_cbc(), EVP_rc2_ecb(), EVP_rc2_cfb(), EVP_rc2_ofb()
a91dedca
DSH
341
342RC2 encryption algorithm in CBC, ECB, CFB and OFB modes respectively. This is a variable key
343length cipher with an additional parameter called "effective key bits" or "effective key length".
344By default both are set to 128 bits.
345
c7497f34 346=item EVP_rc2_40_cbc(), EVP_rc2_64_cbc()
a91dedca
DSH
347
348RC2 algorithm in CBC mode with a default key length and effective key length of 40 and 64 bits.
349These are obsolete and new code should use EVP_rc2_cbc(), EVP_CIPHER_CTX_set_key_length() and
350EVP_CIPHER_CTX_ctrl() to set the key length and effective key length.
351
c7497f34 352=item EVP_bf_cbc(), EVP_bf_ecb(), EVP_bf_cfb(), EVP_bf_ofb()
a91dedca
DSH
353
354Blowfish encryption algorithm in CBC, ECB, CFB and OFB modes respectively. This is a variable key
355length cipher.
356
c7497f34 357=item EVP_cast5_cbc(), EVP_cast5_ecb(), EVP_cast5_cfb(), EVP_cast5_ofb()
a91dedca
DSH
358
359CAST encryption algorithm in CBC, ECB, CFB and OFB modes respectively. This is a variable key
360length cipher.
361
c7497f34 362=item EVP_rc5_32_12_16_cbc(), EVP_rc5_32_12_16_ecb(), EVP_rc5_32_12_16_cfb(), EVP_rc5_32_12_16_ofb()
a91dedca
DSH
363
364RC5 encryption algorithm in CBC, ECB, CFB and OFB modes respectively. This is a variable key length
365cipher with an additional "number of rounds" parameter. By default the key length is set to 128
366bits and 12 rounds.
367
c7497f34 368=item EVP_aes_128_gcm(), EVP_aes_192_gcm(), EVP_aes_256_gcm()
aa714f3a
DSH
369
370AES Galois Counter Mode (GCM) for 128, 192 and 256 bit keys respectively.
371These ciphers require additional control operations to function correctly: see
e4bbee96
MC
372the L<GCM and OCB modes> section below for details.
373
374=item EVP_aes_128_ocb(void), EVP_aes_192_ocb(void), EVP_aes_256_ocb(void)
375
376Offest Codebook Mode (OCB) for 128, 192 and 256 bit keys respectively.
377These ciphers require additional control operations to function correctly: see
378the L<GCM and OCB modes> section below for details.
aa714f3a 379
c7497f34 380=item EVP_aes_128_ccm(), EVP_aes_192_ccm(), EVP_aes_256_ccm()
aa714f3a
DSH
381
382AES Counter with CBC-MAC Mode (CCM) for 128, 192 and 256 bit keys respectively.
383These ciphers require additional control operations to function correctly: see
384CCM mode section below for details.
385
a91dedca
DSH
386=back
387
e4bbee96 388=head1 GCM and OCB Modes
aa714f3a 389
e4bbee96
MC
390For GCM and OCB mode ciphers the behaviour of the EVP interface is subtly
391altered and several additional ctrl operations are supported.
aa714f3a
DSH
392
393To specify any additional authenticated data (AAD) a call to EVP_CipherUpdate(),
c7497f34 394EVP_EncryptUpdate() or EVP_DecryptUpdate() should be made with the output
aa714f3a
DSH
395parameter B<out> set to B<NULL>.
396
397When decrypting the return value of EVP_DecryptFinal() or EVP_CipherFinal()
398indicates if the operation was successful. If it does not indicate success
399the authentication operation has failed and any output data B<MUST NOT>
400be used as it is corrupted.
401
e4bbee96 402The following ctrls are supported in both GCM and OCB modes:
aa714f3a 403
e640fa02 404 EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, ivlen, NULL);
aa714f3a 405
e4bbee96
MC
406Sets the IV length: this call can only be made before specifying an IV. If
407not called a default IV length is used. For GCM AES and OCB AES the default is
40812 (i.e. 96 bits). For OCB mode the maximum is 15.
c7497f34 409
e640fa02 410 EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, taglen, tag);
aa714f3a
DSH
411
412Writes B<taglen> bytes of the tag value to the buffer indicated by B<tag>.
413This call can only be made when encrypting data and B<after> all data has been
e4bbee96
MC
414processed (e.g. after an EVP_EncryptFinal() call). For OCB mode the taglen must
415either be 16 or the value previously set via EVP_CTRL_OCB_SET_TAGLEN.
aa714f3a 416
e640fa02 417 EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen, tag);
aa714f3a
DSH
418
419Sets the expected tag to B<taglen> bytes from B<tag>. This call is only legal
420when decrypting data and must be made B<before> any data is processed (e.g.
e4bbee96 421before any EVP_DecryptUpdate() call). For OCB mode the taglen must
e640fa02
MC
422either be 16 or the value previously set via EVP_CTRL_AEAD_SET_TAG.
423
424In OCB mode calling this with B<tag> set to NULL sets the tag length. The tag
425length can only be set before specifying an IV. If not called a default tag
426length is used. For OCB AES the default is 16 (i.e. 128 bits). This is also the
427maximum tag length for OCB.
aa714f3a
DSH
428
429See L<EXAMPLES> below for an example of the use of GCM mode.
430
431=head1 CCM Mode
432
e640fa02 433The behaviour of CCM mode ciphers is similar to GCM mode but with a few
aa714f3a
DSH
434additional requirements and different ctrl values.
435
e4bbee96 436Like GCM and OCB modes any additional authenticated data (AAD) is passed by calling
c7497f34 437EVP_CipherUpdate(), EVP_EncryptUpdate() or EVP_DecryptUpdate() with the output
aa714f3a
DSH
438parameter B<out> set to B<NULL>. Additionally the total plaintext or ciphertext
439length B<MUST> be passed to EVP_CipherUpdate(), EVP_EncryptUpdate() or
c7497f34 440EVP_DecryptUpdate() with the output and input parameters (B<in> and B<out>)
aa714f3a
DSH
441set to B<NULL> and the length passed in the B<inl> parameter.
442
443The following ctrls are supported in CCM mode:
c7497f34 444
e640fa02 445 EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen, tag);
aa714f3a
DSH
446
447This call is made to set the expected B<CCM> tag value when decrypting or
448the length of the tag (with the B<tag> parameter set to NULL) when encrypting.
449The tag length is often referred to as B<M>. If not set a default value is
450used (12 for AES).
451
452 EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_L, ivlen, NULL);
453
454Sets the CCM B<L> value. If not set a default is used (8 for AES).
455
e640fa02 456 EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, ivlen, NULL);
aa714f3a
DSH
457
458Sets the CCM nonce (IV) length: this call can only be made before specifying
459an nonce value. The nonce length is given by B<15 - L> so it is 7 by default
460for AES.
461
462
463
72b60351
DSH
464=head1 NOTES
465
466Where possible the B<EVP> interface to symmetric ciphers should be used in
467preference to the low level interfaces. This is because the code then becomes
75b76068
JW
468transparent to the cipher used and much more flexible. Additionally, the
469B<EVP> interface will ensure the use of platform specific cryptographic
470acceleration such as AES-NI (the low level interfaces do not provide the
471guarantee).
72b60351 472
c7497f34 473PKCS padding works by adding B<n> padding bytes of value B<n> to make the total
72b60351
DSH
474length of the encrypted data a multiple of the block size. Padding is always
475added so if the data is already a multiple of the block size B<n> will equal
476the block size. For example if the block size is 8 and 11 bytes are to be
477encrypted then 5 padding bytes of value 5 will be added.
478
479When decrypting the final block is checked to see if it has the correct form.
480
f2e5ca84
DSH
481Although the decryption operation can produce an error if padding is enabled,
482it is not a strong test that the input data or key is correct. A random block
483has better than 1 in 256 chance of being of the correct format and problems with
484the input data earlier on will not produce a final decrypt error.
485
486If padding is disabled then the decryption operation will always succeed if
487the total amount of data decrypted is a multiple of the block size.
72b60351 488
3811eed8
DSH
489The functions EVP_EncryptInit(), EVP_EncryptFinal(), EVP_DecryptInit(),
490EVP_CipherInit() and EVP_CipherFinal() are obsolete but are retained for
491compatibility with existing code. New code should use EVP_EncryptInit_ex(),
492EVP_EncryptFinal_ex(), EVP_DecryptInit_ex(), EVP_DecryptFinal_ex(),
493EVP_CipherInit_ex() and EVP_CipherFinal_ex() because they can reuse an
494existing context without allocating and freeing it up on each call.
a91dedca 495
72b60351
DSH
496=head1 BUGS
497
a91dedca
DSH
498For RC5 the number of rounds can currently only be set to 8, 12 or 16. This is
499a limitation of the current RC5 code rather than the EVP interface.
500
a91dedca
DSH
501EVP_MAX_KEY_LENGTH and EVP_MAX_IV_LENGTH only refer to the internal ciphers with
502default key lengths. If custom ciphers exceed these values the results are
c7497f34 503unpredictable. This is because it has become standard practice to define a
a91dedca
DSH
504generic key as a fixed unsigned char array containing EVP_MAX_KEY_LENGTH bytes.
505
c8973693 506The ASN1 code is incomplete (and sometimes inaccurate) it has only been tested
a91dedca
DSH
507for certain common S/MIME ciphers (RC2, DES, triple DES) in CBC mode.
508
509=head1 EXAMPLES
510
fd4592be 511Encrypt a string using IDEA:
18135561
DSH
512
513 int do_crypt(char *outfile)
514 {
515 unsigned char outbuf[1024];
516 int outlen, tmplen;
517 /* Bogus key and IV: we'd normally set these from
518 * another source.
519 */
520 unsigned char key[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
521 unsigned char iv[] = {1,2,3,4,5,6,7,8};
522 char intext[] = "Some Crypto Text";
523 EVP_CIPHER_CTX ctx;
524 FILE *out;
fd4592be 525
3811eed8 526 EVP_CIPHER_CTX_init(&ctx);
fd4592be 527 EVP_EncryptInit_ex(&ctx, EVP_idea_cbc(), NULL, key, iv);
18135561
DSH
528
529 if(!EVP_EncryptUpdate(&ctx, outbuf, &outlen, intext, strlen(intext)))
530 {
531 /* Error */
532 return 0;
533 }
534 /* Buffer passed to EVP_EncryptFinal() must be after data just
535 * encrypted to avoid overwriting it.
536 */
3811eed8 537 if(!EVP_EncryptFinal_ex(&ctx, outbuf + outlen, &tmplen))
18135561
DSH
538 {
539 /* Error */
540 return 0;
541 }
542 outlen += tmplen;
543 EVP_CIPHER_CTX_cleanup(&ctx);
544 /* Need binary mode for fopen because encrypted data is
545 * binary data. Also cannot use strlen() on it because
546 * it wont be null terminated and may contain embedded
547 * nulls.
548 */
549 out = fopen(outfile, "wb");
550 fwrite(outbuf, 1, outlen, out);
551 fclose(out);
552 return 1;
553 }
554
555The ciphertext from the above example can be decrypted using the B<openssl>
fd4592be 556utility with the command line (shown on two lines for clarity):
c7497f34 557
fd4592be
JS
558 openssl idea -d <filename
559 -K 000102030405060708090A0B0C0D0E0F -iv 0102030405060708
18135561 560
fd4592be
JS
561General encryption and decryption function example using FILE I/O and AES128
562with a 128-bit key:
18135561
DSH
563
564 int do_crypt(FILE *in, FILE *out, int do_encrypt)
565 {
566 /* Allow enough space in output buffer for additional block */
fd4592be 567 unsigned char inbuf[1024], outbuf[1024 + EVP_MAX_BLOCK_LENGTH];
18135561 568 int inlen, outlen;
fd4592be 569 EVP_CIPHER_CTX ctx;
18135561
DSH
570 /* Bogus key and IV: we'd normally set these from
571 * another source.
572 */
fd4592be
JS
573 unsigned char key[] = "0123456789abcdeF";
574 unsigned char iv[] = "1234567887654321";
575
576 /* Don't set key or IV right away; we want to check lengths */
3811eed8 577 EVP_CIPHER_CTX_init(&ctx);
fd4592be
JS
578 EVP_CipherInit_ex(&ctx, EVP_aes_128_cbc(), NULL, NULL, NULL,
579 do_encrypt);
580 OPENSSL_assert(EVP_CIPHER_CTX_key_length(&ctx) == 16);
581 OPENSSL_assert(EVP_CIPHER_CTX_iv_length(&ctx) == 16);
582
583 /* Now we can set key and IV */
3811eed8 584 EVP_CipherInit_ex(&ctx, NULL, NULL, key, iv, do_encrypt);
18135561 585
c7497f34 586 for(;;)
18135561
DSH
587 {
588 inlen = fread(inbuf, 1, 1024, in);
589 if(inlen <= 0) break;
590 if(!EVP_CipherUpdate(&ctx, outbuf, &outlen, inbuf, inlen))
591 {
592 /* Error */
119d1a1d 593 EVP_CIPHER_CTX_cleanup(&ctx);
18135561
DSH
594 return 0;
595 }
596 fwrite(outbuf, 1, outlen, out);
597 }
3811eed8 598 if(!EVP_CipherFinal_ex(&ctx, outbuf, &outlen))
18135561
DSH
599 {
600 /* Error */
119d1a1d 601 EVP_CIPHER_CTX_cleanup(&ctx);
18135561
DSH
602 return 0;
603 }
604 fwrite(outbuf, 1, outlen, out);
605
606 EVP_CIPHER_CTX_cleanup(&ctx);
607 return 1;
608 }
609
610
72b60351
DSH
611=head1 SEE ALSO
612
9b86974e 613L<evp(3)>
72b60351
DSH
614
615=head1 HISTORY
616
503f3b1a
RL
617EVP_CIPHER_CTX_init(), EVP_EncryptInit_ex(), EVP_EncryptFinal_ex(),
618EVP_DecryptInit_ex(), EVP_DecryptFinal_ex(), EVP_CipherInit_ex(),
619EVP_CipherFinal_ex() and EVP_CIPHER_CTX_set_padding() appeared in
620OpenSSL 0.9.7.
621
fd4592be
JS
622IDEA appeared in OpenSSL 0.9.7 but was often disabled due to
623patent concerns; the last patents expired in 2012.
624
e4bbee96 625Support for OCB mode was added in OpenSSL 1.1.0
72b60351 626=cut