aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/str/libkvistr.cpp
diff options
context:
space:
mode:
authorGravatar Vladimir Panteleev2017-12-11 04:06:41 -0600
committerGravatar ctrlaltca2017-12-11 11:06:41 +0100
commited2a156892c5ce9a1ab54c50031ba59a9a34485f (patch)
tree4e0bb3a7e703586b074f7228a7176aad45cf0246 /src/modules/str/libkvistr.cpp
parentAppVeyor: Updated OpenSSL version to 1.0.2m (diff)
downloadKVIrc-ed2a156892c5ce9a1ab54c50031ba59a9a34485f.tar.gz
KVIrc-ed2a156892c5ce9a1ab54c50031ba59a9a34485f.tar.bz2
KVIrc-ed2a156892c5ce9a1ab54c50031ba59a9a34485f.zip
Support OpenSSL 1.1.0 (#2223)
Fixes #2151.
Diffstat (limited to 'src/modules/str/libkvistr.cpp')
-rw-r--r--src/modules/str/libkvistr.cpp41
1 files changed, 26 insertions, 15 deletions
diff --git a/src/modules/str/libkvistr.cpp b/src/modules/str/libkvistr.cpp
index c695be123..01ba732ca 100644
--- a/src/modules/str/libkvistr.cpp
+++ b/src/modules/str/libkvistr.cpp
@@ -43,6 +43,12 @@
#include "KviSSL.h"
#include <openssl/evp.h>
#include <openssl/pem.h>
+
+#if OPENSSL_VERSION_NUMBER < 0x10100005L
+#define EVP_MD_CTX_new EVP_MD_CTX_create
+#define EVP_MD_CTX_free EVP_MD_CTX_destroy
+#endif
+
#else
// The fallback we can always use, but with very limited set of
// functionality.
@@ -1383,7 +1389,7 @@ static bool str_kvs_fnc_digest(KviKvsModuleFunctionCall * c)
if(szType.isEmpty())
szType = "md5";
- EVP_MD_CTX mdctx;
+ EVP_MD_CTX *mdctx;
const EVP_MD * md;
unsigned char md_value[EVP_MAX_MD_SIZE];
unsigned int md_len, i;
@@ -1397,11 +1403,11 @@ static bool str_kvs_fnc_digest(KviKvsModuleFunctionCall * c)
return true;
}
- EVP_MD_CTX_init(&mdctx);
- EVP_DigestInit_ex(&mdctx, md, nullptr);
- EVP_DigestUpdate(&mdctx, szString.toUtf8().data(), szString.toUtf8().length());
- EVP_DigestFinal_ex(&mdctx, md_value, &md_len);
- EVP_MD_CTX_cleanup(&mdctx);
+ mdctx = EVP_MD_CTX_new();
+ EVP_DigestInit_ex(mdctx, md, nullptr);
+ EVP_DigestUpdate(mdctx, szString.toUtf8().data(), szString.toUtf8().length());
+ EVP_DigestFinal_ex(mdctx, md_value, &md_len);
+ EVP_MD_CTX_free(mdctx);
for(i = 0; i < md_len; i++)
{
@@ -2314,10 +2320,11 @@ static bool str_kvs_fnc_evpSign(KviKvsModuleFunctionCall * c)
#if defined(COMPILE_SSL_SUPPORT)
KviSSL::globalSSLInit();
- EVP_MD_CTX md_ctx;
+ EVP_MD_CTX *md_ctx;
EVP_PKEY * pKey = nullptr;
unsigned int len = 0;
unsigned char * sig = nullptr;
+ int err;
if(szCert.isEmpty())
{
@@ -2368,9 +2375,12 @@ static bool str_kvs_fnc_evpSign(KviKvsModuleFunctionCall * c)
len = EVP_PKEY_size(pKey);
sig = (unsigned char *)KviMemory::allocate(len * sizeof(char));
- EVP_SignInit(&md_ctx, EVP_sha1());
- EVP_SignUpdate(&md_ctx, (unsigned char *)szMessage.data(), szMessage.length());
- if(EVP_SignFinal(&md_ctx, sig, &len, pKey))
+ md_ctx = EVP_MD_CTX_new();
+ EVP_SignInit(md_ctx, EVP_sha1());
+ EVP_SignUpdate(md_ctx, (unsigned char *)szMessage.data(), szMessage.length());
+ err = EVP_SignFinal(md_ctx, sig, &len, pKey);
+ EVP_MD_CTX_free(md_ctx);
+ if(err)
{
QByteArray szSign((const char *)sig, len);
OPENSSL_free(sig);
@@ -2451,7 +2461,7 @@ static bool str_kvs_fnc_evpVerify(KviKvsModuleFunctionCall * c)
szSign = QByteArray::fromBase64(szSignB64);
const char * message = szMessage.data();
- EVP_MD_CTX md_ctx;
+ EVP_MD_CTX* md_ctx;
EVP_PKEY * pKey = nullptr;
X509 * cert = nullptr;
int err = -1;
@@ -2518,10 +2528,11 @@ static bool str_kvs_fnc_evpVerify(KviKvsModuleFunctionCall * c)
}
}
- EVP_VerifyInit(&md_ctx, EVP_sha1());
- EVP_VerifyUpdate(&md_ctx, message, strlen(message));
- err = EVP_VerifyFinal(&md_ctx, (unsigned char *)szSign.data(), szSign.size(), pKey);
- EVP_MD_CTX_cleanup(&md_ctx);
+ md_ctx = EVP_MD_CTX_new();
+ EVP_VerifyInit(md_ctx, EVP_sha1());
+ EVP_VerifyUpdate(md_ctx, message, strlen(message));
+ err = EVP_VerifyFinal(md_ctx, (unsigned char *)szSign.data(), szSign.size(), pKey);
+ EVP_MD_CTX_free(md_ctx);
EVP_PKEY_free(pKey);
switch(err)
{