From c4d69174ee9ecbd88088d1255cf68779d97fddb6 Mon Sep 17 00:00:00 2001 From: Arnaud Porterie Date: Tue, 28 Jul 2015 10:01:54 -0700 Subject: [PATCH] Reduce consumption of entropy source The UUID generation retries multiple times to read a full UUID, but preserves any bytes of entropy he successfully managed to read between retries. Signed-off-by: Arnaud Porterie --- uuid/uuid.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/uuid/uuid.go b/uuid/uuid.go index 4bdd9700..02de33f2 100644 --- a/uuid/uuid.go +++ b/uuid/uuid.go @@ -49,6 +49,7 @@ func Generate() (u UUID) { var ( totalBackoff time.Duration + count int retries int ) @@ -60,9 +61,10 @@ func Generate() (u UUID) { time.Sleep(b) totalBackoff += b - _, err := io.ReadFull(rand.Reader, u[:]) + n, err := io.ReadFull(rand.Reader, u[count:]) if err != nil { if retryOnError(err) && retries < maxretries { + count += n retries++ Loggerf("error generating version 4 uuid, retrying: %v", err) continue