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