From 7db89aa66b95d67a82963996b26dccbc7384a926 Mon Sep 17 00:00:00 2001 From: rsiddharth Date: Wed, 24 Feb 2021 18:09:52 -0500 Subject: lib: put rand functions in rand.go --- lib/rand.go | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 lib/rand.go (limited to 'lib/rand.go') 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 +// 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 +} -- cgit v1.2.3