@ -102,9 +102,8 @@ emile_binbuf_cipher(Emile_Cipher_Algorithm algo,
unsigned int salt ;
unsigned int tmp = 0 ;
unsigned int crypted_length ;
int opened = 0 ;
/* Openssl declarations*/
EVP_CIPHER_CTX ctx ;
EVP_CIPHER_CTX * ctx = NULL ;
unsigned int * buffer = NULL ;
int tmp_len ;
@ -151,29 +150,28 @@ emile_binbuf_cipher(Emile_Cipher_Algorithm algo,
/* Openssl create the corresponding cipher
AES with a 256 bit key , Cipher Block Chaining mode */
EVP_CIPHER_CTX_init ( & ctx ) ;
if ( ! EVP_EncryptInit_ex ( & ctx , EVP_aes_256_cbc ( ) , NULL , ik , iv ) )
ctx = EVP_CIPHER_CTX_new ( ) ;
if ( ! EVP_EncryptInit_ex ( ctx , EVP_aes_256_cbc ( ) , NULL , ik , iv ) )
goto on_error ;
opened = 1 ;
memset ( iv , 0 , sizeof ( iv ) ) ;
memset ( ik , 0 , sizeof ( ik ) ) ;
pointer = ( unsigned char * ) eina_binbuf_string_get ( result ) ;
/* Openssl encrypt */
if ( ! EVP_EncryptUpdate ( & ctx , pointer + sizeof ( int ) , & tmp_len ,
if ( ! EVP_EncryptUpdate ( ctx , pointer + sizeof ( int ) , & tmp_len ,
( unsigned char * ) buffer ,
eina_binbuf_length_get ( data ) + sizeof ( unsigned int ) ) )
goto on_error ;
/* Openssl close the cipher */
if ( ! EVP_EncryptFinal_ex ( & ctx , pointer + sizeof ( int ) + tmp_len ,
if ( ! EVP_EncryptFinal_ex ( ctx , pointer + sizeof ( int ) + tmp_len ,
& tmp_len ) )
goto on_error ;
EVP_CIPHER_CTX_cleanup ( & ctx ) ;
EVP_CIPHER_CTX_free ( ctx ) ;
ctx = NULL ;
free ( buffer ) ;
return result ;
@ -183,8 +181,8 @@ on_error:
memset ( ik , 0 , sizeof ( ik ) ) ;
/* Openssl error */
if ( opened )
EVP_CIPHER_CTX_cleanup ( & ctx ) ;
if ( ctx )
EVP_CIPHER_CTX_cleanup ( ctx ) ;
free ( buffer ) ;
@ -203,7 +201,7 @@ emile_binbuf_decipher(Emile_Cipher_Algorithm algo,
{
Eina_Binbuf * result = NULL ;
unsigned int * over ;
EVP_CIPHER_CTX ctx ;
EVP_CIPHER_CTX * ctx = NULL ;
unsigned char ik [ MAX_KEY_LEN ] ;
unsigned char iv [ MAX_IV_LEN ] ;
unsigned char key_material [ MAX_KEY_LEN + MAX_IV_LEN ] ;
@ -211,7 +209,6 @@ emile_binbuf_decipher(Emile_Cipher_Algorithm algo,
unsigned int size ;
int tmp_len ;
int tmp = 0 ;
int opened = 0 ;
if ( algo ! = EMILE_AES256_CBC ) return NULL ;
if ( ! emile_cipher_init ( ) ) return NULL ;
@ -247,23 +244,23 @@ emile_binbuf_decipher(Emile_Cipher_Algorithm algo,
eina_binbuf_append_length ( result , ( unsigned char * ) ( over + 1 ) , tmp_len ) ;
/* Openssl create the corresponding cipher */
EVP_CIPHER_CTX_init ( & ctx ) ;
opened = 1 ;
ctx = EVP_CIPHER_CTX_new ( ) ;
if ( ! EVP_DecryptInit_ex ( & ctx , EVP_aes_256_cbc ( ) , NULL , ik , iv ) )
if ( ! EVP_DecryptInit_ex ( ctx , EVP_aes_256_cbc ( ) , NULL , ik , iv ) )
goto on_error ;
memset ( iv , 0 , sizeof ( iv ) ) ;
memset ( ik , 0 , sizeof ( ik ) ) ;
/* Openssl decrypt */
if ( ! EVP_DecryptUpdate ( & ctx ,
if ( ! EVP_DecryptUpdate ( ctx ,
( void * ) eina_binbuf_string_get ( result ) , & tmp ,
( void * ) ( over + 1 ) , tmp_len ) )
goto on_error ;
/* Openssl close the cipher*/
EVP_CIPHER_CTX_cleanup ( & ctx ) ;
EVP_CIPHER_CTX_free ( ctx ) ;
ctx = NULL ;
/* Get the decrypted data size */
tmp = * ( unsigned int * ) ( eina_binbuf_string_get ( result ) ) ;
@ -281,8 +278,8 @@ on_error:
memset ( iv , 0 , sizeof ( iv ) ) ;
memset ( ik , 0 , sizeof ( ik ) ) ;
if ( opened )
EVP_CIPHER_CTX_cleanup ( & ctx ) ;
if ( ctx )
EVP_CIPHER_CTX_free ( ctx ) ;
eina_binbuf_free ( result ) ;