mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
crypto/ecdsa: reject negative inputs.
The fact that crypto/ecdsa.Verify didn't reject negative inputs was a mistake on my part: I had unsigned numbers on the brain. However, it doesn't generally cause problems. (ModInverse results in zero, which results in x being zero, which is rejected.) The amd64 P-256 code will crash when given a large, negative input. This fixes both crypto/ecdsa to reject these values and also the P-256 code to ignore the sign of inputs. Change-Id: I6370ed7ca8125e53225866f55b616a4022b818f8 Reviewed-on: https://go-review.googlesource.com/22093 Run-TryBot: Adam Langley <agl@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
2ba8fc5b08
commit
b30fcbc9f5
3 changed files with 30 additions and 3 deletions
|
|
@ -296,3 +296,26 @@ func TestVectors(t *testing.T) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func testNegativeInputs(t *testing.T, curve elliptic.Curve, tag string) {
|
||||
key, err := GenerateKey(curve, rand.Reader)
|
||||
if err != nil {
|
||||
t.Errorf("failed to generate key for %q", tag)
|
||||
}
|
||||
|
||||
var hash [32]byte
|
||||
r := new(big.Int).SetInt64(1)
|
||||
r.Lsh(r, 550 /* larger than any supported curve */)
|
||||
r.Neg(r)
|
||||
|
||||
if Verify(&key.PublicKey, hash[:], r, r) {
|
||||
t.Errorf("bogus signature accepted for %q", tag)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNegativeInputs(t *testing.T) {
|
||||
testNegativeInputs(t, elliptic.P224(), "p224")
|
||||
testNegativeInputs(t, elliptic.P256(), "p256")
|
||||
testNegativeInputs(t, elliptic.P384(), "p384")
|
||||
testNegativeInputs(t, elliptic.P521(), "p521")
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue