Export the code to transform DH or EC table entries into usable group specs.
authormdw <mdw>
Sat, 5 Mar 2005 16:41:48 +0000 (16:41 +0000)
committermdw <mdw>
Sat, 5 Mar 2005 16:41:48 +0000 (16:41 +0000)
dh-param.c
dh.h
ec.h

index b02e84b..fcce31f 100644 (file)
 
 /*----- Main code ---------------------------------------------------------*/
 
+/* ---- @dh_infofromdata@ --- *
+ *
+ * Arguments:  @dh_param *dp@ = parameters to fill in
+ *             @pdata *pd@ = packed data structure
+ *
+ * Returns:    ---
+ *
+ * Use:                Fills in a parameters structure from a packed data block.
+ */
+
+void dh_infofromdata(dh_param *dp, pdata *pd)
+  { dp->p = &pd->p; dp->q = &pd->q; dp->g = &pd->g; }
+
 /* --- @dh_parse@, @dhbin_parse@ --- *
  *
  * Arguments:  @qd_parse *qd@ = parser context
@@ -47,9 +60,6 @@
  *             separated by commas.
  */
 
-static void getinfo(dh_param *dp, pdata *pd)
-  { dp->p = &pd->p; dp->q = &pd->q; dp->g = &pd->g; }
-
 static int parse(qd_parse *qd, gprime_param *dp)
 {
   mp *p = MP_NEW, *q = MP_NEW, *g = MP_NEW;
@@ -70,7 +80,7 @@ int dh_parse(qd_parse *qd, dh_param *dp)
 
   for (pe = ptab; pe->name; pe++) {
     if (qd_enum(qd, pe->name) >= 0) {
-      getinfo(dp, pe->data);
+      dh_infofromdata(dp, pe->data);
       goto found;
     }
   }
@@ -86,7 +96,7 @@ int dhbin_parse(qd_parse *qd, gbin_param *gb)
 
   for (be = bintab; be->name; be++) {
     if (qd_enum(qd, be->name) >= 0) {
-      getinfo(gb, be->data);
+      dh_infofromdata(gb, be->data);
       goto found;
     }
   }
@@ -107,53 +117,54 @@ int main(int argc, char *argv[])
   const pentry *pe;
   const binentry *be;
   const char *e;
-  int ok = 1;
+  int ok = 1, aok = 1;
   grand *gr;
 
   gr = fibrand_create(0);
-  fputs("checking standard prime groups...\n", stdout);
+  fputs("checking standard prime groups:", stdout);
+  fflush(stdout);
   for (pe = ptab; pe->name; pe++) {
     dh_param dp;
     group *g;
-    getinfo(&dp, pe->data);
-    printf("  %s: ", pe->name);
+    dh_infofromdata(&dp, pe->data);
     g = group_prime(&dp);
     if (mp_bits(dp.q) > 2048 &&
        (!argv[1] || strcmp(argv[1], "keen") != 0)) {
-      fputs("skipping\n", stdout);
+      printf(" [%s skipped]", pe->name);
+      fflush(stdout);
       continue;
     }
-    fflush(stdout);
     e = G_CHECK(g, gr);
     G_DESTROYGROUP(g);
     dh_paramfree(&dp);
     if (e) {
-      printf("fails: %s\n", e);
-      ok = 0;
+      printf(" [%s failed: %s]", pe->name, e);
+      ok = aok = 0;
     } else
-      fputs("ok\n", stdout);
+      printf(" %s", pe->name);
+    fflush(stdout);
   }
-  fputs("checking standard binary groups...\n", stdout);
+  fputs(ok ? " ok\n" : " failed\n", stdout);
+  ok = 1;
+  fputs("checking standard binary groups:", stdout);
   for (be = bintab; be->name; be++) {
     gbin_param gb;
     group *g;
-    getinfo(&gb, be->data);
-    printf("  %s: ", be->name);
+    dh_infofromdata(&gb, be->data);
     g = group_binary(&gb);
-    fflush(stdout);
     e = G_CHECK(g, gr);
     G_DESTROYGROUP(g);
     dh_paramfree(&gb);
     if (e) {
-      printf("fails: %s\n", e);
-      ok = 0;
+      printf(" [%s failed: %s]", be->name, e);
+      ok = aok = 0;
     } else
-      fputs("ok\n", stdout);
+      printf(" %s", be->name);
+    fflush(stdout);
   }
+  fputs(ok ? " ok\n" : " failed\n", stdout);
   gr->ops->destroy(gr);
-  if (ok)
-    fputs("all ok\n", stdout);
-  return (!ok);
+  return (!aok);
 }
 
 #endif
diff --git a/dh.h b/dh.h
index 8288740..0ddc342 100644 (file)
--- a/dh.h
+++ b/dh.h
@@ -182,6 +182,19 @@ extern int dh_limlee(dh_param */*dp*/, unsigned /*ql*/, unsigned /*pl*/,
 extern int dh_checkparam(keycheck */*kc*/, const dh_param */*dp*/,
                         mp **/*v*/, size_t /*n*/);
 
+/* ---- @dh_infofromdata@ --- *
+ *
+ * Arguments:  @dh_param *dp@ = parameters to fill in
+ *             @pdata *pd@ = packed data structure
+ *
+ * Returns:    ---
+ *
+ * Use:                Fills in a parameters structure from a packed data block.
+ */
+
+struct pdata;
+extern void dh_infofromdata(dh_param */*dp*/, struct pdata */*pd*/);
+
 /* --- @dh_parse@, @dhbin_parse@ --- *
  *
  * Arguments:  @qd_parse *qd@ = parser context
diff --git a/ec.h b/ec.h
index 92acc41..f46a985 100644 (file)
--- a/ec.h
+++ b/ec.h
@@ -549,6 +549,20 @@ extern ec *ec_ptparse(qd_parse */*qd*/, ec */*p*/);
 
 extern int ec_infoparse(qd_parse */*qd*/, ec_info */*ei*/);
 
+/* --- @ec_infofromdata@ --- *
+ *
+ * Arguments:  @ec_info *ei@ = where to write the information
+ *             @ecdata *ed@ = raw data
+ *
+ * Returns:    ---
+ *
+ * Use:                Loads elliptic curve information about one of the standard
+ *             curves.
+ */
+
+struct ecdata;
+extern void ec_infofromdata(ec_info */*ei*/, struct ecdata */*ed*/);
+
 /* --- @ec_getinfo@ --- *
  *
  * Arguments:  @ec_info *ei@ = where to write the information