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[:])
}
< crypto/internal/boring
< crypto/boring;
- crypto/internal/alias
+ crypto/internal/alias, math/rand/v2
< crypto/internal/randutil
< crypto/internal/nistec/fiat
< crypto/internal/nistec