Provide dsa_check_key()
authortb <tb@openbsd.org>
Sat, 4 Mar 2023 20:54:52 +0000 (20:54 +0000)
committertb <tb@openbsd.org>
Sat, 4 Mar 2023 20:54:52 +0000 (20:54 +0000)
commit3f42ce0a890cb77e6aed67407cafb72c2ae359c5
tree3eb4087ae9a58208c74df6290be2bd73ff9a8e53
parentb8d827af111b3acda170062bc90f538aee1a3852
Provide dsa_check_key()

This is a cheap check that ensures basid parameter consistency per
FIPS 186-4: 1 < g < q, that q has the allowed bit sizes 160, 224, 256
and that p is neither too small nor too large. Unfortunately, enforcing
the three allowed sizes for p is not possible since the default dsa key
generation has not respected this limitation.

Instead of checking that p and q are prime, we only check that they
are odd. Check that public and private keys, if set, are in the proper
range. In particular, disallow zero values.

Various versions of these checks have been added to the dsa code
over time. This consolidates and extends them and in a subsequent
commit wewill replace the incomplete checks. BoringSSL has a similar
function of the same name, thanks to David Benjamin for pointing it
out.

ok beck jsing
lib/libcrypto/dsa/dsa_lib.c
lib/libcrypto/dsa/dsa_local.h