|The cipher modes:||
|EVP_CIPH_VARIABLE_LENGTH||This cipher is of variable length.|
|EVP_CIPH_CUSTOM_IV||Storing and initialising the IV is left entirely to the implementation.|
|EVP_CIPH_ALWAYS_CALL_INIT||Set this if the implementations init() function should be called even if key is NULL.|
|EVP_CIPH_CTRL_INIT||Set this to have the implementations ctrl() function called with command code EVP_CTRL_INIT early in its setup.|
|EVP_CIPH_CUSTOM_KEY_LENGTH||Checking and setting the key length after creating the EVP_CIPHER is left to the implementation. Whenever someone uses EVP_CIPHER_CTX_set_key_length() on a EVP_CIPHER with this flag set, the implementations ctrl() function will be called with the control code EVP_CTRL_SET_KEY_LENGTH and the key length in arg.|
|EVP_CIPH_NO_PADDING||Dont use standard block padding.|
|EVP_CIPH_RAND_KEY||Making a key with random content is left to the implementation. This is done by calling the implementations ctrl() function with the control code EVP_CTRL_RAND_KEY and the pointer to the key memory storage in ptr.|
|EVP_CIPH_CUSTOM_COPY||Set this to have the implementations ctrl() function called with command code EVP_CTRL_COPY at the end of EVP_CIPHER_CTX_copy(). The intended use is for further things to deal with after the implementation specific data block has been copied. The destination EVP_CIPHER_CTX is passed to the control with the ptr parameter. The implementation specific data block is reached with EVP_CIPHER_CTX_cipher_data().|
|EVP_CIPH_FLAG_DEFAULT_ASN1||Use the default EVP routines to pass IV to and from ASN.1.|
|EVP_CIPH_FLAG_LENGTH_BITS||Signals that the length of the input buffer for encryption / decryption is to be understood as the number of bits bits instead of bytes for this implementation. This is only useful for CFB1 ciphers.|
|EVP_CIPH_FLAG_CUSTOM_CIPHER||This indicates that the implementation takes care of everything, including padding, buffering and finalization. The EVP routines will simply give them control and do nothing more.|
|EVP_CIPH_FLAG_AEAD_CIPHER||This indicates that this is a AEAD cipher implementation.|
EVP_CIPHER_meth_set_init() sets the cipher init function for cipher. The cipher init function is called by EVP_CipherInit(), EVP_CipherInit_ex(), EVP_EncryptInit(), EVP_EncryptInit_ex(), EVP_DecryptInit(), EVP_DecryptInit_ex().
EVP_CIPHER_meth_set_do_cipher() sets the cipher function for cipher. The cipher function is called by EVP_CipherUpdate(), EVP_EncryptUpdate(), EVP_DecryptUpdate(), EVP_CipherFinal(), EVP_EncryptFinal(), EVP_EncryptFinal_ex(), EVP_DecryptFinal() and EVP_DecryptFinal_ex().
EVP_CIPHER_meth_set_cleanup() sets the function for cipher to do extra cleanup before the methods privata data structure is cleaned out and freed. Note that the cleanup function is passed a EVP_CIPHER_CTX *, the private data structure is then available with EVP_CIPHER_CTX_cipher_data(). This cleanup function is called by EVP_CIPHER_CTX_reset() and EVP_CIPHER_CTX_free().
EVP_CIPHER_meth_set_ctrl() sets the control function for cipher.
EVP_CIPHER_meth_get_input_blocksize(), EVP_CIPHER_meth_get_result_size(), EVP_CIPHER_meth_get_app_datasize(), EVP_CIPHER_meth_get_flags(), EVP_CIPHER_meth_get_init(), EVP_CIPHER_meth_get_update(), EVP_CIPHER_meth_get_final(), EVP_CIPHER_meth_get_copy(), EVP_CIPHER_meth_get_cleanup() and EVP_CIPHER_meth_get_ctrl() are all used to retrieve the method data given with the EVP_CIPHER_meth_set_*() functions above.
The EVP_CIPHER structure was openly available in OpenSSL before version 1.1. The functions described here were added in OpenSSL version 1.1.