Fix variable reuse in BN_mod_inverse()
authortb <tb@openbsd.org>
Fri, 2 Jun 2023 17:15:30 +0000 (17:15 +0000)
committertb <tb@openbsd.org>
Fri, 2 Jun 2023 17:15:30 +0000 (17:15 +0000)
commit76a537bb0564c3ca1c7a5888e2794b2164253227
tree636ebdabe10b88762bc1c869de85b95b4156a0e9
parent1f6bba93cb18a35373e9e427ff40ed6b7f591f16
Fix variable reuse in BN_mod_inverse()

The somewhat strange calculation m = a^{-1} (mod m) can return 0. This
breaks because of BN_nnmod() having delicate semantics of which variable
can be reused. BN_nnmod(a, a, m, ctx) works and the library relies on that.

Here, the code ends up doing BN_nnmod(m, a, m, ctx) and this doesn't work.
If the result of the initial BN_mod() is negative, then BN_nnmod() will
return 0.

Problem reported by Guido Vranken in
https://github.com/openssl/openssl/issues/21110

This code is well covered by regress, but it does not currently have
explicit test coverage. Such will be added soon.

ok beck jsing
lib/libcrypto/bn/bn_gcd.c