/* -*-c-*-
*
- * $Id: field-parse.c,v 1.1 2004/03/27 17:54:11 mdw Exp $
+ * $Id: field-parse.c,v 1.4 2004/04/08 01:36:15 mdw Exp $
*
* Parse field descriptions
*
* MA 02111-1307, USA.
*/
-/*----- Revision history --------------------------------------------------*
- *
- * $Log: field-parse.c,v $
- * Revision 1.1 2004/03/27 17:54:11 mdw
- * Standard curves and curve checking.
- *
- */
-
/*----- Header files ------------------------------------------------------*/
#include "field.h"
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);
}