aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2014-06-03 18:25:48 +0200
committerDaniel Stenberg <daniel@haxx.se>2014-06-03 18:25:48 +0200
commitbbd3dc611ed501edeca72026885bbf85868dd1cf (patch)
tree04b29bde0b91b200a392b2ebaac9e6a106a1971f
parent62a26ec6962944383704c2b2a77fdb062200e814 (diff)
random: use Curl_rand() for proper random data
The SASL/Digest previously used the current time's seconds + microseconds to add randomness but it is much better to instead get more data from Curl_rand(). It will also allow us to easier "fake" that for debug builds on demand in a future.
-rw-r--r--lib/curl_sasl.c8
-rw-r--r--lib/http_digest.c7
2 files changed, 4 insertions, 11 deletions
diff --git a/lib/curl_sasl.c b/lib/curl_sasl.c
index 164c329f8..b0ac9b6d5 100644
--- a/lib/curl_sasl.c
+++ b/lib/curl_sasl.c
@@ -423,9 +423,6 @@ CURLcode Curl_sasl_create_digest_md5_message(struct SessionHandle *data,
unsigned int cnonce2 = 0;
unsigned int cnonce3 = 0;
unsigned int cnonce4 = 0;
-#ifndef DEBUGBUILD
- struct timeval now;
-#endif
char nonceCount[] = "00000001";
char method[] = "AUTHENTICATE";
@@ -457,9 +454,8 @@ CURLcode Curl_sasl_create_digest_md5_message(struct SessionHandle *data,
/* Generate 16 bytes of random data */
cnonce1 = Curl_rand(data);
cnonce2 = Curl_rand(data);
- now = Curl_tvnow();
- cnonce3 = now.tv_sec;
- cnonce4 = now.tv_usec;
+ cnonce3 = Curl_rand(data);
+ cnonce4 = Curl_rand(data);
#endif
/* Convert the random data into a 32 byte hex string */
diff --git a/lib/http_digest.c b/lib/http_digest.c
index ee5d63707..55f5108c9 100644
--- a/lib/http_digest.c
+++ b/lib/http_digest.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -367,12 +367,9 @@ CURLcode Curl_output_digest(struct connectdata *conn,
d->nc = 1;
if(!d->cnonce) {
- struct timeval now = Curl_tvnow();
snprintf(cnoncebuf, sizeof(cnoncebuf), "%08x%08x%08x%08x",
Curl_rand(data), Curl_rand(data),
- (unsigned int)now.tv_sec,
- (unsigned int)now.tv_usec);
-
+ Curl_rand(data), Curl_rand(data));
rc = Curl_base64_encode(data, cnoncebuf, strlen(cnoncebuf),
&cnonce, &cnonce_sz);
if(rc)