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