Core/Crypto: Updated ARC4 code with openssl 3.0 support

(cherry picked from commit 9fca5e9117)
This commit is contained in:
daMaex
2022-06-14 21:39:22 +02:00
committed by Shauren
parent 95997cd56f
commit 13c44517da
2 changed files with 24 additions and 1 deletions

View File

@@ -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)

View File

@@ -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;
};
}