From fff1db973096a893475f3ec96ee6f28e35c4a67c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Mon, 21 May 2018 15:48:17 +0200 Subject: Common: Add Random utilities This makes it easier to generate random numbers or fill a buffer with random data in a cryptographically secure way. This also replaces existing usages of RNG functions in the codebase: * is pretty hard to use correctly, and std::random_device does not give enough guarantees about its results (it's implementation-defined, non cryptographically secure and could be deterministic on some platforms). Doing things correctly is error prone and verbose. * rand() is terrible and should not be used especially in crypto code. --- Source/Core/Common/TraversalClient.cpp | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) (limited to 'Source/Core/Common/TraversalClient.cpp') diff --git a/Source/Core/Common/TraversalClient.cpp b/Source/Core/Common/TraversalClient.cpp index 4c415b2c64..36eb431c7f 100644 --- a/Source/Core/Common/TraversalClient.cpp +++ b/Source/Core/Common/TraversalClient.cpp @@ -4,22 +4,12 @@ #include #include -#include #include #include "Common/CommonTypes.h" #include "Common/Logging/Log.h" #include "Common/MsgHandler.h" - -static void GetRandomishBytes(u8* buf, size_t size) -{ - // We don't need high quality random numbers (which might not be available), - // just non-repeating numbers! - static std::mt19937 prng(enet_time_get()); - static std::uniform_int_distribution u8_distribution(0, 255); - for (size_t i = 0; i < size; i++) - buf[i] = u8_distribution(prng); -} +#include "Common/Random.h" TraversalClient::TraversalClient(ENetHost* netHost, const std::string& server, const u16 port) : m_NetHost(netHost), m_Server(server), m_port(port) @@ -280,7 +270,7 @@ TraversalRequestId TraversalClient::SendTraversalPacket(const TraversalPacket& p { OutgoingTraversalPacketInfo info; info.packet = packet; - GetRandomishBytes((u8*)&info.packet.requestId, sizeof(info.packet.requestId)); + Common::Random::Generate(&info.packet.requestId, sizeof(info.packet.requestId)); info.tries = 0; m_OutgoingTraversalPackets.push_back(info); ResendPacket(&m_OutgoingTraversalPackets.back()); -- cgit v1.2.3