aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2015-02-23 16:54:05 +0000
committerWerner Koch <[email protected]>2015-02-23 16:54:05 +0000
commitae09515b9d3aae653b62a32ea5b4a9b9e557fc52 (patch)
tree162ad1ca241f9ac092a7a9219e7a96732fd43175
parentgpg: Skip legacy keys while searching keyrings. (diff)
downloadgnupg-ae09515b9d3aae653b62a32ea5b4a9b9e557fc52.tar.gz
gnupg-ae09515b9d3aae653b62a32ea5b4a9b9e557fc52.zip
gpg: Add option to print fingerprints in ICAO spelling.
* g10/gpg.c: Add option --with-icao-spelling. * g10/options.h (struct opt): Add with_icao_spelling. * g10/keylist.c (print_icao_hexdigit): New. (print_fingerprint): Print ICAO spelling. Signed-off-by: Werner Koch <[email protected]>
-rw-r--r--doc/gpg.texi5
-rw-r--r--g10/gpg.c5
-rw-r--r--g10/keylist.c34
-rw-r--r--g10/options.h1
4 files changed, 45 insertions, 0 deletions
diff --git a/doc/gpg.texi b/doc/gpg.texi
index 77df55c6b..79fe23444 100644
--- a/doc/gpg.texi
+++ b/doc/gpg.texi
@@ -2136,6 +2136,11 @@ Same as the command @option{--fingerprint} but changes only the format
of the output and may be used together with another command.
@ifset gpgtwoone
+
+@item --with-icao-spelling
+@opindex with-icao-spelling
+Print the ICAO spelling of the fingerprint in addition to the hex digits.
+
@item --with-keygrip
@opindex with-keygrip
Include the keygrip in the key listings.
diff --git a/g10/gpg.c b/g10/gpg.c
index b8d621dce..df67d4f0d 100644
--- a/g10/gpg.c
+++ b/g10/gpg.c
@@ -176,6 +176,7 @@ enum cmd_and_opt_values
oNoAskCertLevel,
oFingerprint,
oWithFingerprint,
+ oWithICAOSpelling,
oWithKeygrip,
oWithSecret,
oAnswerYes,
@@ -692,6 +693,7 @@ static ARGPARSE_OPTS opts[] = {
ARGPARSE_s_n (oUtf8Strings, "utf8-strings", "@"),
ARGPARSE_s_n (oNoUtf8Strings, "no-utf8-strings", "@"),
ARGPARSE_s_n (oWithFingerprint, "with-fingerprint", "@"),
+ ARGPARSE_s_n (oWithICAOSpelling, "with-icao-spelling", "@"),
ARGPARSE_s_n (oWithKeygrip, "with-keygrip", "@"),
ARGPARSE_s_n (oWithSecret, "with-secret", "@"),
ARGPARSE_s_s (oDisableCipherAlgo, "disable-cipher-algo", "@"),
@@ -2421,6 +2423,9 @@ main (int argc, char **argv)
opt.with_fingerprint = 1;
opt.fingerprint++;
break;
+ case oWithICAOSpelling:
+ opt.with_icao_spelling = 1;
+ break;
case oFingerprint:
opt.fingerprint++;
fpr_maybe_cmd = 1;
diff --git a/g10/keylist.c b/g10/keylist.c
index 5fd9eb87e..da933caa1 100644
--- a/g10/keylist.c
+++ b/g10/keylist.c
@@ -1580,6 +1580,20 @@ list_keyblock (KBNODE keyblock, int secret, int has_secret, int fpr,
es_fflush (es_stdout);
}
+
+/* Print an hex digit in ICAO spelling. */
+static void
+print_icao_hexdigit (estream_t fp, int c)
+{
+ static const char *list[16] = {
+ "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven",
+ "Eight", "Niner", "Alfa", "Bravo", "Charlie", "Delta", "Echo", "Foxtrot"
+ };
+
+ tty_fprintf (fp, "%s", list[c&15]);
+}
+
+
/*
* Function to print the finperprint.
* mode 0: as used in key listings, opt.with_colons is honored
@@ -1675,6 +1689,26 @@ print_fingerprint (estream_t override_fp, PKT_public_key *pk, int mode)
}
}
tty_fprintf (fp, "\n");
+ if (!opt.with_colons && opt.with_icao_spelling)
+ {
+ p = array;
+ tty_fprintf (fp, "%*s\"", (int)strlen(text)+1, "");
+ for (i = 0; i < n; i++, p++)
+ {
+ if (!i)
+ ;
+ else if (!(i%4))
+ tty_fprintf (fp, "\n%*s ", (int)strlen(text)+1, "");
+ else if (!(i%2))
+ tty_fprintf (fp, " ");
+ else
+ tty_fprintf (fp, " ");
+ print_icao_hexdigit (fp, *p >> 4);
+ tty_fprintf (fp, " ");
+ print_icao_hexdigit (fp, *p & 15);
+ }
+ tty_fprintf (fp, "\"\n");
+ }
}
/* Print the serial number of an OpenPGP card if available. */
diff --git a/g10/options.h b/g10/options.h
index 7b9f36635..a09d3d5d8 100644
--- a/g10/options.h
+++ b/g10/options.h
@@ -67,6 +67,7 @@ struct
int check_sigs; /* check key signatures */
int with_colons;
int with_key_data;
+ int with_icao_spelling; /* Print ICAO spelling with fingerprints. */
int with_fingerprint; /* Option --with-fingerprint active. */
int with_keygrip; /* Option --with-keygrip active. */
int with_secret; /* Option --with-secret active. */