--- a/src/cipher.c +++ b/src/cipher.c @@ -8,6 +8,10 @@ cipher module for lua-openssl binding #include "openssl.h" #include "private.h" +#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) +#define EVP_CIPHER_CTX_reset EVP_CIPHER_CTX_init +#endif + /*** list all support cipher algs @@ -109,7 +113,7 @@ static LUA_FUNCTION(openssl_evp_encrypt) memcpy(evp_iv, iv, iv_len); } - EVP_CIPHER_CTX_init(c); + EVP_CIPHER_CTX_reset(c); ret = EVP_EncryptInit_ex(c, cipher, e, (const byte*)evp_key, iv_len > 0 ? (const byte*)evp_iv : NULL); if (ret == 1) { @@ -131,8 +135,12 @@ static LUA_FUNCTION(openssl_evp_encrypt) OPENSSL_free(buffer); } } +#if OPENSSL_VERSION_NUMBER >= 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + EVP_CIPHER_CTX_reset(c); +#else EVP_CIPHER_CTX_cleanup(c); EVP_CIPHER_CTX_free(c); +#endif return (ret == 1) ? ret : openssl_pushresult(L, ret); } else @@ -196,7 +204,7 @@ static LUA_FUNCTION(openssl_evp_decrypt) memcpy(evp_iv, iv, iv_len); } - EVP_CIPHER_CTX_init(c); + EVP_CIPHER_CTX_reset(c); ret = EVP_DecryptInit_ex(c, cipher, e, key ? (const byte*)evp_key : NULL, iv_len > 0 ? (const byte*)evp_iv : NULL); if (ret == 1) { @@ -220,8 +228,12 @@ static LUA_FUNCTION(openssl_evp_decrypt) OPENSSL_free(buffer); } } +#if OPENSSL_VERSION_NUMBER >= 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + EVP_CIPHER_CTX_reset(c); +#else EVP_CIPHER_CTX_cleanup(c); EVP_CIPHER_CTX_free(c); +#endif return (ret == 1) ? ret : openssl_pushresult(L, ret); } else @@ -292,7 +304,7 @@ static LUA_FUNCTION(openssl_evp_cipher) memcpy(evp_iv, iv, iv_len); } - EVP_CIPHER_CTX_init(c); + EVP_CIPHER_CTX_reset(c); ret = EVP_CipherInit_ex(c, cipher, e, (const byte*)evp_key, iv_len > 0 ? (const byte*)evp_iv : NULL, enc); if (ret == 1) { @@ -317,8 +329,12 @@ static LUA_FUNCTION(openssl_evp_cipher) OPENSSL_free(buffer); } } +#if OPENSSL_VERSION_NUMBER >= 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + EVP_CIPHER_CTX_reset(c); +#else EVP_CIPHER_CTX_cleanup(c); EVP_CIPHER_CTX_free(c); +#endif return (ret == 1) ? ret : openssl_pushresult(L, ret); } else @@ -376,7 +392,7 @@ static LUA_FUNCTION(openssl_cipher_new) memcpy(evp_iv, iv, iv_len); } c = EVP_CIPHER_CTX_new(); - EVP_CIPHER_CTX_init(c); + EVP_CIPHER_CTX_reset(c); if (!EVP_CipherInit_ex(c, cipher, e, key ? (const byte*)evp_key : NULL, iv_len > 0 ? (const byte*)evp_iv : NULL, enc)) { luaL_error(L, "EVP_CipherInit_ex failed, please check openssl error"); @@ -431,7 +447,7 @@ static LUA_FUNCTION(openssl_cipher_encry memcpy(evp_iv, iv, iv_len); } c = EVP_CIPHER_CTX_new(); - EVP_CIPHER_CTX_init(c); + EVP_CIPHER_CTX_reset(c); ret = EVP_EncryptInit_ex(c, cipher, e, key ? (const byte*)evp_key : NULL, iv_len > 0 ? (const byte*)evp_iv : NULL); @@ -491,7 +507,7 @@ static LUA_FUNCTION(openssl_cipher_decry memcpy(evp_iv, iv, iv_len); } c = EVP_CIPHER_CTX_new(); - EVP_CIPHER_CTX_init(c); + EVP_CIPHER_CTX_reset(c); ret = EVP_DecryptInit_ex(c, cipher, e, key ? (const byte*)evp_key : NULL, iv_len > 0 ? (const byte*)evp_iv : NULL); @@ -937,8 +953,12 @@ static LUA_FUNCTION(openssl_cipher_ctx_f return 0; lua_pushnil(L); lua_rawsetp(L, LUA_REGISTRYINDEX, ctx); +#if OPENSSL_VERSION_NUMBER >= 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + EVP_CIPHER_CTX_reset(ctx); +#else EVP_CIPHER_CTX_cleanup(ctx); EVP_CIPHER_CTX_free(ctx); +#endif FREE_OBJECT(1); return 0; } --- a/src/openssl.c +++ b/src/openssl.c @@ -523,9 +523,7 @@ LUALIB_API int luaopen_openssl(lua_State #endif #ifndef OPENSSL_NO_ENGINE - ENGINE_load_dynamic(); - ENGINE_load_openssl(); - ENGINE_load_builtin_engines(); + ENGINE_register_all_complete(); #endif #ifdef LOAD_ENGINE_CUSTOM LOAD_ENGINE_CUSTOM --- a/src/th-lock.c +++ b/src/th-lock.c @@ -310,7 +310,7 @@ unsigned long irix_thread_id(void) /* Linux and a few others */ #ifdef PTHREADS -#ifndef OPENSSL_SYS_WIN32 +#if !defined(OPENSSL_SYS_WIN32) && (OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)) static pthread_mutex_t *lock_cs; static long *lock_count;