/* -*-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
*
/*----- 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
*
/* --- @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) {
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;
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]);
key_iter i;
key *k;
for (key_mkiter(&i, &f); (k = key_next(&i)) != 0; )
- fingerprint(k, &kf);
+ fingerprint(k, ch, &kf);
}
return (rc);
}
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...]", "\