Hello, Thank you for your work of Nettle.
I tested the cnd_copy function with the Compiler Explorer.
The input is:
==========================
#ifndef MINI_GMP_LIMB_TYPE
#define MINI_GMP_LIMB_TYPE long
#endif
typedef unsigned MINI_GMP_LIMB_TYPE mp_limb_t;
typedef long mp_size_t;
void
cnd_copy (int cnd, mp_limb_t *rp, const mp_limb_t *ap, mp_size_t n)
{
mp_limb_t mask, keep;
mp_size_t i;
mask = -(mp_limb_t) (cnd !=0);
keep = ~mask;
for (i = 0; i < n; i++)
rp[i] = (rp[i] & keep) + (ap[i] & mask);
}
==========================
In the generated code, we can see the conditional jump with the variable
CND.
x86 msvc v19.0 (WINE):
https://godbolt.org/z/f88edPe46
IIUC, it is better to use something like NOT_EQUAL (in
nettle/pkcs1-sec-decrypt.c) to compute the mask, too.
If it is my misunderstanding (like MSVC actually is not supported),
sorry in advance. I'm learning important things from Nettle
implementation. (Thanks again for that.)
--
signature.asc
Description: PGP signature
_______________________________________________ nettle-bugs mailing list -- [email protected] To unsubscribe send an email to [email protected]
