diff options
| author | Shauren <shauren.trinity@gmail.com> | 2022-05-03 17:03:57 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2022-05-03 17:03:57 +0200 |
| commit | bc87f7b337154e683369a3790ee8fd1a7d4cba98 (patch) | |
| tree | f956c8c358f39fc30b74f790b66fcc1c01581546 /src/server/game/Server | |
| parent | c68f52568f3dff0f5e7cb572ad91e79b23694645 (diff) | |
Core/Crypto: Switch away from most deprecated openssl functions and removed upper version limit
Diffstat (limited to 'src/server/game/Server')
| -rw-r--r-- | src/server/game/Server/Packets/AuthenticationPackets.cpp | 36 |
1 files changed, 18 insertions, 18 deletions
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<Trinity::Crypto::RSA> ConnectToRSA; +std::unique_ptr<Trinity::Crypto::RsaSignature> ConnectToRSA; } bool WorldPackets::Auth::ConnectTo::InitializeEncryption() { - std::unique_ptr<Trinity::Crypto::RSA> rsa = std::make_unique<Trinity::Crypto::RSA>(); - if (!rsa->LoadFromString(RSAPrivateKey, Trinity::Crypto::RSA::PrivateKey{})) + std::unique_ptr<Trinity::Crypto::RsaSignature> rsa = std::make_unique<Trinity::Crypto::RsaSignature>(); + 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<uint8 const*>(&type), 4); - hash.UpdateData(reinterpret_cast<uint8 const*>(&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<uint8> 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<uint8 const*>(&Enabled), 1); - hash.UpdateData(EnableEncryptionSeed, 16); - hash.Finalize(); + std::array<uint8, 17> 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<uint8> 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(); |
