mirror of
https://github.com/tuneinsight/lattigo.git
synced 2025-09-13 03:27:14 +00:00
42 lines
1.0 KiB
Go
42 lines
1.0 KiB
Go
// Package sampling implements secure sampling of bytes and integers.
|
|
package sampling
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"encoding/binary"
|
|
"math/big"
|
|
)
|
|
|
|
// RandUint64 return a random value between 0 and 0xFFFFFFFFFFFFFFFF.
|
|
func RandUint64() uint64 {
|
|
b := []byte{0, 0, 0, 0, 0, 0, 0, 0}
|
|
if _, err := rand.Read(b); err != nil {
|
|
panic(err)
|
|
}
|
|
return binary.LittleEndian.Uint64(b)
|
|
}
|
|
|
|
// RandFloat64 returns a random float between min and max.
|
|
func RandFloat64(min, max float64) float64 {
|
|
b := []byte{0, 0, 0, 0, 0, 0, 0, 0}
|
|
if _, err := rand.Read(b); err != nil {
|
|
panic(err)
|
|
}
|
|
f := float64(binary.LittleEndian.Uint64(b)) / 1.8446744073709552e+19
|
|
return min + f*(max-min)
|
|
}
|
|
|
|
// RandComplex128 returns a random complex with the real and imaginary part between min and max.
|
|
func RandComplex128(min, max float64) complex128 {
|
|
return complex(RandFloat64(min, max), RandFloat64(min, max))
|
|
}
|
|
|
|
// RandInt generates a random Int in [0, max-1].
|
|
func RandInt(max *big.Int) (n *big.Int) {
|
|
var err error
|
|
if n, err = rand.Int(rand.Reader, max); err != nil {
|
|
panic(err)
|
|
}
|
|
return
|
|
}
|