You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

143 lines
4.4 KiB

--- 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;