X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/432c4e184d44704511a5991b80224a87cb1d4613..02d7884df1f33c9c7dc3a14c4b1a5f520ebe090a:/field-parse.c diff --git a/field-parse.c b/field-parse.c index 0a09e57..7e83fc0 100644 --- a/field-parse.c +++ b/field-parse.c @@ -1,6 +1,6 @@ /* -*-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 * @@ -30,6 +30,14 @@ /*----- 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. * @@ -56,30 +64,39 @@ 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); }