X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/34e4f738bcba58e6d8c4cabbb0b3232a65b42a9d..a9fcea0e5ef17bab8eaca2236016e109ab62488e:/keyutil.c diff --git a/keyutil.c b/keyutil.c index 1619707..025c8f2 100644 --- a/keyutil.c +++ b/keyutil.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: keyutil.c,v 1.18 2004/04/01 12:50:09 mdw Exp $ + * $Id: keyutil.c,v 1.22 2004/04/03 15:45:06 mdw Exp $ * * Simple key manager program * @@ -30,6 +30,18 @@ /*----- Revision history --------------------------------------------------* * * $Log: keyutil.c,v $ + * Revision 1.22 2004/04/03 15:45:06 mdw + * Oops. Fix formatting. :-S + * + * Revision 1.21 2004/04/03 15:15:19 mdw + * Fix stupid error in previous rashly-committed version. + * + * Revision 1.20 2004/04/03 15:14:28 mdw + * Handle points at infinity properly in listings. + * + * Revision 1.19 2004/04/03 03:31:01 mdw + * Allow explicit group parameters for DH groups. + * * Revision 1.18 2004/04/01 12:50:09 mdw * Add cyclic group abstraction, with test code. Separate off exponentation * functions for better static linking. Fix a buttload of bugs on the way. @@ -130,6 +142,7 @@ #include "mprand.h" #include "mptext.h" #include "pgen.h" +#include "ptab.h" #include "rsa.h" #include "sha-mgf.h" @@ -625,6 +638,22 @@ static void alg_dhparam(keyopts *k) dh_param dp; int rc; + if (k->curve) { + qd_parse qd; + + if (strcmp(k->curve, "list") == 0) { + const pentry *pe; + printf("Built-in prime groups:\n"); + for (pe = ptab; pe->name; pe++) + printf(" %s\n", pe->name); + exit(0); + } + qd.p = k->curve; + if (dh_parse(&qd, &dp)) + die(EXIT_FAILURE, "error in group spec: %s", qd.e); + goto done; + } + if (!k->bits) k->bits = 1024; @@ -658,6 +687,7 @@ static void alg_dhparam(keyopts *k) if (rc) die(EXIT_FAILURE, "Diffie-Hellman parameter generation failed"); + done: key_structure(kd); mpkey(kd, "p", dp.p, KCAT_SHARE); mpkey(kd, "q", dp.q, KCAT_SHARE); @@ -751,6 +781,13 @@ static void alg_ecparam(keyopts *k) /* --- Decide on a curve --- */ if (!k->bits) k->bits = 256; + if (k->curve && strcmp(k->curve, "list") == 0) { + const ecentry *ee; + printf("Built-in elliptic curves:\n"); + for (ee = ectab; ee->name; ee++) + printf(" %s\n", ee->name); + exit(0); + } if (!k->curve) { if (k->bits <= 56) k->curve = "secp112r1"; else if (k->bits <= 64) k->curve = "secp128r1"; @@ -880,7 +917,8 @@ static int cmd_add(int argc, char *argv[]) { "subgroup", 0, 0, 'S' }, { 0, 0, 0, 0 } }; - int i = mdwopt(argc, argv, "+a:b:B:p:e:c:t:R:C:A:s:n:lqrLS", opt, 0, 0, 0); + int i = mdwopt(argc, argv, "+a:b:B:p:e:c:t:R:C:A:s:n:lqrLS", + opt, 0, 0, 0); if (i < 0) break; @@ -961,13 +999,6 @@ static int cmd_add(int argc, char *argv[]) /* --- Elliptic curve parameters --- */ case 'C': - if (strcmp(optarg, "list") == 0) { - const ecentry *ee; - printf("Built-in elliptic curves:\n"); - for (ee = ectab; ee->name; ee++) - printf(" %s\n", ee->name); - exit(0); - } k.curve = optarg; break; @@ -1250,9 +1281,13 @@ static void showkeydata(key_data *k, int ind, listopts *o, dstr *d) /* --- Elliptic curve points --- */ case KENC_EC: - fputs(" 0x", stdout); mp_writefile(k->u.e.x, stdout, 16); - fputs(", 0x", stdout); mp_writefile(k->u.e.y, stdout, 16); - putchar('\n'); + if (EC_ATINF(&k->u.e)) + fputs(" inf\n", stdout); + else { + fputs(" 0x", stdout); mp_writefile(k->u.e.x, stdout, 16); + fputs(", 0x", stdout); mp_writefile(k->u.e.y, stdout, 16); + putchar('\n'); + } break; /* --- Structured keys --- *