/*----- 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
* 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;
for (pe = ptab; pe->name; pe++) {
if (qd_enum(qd, pe->name) >= 0) {
- getinfo(dp, pe->data);
+ dh_infofromdata(dp, pe->data);
goto found;
}
}
for (be = bintab; be->name; be++) {
if (qd_enum(qd, be->name) >= 0) {
- getinfo(gb, be->data);
+ dh_infofromdata(gb, be->data);
goto found;
}
}
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