Merge branch 'master' of git+ssh://metalzone.distorted.org.uk/~mdw/public-git/catacomb/
[u/mdw/catacomb] / ec-prime.c
index 8f3c731..dc299fb 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: ec-prime.c,v 1.11 2004/04/08 01:36:15 mdw Exp $
+ * $Id$
  *
  * Elliptic curves over prime fields
  *
@@ -68,10 +68,8 @@ static ec *ecfind(ec_curve *c, ec *d, mp *x)
 
 static ec *ecdbl(ec_curve *c, ec *d, const ec *a)
 {
-  if (EC_ATINF(a))
+  if (EC_ATINF(a) || F_ZEROP(c->f, a->y))
     EC_SETINF(d);
-  else if (F_ZEROP(c->f, a->y))
-    EC_COPY(d, a);
   else {
     field *f = c->f;
     mp *lambda;
@@ -102,10 +100,8 @@ static ec *ecdbl(ec_curve *c, ec *d, const ec *a)
 
 static ec *ecprojdbl(ec_curve *c, ec *d, const ec *a)
 {
-  if (EC_ATINF(a))
+  if (EC_ATINF(a) || F_ZEROP(c->f, a->y))
     EC_SETINF(d);
-  else if (F_ZEROP(c->f, a->y))
-    EC_COPY(d, a);
   else {
     field *f = c->f;
     mp *p, *q, *m, *s, *dx, *dy, *dz;
@@ -146,10 +142,8 @@ static ec *ecprojdbl(ec_curve *c, ec *d, const ec *a)
 
 static ec *ecprojxdbl(ec_curve *c, ec *d, const ec *a)
 {
-  if (EC_ATINF(a))
+  if (EC_ATINF(a) || F_ZEROP(c->f, a->y))
     EC_SETINF(d);
-  else if (F_ZEROP(c->f, a->y))
-    EC_COPY(d, a);
   else {
     field *f = c->f;
     mp *p, *q, *m, *s, *dx, *dy, *dz;
@@ -384,16 +378,19 @@ extern ec_curve *ec_primeproj(field *f, mp *a, mp *b)
 }
 
 static const ec_ops ec_primeops = {
+  "prime",
   ecdestroy, ec_stdsamep, ec_idin, ec_idout, ec_idfix,
   ecfind, ecneg, ecadd, ec_stdsub, ecdbl, eccheck
 };
 
 static const ec_ops ec_primeprojops = {
+  "primeproj",
   ecdestroy, ec_stdsamep, ec_projin, ec_projout, ec_projfix,
   ecfind, ecneg, ecprojadd, ec_stdsub, ecprojdbl, ecprojcheck
 };
 
 static const ec_ops ec_primeprojxops = {
+  "primeproj",
   ecdestroy, ec_stdsamep, ec_projin, ec_projout, ec_projfix,
   ecfind, ecneg, ecprojadd, ec_stdsub, ecprojxdbl, ecprojcheck
 };