aboutsummaryrefslogtreecommitdiff
path: root/src/common/Cryptography/OpenSSLCrypto.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2022-06-14 23:18:42 +0200
committerShauren <shauren.trinity@gmail.com>2022-06-16 12:37:00 +0200
commit27259f85241cb9a8293fe716c5de439c7921fd91 (patch)
tree018bf5936b10a7da08c9fd646a9014c50653ec46 /src/common/Cryptography/OpenSSLCrypto.cpp
parent9fca5e9117317d6706fdf7d09fb86acaa3361129 (diff)
Core/Crypto: Fixed loading legacy openssl provider for RC4 on windows
Diffstat (limited to 'src/common/Cryptography/OpenSSLCrypto.cpp')
-rw-r--r--src/common/Cryptography/OpenSSLCrypto.cpp22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/common/Cryptography/OpenSSLCrypto.cpp b/src/common/Cryptography/OpenSSLCrypto.cpp
index 864e95530c2..4b82263c060 100644
--- a/src/common/Cryptography/OpenSSLCrypto.cpp
+++ b/src/common/Cryptography/OpenSSLCrypto.cpp
@@ -38,9 +38,15 @@ static void threadIdCallback(CRYPTO_THREADID * id)
(void)id;
CRYPTO_THREADID_set_numeric(id, std::hash<std::thread::id>()(std::this_thread::get_id()));
}
+#elif OPENSSL_VERSION_NUMBER >= 0x30000000L
+#include <openssl/provider.h>
+OSSL_PROVIDER* LegacyProvider;
+OSSL_PROVIDER* DefaultProvider;
+#endif
-void OpenSSLCrypto::threadsSetup()
+void OpenSSLCrypto::threadsSetup([[maybe_unused]] boost::filesystem::path const& providerModulePath)
{
+#if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER < 0x1010000fL
cryptoLocks.resize(CRYPTO_num_locks());
for(int i = 0 ; i < CRYPTO_num_locks(); ++i)
{
@@ -52,10 +58,18 @@ void OpenSSLCrypto::threadsSetup()
(void)&lockingCallback;
CRYPTO_set_locking_callback(lockingCallback);
+#elif OPENSSL_VERSION_NUMBER >= 0x30000000L
+#if TRINITY_PLATFORM == TRINITY_PLATFORM_WINDOWS
+ OSSL_PROVIDER_set_default_search_path(nullptr, providerModulePath.string().c_str());
+#endif
+ LegacyProvider = OSSL_PROVIDER_load(nullptr, "legacy");
+ DefaultProvider = OSSL_PROVIDER_load(nullptr, "default");
+#endif
}
void OpenSSLCrypto::threadsCleanup()
{
+#if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER < 0x1010000fL
CRYPTO_set_locking_callback(nullptr);
CRYPTO_THREADID_set_callback(nullptr);
for(int i = 0 ; i < CRYPTO_num_locks(); ++i)
@@ -63,5 +77,9 @@ void OpenSSLCrypto::threadsCleanup()
delete cryptoLocks[i];
}
cryptoLocks.resize(0);
-}
+#elif OPENSSL_VERSION_NUMBER >= 0x30000000L
+ OSSL_PROVIDER_unload(LegacyProvider);
+ OSSL_PROVIDER_unload(DefaultProvider);
+ OSSL_PROVIDER_set_default_search_path(nullptr, nullptr);
#endif
+}