From bc87f7b337154e683369a3790ee8fd1a7d4cba98 Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 3 May 2022 17:03:57 +0200 Subject: Core/Crypto: Switch away from most deprecated openssl functions and removed upper version limit --- .../game/Server/Packets/AuthenticationPackets.cpp | 36 +++++++++++----------- 1 file changed, 18 insertions(+), 18 deletions(-) (limited to 'src/server/game/Server') diff --git a/src/server/game/Server/Packets/AuthenticationPackets.cpp b/src/server/game/Server/Packets/AuthenticationPackets.cpp index f999709a061..e9004a8f5da 100644 --- a/src/server/game/Server/Packets/AuthenticationPackets.cpp +++ b/src/server/game/Server/Packets/AuthenticationPackets.cpp @@ -234,13 +234,13 @@ OHYtKG3GK3GEcFDwZU2LPHq21EroUAdtRfbrJ4KW2yc8igtXKxTBYw== -----END RSA PRIVATE KEY----- )"; -std::unique_ptr ConnectToRSA; +std::unique_ptr ConnectToRSA; } bool WorldPackets::Auth::ConnectTo::InitializeEncryption() { - std::unique_ptr rsa = std::make_unique(); - if (!rsa->LoadFromString(RSAPrivateKey, Trinity::Crypto::RSA::PrivateKey{})) + std::unique_ptr rsa = std::make_unique(); + if (!rsa->LoadKeyFromString(RSAPrivateKey)) return false; ConnectToRSA = std::move(rsa); @@ -270,16 +270,15 @@ WorldPacket const* WorldPackets::Auth::ConnectTo::Write() break; } - uint32 type = Payload.Where.Type; - Trinity::Crypto::SHA256 hash; - hash.UpdateData(whereBuffer.contents(), whereBuffer.size()); - hash.UpdateData(reinterpret_cast(&type), 4); - hash.UpdateData(reinterpret_cast(&Payload.Port), 2); - hash.Finalize(); + ByteBuffer signBuffer; + signBuffer.append(whereBuffer); + signBuffer << uint32(Payload.Where.Type); + signBuffer << uint16(Payload.Port); + Trinity::Crypto::RsaSignature::SHA256 digestGenerator; + std::vector signature; + ConnectToRSA->Sign(signBuffer.contents(), signBuffer.size(), digestGenerator, signature); - ConnectToRSA->Sign(hash.GetDigest(), Payload.Signature.data(), Trinity::Crypto::RSA::SHA256{}); - - _worldPacket.append(Payload.Signature.data(), Payload.Signature.size()); + _worldPacket.append(signature.data(), signature.size()); _worldPacket.append(whereBuffer); _worldPacket << uint16(Payload.Port); _worldPacket << uint32(Serial); @@ -307,15 +306,16 @@ uint8 constexpr EnableEncryptionSeed[16] = { 0x90, 0x9C, 0xD0, 0x50, 0x5A, 0x2C, WorldPacket const* WorldPackets::Auth::EnterEncryptedMode::Write() { - Trinity::Crypto::HMAC_SHA256 hash(EncryptionKey, 16); - hash.UpdateData(reinterpret_cast(&Enabled), 1); - hash.UpdateData(EnableEncryptionSeed, 16); - hash.Finalize(); + std::array msg{}; + msg[0] = Enabled ? 1 : 0; + std::copy_n(std::begin(EnableEncryptionSeed), std::size(EnableEncryptionSeed), &msg[1]); - _worldPacket.resize(_worldPacket.size() + ConnectToRSA->GetOutputSize()); + Trinity::Crypto::RsaSignature::HMAC_SHA256 digestGenerator(EncryptionKey, 16); + std::vector signature; - ConnectToRSA->Sign(hash.GetDigest(), _worldPacket.contents(), Trinity::Crypto::RSA::SHA256{}); + ConnectToRSA->Sign(msg, digestGenerator, signature); + _worldPacket.append(signature.data(), signature.size()); _worldPacket.WriteBit(Enabled); _worldPacket.FlushBits(); -- cgit v1.2.3