EVP_ENCRYPTINIT(3ssl) OpenSSL EVP_ENCRYPTINIT(3ssl) EVP_CIPHER_fetch, EVP_CIPHER_up_ref, EVP_CIPHER_free, EVP_CIPHER_CTX_new, EVP_CIPHER_CTX_reset, EVP_CIPHER_CTX_free, EVP_CIPHER_CTX_dup, EVP_CIPHER_CTX_copy, EVP_EncryptInit_ex, EVP_EncryptInit_ex2, EVP_EncryptUpdate, EVP_EncryptFinal_ex, EVP_DecryptInit_ex, EVP_DecryptInit_ex2, EVP_DecryptUpdate, EVP_DecryptFinal_ex, EVP_CipherInit_ex, EVP_CipherInit_ex2, EVP_CipherInit_SKEY, EVP_CipherUpdate, EVP_CipherFinal_ex, EVP_CIPHER_CTX_set_key_length, EVP_CIPHER_CTX_ctrl, EVP_EncryptInit, EVP_EncryptFinal, EVP_DecryptInit, EVP_DecryptFinal, EVP_CipherInit, EVP_CipherFinal, EVP_Cipher, EVP_CIPHER_can_pipeline, EVP_CipherPipelineEncryptInit, EVP_CipherPipelineDecryptInit, EVP_CipherPipelineUpdate, EVP_CipherPipelineFinal, EVP_get_cipherbyname, EVP_get_cipherbynid, EVP_get_cipherbyobj, EVP_CIPHER_is_a, EVP_CIPHER_get0_name, EVP_CIPHER_get0_description, EVP_CIPHER_names_do_all, EVP_CIPHER_get0_provider, EVP_CIPHER_get_nid, EVP_CIPHER_get_params, EVP_CIPHER_gettable_params, EVP_CIPHER_get_block_size, EVP_CIPHER_get_key_length, EVP_CIPHER_get_iv_length, EVP_CIPHER_get_flags, EVP_CIPHER_get_mode, EVP_CIPHER_get_type, EVP_CIPHER_CTX_cipher, EVP_CIPHER_CTX_get0_cipher, EVP_CIPHER_CTX_get1_cipher, EVP_CIPHER_CTX_get0_name, EVP_CIPHER_CTX_get_nid, EVP_CIPHER_CTX_get_params, EVP_CIPHER_gettable_ctx_params, EVP_CIPHER_CTX_gettable_params, EVP_CIPHER_CTX_set_params, EVP_CIPHER_settable_ctx_params, EVP_CIPHER_CTX_settable_params, EVP_CIPHER_CTX_get_block_size, EVP_CIPHER_CTX_get_key_length, EVP_CIPHER_CTX_get_iv_length, EVP_CIPHER_CTX_get_tag_length, EVP_CIPHER_CTX_flags, EVP_CIPHER_CTX_set_flags, EVP_CIPHER_CTX_clear_flags, EVP_CIPHER_CTX_test_flags, EVP_CIPHER_CTX_get_type, EVP_CIPHER_CTX_get_mode, EVP_CIPHER_CTX_get_num, EVP_CIPHER_CTX_set_num, EVP_CIPHER_CTX_is_encrypting, EVP_CIPHER_param_to_asn1, EVP_CIPHER_asn1_to_param, EVP_CIPHER_CTX_set_padding, EVP_enc_null, EVP_CIPHER_do_all_provided, EVP_CIPHER_nid, EVP_CIPHER_name, EVP_CIPHER_block_size, EVP_CIPHER_key_length, EVP_CIPHER_iv_length, EVP_CIPHER_flags, EVP_CIPHER_mode, EVP_CIPHER_type, EVP_CIPHER_CTX_encrypting, EVP_CIPHER_CTX_nid, EVP_CIPHER_CTX_block_size, EVP_CIPHER_CTX_key_length, EVP_CIPHER_CTX_iv_length, EVP_CIPHER_CTX_tag_length, EVP_CIPHER_CTX_num, EVP_CIPHER_CTX_type, EVP_CIPHER_CTX_mode - EVP cipher routines #include EVP_CIPHER *EVP_CIPHER_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, const char *properties); int EVP_CIPHER_up_ref(EVP_CIPHER *cipher); void EVP_CIPHER_free(EVP_CIPHER *cipher); EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void); int EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX *ctx); void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *ctx); EVP_CIPHER_CTX *EVP_CIPHER_CTX_dup(const EVP_CIPHER_CTX *in); int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, const EVP_CIPHER_CTX *in); int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, ENGINE *impl, const unsigned char *key, const unsigned char *iv); int EVP_EncryptInit_ex2(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, const unsigned char *key, const unsigned char *iv, const OSSL_PARAM params[]); int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl); int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, ENGINE *impl, const unsigned char *key, const unsigned char *iv); int EVP_DecryptInit_ex2(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, const unsigned char *key, const unsigned char *iv, const OSSL_PARAM params[]); int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl); int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, ENGINE *impl, const unsigned char *key, const unsigned char *iv, int enc); int EVP_CipherInit_ex2(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, const unsigned char *key, const unsigned char *iv, int enc, const OSSL_PARAM params[]); int EVP_CipherInit_SKEY(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, EVP_SKEY *skey, const unsigned char *iv, size_t iv_len, int enc, const OSSL_PARAM params[]); int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl); int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, const unsigned char *key, const unsigned char *iv); int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, const unsigned char *key, const unsigned char *iv); int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, const unsigned char *key, const unsigned char *iv, int enc); int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); int EVP_Cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, unsigned int inl); int EVP_CIPHER_can_pipeline(const EVP_CIPHER *cipher, int enc); int EVP_CipherPipelineEncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, const unsigned char *key, size_t keylen, size_t numpipes, const unsigned char **iv, size_t ivlen); int EVP_CipherPipelineDecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, const unsigned char *key, size_t keylen, size_t numpipes, const unsigned char **iv, size_t ivlen); int EVP_CipherPipelineUpdate(EVP_CIPHER_CTX *ctx, unsigned char **out, size_t *outl, const size_t *outsize, const unsigned char **in, const size_t *inl); int EVP_CipherPipelineFinal(EVP_CIPHER_CTX *ctx, unsigned char **outm, size_t *outl, const size_t *outsize); int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *x, int padding); int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen); int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int cmd, int p1, void *p2); int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key); void EVP_CIPHER_CTX_set_flags(EVP_CIPHER_CTX *ctx, int flags); void EVP_CIPHER_CTX_clear_flags(EVP_CIPHER_CTX *ctx, int flags); int EVP_CIPHER_CTX_test_flags(const EVP_CIPHER_CTX *ctx, int flags); const EVP_CIPHER *EVP_get_cipherbyname(const char *name); const EVP_CIPHER *EVP_get_cipherbynid(int nid); const EVP_CIPHER *EVP_get_cipherbyobj(const ASN1_OBJECT *a); int EVP_CIPHER_get_nid(const EVP_CIPHER *e); int EVP_CIPHER_is_a(const EVP_CIPHER *cipher, const char *name); int EVP_CIPHER_names_do_all(const EVP_CIPHER *cipher, void (*fn)(const char *name, void *data), void *data); const char *EVP_CIPHER_get0_name(const EVP_CIPHER *cipher); const char *EVP_CIPHER_get0_description(const EVP_CIPHER *cipher); const OSSL_PROVIDER *EVP_CIPHER_get0_provider(const EVP_CIPHER *cipher); int EVP_CIPHER_get_block_size(const EVP_CIPHER *e); int EVP_CIPHER_get_key_length(const EVP_CIPHER *e); int EVP_CIPHER_get_iv_length(const EVP_CIPHER *e); unsigned long EVP_CIPHER_get_flags(const EVP_CIPHER *e); unsigned long EVP_CIPHER_get_mode(const EVP_CIPHER *e); int EVP_CIPHER_get_type(const EVP_CIPHER *cipher); const EVP_CIPHER *EVP_CIPHER_CTX_get0_cipher(const EVP_CIPHER_CTX *ctx); EVP_CIPHER *EVP_CIPHER_CTX_get1_cipher(const EVP_CIPHER_CTX *ctx); int EVP_CIPHER_CTX_get_nid(const EVP_CIPHER_CTX *ctx); const char *EVP_CIPHER_CTX_get0_name(const EVP_CIPHER_CTX *ctx); int EVP_CIPHER_get_params(EVP_CIPHER *cipher, OSSL_PARAM params[]); int EVP_CIPHER_CTX_set_params(EVP_CIPHER_CTX *ctx, const OSSL_PARAM params[]); int EVP_CIPHER_CTX_get_params(EVP_CIPHER_CTX *ctx, OSSL_PARAM params[]); const OSSL_PARAM *EVP_CIPHER_gettable_params(const EVP_CIPHER *cipher); const OSSL_PARAM *EVP_CIPHER_settable_ctx_params(const EVP_CIPHER *cipher); const OSSL_PARAM *EVP_CIPHER_gettable_ctx_params(const EVP_CIPHER *cipher); const OSSL_PARAM *EVP_CIPHER_CTX_settable_params(EVP_CIPHER_CTX *ctx); const OSSL_PARAM *EVP_CIPHER_CTX_gettable_params(EVP_CIPHER_CTX *ctx); int EVP_CIPHER_CTX_get_block_size(const EVP_CIPHER_CTX *ctx); int EVP_CIPHER_CTX_get_key_length(const EVP_CIPHER_CTX *ctx); int EVP_CIPHER_CTX_get_iv_length(const EVP_CIPHER_CTX *ctx); int EVP_CIPHER_CTX_get_tag_length(const EVP_CIPHER_CTX *ctx); int EVP_CIPHER_CTX_get_type(const EVP_CIPHER_CTX *ctx); int EVP_CIPHER_CTX_get_mode(const EVP_CIPHER_CTX *ctx); int EVP_CIPHER_CTX_get_num(const EVP_CIPHER_CTX *ctx); int EVP_CIPHER_CTX_set_num(EVP_CIPHER_CTX *ctx, int num); int EVP_CIPHER_CTX_is_encrypting(const EVP_CIPHER_CTX *ctx); int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type); int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type); void EVP_CIPHER_do_all_provided(OSSL_LIB_CTX *libctx, void (*fn)(EVP_CIPHER *cipher, void *arg), void *arg); #define EVP_CIPHER_nid EVP_CIPHER_get_nid #define EVP_CIPHER_name EVP_CIPHER_get0_name #define EVP_CIPHER_block_size EVP_CIPHER_get_block_size #define EVP_CIPHER_key_length EVP_CIPHER_get_key_length #define EVP_CIPHER_iv_length EVP_CIPHER_get_iv_length #define EVP_CIPHER_flags EVP_CIPHER_get_flags #define EVP_CIPHER_mode EVP_CIPHER_get_mode #define EVP_CIPHER_type EVP_CIPHER_get_type #define EVP_CIPHER_CTX_encrypting EVP_CIPHER_CTX_is_encrypting #define EVP_CIPHER_CTX_nid EVP_CIPHER_CTX_get_nid #define EVP_CIPHER_CTX_block_size EVP_CIPHER_CTX_get_block_size #define EVP_CIPHER_CTX_key_length EVP_CIPHER_CTX_get_key_length #define EVP_CIPHER_CTX_iv_length EVP_CIPHER_CTX_get_iv_length #define EVP_CIPHER_CTX_tag_length EVP_CIPHER_CTX_get_tag_length #define EVP_CIPHER_CTX_num EVP_CIPHER_CTX_get_num #define EVP_CIPHER_CTX_type EVP_CIPHER_CTX_get_type #define EVP_CIPHER_CTX_mode EVP_CIPHER_CTX_get_mode OpenSSL 3.0 OPENSSL_API_COMPAT openssl_user_macros(7): const EVP_CIPHER *EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx); OpenSSL 1.1.0 OPENSSL_API_COMPAT openssl_user_macros(7): int EVP_CIPHER_CTX_flags(const EVP_CIPHER_CTX *ctx); EVP . EVP_CIPHER . EVP_CIPHER_fetch() algorithm properties. "ALGORITHM FETCHING" crypto(7) . EVP_CIPHER_free(). EVP_CIPHER . EVP_CIPHER_up_ref() EVP_CIPHER. EVP_CIPHER_free() EVP_CIPHER . 0 . NULL . EVP_CIPHER_CTX_new() . EVP_CIPHER_CTX_free() ctx . . NULL . EVP_CIPHER_CTX_dup() in. EVP_CIPHER_fetch() . EVP_CIPHER_CTX_copy() in out. EVP_CIPHER_CTX_ctrl() . EVP_CIPHER_CTX_set_params() EVP_CIPHER_CTX_get_params() . ctx. cmd p1 p2. EVP_CIPHER_CTX_ctrl() EVP_CipherInit_ex2(). . EVP_CIPHER OpenSSL OSSL_PARAM(3) OpenSSL EVP_CIPHER_CTX_get_params() EVP_CIPHER_CTX_set_params() . "CONTROLS" . EVP_CIPHER_get_params() params CIPHER cipher. "PARAMETERS" . EVP_CIPHER_CTX_get_params() params CIPHER ctx. "PARAMETERS" . EVP_CIPHER_CTX_set_params() params CIPHER ctx. "PARAMETERS" . EVP_CIPHER_gettable_params() OSSL_PARAM(3) EVP_CIPHER_get_params(). EVP_CIPHER_gettable_ctx_params() EVP_CIPHER_CTX_gettable_params() OSSL_PARAM(3) EVP_CIPHER_CTX_get_params(). EVP_CIPHER_gettable_ctx_params() EVP_CIPHER_CTX_gettable_params() . EVP_CIPHER_settable_ctx_params() EVP_CIPHER_CTX_settable_params() OSSL_PARAM(3) EVP_CIPHER_CTX_set_params(). EVP_CIPHER_settable_ctx_params() EVP_CIPHER_CTX_settable_params() . EVP_EncryptInit_ex2() ctx type. ctx NULL. type EVP_CIPHER_fetch(). type EVP_aes_256_cbc() . key iv IV ( ) IV . params . NULL type type NULL. . EVP_CIPH_GCM_MODE IV . EVP_EncryptInit_ex() EVP_EncryptInit_ex2() impl NULL. type impl . EVP_EncryptUpdate() inl in out. out in . (ctx) . . ctx NULL. out in . . . (inl + cipher_block_size - 1) . (inl + cipher_block_size) . inl . out . outl. () EVP_EncryptFinal_ex() "" . ( PKCS) . out . outl. EVP_EncryptUpdate(). EVP_EncryptFinal_ex() : . EVP_DecryptInit_ex2() EVP_DecryptInit_ex() EVP_DecryptUpdate() EVP_DecryptFinal_ex() . EVP_DecryptFinal() . . ctx NULL. EVP_CipherInit_ex2() EVP_CipherInit_ex() EVP_CipherUpdate() EVP_CipherFinal_ex() . enc. 1 0 -1 ( 'enc' ). EVP_CipherInit_SKEY() EVP_CipherInit_ex2() EVP_SKEY . EVP_CIPHER_CTX_reset() ctx . ctx EVP_CipherInit() / EVP_CipherUpdate() / EVP_CipherFinal(). EVP_EncryptInit() EVP_DecryptInit() EVP_CipherInit() EVP_EncryptInit_ex() EVP_DecryptInit_ex() EVP_CipherInit_ex() type type. EVP_EncryptFinal() EVP_DecryptFinal() EVP_CipherFinal() EVP_EncryptFinal_ex() EVP_DecryptFinal_ex() EVP_CipherFinal_ex(). ctx EVP_CIPHER_CTX_cleanup() . EVP_Cipher() inl in out. - EVP_CIPH_FLAG_CUSTOM_CIPHER inl EVP_CIPHER_get_block_size(). . inl . EVP_CipherUpdate() EVP_CipherFinal_ex() . EVP_CIPHER_can_pipeline() EVP_CIPHER EVP_CIPHER_fetch() . 1 0. 0 EVP_aes_128_gcm(). . EVP_CipherUpdate()/EVP_CipherFinal . . EVP_CipherPipelineEncryptInit() EVP_CipherPipelineDecryptInit() . EVP_CipherPipelineEncryptInit() EVP_CipherPipelineDecryptInit() EVP_CipherPipelineUpdate() EVP_CipherPipelineFinal() . EVP_CIPHER_can_pipeline() . EVP_EncryptInit_ex2() EVP_DecryptInit_ex2() EVP_CipherUpdate() EVP_CipherFinal() iv . key keylen . numpipes . numpipes EVP_MAX_PIPES. iv IVs. numpipes. IV ivlen. IV iv NULL NULL. in . . inl size_t . out outm . outsize size_t . outl size_t . EVP_CipherUpdate(). EVP_CipherPipelineUpdate() . AAD out outsize NULL NULL. EVP_get_cipherbyname() EVP_get_cipherbynid() EVP_get_cipherbyobj() EVP_CIPHER NID ASN1_OBJECT . EVP_get_cipherbyname() NULL "AES-128-SIV" "AES-128-CBC-CTS" "CAMELLIA-128-CBC-CTS" . EVP_get_cipherbyname() OpenSSL 3 EVP_CIPHER_fetch() "" . OpenSSL NID . EVP_get_cipherbynid() EVP_get_cipherbyobj() . ( EVP_EncryptInit_ex()) . . EVP_CIPHER_fetch() . "ALGORITHM FETCHING" crypto(7) . EVP_CIPHER_free(). EVP_CIPHER_get_nid() EVP_CIPHER_CTX_get_nid() NID EVP_CIPHER EVP_CIPHER_CTX. NID . NID_undef nid EVP_CipherInit. EVP_CIPHER_CTX_set_flags() EVP_CIPHER_CTX_clear_flags() EVP_CIPHER_CTX_test_flags() ctx. "FLAGS" . EVP_CIPHER_CTX_set_flags() ctx. "PARAMETERS" . EVP_CIPHER_CTX_set_padding() . EVP_EncryptInit_ex2() EVP_DecryptInit_ex2() EVP_CipherInit_ex2() EVP_CipherInit_SKEY(). . pad . x NULL. EVP_CIPHER_get_key_length() EVP_CIPHER_CTX_get_key_length() EVP_CIPHER EVP_CIPHER_CTX. EVP_MAX_KEY_LENGTH . : EVP_CIPHER_get_key_length() EVP_CIPHER_CTX_get_key_length() . EVP_CIPHER_CTX_set_key_length() . . EVP_CIPHER_get_iv_length() EVP_CIPHER_CTX_get_iv_length() IV EVP_CIPHER EVP_CIPHER_CTX. IV EVP_CIPHER_CTX NULL. EVP_MAX_IV_LENGTH IV . EVP_CIPHER_CTX_get_tag_length() AEAD EVP_CIPHER_CTX. . . EVP_CIPHER_get_block_size() EVP_CIPHER_CTX_get_block_size() EVP_CIPHER EVP_CIPHER_CTX. EVP_MAX_BLOCK_LENGTH . 0 EVP_CIPHER_get_block_size() e NULL EVP_CIPHER_CTX_get_block_size() ctx NULL EVP_CipherInit. EVP_CIPHER_get_type() EVP_CIPHER_CTX_get_type() . "" NID (RC2 40 RC2 128 NID). ASN1 NID_undef. EVP_CIPHER_is_a() 1 cipher name 0. cipher ( EVP_aes128() EVP_CIPHER_fetch()) ( OSSL_LIB_CTX(3)). EVP_CIPHER_get0_name() EVP_CIPHER_CTX_get0_name() . . EVP_CIPHER_names_do_all(). cipher NULL. EVP_CIPHER_names_do_all() cipher fn data. EVP_CIPHER . EVP_CIPHER_get0_description() . . EVP_CIPHER_get0_provider() OSSL_PROVIDER EVP_CIPHER . EVP_CIPHER_CTX_get0_cipher() EVP_CIPHER EVP_CIPHER_CTX. EVP_CIPHER_CTX_get1_cipher() . NULL . EVP_CIPHER_get_mode() EVP_CIPHER_CTX_get_mode() : EVP_CIPH_ECB_MODE EVP_CIPH_CBC_MODE EVP_CIPH_CFB_MODE EVP_CIPH_OFB_MODE EVP_CIPH_CTR_MODE EVP_CIPH_GCM_MODE EVP_CIPH_CCM_MODE EVP_CIPH_XTS_MODE EVP_CIPH_WRAP_MODE EVP_CIPH_OCB_MODE EVP_CIPH_SIV_MODE. EVP_CIPH_STREAM_CIPHER. EVP_CIPHER_get_flags() . "FLAGS" . EVP_CIPHER_CTX_get_num() EVP_CIPHER_CTX_set_num() "num" ctx . "" . EVP_CIPHER_CTX_is_encrypting() ctx . EVP_CIPHER_CTX_flags() "EVP_CIPHER_get_flags(EVP_CIPHER_CTX_get0_cipher(ctx))". . EVP_CIPHER_param_to_asn1() "" AlgorithmIdentifier . IV. IV ( ) . ( EVP_EncryptUpdate() EVP_DecryptUpdate() ). ASN1 . EVP_CIPHER_asn1_to_param() "" ASN1 AlgorithmIdentifier. . RC2 IV . . EVP_CipherInit() IV NULL EVP_CIPHER_asn1_to_param() EVP_CipherInit() NULL. ASN1 ( RC2 ). EVP_CIPHER_CTX_rand_key() . EVP_CIPHER . key EVP_CIPHER_CTX_get_key_length(). EVP_CIPHER_do_all_provided() libctx fn arg . OSSL_PARAM(3) . EVP_CIPHER EVP_CIPHER_fetch() EVP_CIPHER_get_params() . EVP_CIPHER_get_params() OSSL_PARAM(3) : "mode" (OSSL_CIPHER_PARAM_MODE) < > cipher. "EVP_CIPHER_get_mode() EVP_CIPHER_CTX_get_mode()" . EVP_CIPHER_get_mode() . "keylen" (OSSL_CIPHER_PARAM_KEYLEN) < > cipher. EVP_CIPHER_get_key_length() . "ivlen" (OSSL_CIPHER_PARAM_IVLEN) < > IV cipher. EVP_CIPHER_get_iv_length() . "blocksize" (OSSL_CIPHER_PARAM_BLOCK_SIZE) < > cipher. 1 . / . AES CTR 1 ( ) AES 16. EVP_CIPHER_get_block_size() . "aead" (OSSL_CIPHER_PARAM_AEAD) < > 1 AEAD 0. (EVP_CIPHER_get_flags(cipher) & EVP_CIPH_FLAG_AEAD_CIPHER) . "custom-iv" (OSSL_CIPHER_PARAM_CUSTOM_IV) < > 1 cipher IV 0. IV IV . (EVP_CIPHER_get_flags(cipher) & EVP_CIPH_CUSTOM_IV) . "cts" (OSSL_CIPHER_PARAM_CTS) < > 1 cipher 0. EVP_CipherUpdate(). (EVP_CIPHER_get_flags(cipher) & EVP_CIPH_FLAG_CTS) . "tls-multi" (OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK) < > 1 cipher 0. TLS . (EVP_CIPHER_get_flags(cipher) & EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK) . "has-randkey" (OSSL_CIPHER_PARAM_HAS_RANDKEY) < > 1 cipher EVP_CIPHER_CTX OSSL_CIPHER_PARAM_RANDOM_KEY. DES 3DES 1 OpenSSL 0. "--" (OSSL_CIPHER_PARAM_DECRYPT_ONLY) < 1 cipher 3DES fips. 0 . EVP_CIPHER_CTX OSSL_PARAM(3) EVP_CIPHER_CTX_get_params() EVP_CIPHER_CTX_set_params(). "" (OSSL_CIPHER_PARAM_PADDING) < > ctx. 1 0. EVP_CIPHER_CTX_set_padding(). "" (OSSL_CIPHER_PARAM_NUM) < > "" ctx. "" . EVP_CIPHER_CTX_get_num() EVP_CIPHER_CTX_set_num(). "keylen" (OSSL_CIPHER_PARAM_KEYLEN) < > ctx. "keylen" size_t. EVP_CIPHER_CTX_get_key_length() EVP_CIPHER_CTX_set_key_length(). "" (OSSL_CIPHER_PARAM_AEAD_TAG) < > AEAD ctx. " AEAD" EVP_EncryptInit(3). "--" (OSSL_CIPHER_PARAM_PIPELINE_AEAD_TAG) < > AEAD . aead. numpipes EVP_CipherPipelineEncryptInit() EVP_CipherPipelineDecryptInit(). "-" (OSSL_CIPHER_PARAM_RC2_KEYBITS) < > keybits RC2. "keybits" size_t. "rounds" (OSSL_CIPHER_PARAM_ROUNDS) < > . RC5. "algorithm-id" (OSSL_CIPHER_PARAM_ALGORITHM_ID) < > AlgorithmIdentifier DER . EVP_PKEY_CTX_get_algor(3) . "algorithm-id-params" (OSSL_CIPHER_PARAM_ALGORITHM_ID_PARAMS) < > AlgorithmIdentifier DER . EVP_CIPHER_CTX_set_algor_params(3) EVP_CIPHER_CTX_get_algor_params(3) . "alg_id_params" (OSSL_CIPHER_PARAM_ALGORITHM_ID_PARAMS_OLD) < > "algorithm-id-params" EVP_CIPHER_param_to_asn1(3) EVP_CIPHER_asn1_to_param(3). "cts_mode" (OSSL_CIPHER_PARAM_CTS_MODE) < UTF8> . . . ( AES CAMELLIA 16 ). : "CS1" NIST . "AES-XXX-CBC" "CAMELLIA-XXX-CBC" . "CS2" "AES-XXX-CBC" "CAMELLIA-XXX-CBC" "CS3". "CS3" Kerberos5 ( ). "AES-XXX-CBC" "CAMELLIA-XXX-CBC". "CS1". "AES-128-CBC-CTS" "AES-192-CBC-CTS" "AES-256-CBC-CTS" "CAMELLIA-128-CBC-CTS" "CAMELLIA-192-CBC-CTS" "CAMELLIA-256-CBC-CTS". "tls1multi_interleave" (OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE) < > tls1 ( 4 8 ). EVP_CIPHER_CTX OSSL_PARAM(3) EVP_CIPHER_CTX_get_params(): "ivlen" (OSSL_CIPHER_PARAM_IVLEN > IV ctx. "ivlen" size_t. EVP_CIPHER_CTX_get_iv_length(). "iv" (OSSL_CIPHER_PARAM_IV) < > IV ctx. EVP_CIPHER_CTX_get_original_iv(). "updated-iv" (OSSL_CIPHER_PARAM_UPDATED_IV) < > pseudo-IV CBC IV OFB. libcrypto . EVP_CIPHER_CTX_get_updated_iv(). "randkey" (OSSL_CIPHER_PARAM_RANDOM_KEY) < > ctx. DES 3DES ( ). "taglen" (OSSL_CIPHER_PARAM_AEAD_TAGLEN) < > AEAD ctx. . "taglen" size_t. EVP_CIPHER_CTX_get_tag_length(). "tlsaadpad" (OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD) < > TLS AEAD ctx. "tlsaadpad" size_t. "tlsivgen" (OSSL_CIPHER_PARAM_AEAD_TLS1_GET_IV_GEN) < > . "tlsivfixed". GCM. "tls1multi_enclen" (OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_LEN) < > "tls1multi_enc". "tls1multi_maxbufsz" (OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_BUFSIZE) < > TLS1. "tls1multi_maxbufsz" size_t. "tls1multi_aadpacklen" (OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD_PACKLEN) < > "tls1multi_aad". "tls-mac" (OSSL_CIPHER_PARAM_TLS_MAC) < > MAC TLS. "fips-indicator" (OSSL_CIPHER_PARAM_FIPS_APPROVED_INDICATOR) < > FIPS OpenSSL. 1 FIPS 0 . EVP_EncryptFinal_ex(). 0 "encrypt-check" 0. "iv-generated" (OSSL_CIPHER_PARAM_AEAD_IV_GENERATED) < > 1 IV O . GCM EVP_EncryptFinal_ex(). GCM IV IV EVP_CipherInit_ex(). FIPS 140-3 IG C.H IV. EVP_CIPHER_CTX OSSL_PARAM(3) EVP_CIPHER_CTX_set_params(): "mackey" (OSSL_CIPHER_PARAM_AEAD_MAC_KEY) < > MAC AEAD AES-CBC-HMAC-SHA256. "speed" (OSSL_CIPHER_PARAM_SPEED) < > . AES SIV . "speed" 1 . . "use-bits" (OSSL_CIPHER_PARAM_USE_BITS) < > inl EVP_EncryptUpdate() EVP_DecryptUpdate() EVP_CipherUpdate() . "use-bits" 1 . . CFB1. EVP_CIPHER_CTX_set_flags(ctx, EVP_CIPH_FLAG_LENGTH_BITS). "tls-version" (OSSL_CIPHER_PARAM_TLS_VERSION) < > TLS. "tls-mac-size" (OSSL_CIPHER_PARAM_TLS_MAC_SIZE) < > MAC TLS. "tlsaad" (OSSL_CIPHER_PARAM_AEAD_TLS1_AAD) < > AAD TLSv1.2 ctx. AAD TLSv1.2 13 "additional_data" 6.2.3.3 RFC5246. "tlsivfixed" (OSSL_CIPHER_PARAM_AEAD_TLS1_IV_FIXED) < > IV AEAD / TLS . / TLS " " . IVs AEAD TLSv1.2 "" . IV TLS / TLS. / TLS OSSL_FUNC_cipher_cipher . IV AEAD. IV RFC . " " IV . IV . IV . IV " " . *outl OSSL_FUNC_cipher_cipher IV . "tlsivinv" (OSSL_CIPHER_PARAM_AEAD_TLS1_SET_IV_INV) < > . "tlsivfixed". GCM. "tls1multi_enc" (OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC) < > TLS1 TLS1 4 8 . MAC . "tls1multi_enc" "tls1multi_encin" "tls1multi_interleave" . "tls1multi_encin" (OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_IN) < > TLS1. "tls1multi_maxsndfrag" (OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_SEND_FRAGMENT) < > TLS1. "tls1multi_maxbufsz". "tls1multi_maxsndfrag" size_t. "tls1multi_aad" (OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD) < > TLS1. 13 : 0-7: 8: 9-10: 11-12: ( 0) "tls1multi_interleave" . "xts_standard" (OSSL_CIPHER_PARAM_XTS_STANDARD) < UTF8> XTS SM4-XTS. XTS IEEE Std. 1619-2007 ( XTS AES) (GB/T 17964-2021 2022) SM4. . IEEE Std 1619-2007 " " . GB/T 17964-2021 . : "GB" GB/T 17964-2021 SM4-XTS. "IEEE" IEEE Std. 1619-2007 SM4-XTS. "GB". "encrypt-check" (OSSL_CIPHER_PARAM_FIPS_ENCRYPT_CHECK) < > FIPS OpenSSL. EVP_EncryptInit_ex2(). 1 . 0 " fips" 0. FIPS " fips" 0. EVP_CIPHER_CTX_ctrl() . "" . EVP_CIPHER_CTX_ctrl() : EVP_CTRL_AEAD_SET_IVLEN EVP_CTRL_GET_IVLEN EVP_CIPHER EVP_CIPHER_CTX_set_params() EVP_CIPHER_CTX_get_params() OSSL_PARAM(3) "ivlen" (OSSL_CIPHER_PARAM_IVLEN). EVP_CTRL_AEAD_SET_IV_FIXED EVP_CIPHER EVP_CIPHER_CTX_set_params() OSSL_PARAM(3) "tlsivfixed" (OSSL_CIPHER_PARAM_AEAD_TLS1_IV_FIXED). EVP_CTRL_AEAD_SET_MAC_KEY EVP_CIPHER EVP_CIPHER_CTX_set_params() OSSL_PARAM(3) "mackey" (OSSL_CIPHER_PARAM_AEAD_MAC_KEY). EVP_CTRL_AEAD_SET_TAG EVP_CTRL_AEAD_GET_TAG EVP_CIPHER EVP_CIPHER_CTX_set_params() EVP_CIPHER_CTX_get_params() OSSL_PARAM(3) "tag" (OSSL_CIPHER_PARAM_AEAD_TAG). EVP_CTRL_CCM_SET_L EVP_CIPHER EVP_CIPHER_CTX_set_params() OSSL_PARAM(3) "ivlen" (OSSL_CIPHER_PARAM_IVLEN) (15 - L) EVP_CTRL_COPY OSSL_PARAM . EVP_CIPHER_CTX_copy() . EVP_CTRL_GCM_SET_IV_INV EVP_CIPHER EVP_CIPHER_CTX_set_params() OSSL_PARAM(3) "tlsivinv" (OSSL_CIPHER_PARAM_AEAD_TLS1_SET_IV_INV). EVP_CTRL_RAND_KEY EVP_CIPHER EVP_CIPHER_CTX_set_params() OSSL_PARAM(3) "randkey" (OSSL_CIPHER_PARAM_RANDOM_KEY). EVP_CTRL_SET_KEY_LENGTH EVP_CIPHER EVP_CIPHER_CTX_set_params() OSSL_PARAM(3) "keylen" (OSSL_CIPHER_PARAM_KEYLEN). EVP_CTRL_SET_RC2_KEY_BITS EVP_CTRL_GET_RC2_KEY_BITS EVP_CIPHER EVP_CIPHER_CTX_set_params() EVP_CIPHER_CTX_get_params() OSSL_PARAM(3) "keybits" (OSSL_CIPHER_PARAM_RC2_KEYBITS). EVP_CTRL_SET_RC5_ROUNDS EVP_CTRL_GET_RC5_ROUNDS EVP_CIPHER EVP_CIPHER_CTX_set_params() EVP_CIPHER_CTX_get_params() OSSL_PARAM(3) "rounds" (OSSL_CIPHER_PARAM_ROUNDS). EVP_CTRL_SET_SPEED EVP_CIPHER EVP_CIPHER_CTX_set_params() OSSL_PARAM(3) "speed" (OSSL_CIPHER_PARAM_SPEED). EVP_CTRL_GCM_IV_GEN EVP_CIPHER EVP_CIPHER_CTX_get_params() OSSL_PARAM(3) "tlsivgen" (OSSL_CIPHER_PARAM_AEAD_TLS1_GET_IV_GEN). EVP_CTRL_AEAD_TLS1_AAD EVP_CIPHER EVP_CIPHER_CTX_set_params() OSSL_PARAM(3) "tlsaad" (OSSL_CIPHER_PARAM_AEAD_TLS1_AAD) EVP_CIPHER_CTX_get_params() "tlsaadpad" (OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD). EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE EVP_CIPHER EVP_CIPHER_CTX_set_params() OSSL_PARAM(3) OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_SEND_FRAGMENT EVP_CIPHER_CTX_get_params() "tls1multi_maxbufsz" (OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_BUFSIZE). EVP_CTRL_TLS1_1_MULTIBLOCK_AAD EVP_CIPHER EVP_CIPHER_CTX_set_params() OSSL_PARAM(3) "tls1multi_aad" (OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD) "tls1multi_interleave" (OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE) EVP_CIPHER_CTX_get_params() "tls1multi_aadpacklen" (OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD_PACKLEN) "tls1multi_interleave" (OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE). EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT EVP_CIPHER EVP_CIPHER_CTX_set_params() OSSL_PARAM(3) "tls1multi_enc" (OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC) "tls1multi_encin" (OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_IN) "tls1multi_interleave" (OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE) EVP_CIPHER_CTX_get_params() "tls1multi_enclen" (OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_LEN). EVP_CIPHER_CTX_set_flags() EVP_CIPHER_CTX_clear_flags() EVP_CIPHER_CTX_test_flags() EVP_CIPHER_CTX : EVP_CIPH_NO_PADDING EVP_CIPHER_CTX_set_padding(). " EVP_CIPHER_CTX " "padding" EVP_CIPH_FLAG_LENGTH_BITS " EVP_CIPHER_CTX " "use-bits". EVP_CIPHER_CTX_FLAG_WRAP_ALLOW . . EVP_CIPHER_flags() " EVP_CIPHER ": EVP_CIPH_FLAG_AEAD_CIPHER " EVP_CIPHER " "aead". EVP_CIPH_CUSTOM_IV " EVP_CIPHER " "custom-iv". EVP_CIPH_FLAG_CTS " EVP_CIPHER " "cts". EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK; " EVP_CIPHER " "tls-multi". EVP_CIPH_RAND_KEY " EVP_CIPHER " "has-randkey". EVP_CIPHER_flags() : EVP_CIPH_VARIABLE_LENGTH EVP_CIPH_FLAG_CUSTOM_CIPHER EVP_CIPH_ALWAYS_CALL_INIT EVP_CIPH_CTRL_INIT EVP_CIPH_CUSTOM_KEY_LENGTH EVP_CIPH_CUSTOM_COPY EVP_CIPH_FLAG_DEFAULT_ASN1 EVP_CIPHER_meth_set_flags(3) . EVP_CIPHER_fetch() EVP_CIPHER NULL . EVP_CIPHER_up_ref() 1 0 . EVP_CIPHER_CTX_new() EVP_CIPHER_CTX NULL . EVP_CIPHER_CTX_dup() EVP_CIPHER_CTX NULL . EVP_CIPHER_CTX_copy() 1 0 . EVP_EncryptInit_ex2() EVP_EncryptUpdate() EVP_EncryptFinal_ex() 1 0 . EVP_DecryptInit_ex2() EVP_DecryptUpdate() 1 0 . EVP_DecryptFinal_ex() 0 1 . EVP_CipherInit_ex2() EVP_CipherInit_SKEY() EVP_CipherUpdate() 1 0 . EVP_CipherFinal_ex() 0 / 1 . EVP_Cipher() 1 <= 0 EVP_CIPH_FLAG_CUSTOM_CIPHER EVP_CipherInit_ex2. EVP_Cipher() out / AAD AEAD EVP_CIPH_FLAG_CUSTOM_CIPHER . EVP_CIPHER_can_pipeline() 1 0 . EVP_CipherPipelineEncryptInit() EVP_CipherPipelineDecryptInit() 1 0 . EVP_CipherPipelineUpdate() EVP_CipherPipelineFinal() 1 0 . EVP_CIPHER_CTX_reset() 1 0 . EVP_get_cipherbyname() EVP_get_cipherbynid() EVP_get_cipherbyobj() EVP_CIPHER NULL . EVP_CIPHER_get_nid() EVP_CIPHER_CTX_get_nid() NID. EVP_CIPHER_get_block_size() EVP_CIPHER_CTX_get_block_size() 0 . EVP_CIPHER_get_key_length() EVP_CIPHER_CTX_get_key_length() . EVP_CIPHER_CTX_set_padding() 1. EVP_CIPHER_get_iv_length() EVP_CIPHER_CTX_get_iv_length() IV IV . EVP_CIPHER_CTX_get_tag_length() . EVP_CIPHER_get_type() EVP_CIPHER_CTX_get_type() NID NID_undef . EVP_CIPHER_CTX_cipher() EVP_CIPHER. EVP_CIPHER_CTX_get_num() num EVP_CTRL_RET_UNSUPPORTED . EVP_CIPHER_CTX_set_num() 1 0 . EVP_CIPHER_CTX_is_encrypting() 1 ctx 0 . EVP_CIPHER_param_to_asn1() EVP_CIPHER_asn1_to_param() . EVP_CIPHER_CTX_rand_key() 1 . EVP_CIPHER_names_do_all() 1 . 0 . EVP_CIPHER_get_params() EVP_CIPHER_CTX_get_params() EVP_CIPHER_CTX_set_params() 1 0 . . " " EVP. EVP_enc_null() : . AEAD EVP (AEAD) ctrl . (AAD) EVP_CipherUpdate() EVP_EncryptUpdate() EVP_DecryptUpdate() out NULL. outl AAD ( inl) . AAD . . EVP_DecryptFinal() EVP_CipherFinal() . . EVP_CipherUpdate() . ChaCha20 GCM "" 1. OCB . EVP_CipherUpdate() . GCM OCB ctrl GCM OCB. EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, ivlen, NULL) IV. IV. IV . GCM AES OCB AES 12 ( 96 ). OCB 15. EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, taglen, tag) "taglen" "tag". ( EVP_EncryptFinal()). OCB "taglen" 16 EVP_CTRL_AEAD_SET_TAG. EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen, tag) "taglen" "tag". "taglen" 1 16 . EVP_DecryptFinal() EVP_DecryptFinal_ex(). GCM . OCB . OCB "tag" "NULL" . IV. IV . OCB AES 16 ( 128 ). OCB. CCM EVP CCM GCM ctrl . CCM EVP_CipherUpdate() EVP_EncryptUpdate() EVP_DecryptUpdate() (in out) NULL inl. ctrl CCM. EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen, tag) CCM ( "tag" NULL) . M. (12 AES). GCM OCB ( " AEAD"). EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_L, ivlen, NULL) L CCM. (8 AES). EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, ivlen, NULL) (IV) CCM. . 15 - L 7 AES. SIV AES-SIV AES-GCM-SIV . SIV EVP . (AAD) / EVP_CipherUpdate() EVP_EncryptUpdate() EVP_DecryptUpdate() out NULL. RFC5297 AAD / . API AAD . EVP_DecryptFinal() EVP_CipherFinal() . . API (SIV) . EVP_CIPHER_CTX. SIV . RFC5297 SIV. . SIV : EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, taglen, tag); taglen ( ) tag. ( EVP_EncryptFinal()). SIV taglen 16. EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen, tag); ( ) taglen tag. ( EVP_DecryptUpdate()). SIV taglen 16. SIV EVP_CipherUpdate() EVP_EncryptUpdate() EVP_DecryptUpdate() out NULL. EVP_DecryptFinal() EVP_CipherFinal() . ChaCha20-Poly1305 ctrl ChaCha20-Poly1305 AEAD. EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, ivlen, NULL) nonce. 12 ( 96 ). OpenSSL 3.0 nonce 12 iv 12 . EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, taglen, tag) "taglen" "tag". ( EVP_EncryptFinal()). "taglen" 16 (POLY1305_BLOCK_SIZE 128 ) . EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen, tag) "taglen" "tag". IV. "taglen" 1 16 (POLY1305_BLOCK_SIZE) . . EVP . . EVP AES-NI ( ). PKCS n n . n . 8 11 5 5. . . 1 256 . . EVP_EncryptInit() EVP_EncryptInit_ex() EVP_EncryptFinal() EVP_DecryptInit() EVP_DecryptInit_ex() EVP_CipherInit() EVP_CipherInit_ex() EVP_CipherFinal() . EVP_EncryptInit_ex2() EVP_EncryptFinal_ex() EVP_DecryptInit_ex2() EVP_DecryptFinal_ex() EVP_CipherInit_ex2() EVP_CipherFinal_ex() . EVP_CipherInit() EVP_CipherInit_ex() . EVP_CipherInit() . EVP_CipherInit() key iv . EVP_CIPHER_CTX_FLAG_WRAP_ALLOW EVP_CipherInit_ex(). EVP_CIPHER_CTX . EVP_CIPHER_CTX . EVP_get_cipherbynid() EVP_get_cipherbyobj() . EVP_MAX_KEY_LENGTH EVP_MAX_IV_LENGTH . . unsigned char EVP_MAX_KEY_LENGTH . ASN1 ( ) S/MIME (RC2, DES, triple DES) CBC. IDEA: int do_crypt(char *outfile) { unsigned char outbuf[1024]; int outlen, tmplen; /* * Bogus key and IV: we'd normally set these from * another source. */ unsigned char key[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; unsigned char iv[] = {1,2,3,4,5,6,7,8}; char intext[] = "Some Crypto Text"; EVP_CIPHER_CTX *ctx; FILE *out; ctx = EVP_CIPHER_CTX_new(); if (!EVP_EncryptInit_ex2(ctx, EVP_idea_cbc(), key, iv, NULL)) { /* Error */ EVP_CIPHER_CTX_free(ctx); return 0; } if (!EVP_EncryptUpdate(ctx, outbuf, &outlen, intext, strlen(intext))) { /* Error */ EVP_CIPHER_CTX_free(ctx); return 0; } /* * Buffer passed to EVP_EncryptFinal() must be after data just * encrypted to avoid overwriting it. */ if (!EVP_EncryptFinal_ex(ctx, outbuf + outlen, &tmplen)) { /* Error */ EVP_CIPHER_CTX_free(ctx); return 0; } outlen += tmplen; EVP_CIPHER_CTX_free(ctx); /* * Need binary mode for fopen because encrypted data is * binary data. Also cannot use strlen() on it because * it won't be NUL terminated and may contain embedded * NULs. */ out = fopen(outfile, "wb"); if (out == NULL) { /* Error */ return 0; } fwrite(outbuf, 1, outlen, out); fclose(out); return 1; } openssl ( ): openssl idea -d \ -K 000102030405060708090A0B0C0D0E0F -iv 0102030405060708 / AES128 128-: int do_crypt(FILE *in, FILE *out, int do_encrypt) { /* Allow enough space in output buffer for additional block */ unsigned char inbuf[1024], outbuf[1024 + EVP_MAX_BLOCK_LENGTH]; int inlen, outlen; EVP_CIPHER_CTX *ctx; /* * Bogus key and IV: we'd normally set these from * another source. */ unsigned char key[] = "0123456789abcdeF"; unsigned char iv[] = "1234567887654321"; /* Don't set key or IV right away; we want to check lengths */ ctx = EVP_CIPHER_CTX_new(); if (!EVP_CipherInit_ex2(ctx, EVP_aes_128_cbc(), NULL, NULL, do_encrypt, NULL)) { /* Error */ EVP_CIPHER_CTX_free(ctx); return 0; } OPENSSL_assert(EVP_CIPHER_CTX_get_key_length(ctx) == 16); OPENSSL_assert(EVP_CIPHER_CTX_get_iv_length(ctx) == 16); /* Now we can set key and IV */ if (!EVP_CipherInit_ex2(ctx, NULL, key, iv, do_encrypt, NULL)) { /* Error */ EVP_CIPHER_CTX_free(ctx); return 0; } for (;;) { inlen = fread(inbuf, 1, 1024, in); if (inlen <= 0) break; if (!EVP_CipherUpdate(ctx, outbuf, &outlen, inbuf, inlen)) { /* Error */ EVP_CIPHER_CTX_free(ctx); return 0; } fwrite(outbuf, 1, outlen, out); } if (!EVP_CipherFinal_ex(ctx, outbuf, &outlen)) { /* Error */ EVP_CIPHER_CTX_free(ctx); return 0; } fwrite(outbuf, 1, outlen, out); EVP_CIPHER_CTX_free(ctx); return 1; } AES-CBC 256- "CS1". int encrypt(const unsigned char *key, const unsigned char *iv, const unsigned char *msg, size_t msg_len, unsigned char *out) { /* * This assumes that key size is 32 bytes and the iv is 16 bytes. * For ciphertext stealing mode the length of the ciphertext "out" will be * the same size as the plaintext size "msg_len". * The "msg_len" can be any size >= 16. */ int ret = 0, encrypt = 1, outlen, len; EVP_CIPHER_CTX *ctx = NULL; EVP_CIPHER *cipher = NULL; OSSL_PARAM params[2]; ctx = EVP_CIPHER_CTX_new(); cipher = EVP_CIPHER_fetch(NULL, "AES-256-CBC-CTS", NULL); if (ctx == NULL || cipher == NULL) goto err; /* * The default is "CS1" so this is not really needed, * but would be needed to set either "CS2" or "CS3". */ params[0] = OSSL_PARAM_construct_utf8_string(OSSL_CIPHER_PARAM_CTS_MODE, "CS1", 0); params[1] = OSSL_PARAM_construct_end(); if (!EVP_CipherInit_ex2(ctx, cipher, key, iv, encrypt, params)) goto err; /* NOTE: CTS mode does not support multiple calls to EVP_CipherUpdate() */ if (!EVP_CipherUpdate(ctx, out, &outlen, msg, msg_len)) goto err; if (!EVP_CipherFinal_ex(ctx, out + outlen, &len)) goto err; ret = 1; err: EVP_CIPHER_free(cipher); EVP_CIPHER_CTX_free(ctx); return ret; } evp(7), property(7), " " crypto(7), provider-cipher(7), life_cycle-cipher(7) : EVP_aes_128_gcm(3), EVP_aria_128_gcm(3), EVP_bf_cbc(3), EVP_camellia_128_ecb(3), EVP_cast5_cbc(3), EVP_chacha20(3), EVP_des_cbc(3), EVP_desx_cbc(3), EVP_idea_cbc(3), EVP_rc2_cbc(3), EVP_rc4(3), EVP_rc5_32_12_16_cbc(3), EVP_seed_cbc(3), EVP_sm4_cbc(3), OCB OpenSSL 1.1.0. EVP_CIPHER_CTX OpenSSL 1.1.0. EVP_CIPHER_CTX_reset() EVP_CIPHER_CTX_cleanup(). EVP_CIPHER_CTX_init() EVP_CIPHER_CTX_reset(). EVP_CIPHER_CTX_cipher() OpenSSL 3.0 EVP_CIPHER_CTX_get0_cipher() . EVP_EncryptInit_ex2(), EVP_DecryptInit_ex2(), EVP_CipherInit_ex2(), EVP_CIPHER_fetch(), EVP_CIPHER_free(), EVP_CIPHER_up_ref(), EVP_CIPHER_CTX_get0_cipher(), EVP_CIPHER_CTX_get1_cipher(), EVP_CIPHER_get_params(), EVP_CIPHER_CTX_set_params(), EVP_CIPHER_CTX_get_params(), EVP_CIPHER_gettable_params(), EVP_CIPHER_settable_ctx_params(), EVP_CIPHER_gettable_ctx_params(), EVP_CIPHER_CTX_settable_params() EVP_CIPHER_CTX_gettable_params() 3.0. EVP_CIPHER_nid() EVP_CIPHER_name() EVP_CIPHER_block_size() EVP_CIPHER_key_length() EVP_CIPHER_iv_length() EVP_CIPHER_flags() EVP_CIPHER_mode() EVP_CIPHER_type() EVP_CIPHER_CTX_nid() EVP_CIPHER_CTX_block_size() EVP_CIPHER_CTX_key_length() EVP_CIPHER_CTX_iv_length() EVP_CIPHER_CTX_tag_length() EVP_CIPHER_CTX_num() EVP_CIPHER_CTX_type() EVP_CIPHER_CTX_mode() "get" "get0" OpenSSL 3.0 . . EVP_CIPHER_CTX_encrypting() EVP_CIPHER_CTX_is_encrypting() OpenSSL 3.0. . EVP_CIPHER_CTX_flags() OpenSSL 1.1.0. EVP_CIPHER_CTX_dup() OpenSSL 3.2. EVP_CipherInit_SKEY() OpenSSL 3.5. OpenSSL 3.5 ctx EVP_CIPHER_CTX_get_block_size() 0 . 2000-2026 OpenSSL. . Apache 2.0 ( ""). . LICENSE . 3 . . : . 3.6.2 7 2026 EVP_ENCRYPTINIT(3ssl)