package flowpilot import ( "crypto/rand" "fmt" "io" "math/big" ) const letters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" func init() { assertAvailablePRNG() } func assertAvailablePRNG() { // Assert that a cryptographically secure PRNG is available. // Panic otherwise. buf := make([]byte, 1) _, err := io.ReadFull(rand.Reader, buf) if err != nil { panic(fmt.Sprintf("crypto/rand is unavailable: Read() failed with %#v", err)) } } func generateRandomString(n int) (string, error) { ret := make([]byte, n) for i := 0; i < n; i++ { num, err := rand.Int(rand.Reader, big.NewInt(int64(len(letters)))) if err != nil { return "", err } ret[i] = letters[num.Int64()] } return string(ret), nil }