TrinityCore
Loading...
Searching...
No Matches
OpenSSLCrypto.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include "OpenSSLCrypto.h"
19#include "Errors.h"
20#include <openssl/crypto.h>
21
22#if OPENSSL_VERSION_NUMBER >= 0x30000000L
23#include <openssl/provider.h>
24OSSL_PROVIDER* LegacyProvider;
25#endif
26
27void OpenSSLCrypto::threadsSetup([[maybe_unused]] boost::filesystem::path const& providerModulePath)
28{
29#if OPENSSL_VERSION_NUMBER >= 0x30000000L
30#if TRINITY_PLATFORM == TRINITY_PLATFORM_WINDOWS
31 OSSL_PROVIDER_set_default_search_path(nullptr, providerModulePath.string().c_str());
32#define OPENSSL_LEGACY_PROVIDER_FILENAME "legacy.dll"
33#else
34#define OPENSSL_LEGACY_PROVIDER_FILENAME "legacy.so"
35#endif
36 LegacyProvider = OSSL_PROVIDER_try_load(nullptr, "legacy", 1);
37 WPFatal(LegacyProvider != nullptr, "OpenSSL failed to load " OPENSSL_LEGACY_PROVIDER_FILENAME);
38#endif
39}
40
42{
43#if OPENSSL_VERSION_NUMBER >= 0x30000000L
44 OSSL_PROVIDER_unload(LegacyProvider);
45 OSSL_PROVIDER_set_default_search_path(nullptr, nullptr);
46#endif
47}
#define WPFatal(cond,...)
Definition Errors.h:58
TC_COMMON_API void threadsSetup(boost::filesystem::path const &providerModulePath)
Needs to be called before threads using openssl are spawned.
TC_COMMON_API void threadsCleanup()
Needs to be called after threads using openssl are despawned.