Estoy usando openssl 1.0.2o para escribir un código de cifrado simétrico para cifrar algunos datos en la memoria. openssl parece tener dos API similares para hacer esto:
int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
ENGINE *impl, unsigned char *key, unsigned char *iv);
int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
int *outl, unsigned char *in, int inl);
int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out,
int *outl);
y
int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
ENGINE *impl, unsigned char *key, unsigned char *iv, int enc);
int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
int *outl, unsigned char *in, int inl);
int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm,
int *outl);
Solo veo pequeñas diferencias en la interfaz. Estoy usando AES-256-CBC. No estoy especificando un motor no predeterminado.
¿Una API es más nueva que la otra o es preferida por alguna razón? No he encontrado ninguna documentación que explique cuándo se debe usar una con preferencia a la otra.