Skip to content

Commit f2c09b0

Browse files
ebfeagl
authored andcommitted
x/crypto/openpgp/packet: validate parsed rsa private keys
parseRSAPrivateKey calls rsa.PrivateKey.Precompute which triggers divide-by-zero panic if either p or q is 1. Sanity check the parsed values by calling rsa.PrivateKey.Validate. Fixes golang/go#11505 Change-Id: Ia6c9eccca0cfa49aaa58716e708c557a788bb204 Reviewed-on: https://go-review.googlesource.com/12356 Reviewed-by: Adam Langley <agl@golang.org>
1 parent 56474df commit f2c09b0

File tree

2 files changed

+8
-0
lines changed

2 files changed

+8
-0
lines changed

openpgp/packet/private_key.go

+3
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,9 @@ func (pk *PrivateKey) parseRSAPrivateKey(data []byte) (err error) {
263263
rsaPriv.Primes = make([]*big.Int, 2)
264264
rsaPriv.Primes[0] = new(big.Int).SetBytes(p)
265265
rsaPriv.Primes[1] = new(big.Int).SetBytes(q)
266+
if err := rsaPriv.Validate(); err != nil {
267+
return err
268+
}
266269
rsaPriv.Precompute()
267270
pk.PrivateKey = rsaPriv
268271
pk.Encrypted = false

openpgp/packet/private_key_test.go

+5
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,11 @@ func TestPrivateKeyRead(t *testing.T) {
5656
}
5757
}
5858

59+
func TestIssue11505(t *testing.T) {
60+
// parsing a rsa private key with p or q == 1 used to panic due to a divide by zero
61+
_, _ = Read(readerFromHex("9c3004303030300100000011303030000000000000010130303030303030303030303030303030303030303030303030303030303030303030303030303030303030"))
62+
}
63+
5964
// Generated with `gpg --export-secret-keys "Test Key 2"`
6065
const privKeyRSAHex = "9501fe044cc349a8010400b70ca0010e98c090008d45d1ee8f9113bd5861fd57b88bacb7c68658747663f1e1a3b5a98f32fda6472373c024b97359cd2efc88ff60f77751adfbf6af5e615e6a1408cfad8bf0cea30b0d5f53aa27ad59089ba9b15b7ebc2777a25d7b436144027e3bcd203909f147d0e332b240cf63d3395f5dfe0df0a6c04e8655af7eacdf0011010001fe0303024a252e7d475fd445607de39a265472aa74a9320ba2dac395faa687e9e0336aeb7e9a7397e511b5afd9dc84557c80ac0f3d4d7bfec5ae16f20d41c8c84a04552a33870b930420e230e179564f6d19bb153145e76c33ae993886c388832b0fa042ddda7f133924f3854481533e0ede31d51278c0519b29abc3bf53da673e13e3e1214b52413d179d7f66deee35cac8eacb060f78379d70ef4af8607e68131ff529439668fc39c9ce6dfef8a5ac234d234802cbfb749a26107db26406213ae5c06d4673253a3cbee1fcbae58d6ab77e38d6e2c0e7c6317c48e054edadb5a40d0d48acb44643d998139a8a66bb820be1f3f80185bc777d14b5954b60effe2448a036d565c6bc0b915fcea518acdd20ab07bc1529f561c58cd044f723109b93f6fd99f876ff891d64306b5d08f48bab59f38695e9109c4dec34013ba3153488ce070268381ba923ee1eb77125b36afcb4347ec3478c8f2735b06ef17351d872e577fa95d0c397c88c71b59629a36aec"
6166

0 commit comments

Comments
 (0)