Adjust various bignum functions to use BN_CTX for variables instead of
authorGeoff Thorpe <geoff@openssl.org>
Thu, 25 Mar 2004 04:32:24 +0000 (04:32 +0000)
committerGeoff Thorpe <geoff@openssl.org>
Thu, 25 Mar 2004 04:32:24 +0000 (04:32 +0000)
commitc86f2054f39c7005bc03f91db2d7bcf38f0a92ac
treed44ff598397b7c8c61b254d32aaba1479a34deda
parent5c98b2caf5ce545fbf77611431c7084979da8177
Adjust various bignum functions to use BN_CTX for variables instead of
locally initialising their own.

NB: I've removed the "BN_clear_free()" loops for the exit-paths in some of
these functions, and that may be a major part of the performance
improvements we're seeing. The "free" part can be removed because we're
using BN_CTX. The "clear" part OTOH can be removed because BN_CTX
destruction automatically performs this task, so performing it inside
functions that may be called repeatedly is wasteful. This is currently safe
within openssl due to the fact that BN_CTX objects are never created for
longer than a single high-level operation. However, that is only because
there's currently no mechanism in openssl for thread-local storage. Beyond
that, this might be an issue for applications using the bignum API directly
and caching their own BN_CTX objects. The solution is to introduce a flag
to BN_CTX_start() that allows its variables to be automatically sanitised
on release during BN_CTX_end(). This way any higher-level function (and
perhaps the application) can specify this flag in its own
BN_CTX_start()/BN_CTX_end() pair, and this will cause inner-loop functions
specifying the flag to be ignored so that sanitisation is handled only once
back out at the higher level. I will be implementing this in the near
future.
crypto/bn/bn_exp.c
crypto/bn/bn_exp2.c
crypto/bn/bn_mont.c
crypto/bn/bn_prime.c
crypto/bn/bn_recp.c