diff options
| author | 2017-12-11 04:06:41 -0600 | |
|---|---|---|
| committer | 2017-12-11 11:06:41 +0100 | |
| commit | ed2a156892c5ce9a1ab54c50031ba59a9a34485f (patch) | |
| tree | 4e0bb3a7e703586b074f7228a7176aad45cf0246 /src/modules | |
| parent | AppVeyor: Updated OpenSSL version to 1.0.2m (diff) | |
| download | KVIrc-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.cpp | 18 | ||||
| -rw-r--r-- | src/modules/fish/libkvifish.cpp | 17 | ||||
| -rw-r--r-- | src/modules/str/libkvistr.cpp | 41 |
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) { |
