forked from mirror/azerothcore-wotlk
53364abcd7
Support for both OpenSSL 1.0 LTS and OpenSSL 1.1 versions. Many Linux distributions are still on 1.0 and will stay on LTS for quite some time. Port of CMaNGOS commit: cmangos/mangos-wotlk@e1b0048
41 lines
1.1 KiB
C++
41 lines
1.1 KiB
C++
/*
|
|
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license: https://github.com/azerothcore/azerothcore-wotlk/blob/master/LICENSE-GPL2
|
|
* Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/>
|
|
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
|
|
*/
|
|
|
|
#include "ARC4.h"
|
|
#include <openssl/sha.h>
|
|
|
|
ARC4::ARC4(uint32 len) : m_ctx(EVP_CIPHER_CTX_new())
|
|
{
|
|
EVP_CIPHER_CTX_init(m_ctx);
|
|
EVP_EncryptInit_ex(m_ctx, EVP_rc4(), nullptr, nullptr, nullptr);
|
|
EVP_CIPHER_CTX_set_key_length(m_ctx, len);
|
|
}
|
|
|
|
ARC4::ARC4(uint8* seed, uint32 len) : m_ctx(EVP_CIPHER_CTX_new())
|
|
{
|
|
EVP_CIPHER_CTX_init(m_ctx);
|
|
EVP_EncryptInit_ex(m_ctx, EVP_rc4(), nullptr, nullptr, nullptr);
|
|
EVP_CIPHER_CTX_set_key_length(m_ctx, len);
|
|
EVP_EncryptInit_ex(m_ctx, nullptr, nullptr, seed, nullptr);
|
|
}
|
|
|
|
ARC4::~ARC4()
|
|
{
|
|
EVP_CIPHER_CTX_free(m_ctx);
|
|
}
|
|
|
|
void ARC4::Init(uint8* seed)
|
|
{
|
|
EVP_EncryptInit_ex(m_ctx, nullptr, nullptr, seed, nullptr);
|
|
}
|
|
|
|
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);
|
|
}
|