Seed math/rand more efficiently

This commit is contained in:
Ryan Cavicchioni 2022-08-03 23:24:27 -05:00
parent d0ddca7fe1
commit 082412fa47
Signed by: ryanc
GPG Key ID: 877EEDAF9245103D
2 changed files with 36 additions and 14 deletions

View File

@ -15,6 +15,7 @@ import (
"syscall" "syscall"
"git.kill0.net/chill9/beepboop/command" "git.kill0.net/chill9/beepboop/command"
"git.kill0.net/chill9/beepboop/lib"
"github.com/bwmarrin/discordgo" "github.com/bwmarrin/discordgo"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
@ -60,7 +61,7 @@ func main() {
log.SetLevel(log.DebugLevel) log.SetLevel(log.DebugLevel)
} }
seedRand() lib.SeedMathRand()
viper.SetDefault("handler.reaction.emojis", defaultReactions) viper.SetDefault("handler.reaction.emojis", defaultReactions)
viper.SetEnvPrefix("BEEPBOOP") viper.SetEnvPrefix("BEEPBOOP")
@ -178,16 +179,3 @@ func contains[T comparable](s []T, v T) bool {
} }
return false return false
} }
func seedRand() {
var b [8]byte
_, err := crypto_rand.Read(b[:])
if err != nil {
log.Panicf("cannot seed math/rand: %s", err)
}
log.Debugf("seeding math/rand %+v %+v", b, binary.LittleEndian.Uint64(b[:]))
math_rand.Seed(int64(binary.LittleEndian.Uint64(b[:])))
}

34
lib/rand.go Normal file
View File

@ -0,0 +1,34 @@
package lib
import (
crand "crypto/rand"
"math"
"math/big"
"math/rand"
"sync"
log "github.com/sirupsen/logrus"
)
var (
once sync.Once
)
// SeedMathRand Credit: https://github.com/hashicorp/consul/blob/main/lib/rand.go
func SeedMathRand() {
var (
n *big.Int
err error
)
once.Do(func() {
n, err = crand.Int(crand.Reader, big.NewInt(math.MaxInt64))
if err != nil {
log.Errorf("cannot seed math/rand: %s", err)
}
log.Debugf("seeding math/rand %+v", n.Int64())
rand.Seed(n.Int64())
})
}