Avoid infinite loop on parsing DSA private keys
authortb <tb@openbsd.org>
Thu, 7 Apr 2022 17:38:24 +0000 (17:38 +0000)
committertb <tb@openbsd.org>
Thu, 7 Apr 2022 17:38:24 +0000 (17:38 +0000)
commit5c3491c88525c7dd851c2219135004522a168fe4
treef84defdbaea7683bf4976baac4a003579d6df81f
parent3cc94d964548404c06fb919dc4cd8e2029b1d1fb
Avoid infinite loop on parsing DSA private keys

DSA private keys with ill-chosen g could cause an infinite
loop on deserializing. Add a few sanity checks that ensure
that g is according to the FIPS 186-4: check 1 < g < p and
g^q == 1 (mod p). This is enough to ascertain that g is a
generator of a multiplicative group of order q once we know
that q is prime (which is checked a bit later).

Issue reported with reproducers by Hanno Boeck.
Additional variants and analysis by David Benjamin.

ok beck jsing
lib/libcrypto/dsa/dsa_ameth.c