gpg: Allow use of a standard space separated fingerprint.

* common/userids.c (classify_user_id): Check for space separated GPG
fingerprint.
This commit is contained in:
Werner Koch 2012-01-06 13:33:10 +01:00
parent 5988c8bfb7
commit 372fb4fc06
3 changed files with 48 additions and 4 deletions

3
NEWS
View File

@ -1,6 +1,9 @@
Noteworthy changes in version 2.1.0beta4 (unreleased) 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) Noteworthy changes in version 2.1.0beta3 (2011-12-20)
----------------------------------------------------- -----------------------------------------------------

View File

@ -308,6 +308,46 @@ classify_user_id (const char *name, KEYDB_SEARCH_DESC *desc, int openpgp_hack)
if (i == 20) if (i == 20)
mode = KEYDB_SEARCH_MODE_FPR20; 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. */ if (!mode) /* Default to substring search. */
{ {
desc->exact = 0; desc->exact = 0;

View File

@ -6,7 +6,7 @@ are only valid for @command{gpg} others are only good for
@itemize @bullet @itemize @bullet
@item By key Id. @item By key Id.
This format is deduced from the length of the string and its content or 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 @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 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 @end cartouche
@noindent @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 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. @item By exact match on OpenPGP user ID.
This is denoted by a leading equal sign. It does not make sense for This is denoted by a leading equal sign. It does not make sense for
X.509 certificates. X.509 certificates.
@cartouche @cartouche
@example @example
=Heinrich Heine <heinrichh@@uni-duesseldorf.de> =Heinrich Heine <heinrichh@@uni-duesseldorf.de>
@end example @end example
@end cartouche @end cartouche