Make the bn_rand_interval() API a bit more ergonomic
authortb <tb@openbsd.org>
Thu, 3 Aug 2023 18:53:55 +0000 (18:53 +0000)
committertb <tb@openbsd.org>
Thu, 3 Aug 2023 18:53:55 +0000 (18:53 +0000)
commit12347e819a161ea252d407d10e9bab13ecdbe9e2
tree96f60539b2bfa4bef6102bc84f33bc577810f42d
parentc7ce970002c8f436ef8b85ef87c8efcba426571b
Make the bn_rand_interval() API a bit more ergonomic

Provide bn_rand_in_range() which is a slightly tweaked version of what was
previously called bn_rand_range().

The way bn_rand_range() is called in libcrypto, the lower bound is always
expressible as a word. In fact, most of the time it is 1, the DH code uses
a 2, the MR tests in BPSW use 3 and an exceptinally high number appears in
the Tonelli-Shanks implementation where we use 32. Converting these lower
bounds to BIGNUMs on the call site is annoying so let bn_rand_interval()
do that internally and route that through bn_rand_in_range(). This way we
can avoid using BN_sub_word().

Adjust the bn_isqrt() test to use bn_rand_in_range() since that's the
only caller that uses actual BIGNUMs as lower bounds.

ok jsing
lib/libcrypto/bn/bn_bpsw.c
lib/libcrypto/bn/bn_local.h
lib/libcrypto/bn/bn_mod_sqrt.c
lib/libcrypto/bn/bn_rand.c
lib/libcrypto/dh/dh_key.c
lib/libcrypto/dsa/dsa_key.c
lib/libcrypto/dsa/dsa_ossl.c
lib/libcrypto/ec/ec_key.c
lib/libcrypto/ec/ecp_smpl.c
lib/libcrypto/ecdsa/ecdsa.c
regress/lib/libcrypto/bn/bn_isqrt.c