Mailing List Archive

[PATCH 12/12] ec: avoid unintentional condition branches for 25519, 448 and 256k1
* mpi/ec.c (ec_addm_25519, ec_subm_25519, ec_mulm_25519, ec_addm_448)
(ec_subm_448, ec_mulm_448, ec_secp256k1_mod): Use mpih_limb_is_zero
and mpih_limb_is_not_zero instead of comparison to zero.
--

Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
---
mpi/ec.c | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/mpi/ec.c b/mpi/ec.c
index b0d0f56b..4b7a1afd 100644
--- a/mpi/ec.c
+++ b/mpi/ec.c
@@ -375,7 +375,7 @@ ec_addm_25519 (gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v, mpi_ec_t ctx)

_gcry_mpih_add_n (wp, up, vp, wsize);
borrow = _gcry_mpih_sub_n (n, wp, ctx->p->d, wsize);
- mpih_set_cond (wp, n, wsize, (borrow == 0UL));
+ mpih_set_cond (wp, n, wsize, mpih_limb_is_zero (borrow));
wp[LIMB_SIZE_25519-1] &= ~((mpi_limb_t)1 << (255 % BITS_PER_MPI_LIMB));
}

@@ -396,7 +396,7 @@ ec_subm_25519 (gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v, mpi_ec_t ctx)

borrow = _gcry_mpih_sub_n (wp, up, vp, wsize);
_gcry_mpih_add_n (n, wp, ctx->p->d, wsize);
- mpih_set_cond (wp, n, wsize, (borrow != 0UL));
+ mpih_set_cond (wp, n, wsize, mpih_limb_is_not_zero (borrow));
wp[LIMB_SIZE_25519-1] &= ~((mpi_limb_t)1 << (255 % BITS_PER_MPI_LIMB));
}

@@ -433,7 +433,7 @@ ec_mulm_25519 (gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v, mpi_ec_t ctx)
_gcry_mpih_add_n (wp, wp, n, wsize);

cy = _gcry_mpih_sub_n (n, wp, ctx->p->d, wsize);
- mpih_set_cond (wp, n, wsize, (cy == 0UL));
+ mpih_set_cond (wp, n, wsize, mpih_limb_is_zero (cy));
}

static void
@@ -470,7 +470,7 @@ ec_addm_448 (gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v, mpi_ec_t ctx)

cy = _gcry_mpih_add_n (wp, up, vp, wsize);
_gcry_mpih_sub_n (n, wp, ctx->p->d, wsize);
- mpih_set_cond (wp, n, wsize, (cy != 0UL));
+ mpih_set_cond (wp, n, wsize, mpih_limb_is_not_zero (cy));
}

static void
@@ -490,7 +490,7 @@ ec_subm_448 (gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v, mpi_ec_t ctx)

borrow = _gcry_mpih_sub_n (wp, up, vp, wsize);
_gcry_mpih_add_n (n, wp, ctx->p->d, wsize);
- mpih_set_cond (wp, n, wsize, (borrow != 0UL));
+ mpih_set_cond (wp, n, wsize, mpih_limb_is_not_zero (borrow));
}

static void
@@ -561,7 +561,7 @@ ec_mulm_448 (gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v, mpi_ec_t ctx)
_gcry_mpih_add_n (wp, wp, n, wsize);

cy = _gcry_mpih_sub_n (n, wp, ctx->p->d, wsize);
- mpih_set_cond (wp, n, wsize, (cy == 0UL));
+ mpih_set_cond (wp, n, wsize, mpih_limb_is_zero (cy));
}

static void
@@ -622,7 +622,8 @@ ec_secp256k1_mod (gcry_mpi_t w, mpi_ec_t ctx)
cy = _gcry_mpih_add_n (wp, wp, n, wsize);

borrow = _gcry_mpih_sub_n (s, wp, ctx->p->d, wsize);
- mpih_set_cond (wp, s, wsize, (cy != 0UL) | (borrow == 0UL));
+ mpih_set_cond (wp, s, wsize,
+ mpih_limb_is_not_zero (cy) | mpih_limb_is_zero (borrow));

w->nlimbs = wsize;
MPN_NORMALIZE (wp, w->nlimbs);
--
2.40.1


_______________________________________________
Gcrypt-devel mailing list
Gcrypt-devel@gnupg.org
https://lists.gnupg.org/mailman/listinfo/gcrypt-devel