diff options
author | NIIBE Yutaka <gniibe@fsij.org> | 2020-04-16 13:56:53 +0900 |
---|---|---|
committer | NIIBE Yutaka <gniibe@fsij.org> | 2020-04-16 13:56:53 +0900 |
commit | 9b7e0d89006fce0641da05d8ef2696b1fb73145b (patch) | |
tree | 5b55ffb9b4f7a20a5ddcae6432985b89a853105e /mpi/mpi-inv.c | |
parent | 32b08e38628b3ed409054db05a7f73b1ab86464a (diff) | |
download | libgcrypt-9b7e0d89006fce0641da05d8ef2696b1fb73145b.tar.gz |
mpih: Expose const-time MPI helper functions.
* mpi/Makefile.am (libmpi_la_SOURCES): Add mpih-const-time.c.
* mpi/ec.c (mpih_set_cond): Move to mpih-const-time.c.
* mpi/mpi-internal.h: Add macros and declarations.
* mpi/mpi-inv.c (mpih_add_n_cond): Likewise.
(mpih_sub_n_cond, mpih_swap_cond, mpih_abs_cond): Likewise.
* mpi/mpih-const-time.c: New.
Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
Diffstat (limited to 'mpi/mpi-inv.c')
-rw-r--r-- | mpi/mpi-inv.c | 101 |
1 files changed, 0 insertions, 101 deletions
diff --git a/mpi/mpi-inv.c b/mpi/mpi-inv.c index 0114622d..0efe12ce 100644 --- a/mpi/mpi-inv.c +++ b/mpi/mpi-inv.c @@ -24,107 +24,6 @@ #include "g10lib.h" /* - * W = U + V when OP_ENABLED=1 - * otherwise, W = U - */ -static mpi_limb_t -mpih_add_n_cond (mpi_ptr_t wp, mpi_ptr_t up, mpi_ptr_t vp, mpi_size_t usize, - unsigned long op_enable) -{ - mpi_size_t i; - mpi_limb_t cy; - mpi_limb_t mask = ((mpi_limb_t)0) - op_enable; - - cy = 0; - for (i = 0; i < usize; i++) - { - mpi_limb_t x = up[i] + (vp[i] & mask); - mpi_limb_t cy1 = x < up[i]; - mpi_limb_t cy2; - - x = x + cy; - cy2 = x < cy; - cy = cy1 | cy2; - wp[i] = x; - } - - return cy; -} - - -/* - * W = U - V when OP_ENABLED=1 - * otherwise, W = U - */ -static mpi_limb_t -mpih_sub_n_cond (mpi_ptr_t wp, mpi_ptr_t up, mpi_ptr_t vp, mpi_size_t usize, - unsigned long op_enable) -{ - mpi_size_t i; - mpi_limb_t cy; - mpi_limb_t mask = ((mpi_limb_t)0) - op_enable; - - cy = 0; - for (i = 0; i < usize; i++) - { - mpi_limb_t x = up[i] - (vp[i] & mask); - mpi_limb_t cy1 = x > up[i]; - mpi_limb_t cy2; - - cy2 = x < cy; - x = x - cy; - cy = cy1 | cy2; - wp[i] = x; - } - - return cy; -} - - -/* - * Swap value of U and V when OP_ENABLED=1 - * otherwise, no change - */ -static void -mpih_swap_cond (mpi_ptr_t up, mpi_ptr_t vp, mpi_size_t usize, - unsigned long op_enable) -{ - mpi_size_t i; - mpi_limb_t mask = ((mpi_limb_t)0) - op_enable; - - for (i = 0; i < usize; i++) - { - mpi_limb_t x = mask & (up[i] ^ vp[i]); - - up[i] = up[i] ^ x; - vp[i] = vp[i] ^ x; - } -} - - -/* - * W = -U when OP_ENABLED=1 - * otherwise, W = U - */ -static void -mpih_abs_cond (mpi_limb_t *wp, const mpi_limb_t *up, mpi_size_t usize, - unsigned long op_enable) -{ - mpi_size_t i; - mpi_limb_t mask = ((mpi_limb_t)0) - op_enable; - mpi_limb_t cy = op_enable; - - for (i = 0; i < usize; i++) - { - mpi_limb_t x = ~up[i] + cy; - - cy = (x < ~up[i]); - wp[i] = up[i] ^ (mask & (x ^ up[i])); - } -} - - -/* * This uses a modular inversion algorithm designed by Niels Möller * which was implemented in Nettle. The same algorithm was later also * adapted to GMP in mpn_sec_invert. |