• Adam Langley's avatar
    crypto: randomly read an extra byte of randomness in some places. · 6269dcdc
    Adam Langley authored
    Code has ended up depending on things like RSA's key generation being
    deterministic given a fixed random Reader. This was never guaranteed and
    would prevent us from ever changing anything about it.
    
    This change makes certain calls randomly (based on the internal
    fastrand) read an extra byte from the random Reader. This helps to
    ensure that code does not depend on internal details.
    
    I've not added this call in the key generation of ECDSA and DSA because,
    in those cases, key generation is so obvious that it probably is
    acceptable to do the obvious thing and not worry about code that depends
    on that.
    
    This does not affect tests that use a Reader of constant bytes (e.g. a
    zeroReader) because shifting such a stream is a no-op. The stdlib uses
    this internally (which is fine because it can be atomically updated if
    the crypto libraries change).
    
    It is possible that external tests could be doing the same and would
    thus break if we ever, say, tweaked the way RSA key generation worked.
    I feel that addressing that would be more effort than it's worth.
    
    Fixes #21915
    
    Change-Id: I84cff2e249acc921ad6eb5527171e02e6d39c530
    Reviewed-on: https://go-review.googlesource.com/64451Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
    Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
    6269dcdc
Name
Last commit
Last update
..
archive Loading commit data...
bufio Loading commit data...
builtin Loading commit data...
bytes Loading commit data...
cmd Loading commit data...
compress Loading commit data...
container Loading commit data...
context Loading commit data...
crypto Loading commit data...
database/sql Loading commit data...
debug Loading commit data...
encoding Loading commit data...
errors Loading commit data...
expvar Loading commit data...
flag Loading commit data...
fmt Loading commit data...
go Loading commit data...
hash Loading commit data...
html Loading commit data...
image Loading commit data...
index/suffixarray Loading commit data...
internal Loading commit data...
io Loading commit data...
log Loading commit data...
math Loading commit data...
mime Loading commit data...
net Loading commit data...
os Loading commit data...
path Loading commit data...
plugin Loading commit data...
reflect Loading commit data...
regexp Loading commit data...
runtime Loading commit data...
sort Loading commit data...
strconv Loading commit data...
strings Loading commit data...
sync Loading commit data...
syscall Loading commit data...
testing Loading commit data...
text Loading commit data...
time Loading commit data...
unicode Loading commit data...
unsafe Loading commit data...
vendor/golang_org/x Loading commit data...
Make.dist Loading commit data...
all.bash Loading commit data...
all.bat Loading commit data...
all.rc Loading commit data...
androidtest.bash Loading commit data...
bootstrap.bash Loading commit data...
buildall.bash Loading commit data...
clean.bash Loading commit data...
clean.bat Loading commit data...
clean.rc Loading commit data...
cmp.bash Loading commit data...
iostest.bash Loading commit data...
make.bash Loading commit data...
make.bat Loading commit data...
make.rc Loading commit data...
naclmake.bash Loading commit data...
nacltest.bash Loading commit data...
race.bash Loading commit data...
race.bat Loading commit data...
run.bash Loading commit data...
run.bat Loading commit data...
run.rc Loading commit data...