diff options
author | Werner Koch <wk@gnupg.org> | 2016-04-27 08:34:29 +0200 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 2016-04-27 08:34:29 +0200 |
commit | 87de9e19edf0311ca0342e15ef44ebe40e32861e (patch) | |
tree | 20f8f2c384040344ece6e00c64036c666dd4a843 /g10/keylist.c | |
parent | dirmngr: Add experimental command WKD_GET. (diff) | |
download | gnupg2-87de9e19edf0311ca0342e15ef44ebe40e32861e.tar.xz gnupg2-87de9e19edf0311ca0342e15ef44ebe40e32861e.zip |
gpg: Add experimental AKL method "wkd" and option --with-wkd-hash.
* g10/getkey.c (parse_auto_key_locate): Add method "wkd".
(get_pubkey_byname): Implement that method. Also rename a variable.
* g10/call-dirmngr.c (gpg_dirmngr_wkd_get): New.
* g10/keyserver.c (keyserver_import_wkd): New.
* g10/test-stubs.c (keyserver_import_wkd): Add stub.
* g10/gpgv.c (keyserver_import_wkd): Ditto.
* g10/options.h (opt): Add field 'with_wkd_hash'.
(AKL_WKD): New.
* g10/gpg.c (oWithWKDHash): New.
(opts): Add option --with-wkd-hash.
(main): Set that option.
* g10/keylist.c (list_keyblock_print): Implement that option.
--
The Web Key Directory is an experimental feature to retrieve a key via
https. It is similar to OpenPGP DANE but also uses an encryption to
reveal less information about a key lookup.
For example the URI to lookup the key for Joe.Doe@Example.ORG is:
https://example.org/.well-known/openpgpkey/
hu/example.org/iy9q119eutrkn8s1mk4r39qejnbu3n5q
(line has been wrapped for rendering purposes). The hash is a
z-Base-32 encoded SHA-1 hash of the mail address' local-part. The
address wk@gnupg.org can be used for testing.
Signed-off-by: Werner Koch <wk@gnupg.org>
Diffstat (limited to 'g10/keylist.c')
-rw-r--r-- | g10/keylist.c | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/g10/keylist.c b/g10/keylist.c index d71bf4f9f..0812d9c9b 100644 --- a/g10/keylist.c +++ b/g10/keylist.c @@ -1116,6 +1116,7 @@ list_keyblock_print (KBNODE keyblock, int secret, int fpr, if (node->pkt->pkttype == PKT_USER_ID) { PKT_user_id *uid = node->pkt->pkt.user_id; + int indent; if ((uid->is_expired || uid->is_revoked) && !(opt.list_options & LIST_SHOW_UNUSABLE_UIDS)) @@ -1133,25 +1134,46 @@ list_keyblock_print (KBNODE keyblock, int secret, int fpr, || (opt.list_options & LIST_SHOW_UID_VALIDITY)) { const char *validity; - int indent; validity = uid_trust_string_fixed (pk, uid); - indent = - (keystrlen () + (opt.legacy_list_mode? 9:11)) - - atoi (uid_trust_string_fixed (NULL, NULL)); - + indent = ((keystrlen () + (opt.legacy_list_mode? 9:11)) + - atoi (uid_trust_string_fixed (NULL, NULL))); if (indent < 0 || indent > 40) indent = 0; es_fprintf (es_stdout, "uid%*s%s ", indent, "", validity); } else - es_fprintf (es_stdout, "uid%*s", - (int) keystrlen () + (opt.legacy_list_mode? 10:12), ""); + { + indent = keystrlen () + (opt.legacy_list_mode? 10:12); + es_fprintf (es_stdout, "uid%*s", indent, ""); + } print_utf8_buffer (es_stdout, uid->name, uid->len); es_putc ('\n', es_stdout); + if (opt.with_wkd_hash) + { + char *mbox, *hash, *p; + char hashbuf[32]; + + mbox = mailbox_from_userid (uid->name); + if (mbox && (p = strchr (mbox, '@'))) + { + *p++ = 0; + gcry_md_hash_buffer (GCRY_MD_SHA1, hashbuf, + mbox, strlen (mbox)); + hash = zb32_encode (hashbuf, 8*20); + if (hash) + { + es_fprintf (es_stdout, " %*s%s@%s\n", + indent, "", hash, p); + xfree (hash); + } + } + xfree (mbox); + } + if ((opt.list_options & LIST_SHOW_PHOTOS) && uid->attribs != NULL) show_photos (uid->attribs, uid->numattribs, pk, uid); } |