Commit bcce2987 authored by Adam Langley's avatar Adam Langley

crypto/rsa: fix blinding when using a null random source.

For testing it can be useful to use a null random source (one which
always returns zero) to remove non-determinism from the tests.
However, when performing RSA blinding, the random blind ends up being
zero and it's hard to reverse a multiplication by zero.

R=rsc
CC=go-dev
http://go/go-review/1018033
parent b5ab5d4f
...@@ -16,6 +16,7 @@ import ( ...@@ -16,6 +16,7 @@ import (
"os"; "os";
) )
var bigZero = big.NewInt(0)
var bigOne = big.NewInt(1) var bigOne = big.NewInt(1)
// randomSafePrime returns a number, p, of the given size, such that p and // randomSafePrime returns a number, p, of the given size, such that p and
...@@ -322,6 +323,9 @@ func decrypt(rand io.Reader, priv *PrivateKey, c *big.Int) (m *big.Int, err os.E ...@@ -322,6 +323,9 @@ func decrypt(rand io.Reader, priv *PrivateKey, c *big.Int) (m *big.Int, err os.E
err = err1; err = err1;
return; return;
} }
if big.CmpInt(r, bigZero) == 0 {
r = bigOne;
}
ir = modInverse(r, priv.N); ir = modInverse(r, priv.N);
bigE := big.NewInt(int64(priv.E)); bigE := big.NewInt(int64(priv.E));
rpowe := new(big.Int).Exp(r, bigE, priv.N); rpowe := new(big.Int).Exp(r, bigE, priv.N);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment