boringssl/crypto/fipsmodule/ec
David Benjamin 6a289b3ec4 Remove EC_POINTs_make_affine and related logic.
This does not appear to actually pull its weight. The purpose of this
logic is to switch some adds to the faster add_mixed in the wNAF code,
at the cost of a rather expensive inversion. This optimization kicks in
for generic curves, so P-384 and P-521:

With:
Did 32130 ECDSA P-384 signing operations in 30077563us (1068.2 ops/sec)
Did 27456 ECDSA P-384 verify operations in 30073086us (913.0 ops/sec)
Did 14122 ECDSA P-521 signing operations in 30077407us (469.5 ops/sec)
Did 11973 ECDSA P-521 verify operations in 30037330us (398.6 ops/sec)

Without:
Did 32445 ECDSA P-384 signing operations in 30069721us (1079.0 ops/sec)
Did 27056 ECDSA P-384 verify operations in 30032303us (900.9 ops/sec)
Did 13905 ECDSA P-521 signing operations in 30000430us (463.5 ops/sec)
Did 11433 ECDSA P-521 verify operations in 30021876us (380.8 ops/sec)

For single-point multiplication, the optimization is not useful. This
makes sense as we only have one table's worth of additions to convert
but still pay for the inversion. For double-point multiplication, it is
slightly useful for P-384 and very useful for P-521. However, the next
change to stack-allocate EC_FELEMs will more than compensate for
removing it.  (The immediate goal here is to simplify the EC_FELEM
story.)

Additionally, that this optimization was not useful for single-point
multiplication implies that, should we wish to recover this, a modest
8-entry pre-computed (affine) base point table should have the same
effect or better.

Update-Note: I do not believe anything was calling either of these
functions. (If necessary, we can always add no-op stubs as whether a
point is affine is not visible to external code. It previously kicked in
some optimizations, but those were removed for constant-time needs
anyway.)

Bug: 239
Change-Id: Ic9c51b001c45595cfe592274c7d5d652f4234839
Reviewed-on: https://boringssl-review.googlesource.com/27667
Reviewed-by: Adam Langley <agl@google.com>
2018-04-25 16:12:06 +00:00
..
asm p256-x86_64-asm.pl: add .cfi and SEH handlers to new functions. 2018-04-24 16:10:08 +00:00
ec_key.c Store EC_KEY's private key as an EC_SCALAR. 2018-03-07 21:17:31 +00:00
ec_montgomery.c Remove Z = 1 special-case in generic point_get_affine. 2018-04-24 16:16:53 +00:00
ec_scalar_base_mult_tests.txt Add some EC base point multiplication test vectors. 2018-03-27 23:33:24 +00:00
ec_test.cc Add test coverage for the a != -3 case. 2018-04-02 18:25:08 +00:00
ec.c Remove EC_POINTs_make_affine and related logic. 2018-04-25 16:12:06 +00:00
internal.h Remove EC_POINTs_make_affine and related logic. 2018-04-25 16:12:06 +00:00
make_ec_scalar_base_mult_tests.go Add some EC base point multiplication test vectors. 2018-03-27 23:33:24 +00:00
make_p256-x86_64-table.go Add utility program for emitting P-256 x86-64 table. 2018-03-26 16:28:42 +00:00
oct.c Name constant-time functions more consistently. 2018-03-29 23:30:55 +00:00
p224-64.c Remove unnecessary endian flip in p224-64.c. 2018-04-24 16:15:28 +00:00
p256-x86_64_test.cc Add some tests for scalar operations. 2018-04-24 16:12:34 +00:00
p256-x86_64_tests.txt Add some tests for scalar operations. 2018-04-24 16:12:34 +00:00
p256-x86_64-table.h Add utility program for emitting P-256 x86-64 table. 2018-03-26 16:28:42 +00:00
p256-x86_64.c Add dedicated scalar inversion code to p256-x86_64.c. 2018-04-24 16:14:57 +00:00
p256-x86_64.h Add some tests for scalar operations. 2018-04-24 16:12:34 +00:00
scalar.c Abstract scalar inversion in EC_METHOD. 2018-04-24 16:13:24 +00:00
simple.c Remove EC_POINTs_make_affine and related logic. 2018-04-25 16:12:06 +00:00
util.c ec/p256.c: fiat-crypto field arithmetic (64, 32) 2017-12-11 17:55:46 +00:00
wnaf.c Remove EC_POINTs_make_affine and related logic. 2018-04-25 16:12:06 +00:00