AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
Acore::Crypto::ARC4 Class Reference

#include "ARC4.h"

Public Member Functions

 ARC4 ()
 
 ~ARC4 ()
 
void Init (uint8 const *seed, size_t len)
 
template<typename Container >
void Init (Container const &c)
 
void UpdateData (uint8 *data, size_t len)
 
template<typename Container >
void UpdateData (Container &c)
 

Private Attributes

EVP_CIPHER_CTX * _ctx
 

Detailed Description

Constructor & Destructor Documentation

◆ ARC4()

Acore::Crypto::ARC4::ARC4 ( )
21 : _ctx(EVP_CIPHER_CTX_new())
22{
23#if OPENSSL_VERSION_NUMBER >= 0x30000000L
24 _cipher = EVP_CIPHER_fetch(nullptr, "RC4", nullptr);
25#else
26 EVP_CIPHER const* _cipher = EVP_rc4();
27#endif
28
29 EVP_CIPHER_CTX_init(_ctx);
30 int result = EVP_EncryptInit_ex(_ctx, _cipher, nullptr, nullptr, nullptr);
31 ASSERT(result == 1);
32}
#define ASSERT
Definition: Errors.h:68
EVP_CIPHER_CTX * _ctx
Definition: ARC4.h:46

References _ctx, and ASSERT.

◆ ~ARC4()

Acore::Crypto::ARC4::~ARC4 ( )
35{
36 EVP_CIPHER_CTX_free(_ctx);
37
38#if OPENSSL_VERSION_NUMBER >= 0x30000000L
39 EVP_CIPHER_free(_cipher);
40#endif
41}

Member Function Documentation

◆ Init() [1/2]

template<typename Container >
void Acore::Crypto::ARC4::Init ( Container const &  c)
inline
36{ Init(std::data(c), std::size(c)); }
void Init(uint8 const *seed, size_t len)
Definition: ARC4.cpp:43

References Init().

Referenced by Init().

◆ Init() [2/2]

void Acore::Crypto::ARC4::Init ( uint8 const *  seed,
size_t  len 
)
44{
45 int result1 = EVP_CIPHER_CTX_set_key_length(_ctx, len);
46 ASSERT(result1 == 1);
47 int result2 = EVP_EncryptInit_ex(_ctx, nullptr, nullptr, seed, nullptr);
48 ASSERT(result2 == 1);
49}

References ASSERT.

Referenced by WardenMac::HandleHashResult(), WardenWin::HandleHashResult(), AuthCrypt::Init(), WardenMac::Init(), and WardenWin::Init().

◆ UpdateData() [1/2]

template<typename Container >
void Acore::Crypto::ARC4::UpdateData ( Container c)
inline
41{ UpdateData(std::data(c), std::size(c)); }
Definition: UpdateData.h:52

References UpdateData().

Referenced by UpdateData().

◆ UpdateData() [2/2]

void Acore::Crypto::ARC4::UpdateData ( uint8 data,
size_t  len 
)
52{
53 int outlen = 0;
54 int result1 = EVP_EncryptUpdate(_ctx, data, &outlen, data, len);
55 ASSERT(result1 == 1);
56 int result2 = EVP_EncryptFinal_ex(_ctx, data, &outlen);
57 ASSERT(result2 == 1);
58}

References ASSERT.

Referenced by Warden::DecryptData(), AuthCrypt::DecryptRecv(), Warden::EncryptData(), AuthCrypt::EncryptSend(), and AuthCrypt::Init().

Member Data Documentation

◆ _ctx

EVP_CIPHER_CTX* Acore::Crypto::ARC4::_ctx
private

Referenced by ARC4().