From cb065ed3ec2e8a313de229dc8acf1b8f0a55f365 Mon Sep 17 00:00:00 2001 From: AriDEV Date: Sat, 30 Dec 2023 17:45:03 +0100 Subject: [PATCH] Server/Crypto: Use cipher update and cipher final functions instead. --- src/server/shared/Cryptography/ARC4.cpp | 13 +++++++++---- src/server/shared/Cryptography/ARC4.h | 1 + 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/server/shared/Cryptography/ARC4.cpp b/src/server/shared/Cryptography/ARC4.cpp index 9f127264de..b0d4d28bc0 100644 --- a/src/server/shared/Cryptography/ARC4.cpp +++ b/src/server/shared/Cryptography/ARC4.cpp @@ -8,13 +8,13 @@ ARC4::ARC4() : m_ctx(EVP_CIPHER_CTX_new()) { - EVP_CIPHER_CTX_init(m_ctx); + EVP_CIPHER_CTX_reset(m_ctx); EVP_EncryptInit_ex(m_ctx, EVP_rc4(), NULL, NULL, NULL); } ARC4::~ARC4() { - EVP_CIPHER_CTX_cleanup(m_ctx); + EVP_CIPHER_CTX_reset(m_ctx); } void ARC4::Init(uint8* seed, uint32 len) @@ -26,6 +26,11 @@ void ARC4::Init(uint8* seed, uint32 len) void ARC4::UpdateData(int len, uint8 *data) { int outlen = 0; - EVP_EncryptUpdate(m_ctx, data, &outlen, data, len); - EVP_EncryptFinal_ex(m_ctx, data, &outlen); + EVP_CipherUpdate(m_ctx, data, &outlen, data, len); + Finalize(outlen, data); +} + +void ARC4::Finalize(int outlen, uint8* data) +{ + EVP_CipherFinal_ex(m_ctx, data, &outlen); } diff --git a/src/server/shared/Cryptography/ARC4.h b/src/server/shared/Cryptography/ARC4.h index 10ad2bba5a..0492876b23 100644 --- a/src/server/shared/Cryptography/ARC4.h +++ b/src/server/shared/Cryptography/ARC4.h @@ -16,6 +16,7 @@ class ARC4 ~ARC4(); void Init(uint8 *seed, uint32 len); void UpdateData(int len, uint8 *data); + void Finalize(int outlen, uint8* data); private: EVP_CIPHER_CTX *m_ctx; };