aboutsummaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/common')
-rw-r--r--src/common/Cryptography/ARC4.cpp21
-rw-r--r--src/common/Cryptography/ARC4.h4
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;
};
}