]> Cypherpunks.ru repositories - gostls13.git/commit
[dev.boringcrypto] crypto/rsa: add test for, fix observable reads from custom randomness
authorRuss Cox <rsc@golang.org>
Tue, 12 Sep 2017 20:19:24 +0000 (16:19 -0400)
committerRuss Cox <rsc@golang.org>
Mon, 18 Sep 2017 00:26:15 +0000 (00:26 +0000)
commitc9e2d9eb06d2c57cb2a78707fb60a639a94efb42
treec2a9285f4c6ad710ebed6f3568965b5d5ac9d87d
parente773ea9aa33a574796c256930870af9e84dbfd5a
[dev.boringcrypto] crypto/rsa: add test for, fix observable reads from custom randomness

In routines like GenerateKey, where bits from the randomness source have a
visible effect on the output, we bypass BoringCrypto if given a non-standard
randomness source (and also assert that this happens only during tests).

In the decryption paths, the randomness source is only for blinding and has
no effect on the output, so we unconditionally invoke BoringCrypto, letting it
use its own randomness source as it sees fit. This in turn lets us verify that
the non-BoringCrypto decryption function is never called, not even in tests.

Unfortunately, while the randomness source has no visible effect on the
decrypt operation, the decrypt operation does have a visible effect on
the randomness source. If decryption doesn't use the randomness source,
and it's a synthetic stream, then a future operation will read a different
position in the stream and may produce different output. This happens
in tests more often than you'd hope.

To keep behavior of those future operations unchanged while still
ensuring that the original decrypt is never called, this CL adds a
simulation of the blinding preparation, to discard the right amount
from the random source before invoking BoringCrypto.

Change-Id: If2f87b856c811b59b536187c93efa99a97721419
Reviewed-on: https://go-review.googlesource.com/63912
Reviewed-by: Adam Langley <agl@golang.org>
src/crypto/rsa/boring.go
src/crypto/rsa/boring_test.go
src/crypto/rsa/pkcs1v15.go
src/crypto/rsa/pss.go
src/crypto/rsa/rsa.go