diff options
author | daMaex <damaex@live.de> | 2022-06-14 21:39:22 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-06-16 12:37:00 +0200 |
commit | 9fca5e9117317d6706fdf7d09fb86acaa3361129 (patch) | |
tree | 9cb12e0de3a44c4e48ed37437d1342925758b953 | |
parent | 0b6f77a0062389ea0bc90427a56d2cc90eda6768 (diff) |
Core/Crypto: Updated ARC4 code with openssl 3.0 support
-rw-r--r-- | src/common/Cryptography/ARC4.cpp | 21 | ||||
-rw-r--r-- | src/common/Cryptography/ARC4.h | 4 |
2 files changed, 24 insertions, 1 deletions
diff --git a/src/common/Cryptography/ARC4.cpp b/src/common/Cryptography/ARC4.cpp index 161303e2c15..faa2265ef71 100644 --- a/src/common/Cryptography/ARC4.cpp +++ b/src/common/Cryptography/ARC4.cpp @@ -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) diff --git a/src/common/Cryptography/ARC4.h b/src/common/Cryptography/ARC4.h index 5ce2db5aa3b..b4c461dbd6b 100644 --- a/src/common/Cryptography/ARC4.h +++ b/src/common/Cryptography/ARC4.h @@ -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; }; } |