Stop trying to use EC_GFp_nist_method().
authorjsing <jsing@openbsd.org>
Wed, 8 Mar 2023 05:35:51 +0000 (05:35 +0000)
committerjsing <jsing@openbsd.org>
Wed, 8 Mar 2023 05:35:51 +0000 (05:35 +0000)
commita318884f78c5622f958105f6b7ce2a3dda3bac4c
tree692c4e030dd61439b5033c69cafde0492e463eda
parent47f132e2261cab6c0287ec511c0e24444eb25c94
Stop trying to use EC_GFp_nist_method().

Currently, if compiled without OPENSSL_BN_ASM_MONT,
EC_GROUP_new_curve_GFp() tries to use EC_GFp_nist_method(), falling back to
EC_GFp_mont_method() if it is not a NIST curve (if OPENSSL_BN_ASM_MONT is
defined we use EC_GFp_mont_method() unconditionally).

Now that we have a reasonable non-assembly Montgomery implementation, the
performance of EC_GFp_nist_method() is either similar or slower than
EC_GFp_mont_method() (the exception being P-521, however if you're using
that you're not doing it for performance reasons anyway).

The EC_GFp_nist_method() uses rather scary BN NIST code (which would
probably already be removed, if not for the BN and EC public APIs), it uses
code paths that are currently less constant time, and there is additional
overhead in checking to see if the curve is actually supported.

Stop trying to use EC_GFp_nist_method() and unconditionally use
EC_GFp_mont_method() in all cases. While here, factor out the common
setup code and call it from both EC_GROUP_new_curve_GFp() and
EC_GROUP_new_curve_GF2m().

ok beck@ tb@
lib/libcrypto/ec/ec_cvt.c