| // Copyright (c) HashiCorp, Inc. |
| // SPDX-License-Identifier: MPL-2.0 |
| |
| package random |
| |
| import ( |
| "hash/crc64" |
| "math/rand" |
| "time" |
| ) |
| |
| // NewRand returns a seeded random number generator, using a seed derived |
| // from the provided string. |
| // |
| // If the seed string is empty, the current time is used as a seed. |
| func NewRand(seed string) *rand.Rand { |
| var seedInt int64 |
| if seed != "" { |
| crcTable := crc64.MakeTable(crc64.ISO) |
| seedInt = int64(crc64.Checksum([]byte(seed), crcTable)) |
| } else { |
| seedInt = time.Now().UnixNano() |
| } |
| |
| randSource := rand.NewSource(seedInt) |
| return rand.New(randSource) |
| } |