From: Nikos Mavrogiannopoulos Date: Sat, 26 Jan 2013 15:26:09 +0000 (+0100) Subject: nonces update the internal rng state much slower. X-Git-Tag: gnutls_3_1_7~59 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bf41dbb43baeeda8f525b5c8e09c595eb1981521;p=thirdparty%2Fgnutls.git nonces update the internal rng state much slower. --- diff --git a/lib/nettle/rnd.c b/lib/nettle/rnd.c index 3acc2ab264..2a6768bb21 100644 --- a/lib/nettle/rnd.c +++ b/lib/nettle/rnd.c @@ -451,20 +451,25 @@ wrap_nettle_rnd (void *_ctx, int level, void *data, size_t datasize) RND_LOCK; gettime(¤t_time); - ret = do_trivia_source (0); - if (ret < 0) + /* update state only when having a non-nonce or if nonce + * and nsecs%4096 == 0, i.e., one out of 4096 times called */ + if (level != GNUTLS_RND_NONCE || ((current_time.tv_nsec & 0x0fff) == 0)) { - RND_UNLOCK; - gnutls_assert (); - return ret; - } + ret = do_trivia_source (0); + if (ret < 0) + { + RND_UNLOCK; + gnutls_assert (); + return ret; + } - ret = do_device_source (0); - if (ret < 0) - { - RND_UNLOCK; - gnutls_assert (); - return ret; + ret = do_device_source (0); + if (ret < 0) + { + RND_UNLOCK; + gnutls_assert (); + return ret; + } } yarrow256_random (&yctx, datasize, data);