From 6270d31133b8894bca1be998ff65b2a5fa502b31 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
Date: Wed, 1 Oct 2014 12:27:47 -0400
Subject: [PATCH] srtp: generate SDES key using real random numbers

Regression from commit bebe12d46c3754f1897f9f8bf2ddc298f45df8cd

Refs #56557

Change-Id: Iafb7d2a92e5c80d55bcae9a44d276eae5ecef44f
---
 .../src/audio/audiortp/audio_srtp_session.cpp | 36 +++++++------------
 1 file changed, 12 insertions(+), 24 deletions(-)

diff --git a/daemon/src/audio/audiortp/audio_srtp_session.cpp b/daemon/src/audio/audiortp/audio_srtp_session.cpp
index d0d067a946..193898e4a1 100644
--- a/daemon/src/audio/audiortp/audio_srtp_session.cpp
+++ b/daemon/src/audio/audiortp/audio_srtp_session.cpp
@@ -71,42 +71,30 @@ decodeBase64(unsigned char *input, int length)
 
 // Fills the array dest with length random bytes
 static void
-bufferFillMasterKey(std::vector<uint8>& dest)
+bufferFillMasterKey(std::vector<uint8_t>& dest)
 {
     DEBUG("Init local master key");
-
-    // Prepare pseudo random generationusing Mersenne Twister
-    std::mt19937 eng;
-    std::uniform_int_distribution<uint8_t> dist(0, 255);
-
-    // Allocate memory for key
-    std::vector<unsigned char> random_key(dest.size());
+    std::uniform_int_distribution<uint8_t> rand_byte(0, 255);
 
     // Fill the key
-    for (size_t i = 0; i < dest.size(); i++)
-        random_key[i] = dist(eng);
-
-    std::copy(random_key.begin(), random_key.end(), dest.begin());
+    {
+        std::random_device rdev;
+        std::generate(dest.begin(), dest.end(), std::bind(rand_byte, std::ref(rdev)));
+    }
 }
 
 // Fills the array dest with length random bytes
 static void
-bufferFillMasterSalt(std::vector<uint8>& dest)
+bufferFillMasterSalt(std::vector<uint8_t>& dest)
 {
     DEBUG("Init local master salt");
-
-    // Prepare pseudo random generation using Mersenne Twister
-    std::mt19937 eng;
-    std::uniform_int_distribution<uint8_t> dist(0, 255);
-
-    // Allocate memory for key
-    std::vector<unsigned char> random_key(dest.size());
+    std::uniform_int_distribution<uint8_t> rand_byte(0, 255);
 
     // Fill the key
-    for (size_t i = 0; i < dest.size(); i++)
-        random_key[i] = dist(eng);
-
-    std::copy(random_key.begin(), random_key.end(), dest.begin());
+    {
+        std::random_device rdev;
+        std::generate(dest.begin(), dest.end(), std::bind(rand_byte, std::ref(rdev)));
+    }
 }
 
 static const unsigned MAX_MASTER_KEY_LENGTH = 16;
-- 
GitLab