+++ /dev/null
-#! /usr/bin/awk -f
-#
-# $Id: ec-gentab.awk,v 1.1 2004/04/01 21:28:41 mdw Exp $
-
-function banner(name, s, i)
-{
- s = "/*----- " name " ";
- while (length(s) < 75) s = s "-";
- return (s "*/");
-}
-
-function fix(name)
-{
- gsub(/[^0-9A-Za-z_]+/, "_", name);
- return (name);
-}
-
-BEGIN {
- print "/* -*-c-*-";
- print " *";
- print " * Table of elliptic curves [generated]";
- print " */";
- print "";
- print "#include \"ectab.h\"";
- print "";
- print "#define N(x) (sizeof(x)/sizeof(*x))";
- print "#define MP(x) { x, x + N(x), N(x), 0, MP_CONST, 0 }";
- print "#define NOMP { 0, 0, 0, 0, 0 }";
- print "";
- print banner("Curve data");
- print "";
-
- d_i = 0;
- name = "";
-}
-
-function putmp(x, d)
-{
- if (!(x in data)) {
- print "curve " name ": missing " x >"/dev/stderr";
- exit 1;
- }
- d = data[x];
- if (!(d in cache)) {
- n = "c_" fix(name) "_" x;
- print "static mpw " n "[] = {";
- system("./mpdump " d);
- print "};";
- print "";
- cache[d] = n;
- }
- mp[x] = cache[d];
-}
-
-function flush()
-{
- if (name == "") return;
- print "/* --- Curve " name " --- */";
- delete mp;
- print "";
- putmp("p");
- if (type == "binnorm") putmp("beta");
- putmp("a");
- putmp("b");
- putmp("r");
- putmp("h");
- putmp("gx");
- putmp("gy");
- print "static ecdata c_" fix(name) " = {";
- print " FTAG_" toupper(type) ",";
- print " MP(" mp["p"] "),"
- if (type == "binnorm")
- print " MP(" mp["beta"] "),";
- else
- print " NOMP,";
- print " MP(" mp["a"] "),"
- print " MP(" mp["b"] "),"
- print " MP(" mp["r"] "),"
- print " MP(" mp["h"] "),"
- print " MP(" mp["gx"] "),"
- print " MP(" mp["gy"] ")"
- print "};";
- print "";
- dname[d_i++] = name;
- d[name] = name;
- r[name] = "c_" fix(name);
- name = "";
-}
-
-/^[ \t]*(#|$)/ { next; }
-
-$1 == "alias" { flush(); dname[d_i++] = $2; d[$2] = $3; next; }
-
-$1 == "curve" { flush(); delete data; name = $2; type = $3; next; }
-
-{ data[$1] = $2; next; }
-
-END {
- flush();
- print banner("Main table");
- print "";
- print "const ecentry ectab[] = {";
- for (i = 0; i < d_i; i++) {
- name = dname[i];
- rname = d[name];
- if (!rname in r) {
- print "curve " rname " not found (alias from " name ")" >"/dev/stderr";
- exit 1;
- }
- print " { \"" name "\", &" r[rname] " },";
- }
- print " { 0, 0 }";
- print "};"
- print "";
- print banner("That's all, folks");
-}