Add sanity checks on p and q in old_dsa_priv_decode()
authortb <tb@openbsd.org>
Thu, 24 Feb 2022 08:31:11 +0000 (08:31 +0000)
committertb <tb@openbsd.org>
Thu, 24 Feb 2022 08:31:11 +0000 (08:31 +0000)
commit83bd653d9a39f670678effa32a754b809ff48ca4
tree7c332e3a1dfe77edb2773bf83600c8aecda0087f
parentad06f0b23ddfde3cb41a3e27faaab569fb68fa0b
Add sanity checks on p and q in old_dsa_priv_decode()

dsa_do_verify() has checks on dsa->p and dsa->q that ensure that p isn't
overly long and that q has one of the three allowed lengths specified in
FIPS 186-3, namely 160, 224, or 256.

Do these checks on deserialization of DSA keys without parameters. This
means that we will now reject keys we would previously deserialize. Such
keys are useless in that signatures generated by them would be rejected
by both LibreSSL and OpenSSL.

This avoids a timeout flagged in oss-fuzz #26899 due to a ridiculous
DSA key whose q has size 65KiB. The timeout comes from additional checks
on DSA keys added by miod in dsa_ameth.c r1.18, especially checking such
a humungous number for primality is expensive.

ok jsing
lib/libcrypto/dsa/dsa_ameth.c