diff options
author | Werner Koch <[email protected]> | 2012-01-06 12:33:10 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2012-01-06 12:36:47 +0000 |
commit | 372fb4fc0661014ccd9275c89e6da2208f87155f (patch) | |
tree | c267b65ff61151163931f1d38a9b31fb6f45b538 | |
parent | Merge ccid_driver_improvement branch. (diff) | |
download | gnupg-372fb4fc0661014ccd9275c89e6da2208f87155f.tar.gz gnupg-372fb4fc0661014ccd9275c89e6da2208f87155f.zip |
gpg: Allow use of a standard space separated fingerprint.
* common/userids.c (classify_user_id): Check for space separated GPG
fingerprint.
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | common/userids.c | 40 | ||||
-rw-r--r-- | doc/specify-user-id.texi | 9 |
3 files changed, 48 insertions, 4 deletions
@@ -1,6 +1,9 @@ Noteworthy changes in version 2.1.0beta4 (unreleased) ----------------------------------------------------- + * GPG now accepts a space separated fingerprint as a user ID. This + allows to copy and paste the fingerprint from the key listing. + Noteworthy changes in version 2.1.0beta3 (2011-12-20) ----------------------------------------------------- diff --git a/common/userids.c b/common/userids.c index 8c89c3284..2b134451c 100644 --- a/common/userids.c +++ b/common/userids.c @@ -308,6 +308,46 @@ classify_user_id (const char *name, KEYDB_SEARCH_DESC *desc, int openpgp_hack) if (i == 20) mode = KEYDB_SEARCH_MODE_FPR20; } + if (!mode) + { + /* Still not found. Now check for a space separated + OpenPGP v4 fingerprint like: + 8061 5870 F5BA D690 3336 86D0 F2AD 85AC 1E42 B367 + */ + hexlength = strspn (s, " 0123456789abcdefABCDEF"); + if (s[hexlength] && s[hexlength] != ' ') + hexlength = 0; /* Followed by non-space. */ + while (hexlength && s[hexlength-1] == ' ') + hexlength--; /* Trim trailing spaces. */ + if (hexlength == 50 && (!s[hexlength] || s[hexlength] == ' ')) + { + int i, c; + + for (i=0; i < 20; i++) + { + if (i && !(i % 2)) + { + if (*s != ' ') + break; + s++; + if (i == 10) + { + if (*s != ' ') + break; + s++; + } + } + + c = hextobyte(s); + if (c == -1) + break; + desc->u.fpr[i] = c; + s += 2; + } + if (i == 20) + mode = KEYDB_SEARCH_MODE_FPR20; + } + } if (!mode) /* Default to substring search. */ { desc->exact = 0; diff --git a/doc/specify-user-id.texi b/doc/specify-user-id.texi index 7d23ed86f..2eee0245a 100644 --- a/doc/specify-user-id.texi +++ b/doc/specify-user-id.texi @@ -6,7 +6,7 @@ are only valid for @command{gpg} others are only good for @itemize @bullet -@item By key Id. +@item By key Id. This format is deduced from the length of the string and its content or @code{0x} prefix. The key Id of an X.509 certificate are the low 64 bits of its SHA-1 fingerprint. The use of key Ids is just a shortcut, for @@ -59,16 +59,17 @@ avoids any ambiguities in case that there are duplicated key IDs. @end cartouche @noindent -(@command{gpgsm} also accepts colons between each pair of hexadecimal +@command{gpgsm} also accepts colons between each pair of hexadecimal digits because this is the de-facto standard on how to present X.509 -fingerprints.) +fingerprints. @command{gpg} also allows the use of the space +separated SHA-1 fingerprint as printed by the key listing commands. @item By exact match on OpenPGP user ID. This is denoted by a leading equal sign. It does not make sense for X.509 certificates. @cartouche -@example +@example =Heinrich Heine <heinrichh@@uni-duesseldorf.de> @end example @end cartouche |