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