openssl/crypto
Nicola Tuveri 3712436071 EC point multiplication: add ladder scaffold
for specialized Montgomery ladder implementations

PR #6009 and #6070 replaced the default EC point multiplication path for
prime and binary curves with a unified Montgomery ladder implementation
with various timing attack defenses (for the common paths when a secret
scalar is feed to the point multiplication).
The newly introduced default implementation directly used
EC_POINT_add/dbl in the main loop.

The scaffolding introduced by this commit allows EC_METHODs to define a
specialized `ladder_step` function to improve performances by taking
advantage of efficient formulas for differential addition-and-doubling
and different coordinate systems.

- `ladder_pre` is executed before the main loop of the ladder: by
  default it copies the input point P into S, and doubles it into R.
  Specialized implementations could, e.g., use this hook to transition
  to different coordinate systems before copying and doubling;
- `ladder_step` is the core of the Montgomery ladder loop: by default it
  computes `S := R+S; R := 2R;`, but specific implementations could,
  e.g., implement a more efficient formula for differential
  addition-and-doubling;
- `ladder_post` is executed after the Montgomery ladder loop: by default
  it's a noop, but specialized implementations could, e.g., use this
  hook to transition back from the coordinate system used for optimizing
  the differential addition-and-doubling or recover the y coordinate of
  the result point.

This commit also renames `ec_mul_consttime` to `ec_scalar_mul_ladder`,
as it better corresponds to what this function does: nothing can be
truly said about the constant-timeness of the overall execution of this
function, given that the underlying operations are not necessarily
constant-time themselves.
What this implementation ensures is that the same fixed sequence of
operations is executed for each scalar multiplication (for a given
EC_GROUP), with no dependency on the value of the input scalar.

Co-authored-by: Sohaib ul Hassan <soh.19.hassan@gmail.com>
Co-authored-by: Billy Brumley <bbrumley@gmail.com>

Reviewed-by: Andy Polyakov <appro@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6690)
2018-07-16 10:17:40 +01:00
..
aes PA-RISC assembly pack: make it work with GNU assembler for HP-UX. 2018-06-25 16:45:48 +02:00
aria
asn1 Update copyright year 2018-06-20 15:29:23 +01:00
async Update copyright year 2018-05-01 13:34:30 +01:00
bf
bio Fix a new gcc-9 warning [-Wstringop-truncation] 2018-06-24 18:01:12 +02:00
blake2
bn bn/bn_lcl.h,bn_nist.c: addres strict warnings with -DBN_DEBUG. 2018-07-14 13:44:24 +02:00
buffer Update copyright year 2018-04-03 13:57:12 +01:00
camellia Remove some inline assembler and non-standard constructs. 2018-06-21 14:01:03 +02:00
cast
chacha chacha/asm/chacha-x86_64.pl: add dedicated path for 128-byte inputs. 2018-07-03 19:02:02 +02:00
cmac Update copyright year 2018-04-17 15:18:40 +02:00
cms Remove __cplusplus preamble from internal headers 2018-06-22 12:24:59 +02:00
comp Fix last(?) batch of malloc-NULL places 2018-04-26 14:02:24 -04:00
conf NCONF_get_number refix. 2018-07-11 09:03:22 +10:00
ct Add -Wstrict-prototypes option to --strict-warnings 2018-06-21 19:04:19 +02:00
des Update copyright year 2018-04-03 13:57:12 +01:00
dh Update copyright year 2018-06-20 15:29:23 +01:00
dsa Use DEPRECATEDIN_1_2_0 macro for DSA_sign_setup declaration 2018-06-21 11:01:32 +01:00
dso openssl#5668: corrections after compiling with -qinfo=all:als. 2018-04-14 13:28:31 +02:00
ec EC point multiplication: add ladder scaffold 2018-07-16 10:17:40 +01:00
engine Correctly check for cryptodev hash support 2018-07-09 12:45:28 -04:00
err EC point multiplication: add ladder scaffold 2018-07-16 10:17:40 +01:00
evp Fix undefined behavior in s390x aes-gcm/ccm 2018-07-12 13:36:08 -04:00
hmac Remove __cplusplus preamble from internal headers 2018-06-22 12:24:59 +02:00
idea
include/internal Remove stale SM2 error codes 2018-07-16 10:17:40 +01:00
kdf Update copyright year 2018-04-17 15:18:40 +02:00
lhash Update copyright year 2018-05-01 13:34:30 +01:00
md2
md4
md5
mdc2
modes modes/ocb128.c: readability and formatting improvements. 2018-07-09 12:37:09 +02:00
objects New GOST identificators 2018-06-08 12:06:40 -04:00
ocsp
pem Zero-fill IV by default. 2018-06-28 18:13:54 -04:00
perlasm perlasm/x86_64-xlate.pl: refine symbol recognition in .xdata. 2018-07-03 19:01:20 +02:00
pkcs7 Update copyright year 2018-03-20 13:08:46 +00:00
pkcs12 Update copyright year 2018-06-20 15:29:23 +01:00
poly1305 poly1305/asm/poly1305-x86_64.pl: fix solaris64-x86_64-cc build. 2018-07-10 12:01:56 +02:00
rand rand/rand_unix.c: address macro redifinition warning. 2018-07-01 12:05:54 +02:00
rc2
rc4 PA-RISC assembly pack: make it work with GNU assembler for HP-UX. 2018-06-25 16:45:48 +02:00
rc5
ripemd
rsa rsa/*: switch to BN_bn2binpad. 2018-07-14 13:38:21 +02:00
seed Remove __cplusplus preamble from internal headers 2018-06-22 12:24:59 +02:00
sha Remove development artifacts. 2018-07-02 07:21:26 +10:00
siphash Add support getting raw private/public keys 2018-06-08 10:04:09 +01:00
sm2 Remove a memset 2018-07-07 14:00:19 +01:00
sm3
sm4
srp Make ck_errf.pl ignore commented out error generation 2018-06-12 12:31:45 +02:00
stack Fix last(?) batch of malloc-NULL places 2018-04-26 14:02:24 -04:00
store store/loader_file.c: fix char-subscripts warning. 2018-06-25 16:47:36 +02:00
ts Use void in all function definitions that do not take any arguments 2018-05-11 14:37:48 +02:00
txt_db Update copyright year 2018-04-03 13:57:12 +01:00
ui Update copyright year 2018-05-29 13:16:04 +01:00
whrlpool
x509 Update copyright year 2018-06-20 15:29:23 +01:00
x509v3 Remove __cplusplus preamble from internal headers 2018-06-22 12:24:59 +02:00
alphacpuid.pl
arm64cpuid.pl {arm64|x86_64}cpuid.pl: add special 16-byte case to OPENSSL_memcmp. 2018-06-03 21:15:18 +02:00
arm_arch.h Fix building linux-armv4 with --strict-warnings 2018-04-20 15:49:33 +02:00
armcap.c
armv4cpuid.pl Update copyright year 2018-05-01 13:34:30 +01:00
build.info Remove import/use of File::Spec::Function 2018-04-01 22:41:04 +02:00
c64xpluscpuid.pl
cpt_err.c Fix last(?) batch of malloc-NULL places 2018-04-26 14:02:24 -04:00
cryptlib.c Enabled OneCore Conf for Console Apps (removed nonUniversal API) 2018-04-03 18:39:22 +02:00
ctype.c
cversion.c
dllmain.c
ebcdic.c
ex_data.c Ensure the thread keys are always allocated in the same order 2018-04-20 15:45:06 +02:00
ia64cpuid.S
init.c Fix memleaks in async api 2018-04-26 18:39:51 +02:00
LPdir_nyi.c
LPdir_unix.c
LPdir_vms.c
LPdir_win32.c
LPdir_win.c
LPdir_wince.c
mem_clr.c
mem_dbg.c
mem_sec.c Use void in all function definitions that do not take any arguments 2018-05-11 14:37:48 +02:00
mem.c
mips_arch.h
o_dir.c
o_fips.c
o_fopen.c Set error code on alloc failures 2018-04-03 11:31:16 -04:00
o_init.c
o_str.c
o_time.c Update copyright year 2018-04-03 13:57:12 +01:00
pariscid.pl PA-RISC assembly pack: make it work with GNU assembler for HP-UX. 2018-06-25 16:45:48 +02:00
ppc_arch.h
ppccap.c crypto/ppccap.c: wire new ChaCha20_ctr32_vsx. 2018-06-06 22:14:15 +02:00
ppccpuid.pl
s390x_arch.h s390x assembly pack: add KMF code path for aes-cfb/cfb8 2018-03-28 23:31:01 +02:00
s390xcap.c
s390xcpuid.pl s390x assembly pack: add KMF code path for aes-cfb/cfb8 2018-03-28 23:31:01 +02:00
sparc_arch.h
sparccpuid.S
sparcv9cap.c
threads_none.c Update copyright year 2018-04-17 15:18:40 +02:00
threads_pthread.c Update copyright year 2018-04-17 15:18:40 +02:00
threads_win.c Save and restore the Windows error around TlsGetValue. 2018-05-23 17:34:54 -04:00
uid.c
vms_rms.h
x86_64cpuid.pl {arm64|x86_64}cpuid.pl: add special 16-byte case to OPENSSL_memcmp. 2018-06-03 21:15:18 +02:00
x86cpuid.pl