mirror of
https://github.com/golang/go.git
synced 2026-06-26 10:50:23 +00:00
crypto/internal/rand: avoid MaybeReadByte non-determinism with SetGlobalRandom
Change-Id: I2dc3b7d116c4750153a324ee9850ca576a6a6964 Reviewed-on: https://go-review.googlesource.com/c/go/+/765921 Reviewed-by: Daniel McCarney <daniel@binaryparadox.net> Reviewed-by: Mark Freeman <markfreeman@google.com> Auto-Submit: Filippo Valsorda <filippo@golang.org> LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: David Chase <drchase@google.com>
This commit is contained in:
parent
da36c0eecd
commit
58968c79e7
1 changed files with 8 additions and 2 deletions
|
|
@ -46,19 +46,25 @@ var Reader io.Reader = reader{}
|
|||
//
|
||||
//go:linkname SetTestingReader crypto/internal/rand.SetTestingReader
|
||||
func SetTestingReader(r io.Reader) {
|
||||
testingReader = r
|
||||
fips140SetTestingReader(r)
|
||||
}
|
||||
|
||||
var testingReader io.Reader
|
||||
|
||||
var cryptocustomrand = godebug.New("cryptocustomrand")
|
||||
|
||||
// CustomReader returns [Reader] or, only if the GODEBUG setting
|
||||
// "cryptocustomrand=1" is set, the provided io.Reader.
|
||||
//
|
||||
// If returning a non-default Reader, it calls [randutil.MaybeReadByte] on it.
|
||||
// If returning a non-default Reader, it calls [randutil.MaybeReadByte] on it,
|
||||
// unless it's the global testing Reader set with [SetTestingReader].
|
||||
func CustomReader(r io.Reader) io.Reader {
|
||||
if cryptocustomrand.Value() == "1" {
|
||||
if !IsDefaultReader(r) {
|
||||
randutil.MaybeReadByte(r)
|
||||
if r != testingReader {
|
||||
randutil.MaybeReadByte(r)
|
||||
}
|
||||
cryptocustomrand.IncNonDefault()
|
||||
}
|
||||
return r
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue