/* -*-c-*-
*
- * $Id: field-parse.c,v 1.1 2004/03/27 17:54:11 mdw Exp $
+ * $Id: field-parse.c,v 1.3 2004/04/03 03:32:05 mdw Exp $
*
* Parse field descriptions
*
/*----- Revision history --------------------------------------------------*
*
* $Log: field-parse.c,v $
+ * Revision 1.3 2004/04/03 03:32:05 mdw
+ * General robustification.
+ *
+ * Revision 1.2 2004/04/01 21:28:41 mdw
+ * Normal basis support (translates to poly basis internally). Rewrite
+ * EC and prime group table generators in awk, so that they can reuse data
+ * for repeated constants.
+ *
* Revision 1.1 2004/03/27 17:54:11 mdw
* Standard curves and curve checking.
*
field *field_parse(qd_parse *qd)
{
- field *f;
- mp *m = MP_NEW;
+ field *f = 0;
+ mp *m = MP_NEW, *b = MP_NEW;
- switch (qd_enum(qd, "prime,niceprime,binpoly")) {
+ switch (qd_enum(qd, "prime,niceprime,binpoly,binnorm")) {
case 0:
qd_delim(qd, ':');
- if ((m = qd_getmp(qd)) == 0) return (0);
+ if ((m = qd_getmp(qd)) == 0) goto done;
f = field_prime(m);
break;
case 1:
qd_delim(qd, ':');
- if ((m = qd_getmp(qd)) == 0) return (0);
+ if ((m = qd_getmp(qd)) == 0) goto done;
f = field_niceprime(m);
break;
case 2:
qd_delim(qd, ':');
- if ((m = qd_getmp(qd)) == 0) return (0);
+ if ((m = qd_getmp(qd)) == 0) goto done;
f = field_binpoly(m);
break;
- default:
- f = 0;
+ case 3:
+ qd_delim(qd, ':');
+ if ((m = qd_getmp(qd)) == 0) goto done;
+ qd_delim(qd, ',');
+ if ((b = qd_getmp(qd)) == 0) goto done;
+ f = field_binnorm(m, b);
break;
+ default:
+ goto done;
}
+ if (!f) qd->e = "bad field parameters";
+done:
mp_drop(m);
+ mp_drop(b);
return (f);
}