mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/PacketIO: Fix sending uninitialized data
This commit is contained in:
@@ -33,7 +33,7 @@ void Trinity::Crypto::AES::Init(uint8 const* key)
|
||||
EVP_CipherInit_ex(_ctx, nullptr, nullptr, key, nullptr, -1);
|
||||
}
|
||||
|
||||
bool Trinity::Crypto::AES::Process(uint8 const* iv, uint8* data, std::size_t length, uint8* tag)
|
||||
bool Trinity::Crypto::AES::Process(uint8 const* iv, uint8* data, std::size_t length, uint8(&tag)[12])
|
||||
{
|
||||
if (!EVP_CipherInit_ex(_ctx, nullptr, nullptr, nullptr, iv, -1))
|
||||
return false;
|
||||
@@ -42,13 +42,13 @@ bool Trinity::Crypto::AES::Process(uint8 const* iv, uint8* data, std::size_t len
|
||||
if (!EVP_CipherUpdate(_ctx, data, &outLen, data, length))
|
||||
return false;
|
||||
|
||||
if (!_encrypting && !EVP_CIPHER_CTX_ctrl(_ctx, EVP_CTRL_GCM_SET_TAG, 12, tag))
|
||||
if (!_encrypting && !EVP_CIPHER_CTX_ctrl(_ctx, EVP_CTRL_GCM_SET_TAG, sizeof(tag), tag))
|
||||
return false;
|
||||
|
||||
if (!EVP_CipherFinal_ex(_ctx, data + outLen, &outLen))
|
||||
return false;
|
||||
|
||||
if (_encrypting && !EVP_CIPHER_CTX_ctrl(_ctx, EVP_CTRL_GCM_GET_TAG, 12, tag))
|
||||
if (_encrypting && !EVP_CIPHER_CTX_ctrl(_ctx, EVP_CTRL_GCM_GET_TAG, sizeof(tag), tag))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
|
||||
@@ -33,7 +33,7 @@ public:
|
||||
|
||||
void Init(uint8 const* key);
|
||||
|
||||
bool Process(uint8 const* iv, uint8* data, std::size_t length, uint8* tag);
|
||||
bool Process(uint8 const* iv, uint8* data, std::size_t length, uint8(&tag)[12]);
|
||||
|
||||
private:
|
||||
EVP_CIPHER_CTX* _ctx;
|
||||
|
||||
@@ -42,27 +42,31 @@ struct WorldPacketCryptIV
|
||||
std::array<uint8, 12> Value;
|
||||
};
|
||||
|
||||
bool WorldPacketCrypt::DecryptRecv(uint8* data, size_t len, uint8* tag)
|
||||
bool WorldPacketCrypt::DecryptRecv(uint8* data, size_t length, uint8 (&tag)[12])
|
||||
{
|
||||
if (_initialized)
|
||||
{
|
||||
WorldPacketCryptIV iv{ _clientCounter, 0x544E4C43 };
|
||||
if (!_clientDecrypt.Process(iv.Value.data(), data, len, tag))
|
||||
if (!_clientDecrypt.Process(iv.Value.data(), data, length, tag))
|
||||
return false;
|
||||
}
|
||||
else
|
||||
memset(tag, 0, sizeof(tag));
|
||||
|
||||
++_clientCounter;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool WorldPacketCrypt::EncryptSend(uint8* data, size_t len, uint8* tag)
|
||||
bool WorldPacketCrypt::EncryptSend(uint8* data, size_t length, uint8 (&tag)[12])
|
||||
{
|
||||
if (_initialized)
|
||||
{
|
||||
WorldPacketCryptIV iv{ _serverCounter, 0x52565253 };
|
||||
if (!_serverEncrypt.Process(iv.Value.data(), data, len, tag))
|
||||
if (!_serverEncrypt.Process(iv.Value.data(), data, length, tag))
|
||||
return false;
|
||||
}
|
||||
else
|
||||
memset(tag, 0, sizeof(tag));
|
||||
|
||||
++_serverCounter;
|
||||
return true;
|
||||
|
||||
@@ -29,8 +29,8 @@ public:
|
||||
WorldPacketCrypt();
|
||||
|
||||
void Init(uint8 const* key);
|
||||
bool DecryptRecv(uint8* data, size_t length, uint8* tag);
|
||||
bool EncryptSend(uint8* data, size_t length, uint8* tag);
|
||||
bool DecryptRecv(uint8* data, size_t length, uint8 (&tag)[12]);
|
||||
bool EncryptSend(uint8* data, size_t length, uint8 (&tag)[12]);
|
||||
|
||||
bool IsInitialized() const { return _initialized; }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user