From f4b7291d73c40af90fdbc5fa0d72a26c5f127931 Mon Sep 17 00:00:00 2001 From: Damien Neil Date: Fri, 27 Sep 2024 14:19:30 -0700 Subject: [PATCH] crypto/internal/randutil: use math/rand/v2 Instead of using a select on a closed channel to generate one bit of randomness, use math/rand/v2. Change-Id: I36d294f17b9f5b437ca50e1c95da97bbe632c0a4 Reviewed-on: https://go-review.googlesource.com/c/go/+/616475 Reviewed-by: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI Reviewed-by: Roland Shoemaker Reviewed-by: Filippo Valsorda --- src/crypto/internal/randutil/randutil.go | 22 +++++----------------- src/go/build/deps_test.go | 2 +- 2 files changed, 6 insertions(+), 18 deletions(-) diff --git a/src/crypto/internal/randutil/randutil.go b/src/crypto/internal/randutil/randutil.go index 84b1295a87..5a8b096d15 100644 --- a/src/crypto/internal/randutil/randutil.go +++ b/src/crypto/internal/randutil/randutil.go @@ -8,31 +8,19 @@ package randutil import ( "io" - "sync" + "math/rand/v2" ) -var ( - closedChanOnce sync.Once - closedChan chan struct{} -) - -// MaybeReadByte reads a single byte from r with ~50% probability. This is used +// MaybeReadByte reads a single byte from r with 50% probability. This is used // to ensure that callers do not depend on non-guaranteed behaviour, e.g. // assuming that rsa.GenerateKey is deterministic w.r.t. a given random stream. // // This does not affect tests that pass a stream of fixed bytes as the random // source (e.g. a zeroReader). func MaybeReadByte(r io.Reader) { - closedChanOnce.Do(func() { - closedChan = make(chan struct{}) - close(closedChan) - }) - - select { - case <-closedChan: + if rand.Uint64()&1 == 1 { return - case <-closedChan: - var buf [1]byte - r.Read(buf[:]) } + var buf [1]byte + r.Read(buf[:]) } diff --git a/src/go/build/deps_test.go b/src/go/build/deps_test.go index 40034263cc..e233535f75 100644 --- a/src/go/build/deps_test.go +++ b/src/go/build/deps_test.go @@ -460,7 +460,7 @@ var depsRules = ` < crypto/internal/boring < crypto/boring; - crypto/internal/alias + crypto/internal/alias, math/rand/v2 < crypto/internal/randutil < crypto/internal/nistec/fiat < crypto/internal/nistec