From a5acbc5a514ccb450e432f03d33ed54fc6163ad3 Mon Sep 17 00:00:00 2001 From: Edric Milaret <edric.ladent-milaret@savoirfairelinux.com> Date: Tue, 5 May 2015 16:16:20 -0400 Subject: [PATCH] dht: fix random generators on Windows This patch should fix DHT calls on Window platform. Replacing random_device (deterministic on Windows because of no /dev/urandom/ support) with a default_random_engine with a time seed. It's a less secure way of doing it (vulnerable to time attack). Refs #72538 Refs #72700 Change-Id: I259f80144eeee6732cc969ecb224544a53d7ccf1 --- src/account.cpp | 7 +++++++ src/manager.cpp | 7 +++++++ src/sip/sdp.cpp | 4 ++++ 3 files changed, 18 insertions(+) diff --git a/src/account.cpp b/src/account.cpp index d64a6e4e86..5ed2b5c819 100644 --- a/src/account.cpp +++ b/src/account.cpp @@ -106,8 +106,15 @@ Account::Account(const std::string &accountID) , mailBox_() , upnp_(new upnp::Controller()) { +#ifndef _WIN32 std::random_device rdev; std::seed_seq seed {rdev(), rdev()}; +#else + int seed_data[std::mt19937::state_size]; + std::default_random_engine dre(std::chrono::system_clock::now().time_since_epoch().count()); + std::generate_n(seed_data, std::mt19937::state_size, std::ref(dre)); + std::seed_seq seed(std::begin(seed_data), std::end(seed_data)); +#endif rand_.seed(seed); // Initialize the codec order, used when creating a new account diff --git a/src/manager.cpp b/src/manager.cpp index 335c94d34a..43fba28066 100644 --- a/src/manager.cpp +++ b/src/manager.cpp @@ -225,8 +225,15 @@ Manager::Manager() : { // initialize random generator // mt19937_64 should be seeded with 2 x 32 bits +#ifndef _WIN32 std::random_device rdev; std::seed_seq seed {rdev(), rdev()}; +#else + int seed_data[std::mt19937::state_size]; + std::default_random_engine dre(std::chrono::system_clock::now().time_since_epoch().count()); + std::generate_n(seed_data, std::mt19937::state_size, std::ref(dre)); + std::seed_seq seed(std::begin(seed_data), std::end(seed_data)); +#endif rand_.seed(seed); ring::libav_utils::ring_avcodec_init(); diff --git a/src/sip/sdp.cpp b/src/sip/sdp.cpp index 2075e74ab7..7727d642d8 100644 --- a/src/sip/sdp.cpp +++ b/src/sip/sdp.cpp @@ -132,7 +132,11 @@ static void randomFill(std::vector<uint8_t>& dest) { std::uniform_int_distribution<uint8_t> rand_byte(0, 255); +#ifndef _WIN32 std::random_device rdev; +#else + std::default_random_engine rdev(std::chrono::system_clock::now().time_since_epoch().count()); +#endif std::generate(dest.begin(), dest.end(), std::bind(rand_byte, std::ref(rdev))); } -- GitLab