- /* --- Check %$p$% is an odd prime --- */
-
- if (!pgen_primep(f->m, gr)) return ("p not prime");
-
- /* --- Check %$a$%, %$b$%, %$G_x$% and %$G_y$% are in %$[0, p)$% --- */
-
- if (!primeeltp(c->a, f)) return ("a out of range");
- if (!primeeltp(c->b, f)) return ("b out of range");
- if (!primeeltp(ei->g.x, f)) return ("G_x out of range");
- if (!primeeltp(ei->g.x, f)) return ("G_y out of range");
-
- /* --- Check %$4 a^3 + 27 b^2 \not\equiv 0 \pmod{p}$% --- */
-
- x = F_SQR(f, MP_NEW, c->a);
- x = F_MUL(f, x, x, c->a);
- x = F_QDL(f, x, x);
- y = F_SQR(f, MP_NEW, c->b);
- y = F_TPL(f, y, y);
- y = F_TPL(f, y, y);
- y = F_TPL(f, y, y);
- x = F_ADD(f, x, x, y);
- rc = F_ZEROP(f, x);
- MP_DROP(x);
- MP_DROP(y);
- if (rc) return ("not an elliptic curve");
-