From 5f528e9c07110332f18bea5be5668a12a61def0a Mon Sep 17 00:00:00 2001 From: Leon Klingele Date: Mon, 22 Feb 2016 17:07:28 +0100 Subject: [PATCH 1/2] Add missing characters to random string function, so we use the full upper+lowercase alphabet --- src/app/spreed-webrtc-server/random.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/spreed-webrtc-server/random.go b/src/app/spreed-webrtc-server/random.go index a884cd5b..c498c7e5 100644 --- a/src/app/spreed-webrtc-server/random.go +++ b/src/app/spreed-webrtc-server/random.go @@ -28,7 +28,7 @@ import ( ) const ( - dict = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW0123456789" + dict = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" ) func NewRandomString(length int) string { From b6570a28128dae8e1033297450458baf38eb4aa8 Mon Sep 17 00:00:00 2001 From: Leon Klingele Date: Mon, 22 Feb 2016 17:08:42 +0100 Subject: [PATCH 2/2] cryptoRand.Int / pseudoRand.Intn to generate random integer. Previous way was modulo-biased --- src/app/spreed-webrtc-server/random.go | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/app/spreed-webrtc-server/random.go b/src/app/spreed-webrtc-server/random.go index c498c7e5..f2afa7d6 100644 --- a/src/app/spreed-webrtc-server/random.go +++ b/src/app/spreed-webrtc-server/random.go @@ -23,6 +23,7 @@ package main import ( "crypto/rand" + "math/big" pseudoRand "math/rand" "time" ) @@ -31,19 +32,24 @@ const ( dict = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" ) +// NewRandomInt returns a random integer in range [0, max[ +// Tries to use crypto/rand and falls back to math/rand +func NewRandomInt(max int) int { + + rand, err := rand.Int(rand.Reader, big.NewInt(int64(max))) + if err != nil { + // Fallback to pseudo-random + return pseudoRand.Intn(max) + } + return int(rand.Int64()) + +} + func NewRandomString(length int) string { buf := make([]byte, length) - _, 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)] - } + for i := 0; i < length; i++ { + buf[i] = dict[NewRandomInt(len(dict))] } return string(buf)