summaryrefslogtreecommitdiff
path: root/mpi/mpi-inv.c
diff options
context:
space:
mode:
authorNIIBE Yutaka <gniibe@fsij.org>2020-04-16 13:56:53 +0900
committerNIIBE Yutaka <gniibe@fsij.org>2020-04-16 13:56:53 +0900
commit9b7e0d89006fce0641da05d8ef2696b1fb73145b (patch)
tree5b55ffb9b4f7a20a5ddcae6432985b89a853105e /mpi/mpi-inv.c
parent32b08e38628b3ed409054db05a7f73b1ab86464a (diff)
downloadlibgcrypt-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.c101
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.