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  

View as plain text