mirror of
https://github.com/golang/go
synced 2024-11-14 20:30:35 -07:00
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 <iant@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Roland Shoemaker <roland@golang.org> Reviewed-by: Filippo Valsorda <filippo@golang.org>
This commit is contained in:
parent
3637ebf1e0
commit
f4b7291d73
@ -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[:])
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user