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