diff options
Diffstat (limited to 'lib/rand.go')
-rw-r--r-- | lib/rand.go | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/lib/rand.go b/lib/rand.go new file mode 100644 index 0000000..03fd651 --- /dev/null +++ b/lib/rand.go @@ -0,0 +1,47 @@ +// Copyright © 2020 rsiddharth <s@ricketyspace.net> +// SPDX-License-Identifier: ISC + +package lib + +import ( + "crypto/rand" + "math/big" +) + +// Return a random number from range [min, max] +func RandomInt(min, max int64) int64 { + if min >= max { + panic("RandomInt: min cannot be >= max!") + } + + var rn *big.Int + var err error + for { + rn, err = rand.Int(rand.Reader, big.NewInt(max+1)) + if err != nil { + panic(err) + } + if rn.Int64() >= min { + return rn.Int64() + } + } +} + +func RandomKey(size int) ([]byte, error) { + k := make([]byte, size) + _, err := rand.Read(k) + if err != nil { + return []byte{}, err + } + return k, nil +} + +// Randomly generates `min` to `max` bytes. +func randomBytes(min, max int64) []byte { + bs := make([]byte, RandomInt(min, max)) + _, err := rand.Read(bs) + if err != nil { + panic(err) + } + return bs +} |