aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2017-09-13 23:07:38 -0400
committerRuss Cox <rsc@golang.org>2017-09-18 00:31:43 +0000
commita929f3a04dc677703b46c8a908b86432b6b9b52b (patch)
treeab2f7e1352e16e590ba028a8f08d3f5667a429f7
parentaa4a4a80ff4f91d58b9a9e645f1367098183856a (diff)
downloadgo-a929f3a04dc677703b46c8a908b86432b6b9b52b.tar.gz
go-a929f3a04dc677703b46c8a908b86432b6b9b52b.zip
[dev.boringcrypto] crypto/rsa: fix boring GenerateKey to set non-nil Precomputed.CRTValues
This matches the standard GenerateKey and more importantly Precompute, so that if you generate a key and then store it, read it back, call Precompute on the new copy, and then do reflect.DeepEqual on the two copies, they will match. Before this CL, the original key had CRTValues == nil and the reconstituted key has CRTValues != nil (but len(CRTValues) == 0). Change-Id: I1ddc64342a50a1b65a48d827e4d564f1faab1945 Reviewed-on: https://go-review.googlesource.com/63914 Reviewed-by: Adam Langley <agl@golang.org>
-rw-r--r--src/crypto/rsa/boring_test.go5
-rw-r--r--src/crypto/rsa/rsa.go7
2 files changed, 9 insertions, 3 deletions
diff --git a/src/crypto/rsa/boring_test.go b/src/crypto/rsa/boring_test.go
index 0b19e92d74..f40e2748ca 100644
--- a/src/crypto/rsa/boring_test.go
+++ b/src/crypto/rsa/boring_test.go
@@ -158,6 +158,11 @@ func TestBoringRandGenerateKey(t *testing.T) {
t.Fatalf("GenerateKey: wrong N\nhave %x\nwant %x", k.N, n)
}
r.checkOffset(35200)
+
+ // Non-Boring GenerateKey always sets CRTValues to a non-nil (possibly empty) slice.
+ if k.Precomputed.CRTValues == nil {
+ t.Fatalf("GenerateKey: Precomputed.CRTValues = nil")
+ }
}
func TestBoringRandGenerateMultiPrimeKey(t *testing.T) {
diff --git a/src/crypto/rsa/rsa.go b/src/crypto/rsa/rsa.go
index 53b8f963f6..8e63185ec6 100644
--- a/src/crypto/rsa/rsa.go
+++ b/src/crypto/rsa/rsa.go
@@ -233,9 +233,10 @@ func GenerateMultiPrimeKey(random io.Reader, nprimes int, bits int) (*PrivateKey
D: D,
Primes: []*big.Int{P, Q},
Precomputed: PrecomputedValues{
- Dp: Dp,
- Dq: Dq,
- Qinv: Qinv,
+ Dp: Dp,
+ Dq: Dq,
+ Qinv: Qinv,
+ CRTValues: make([]CRTValue, 0), // non-nil, to match Precompute
},
}
return key, nil