Source file src/crypto/internal/randutil/randutil.go
1 // Copyright 2018 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // Package randutil contains internal randomness utilities for various 6 // crypto packages. 7 package randutil 8 9 import ( 10 "io" 11 "math/rand/v2" 12 ) 13 14 // MaybeReadByte reads a single byte from r with 50% probability. This is used 15 // to ensure that callers do not depend on non-guaranteed behaviour, e.g. 16 // assuming that rsa.GenerateKey is deterministic w.r.t. a given random stream. 17 // 18 // This does not affect tests that pass a stream of fixed bytes as the random 19 // source (e.g. a zeroReader). 20 func MaybeReadByte(r io.Reader) { 21 if rand.Uint64()&1 == 1 { 22 return 23 } 24 var buf [1]byte 25 r.Read(buf[:]) 26 } 27