diff options
Diffstat (limited to '')
-rw-r--r-- | sm/ChangeLog | 8 | ||||
-rw-r--r-- | sm/certdump.c | 4 | ||||
-rw-r--r-- | sm/fingerprint.c | 13 | ||||
-rw-r--r-- | sm/gpgsm.h | 1 | ||||
-rw-r--r-- | sm/keylist.c | 12 | ||||
-rw-r--r-- | sm/verify.c | 30 |
6 files changed, 53 insertions, 15 deletions
diff --git a/sm/ChangeLog b/sm/ChangeLog index cf05842f8..208e618ec 100644 --- a/sm/ChangeLog +++ b/sm/ChangeLog @@ -1,3 +1,11 @@ +2002-08-10 Werner Koch <[email protected]> + + * keylist.c (list_cert_colon): Print the short fingerprint in the + key ID field. + * fingerprint.c (gpgsm_get_short_fingerprint): New. + * verify.c (gpgsm_verify): Print more verbose info for a good + signature. + 2002-08-09 Werner Koch <[email protected]> * decrypt.c (prepare_decryption): Hack to detected already diff --git a/sm/certdump.c b/sm/certdump.c index dfd4e330e..9afb1154d 100644 --- a/sm/certdump.c +++ b/sm/certdump.c @@ -116,9 +116,9 @@ gpgsm_dump_time (time_t t) { if (!t) - log_printf ("none"); + log_printf (_("[none]")); else if ( t == (time_t)(-1) ) - log_printf ("error"); + log_printf (_("[error]")); else { struct tm *tp; diff --git a/sm/fingerprint.c b/sm/fingerprint.c index d8b6ec4a3..6a84966db 100644 --- a/sm/fingerprint.c +++ b/sm/fingerprint.c @@ -102,7 +102,7 @@ gpgsm_get_fingerprint_string (KsbaCert cert, int algo) return buf; } -/* Return an allocated buffer with the formatted fungerprint as one +/* Return an allocated buffer with the formatted fingerprint as one large hexnumber */ char * gpgsm_get_fingerprint_hexstring (KsbaCert cert, int algo) @@ -124,6 +124,17 @@ gpgsm_get_fingerprint_hexstring (KsbaCert cert, int algo) return buf; } +/* Return a certificate ID. These are the last 4 bytes of the SHA-1 + fingerprint. */ +unsigned long +gpgsm_get_short_fingerprint (KsbaCert cert) +{ + unsigned char digest[20]; + + gpgsm_get_fingerprint (cert, GCRY_MD_SHA1, digest, NULL); + return ((digest[16]<<24)|(digest[17]<<16)|(digest[18]<< 8)|digest[19]); +} + /* Return the so called KEYGRIP which is the SHA-1 hash of the public key parameters expressed as an canoncial encoded S-Exp. array must diff --git a/sm/gpgsm.h b/sm/gpgsm.h index 3e5205980..702b343c0 100644 --- a/sm/gpgsm.h +++ b/sm/gpgsm.h @@ -149,6 +149,7 @@ void gpgsm_status2 (CTRL ctrl, int no, ...); char *gpgsm_get_fingerprint (KsbaCert cert, int algo, char *array, int *r_len); char *gpgsm_get_fingerprint_string (KsbaCert cert, int algo); char *gpgsm_get_fingerprint_hexstring (KsbaCert cert, int algo); +unsigned long gpgsm_get_short_fingerprint (KsbaCert cert); char *gpgsm_get_keygrip (KsbaCert cert, char *array); char *gpgsm_get_keygrip_hexstring (KsbaCert cert); char *gpgsm_get_certid (KsbaCert cert); diff --git a/sm/keylist.c b/sm/keylist.c index 5431e1b00..e73eb1f3a 100644 --- a/sm/keylist.c +++ b/sm/keylist.c @@ -151,6 +151,7 @@ list_cert_colon (KsbaCert cert, FILE *fp, int have_secret) int idx, trustletter = 0; char *p; KsbaSexp sexp; + char *fpr; fputs (have_secret? "crs:":"crt:", fp); trustletter = 0; @@ -168,9 +169,11 @@ list_cert_colon (KsbaCert cert, FILE *fp, int have_secret) putc (trustletter, fp); } - fprintf (fp, ":%u:%d::", + fpr = gpgsm_get_fingerprint_hexstring (cert, GCRY_MD_SHA1); + fprintf (fp, ":%u:%d:%s:", /*keylen_of_cert (cert)*/1024, - /* pubkey_algo_of_cert (cert)*/1); + /* pubkey_algo_of_cert (cert)*/1, + fpr+24); /* we assume --fixed-list-mode for gpgsm */ print_time ( ksba_cert_get_validity (cert, 0), fp); @@ -212,9 +215,8 @@ list_cert_colon (KsbaCert cert, FILE *fp, int have_secret) putc ('\n', fp); /* FPR record */ - p = gpgsm_get_fingerprint_hexstring (cert, GCRY_MD_SHA1); - fprintf (fp, "fpr:::::::::%s:::", p); - xfree (p); + fprintf (fp, "fpr:::::::::%s:::", fpr); + xfree (fpr); fpr = NULL; /* print chaining ID (field 13)*/ { KsbaCert next; diff --git a/sm/verify.c b/sm/verify.c index 3e44897e8..27a187ca4 100644 --- a/sm/verify.c +++ b/sm/verify.c @@ -108,6 +108,7 @@ gpgsm_verify (CTRL ctrl, int in_fd, int data_fd, FILE *out_fp) int algo; int is_detached; FILE *fp = NULL; + char *p; kh = keydb_new (0); if (!kh) @@ -285,12 +286,8 @@ gpgsm_verify (CTRL ctrl, int in_fd, int data_fd, FILE *out_fp) log_error ("error getting signing time: %s\n", ksba_strerror (err)); sigtime = (time_t)-1; } - if (DBG_X509) - { - log_debug ("signer %d - sigtime: ", signer); - gpgsm_dump_time (sigtime); - log_printf ("\n"); - } + + err = ksba_cms_get_message_digest (cms, signer, &msgdigest, &msgdigestlen); @@ -343,6 +340,15 @@ gpgsm_verify (CTRL ctrl, int in_fd, int data_fd, FILE *out_fp) goto next_signer; } + log_info (_("Signature made ")); + if (sigtime) + gpgsm_dump_time (sigtime); + else + log_printf (_("[date not given]")); + log_printf (_(" using certificate ID %08lX\n"), + gpgsm_get_short_fingerprint (cert)); + + if (msgdigest) { /* Signed attributes are available. */ GCRY_MD_HD md; @@ -446,7 +452,17 @@ gpgsm_verify (CTRL ctrl, int in_fd, int data_fd, FILE *out_fp) gpgsm_status (ctrl, STATUS_TRUST_UNDEFINED, gnupg_error_token (rc)); goto next_signer; } - log_info ("signature is good\n"); + + for (i=0; (p = ksba_cert_get_subject (cert, i)); i++) + { + log_info (!i? _("Good signature from") + : _(" aka")); + log_printf (" \""); + gpgsm_print_name (log_get_stream (), p); + log_printf ("\"\n"); + ksba_free (p); + } + gpgsm_status (ctrl, STATUS_TRUST_FULLY, NULL); |