"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "ecc-j-to-a.c" between
nettle-3.7.1.tar.gz and nettle-3.7.2.tar.gz

About: Nettle is a low-level cryptographic library.

ecc-j-to-a.c  (nettle-3.7.1):ecc-j-to-a.c  (nettle-3.7.2)
skipping to change at line 52 skipping to change at line 52
ecc_j_to_a (const struct ecc_curve *ecc, ecc_j_to_a (const struct ecc_curve *ecc,
int op, int op,
mp_limb_t *r, const mp_limb_t *p, mp_limb_t *r, const mp_limb_t *p,
mp_limb_t *scratch) mp_limb_t *scratch)
{ {
#define izp scratch #define izp scratch
#define iz2p (scratch + ecc->p.size) #define iz2p (scratch + ecc->p.size)
#define iz3p (scratch + 2*ecc->p.size) #define iz3p (scratch + 2*ecc->p.size)
#define tp scratch #define tp scratch
mp_limb_t cy;
ecc->p.invert (&ecc->p, izp, p+2*ecc->p.size, izp + ecc->p.size); ecc->p.invert (&ecc->p, izp, p+2*ecc->p.size, izp + ecc->p.size);
ecc_mod_sqr (&ecc->p, iz2p, izp, iz2p); ecc_mod_sqr (&ecc->p, iz2p, izp, iz2p);
if (ecc->use_redc) if (ecc->use_redc)
{ {
/* Divide this common factor by B, instead of applying redc to /* Divide this common factor by B, instead of applying redc to
both x and y outputs. */ both x and y outputs. */
mpn_zero (iz2p + ecc->p.size, ecc->p.size); mpn_zero (iz2p + ecc->p.size, ecc->p.size);
ecc->p.reduce (&ecc->p, iz2p, iz2p); ecc->p.reduce (&ecc->p, iz2p, iz2p);
} }
/* r_x <-- x / z^2 */ /* r_x <-- x / z^2 */
ecc_mod_mul (&ecc->p, iz3p, iz2p, p, iz3p); ecc_mod_mul_canonical (&ecc->p, r, iz2p, p, iz3p);
/* ecc_mod (and ecc_mod_mul) may return a value up to 2p - 1, so
do a conditional subtraction. */
cy = mpn_sub_n (r, iz3p, ecc->p.m, ecc->p.size);
cnd_copy (cy, r, iz3p, ecc->p.size);
if (op) if (op)
{ {
/* Skip y coordinate */ /* Skip y coordinate */
if (op > 1) if (op > 1)
{ {
mp_limb_t cy;
/* Also reduce the x coordinate mod ecc->q. It should /* Also reduce the x coordinate mod ecc->q. It should
already be < 2*ecc->q, so one subtraction should already be < 2*ecc->q, so one subtraction should
suffice. */ suffice. */
cy = mpn_sub_n (scratch, r, ecc->q.m, ecc->p.size); cy = mpn_sub_n (scratch, r, ecc->q.m, ecc->p.size);
cnd_copy (cy == 0, r, scratch, ecc->p.size); cnd_copy (cy == 0, r, scratch, ecc->p.size);
} }
return; return;
} }
ecc_mod_mul (&ecc->p, iz3p, iz2p, izp, iz3p); ecc_mod_mul (&ecc->p, iz3p, iz2p, izp, iz3p);
ecc_mod_mul (&ecc->p, tp, iz3p, p + ecc->p.size, tp); ecc_mod_mul_canonical (&ecc->p, r + ecc->p.size, iz3p, p + ecc->p.size, tp);
/* And a similar subtraction. */
cy = mpn_sub_n (r + ecc->p.size, tp, ecc->p.m, ecc->p.size);
cnd_copy (cy, r + ecc->p.size, tp, ecc->p.size);
#undef izp #undef izp
#undef iz2p #undef iz2p
#undef iz3p #undef iz3p
#undef tp #undef tp
} }
 End of changes. 4 change blocks. 
12 lines changed or deleted 3 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)