randutil.mx raw

   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