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;
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;
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;