summaryrefslogtreecommitdiff
path: root/ecc-j-to-a.c
diff options
context:
space:
mode:
authorNiels Möller <nisse@lysator.liu.se>2013-05-17 10:09:17 +0200
committerNiels Möller <nisse@lysator.liu.se>2013-05-17 10:09:17 +0200
commit23f108fb3e09a76e923e97e08f560c2f2c91ff6e (patch)
treec9c950188595be0605b2a16b059eb59d27a9f690 /ecc-j-to-a.c
parentf6360a087252e637e06ec9ccdccf5c5462b95fff (diff)
downloadnettle-23f108fb3e09a76e923e97e08f560c2f2c91ff6e.tar.gz
Fixed ECC bug with overlapping arguments to mpn_mul_n.
Diffstat (limited to 'ecc-j-to-a.c')
-rw-r--r--ecc-j-to-a.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/ecc-j-to-a.c b/ecc-j-to-a.c
index df8b8764..26c1a03a 100644
--- a/ecc-j-to-a.c
+++ b/ecc-j-to-a.c
@@ -46,6 +46,7 @@ ecc_j_to_a (const struct ecc_curve *ecc,
#define up (scratch + ecc->size)
#define iz2p (scratch + ecc->size)
#define iz3p (scratch + 2*ecc->size)
+#define izBp (scratch + 3*ecc->size)
#define tp scratch
mp_limb_t cy;
@@ -72,11 +73,11 @@ ecc_j_to_a (const struct ecc_curve *ecc,
if (flags & 1)
{
/* Divide this common factor by B */
- mpn_copyi (iz3p, izp, ecc->size);
- mpn_zero (iz3p + ecc->size, ecc->size);
- ecc->redc (ecc, iz3p);
-
- ecc_modp_mul (ecc, iz2p, izp, iz3p);
+ mpn_copyi (izBp, izp, ecc->size);
+ mpn_zero (izBp + ecc->size, ecc->size);
+ ecc->redc (ecc, izBp);
+
+ ecc_modp_mul (ecc, iz2p, izp, izBp);
}
else
ecc_modp_sqr (ecc, iz2p, izp);