X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/4e6e01880ca7595d84ae87c169756a2c308a9946..981bf1273304e1bc6604ea22b6ab4bd9ae07974b:/keyutil.c diff --git a/keyutil.c b/keyutil.c index 025c8f2..2df4368 100644 --- a/keyutil.c +++ b/keyutil.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: keyutil.c,v 1.22 2004/04/03 15:45:06 mdw Exp $ + * $Id: keyutil.c,v 1.23 2004/04/08 01:02:49 mdw Exp $ * * Simple key manager program * @@ -30,6 +30,9 @@ /*----- Revision history --------------------------------------------------* * * $Log: keyutil.c,v $ + * Revision 1.23 2004/04/08 01:02:49 mdw + * key-binary.c + * * Revision 1.22 2004/04/03 15:45:06 mdw * Oops. Fix formatting. :-S * @@ -1575,42 +1578,42 @@ static int cmd_setattr(int argc, char *argv[]) /* --- @cmd_finger@ --- */ -static void fingerprint(key *k, const key_filter *kf) +static void fingerprint(key *k, const gchash *ch, const key_filter *kf) { - rmd160_ctx r; - octet hash[RMD160_HASHSZ]; + ghash *h; dstr d = DSTR_INIT; - int i; + const octet *p; + size_t i; - if (!key_encode(&k->k, &d, kf)) - return; - rmd160_init(&r); - rmd160_hash(&r, d.buf, d.len); - rmd160_done(&r, hash); - - DRESET(&d); - key_fulltag(k, &d); - for (i = 0; i < sizeof(hash); i++) { - if (i && i % 4 == 0) - putchar('-'); - printf("%02x", hash[i]); + h = GH_INIT(ch); + if (key_fingerprint(k, h, kf)) { + p = GH_DONE(h, 0); + key_fulltag(k, &d); + for (i = 0; i < ch->hashsz; i++) { + if (i && i % 4 == 0) + putchar('-'); + printf("%02x", p[i]); + } + printf(" %s\n", d.buf); } - printf(" %s\n", d.buf); dstr_destroy(&d); + GH_DESTROY(h); } static int cmd_finger(int argc, char *argv[]) { key_file f; int rc = 0; + const gchash *ch = &rmd160; key_filter kf = { KF_NONSECRET, KF_NONSECRET }; for (;;) { static struct option opt[] = { { "filter", OPTF_ARGREQ, 0, 'f' }, + { "algorithm", OPTF_ARGREQ, 0, 'a' }, { 0, 0, 0, 0 } }; - int i = mdwopt(argc, argv, "+f:", opt, 0, 0, 0); + int i = mdwopt(argc, argv, "+f:a:", opt, 0, 0, 0); if (i < 0) break; switch (i) { @@ -1620,6 +1623,10 @@ static int cmd_finger(int argc, char *argv[]) if (err || *p) die(EXIT_FAILURE, "bad filter string `%s'", optarg); } break; + case 'a': + if ((ch = ghash_byname(optarg)) == 0) + die(EXIT_FAILURE, "unknown hash algorithm `%s'", optarg); + break; default: rc = 1; break; @@ -1637,7 +1644,7 @@ static int cmd_finger(int argc, char *argv[]) for (i = 0; i < argc; i++) { key *k = key_bytag(&f, argv[i]); if (k) - fingerprint(k, &kf); + fingerprint(k, ch, &kf); else { rc = 1; moan("key `%s' not found", argv[i]); @@ -1647,7 +1654,7 @@ static int cmd_finger(int argc, char *argv[]) key_iter i; key *k; for (key_mkiter(&i, &f); (k = key_next(&i)) != 0; ) - fingerprint(k, &kf); + fingerprint(k, ch, &kf); } return (rc); } @@ -1911,6 +1918,7 @@ Options:\n\ Options:\n\ \n\ -f, --filter=FILT Only hash key components matching FILT.\n\ +-a, --algorithm=HASH Use the named HASH algorithm.\n\ " }, { "tidy", cmd_tidy, "tidy" }, { "extract", cmd_extract, "extract [-f filter] file [tag...]", "\