aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules
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
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')
-rw-r--r--src/modules/file/libkvifile.cpp18
-rw-r--r--src/modules/fish/libkvifish.cpp17
-rw-r--r--src/modules/str/libkvistr.cpp41
3 files changed, 51 insertions, 25 deletions
diff --git a/src/modules/file/libkvifile.cpp b/src/modules/file/libkvifile.cpp
index 5dac7ba0f..9025ad33d 100644
--- a/src/modules/file/libkvifile.cpp
+++ b/src/modules/file/libkvifile.cpp
@@ -53,6 +53,12 @@
#endif
#include <openssl/evp.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.
@@ -1553,7 +1559,7 @@ static bool file_kvs_fnc_digest(KviKvsModuleFunctionCall * c)
if(szAlgo.isEmpty())
szAlgo = "md5";
- EVP_MD_CTX mdctx;
+ EVP_MD_CTX *mdctx;
const EVP_MD * pMD;
unsigned char ucMDValue[EVP_MAX_MD_SIZE];
unsigned int uMDLen, u;
@@ -1567,11 +1573,11 @@ static bool file_kvs_fnc_digest(KviKvsModuleFunctionCall * c)
return true;
}
- EVP_MD_CTX_init(&mdctx);
- EVP_DigestInit_ex(&mdctx, pMD, nullptr);
- EVP_DigestUpdate(&mdctx, content.constData(), content.size());
- EVP_DigestFinal_ex(&mdctx, ucMDValue, &uMDLen);
- EVP_MD_CTX_cleanup(&mdctx);
+ mdctx = EVP_MD_CTX_new();
+ EVP_DigestInit_ex(mdctx, pMD, nullptr);
+ EVP_DigestUpdate(mdctx, content.constData(), content.size());
+ EVP_DigestFinal_ex(mdctx, ucMDValue, &uMDLen);
+ EVP_MD_CTX_free(mdctx);
for(u = 0; u < uMDLen; u++)
{
diff --git a/src/modules/fish/libkvifish.cpp b/src/modules/fish/libkvifish.cpp
index 437b6c6e6..5d17ec994 100644
--- a/src/modules/fish/libkvifish.cpp
+++ b/src/modules/fish/libkvifish.cpp
@@ -81,25 +81,34 @@ static bool fish_DH1080_gen(unsigned char ** szPubKey, int * iLen)
if(!g_fish_dh)
{
BIGNUM * dhp = BN_new();
- BN_init(dhp);
if(!BN_hex2bn(&dhp, g_fish_prime1080_hex))
return false;
BIGNUM * dhg = BN_new();
- BN_init(dhg);
if(!BN_hex2bn(&dhg, g_fish_generator))
return false;
g_fish_dh = DH_new();
+#if OPENSSL_VERSION_NUMBER >= 0x10100005L
+ DH_set0_pqg(g_fish_dh, dhp, nullptr, dhg);
+#else
g_fish_dh->p = dhp;
g_fish_dh->g = dhg;
+#endif
DH_generate_key(g_fish_dh);
}
- *iLen = BN_num_bytes(g_fish_dh->pub_key);
+ const BIGNUM* pub_key;
+#if OPENSSL_VERSION_NUMBER >= 0x10100005L
+ DH_get0_key(g_fish_dh, &pub_key, nullptr);
+#else
+ pub_key = g_fish_dh->pub_key;
+#endif
+
+ *iLen = BN_num_bytes(pub_key);
*szPubKey = (unsigned char *)KviMemory::allocate(*iLen);
- BN_bn2bin(g_fish_dh->pub_key, *szPubKey);
+ BN_bn2bin(pub_key, *szPubKey);
return true;
#else
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)
{