From 3cba87304dd60f4118d9bff3d60e301b8b956352 Mon Sep 17 00:00:00 2001 From: Joachim Bauch Date: Tue, 18 Mar 2014 10:45:09 +0100 Subject: [PATCH] Use strong random number generator. --- src/app/spreed-speakfreely-server/random.go | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/app/spreed-speakfreely-server/random.go b/src/app/spreed-speakfreely-server/random.go index 45c48e7a..6dda7b51 100644 --- a/src/app/spreed-speakfreely-server/random.go +++ b/src/app/spreed-speakfreely-server/random.go @@ -21,7 +21,8 @@ package main import ( - "math/rand" + "crypto/rand" + pseudoRand "math/rand" "time" ) @@ -32,14 +33,22 @@ const ( func RandomString(length int) string { buf := make([]byte, length) - for i := 0; i < length; i++ { - buf[i] = dict[rand.Intn(len(dict)-1)] + _, err := rand.Read(buf) + if err != nil { + // fallback to pseudo-random + for i := 0; i < length; i++ { + buf[i] = dict[pseudoRand.Intn(len(dict))] + } + } else { + for i := 0; i < length; i++ { + buf[i] = dict[int(buf[i])%len(dict)] + } } return string(buf) } func init() { - // Make sure to seed dsfault random generator. - rand.Seed(time.Now().UTC().UnixNano()) + // Make sure to seed default random generator. + pseudoRand.Seed(time.Now().UTC().UnixNano()) }