forked from hardcoresushi/DroidFS
33 lines
609 B
Go
33 lines
609 B
Go
package cryptocore
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"encoding/binary"
|
|
"log"
|
|
)
|
|
|
|
// RandBytes gets "n" random bytes from /dev/urandom or panics
|
|
func RandBytes(n int) []byte {
|
|
b := make([]byte, n)
|
|
_, err := rand.Read(b)
|
|
if err != nil {
|
|
log.Panic("Failed to read random bytes: " + err.Error())
|
|
}
|
|
return b
|
|
}
|
|
|
|
// RandUint64 returns a secure random uint64
|
|
func RandUint64() uint64 {
|
|
b := RandBytes(8)
|
|
return binary.BigEndian.Uint64(b)
|
|
}
|
|
|
|
type nonceGenerator struct {
|
|
nonceLen int // bytes
|
|
}
|
|
|
|
// Get a random "nonceLen"-byte nonce
|
|
func (n *nonceGenerator) Get() []byte {
|
|
return randPrefetcher.read(n.nonceLen)
|
|
}
|