Skip to content
Snippets Groups Projects
Commit a5acbc5a authored by Edric Milaret's avatar Edric Milaret Committed by Guillaume Roguez
Browse files

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
parent f4742909
No related branches found
No related tags found
No related merge requests found
...@@ -106,8 +106,15 @@ Account::Account(const std::string &accountID) ...@@ -106,8 +106,15 @@ Account::Account(const std::string &accountID)
, mailBox_() , mailBox_()
, upnp_(new upnp::Controller()) , upnp_(new upnp::Controller())
{ {
#ifndef _WIN32
std::random_device rdev; std::random_device rdev;
std::seed_seq seed {rdev(), 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); rand_.seed(seed);
// Initialize the codec order, used when creating a new account // Initialize the codec order, used when creating a new account
......
...@@ -225,8 +225,15 @@ Manager::Manager() : ...@@ -225,8 +225,15 @@ Manager::Manager() :
{ {
// initialize random generator // initialize random generator
// mt19937_64 should be seeded with 2 x 32 bits // mt19937_64 should be seeded with 2 x 32 bits
#ifndef _WIN32
std::random_device rdev; std::random_device rdev;
std::seed_seq seed {rdev(), 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); rand_.seed(seed);
ring::libav_utils::ring_avcodec_init(); ring::libav_utils::ring_avcodec_init();
......
...@@ -132,7 +132,11 @@ static void ...@@ -132,7 +132,11 @@ static void
randomFill(std::vector<uint8_t>& dest) randomFill(std::vector<uint8_t>& dest)
{ {
std::uniform_int_distribution<uint8_t> rand_byte(0, 255); std::uniform_int_distribution<uint8_t> rand_byte(0, 255);
#ifndef _WIN32
std::random_device rdev; 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))); std::generate(dest.begin(), dest.end(), std::bind(rand_byte, std::ref(rdev)));
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment