aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2012-01-06 12:33:10 +0000
committerWerner Koch <[email protected]>2012-01-06 12:36:47 +0000
commit372fb4fc0661014ccd9275c89e6da2208f87155f (patch)
treec267b65ff61151163931f1d38a9b31fb6f45b538
parentMerge ccid_driver_improvement branch. (diff)
downloadgnupg-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--NEWS3
-rw-r--r--common/userids.c40
-rw-r--r--doc/specify-user-id.texi9
3 files changed, 48 insertions, 4 deletions
diff --git a/NEWS b/NEWS
index 65297dd37..7d1ae47ac 100644
--- a/NEWS
+++ b/NEWS
@@ -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