X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/b817bfc642225b8c3c0b6a7e42d1fb949b61a606..298182ad446aaced14dea7ed0e7c968946787288:/ec-prime.c diff --git a/ec-prime.c b/ec-prime.c index 8f3c731..dc299fb 100644 --- a/ec-prime.c +++ b/ec-prime.c @@ -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 };