mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-15 23:20:36 +01:00
Core/Crypto: Updated ARC4 code with openssl 3.0 support
(cherry picked from commit 9fca5e9117)
This commit is contained in:
@@ -18,16 +18,35 @@
|
||||
#include "ARC4.h"
|
||||
#include "Errors.h"
|
||||
|
||||
#if OPENSSL_VERSION_NUMBER >= 0x30000000L
|
||||
#include <openssl/provider.h>
|
||||
#endif
|
||||
|
||||
Trinity::Crypto::ARC4::ARC4() : _ctx(EVP_CIPHER_CTX_new())
|
||||
{
|
||||
EVP_CIPHER const* cipher;
|
||||
#if OPENSSL_VERSION_NUMBER >= 0x30000000L
|
||||
_libCtx = OSSL_LIB_CTX_new();
|
||||
_legacyProvider = OSSL_PROVIDER_load(_libCtx, "legacy");
|
||||
|
||||
cipher = EVP_CIPHER_fetch(_libCtx, "RC4", "");
|
||||
#else
|
||||
cipher = EVP_rc4();
|
||||
#endif
|
||||
|
||||
EVP_CIPHER_CTX_init(_ctx);
|
||||
int result = EVP_EncryptInit_ex(_ctx, EVP_rc4(), nullptr, nullptr, nullptr);
|
||||
int result = EVP_EncryptInit_ex(_ctx, cipher, nullptr, nullptr, nullptr);
|
||||
ASSERT(result == 1);
|
||||
}
|
||||
|
||||
Trinity::Crypto::ARC4::~ARC4()
|
||||
{
|
||||
EVP_CIPHER_CTX_free(_ctx);
|
||||
|
||||
#if OPENSSL_VERSION_NUMBER >= 0x30000000L
|
||||
OSSL_PROVIDER_unload(_legacyProvider);
|
||||
OSSL_LIB_CTX_free(_libCtx);
|
||||
#endif
|
||||
}
|
||||
|
||||
void Trinity::Crypto::ARC4::Init(uint8 const* seed, size_t len)
|
||||
|
||||
@@ -38,6 +38,10 @@ namespace Trinity::Crypto
|
||||
template <typename Container>
|
||||
void UpdateData(Container& c) { UpdateData(std::data(c), std::size(c)); }
|
||||
private:
|
||||
#if OPENSSL_VERSION_NUMBER >= 0x30000000L
|
||||
OSSL_LIB_CTX* _libCtx;
|
||||
OSSL_PROVIDER* _legacyProvider;
|
||||
#endif
|
||||
EVP_CIPHER_CTX* _ctx;
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user