Rewrite BN_CTX.
authorjsing <jsing@openbsd.org>
Sat, 14 Jan 2023 15:23:27 +0000 (15:23 +0000)
committerjsing <jsing@openbsd.org>
Sat, 14 Jan 2023 15:23:27 +0000 (15:23 +0000)
commit24d7b3e00fcd91132cd096d40bdcecf14d82d992
tree22b88df32b0891686aa89bf5cb10b0dd11c1a2a2
parent8d6b24b57ad1132c96e80deebf2147331dcef5eb
Rewrite BN_CTX.

The current BN_CTX implementation is an incredibly overengineered piece of
code, which even includes its own debug system.

Rewrite BN_CTX from scratch, simplifying things things considerably by
having a "stack" of BIGNUM pointers and a matching array of group
assignments. This means that BN_CTX_start() and BN_CTX_end() effectively
do not fail. Unlike the previous implementation, if a failure occurs
nothing will work and the BN_CTX must be freed/recreated, instead of
trying to pick up at the point where the failure occurred (which does
not make sense given its intended usage).

Additionally, it has long been documented that BN_CTX_start() must be
called before BN_CTX_get() can be used, however the previous implementation
did not actually enforce this. Now that missing BN_CTX_start() and
BN_CTX_end() calls have been added to DSA and EC, we can actually make
this a hard requirement.

ok tb@
lib/libcrypto/bn/bn_ctx.c