Package: signing-party Version: 1.1.3-1 Severity: wishlist Tags: patch
pgpring shows expired signatures in its output, without information about expiration. If you use the pgpring output with keyanalyze, this will cause incorrect computation of the MSD, because expired signatures are counted as valid. The attached patch: 1) adds the expiration date (if present) to keys 2) adds generation date and (if present) expiration date to signatures 3) adds a commandline option -e to exclude expired signatures from output 4) adds a commandline option -E to exclude expired keys from output -- System Information: Debian Release: squeeze/sid APT prefers testing APT policy: (500, 'testing') Architecture: i386 (i686) Kernel: Linux 2.6.32-5-686 (SMP w/1 CPU core) Locale: LANG=it_IT.UTF-8, LC_CTYPE=it_IT.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Versions of packages signing-party depends on: ii gnupg 1.4.10-4 GNU privacy guard - a free PGP rep ii libc6 2.11.2-7 Embedded GNU C Library: Shared lib ii libclass-methodmaker-perl 2.15-2 Perl module for creating generic m ii libgnupg-interface-perl 0.42-3 Perl interface to GnuPG ii libmailtools-perl 2.06-1 Manipulate email in perl programs ii libmime-tools-perl 5.428-1 Perl5 modules for MIME-compliant m ii libterm-readkey-perl 2.30-4 A perl module for simple terminal ii libtext-template-perl 1.45-1 Text::Template perl module ii perl 5.10.1-15 Larry Wall's Practical Extraction ii qprint 1.0.dfsg.2-2 encoder and decoder for quoted-pri Versions of packages signing-party recommends: ii libgd-gd2-noxpm-perl 1:2.39-2+b1 Perl module wrapper for libgd - gd ii libpaper-utils 1.1.24 library for handling paper charact ii libtext-iconv-perl 1.7-2 converts between character sets in ii postfix [mail-transport-agen 2.7.1-1 High-performance mail transport ag ii whiptail 0.52.11-1 Displays user-friendly dialog boxe Versions of packages signing-party suggests: pn imagemagick | graphicsmagick- <none> (no description available) ii mutt 1.5.20-9 text-based mailreader supporting M pn texlive-latex-recommended <none> (no description available) pn wipe <none> (no description available) -- no debconf information
diff -pru signing-party-1.1.3.orig/keyanalyze/pgpring/pgplib.h signing-party-1.1.3/keyanalyze/pgpring/pgplib.h --- signing-party-1.1.3.orig/keyanalyze/pgpring/pgplib.h 2010-02-11 19:26:31.000000000 +0100 +++ signing-party-1.1.3/keyanalyze/pgpring/pgplib.h 2010-11-04 10:11:18.000000000 +0100 @@ -40,12 +40,17 @@ #define KEYFLAG_ABILITIES (KEYFLAG_CANSIGN|KEYFLAG_CANENCRYPT|KEYFLAG_PREFER_ENCRYPTION|KEYFLAG_PREFER_SIGNING) +#define SIGFLAG_EXPIRED (1 << 8) + typedef struct pgp_signature { struct pgp_signature *next; unsigned char sigtype; unsigned long sid1; unsigned long sid2; + int flags; + time_t gen_time; + time_t exp_time; } pgp_sig_t; @@ -56,6 +61,7 @@ typedef struct pgp_keyinfo int flags; short keylen; time_t gen_time; + time_t exp_time; int numalg; const char *algorithm; struct pgp_keyinfo *parent; diff -pru signing-party-1.1.3.orig/keyanalyze/pgpring/pgppubring.c signing-party-1.1.3/keyanalyze/pgpring/pgppubring.c --- signing-party-1.1.3.orig/keyanalyze/pgpring/pgppubring.c 2010-02-11 19:26:31.000000000 +0100 +++ signing-party-1.1.3/keyanalyze/pgpring/pgppubring.c 2010-11-12 10:15:33.000000000 +0100 @@ -64,8 +64,9 @@ extern int optind; #endif -static short dump_signatures = 0; - +static short dump_signatures = 0; +static short exclude_exp_sigs = 0; +static short exclude_exp_keys = 0; static void pgpring_find_candidates (char *ringfile, const char *hints[], int nhints); static void pgpring_dump_keyblock (pgp_key_t *p); @@ -83,7 +84,7 @@ int main (int argc, char * const argv[]) char pgppath[_POSIX_PATH_MAX]; char kring[_POSIX_PATH_MAX]; - while ((c = getopt (argc, argv, "25sk:S")) != EOF) + while ((c = getopt (argc, argv, "eE25sk:S")) != EOF) { switch (c) { @@ -92,7 +93,16 @@ int main (int argc, char * const argv[]) dump_signatures = 1; break; } - + case 'e': + { + exclude_exp_sigs = 1; + break; + } + case 'E': + { + exclude_exp_keys = 1; + break; + } case 'k': { _kring = optarg; @@ -173,8 +183,12 @@ static pgp_key_t *pgp_parse_pgp2_key (un for (i = 0; i < 2; i++) exp_days = (exp_days << 8) + buff[j++]; - if (exp_days && time (NULL) > gen_time + exp_days * 24 * 3600) - p->flags |= KEYFLAG_EXPIRED; + if (exp_days) + { + p->exp_time = gen_time + exp_days * 24 * 3600; + if (time (NULL) > p->exp_time) + p->flags |= KEYFLAG_EXPIRED; + } alg = buff[j++]; @@ -359,9 +373,10 @@ static int pgp_parse_pgp2_sig (unsigned if (s) { - s->sigtype = sigtype; - s->sid1 = signerid1; - s->sid2 = signerid2; + s->sigtype = sigtype; + s->sid1 = signerid1; + s->sid2 = signerid2; + s->gen_time = sig_gen_time; } return 0; @@ -454,6 +469,9 @@ static int pgp_parse_pgp3_sig (unsigned key_validity = 0; for (i = 0; i < 4; i++) key_validity = (key_validity << 8) + buff[j++]; + if (key_validity > 0) + p->exp_time = p->gen_time + key_validity; + break; } case 16: /* issuer key ID */ @@ -503,11 +521,19 @@ static int pgp_parse_pgp3_sig (unsigned s->sigtype = sigtype; s->sid1 = signerid1; s->sid2 = signerid2; + if (sig_gen_time > 0) + { + s->gen_time = sig_gen_time; + if (validity > 0) + { + s->exp_time = sig_gen_time + validity; + if (time (NULL) > s->exp_time) + s->flags |= SIGFLAG_EXPIRED; + } + } } - return 0; - } @@ -774,12 +800,31 @@ static void print_userid (const char *id static void pgpring_dump_signatures (pgp_sig_t *sig) { + struct tm *tp; + time_t t; + for (; sig; sig = sig->next) { + if (exclude_exp_sigs && (sig->flags & SIGFLAG_EXPIRED)) + continue; + if (sig->sigtype == 0x10 || sig->sigtype == 0x11 || sig->sigtype == 0x12 || sig->sigtype == 0x13) - printf ("sig::::%08lX%08lX::::::%X:\n", - sig->sid1, sig->sid2, sig->sigtype); + { + printf ("sig::::%08lX%08lX:", sig->sid1, sig->sid2); + t = sig->gen_time; + tp = gmtime (&t); + printf ("%04d-%02d-%02d:", 1900 + tp->tm_year, tp->tm_mon + 1, + tp->tm_mday); + if (sig->exp_time) + { + t = sig->exp_time; + tp = gmtime (&t); + printf ("%04d-%02d-%02d", 1900 + tp->tm_year, tp->tm_mon + 1, + tp->tm_mday); + } + printf ("::::%X:\n", sig->sigtype); + } else if (sig->sigtype == 0x20) printf ("rev::::%08lX%08lX::::::%X:\n", sig->sid1, sig->sid2, sig->sigtype); @@ -807,6 +852,10 @@ static void pgpring_dump_keyblock (pgp_k for (; p; p = p->next) { + if (exclude_exp_keys && \ + (p->flags & KEYFLAG_EXPIRED || p->flags & KEYFLAG_REVOKED)) + continue; + first = 1; if (p->flags & KEYFLAG_SECRET) @@ -849,8 +898,17 @@ static void pgpring_dump_keyblock (pgp_k t = p->gen_time; tp = gmtime (&t); - printf (":%d:%d:%s:%04d-%02d-%02d::::", p->keylen, p->numalg, p->keyid, + printf (":%d:%d:%s:%04d-%02d-%02d:", p->keylen, p->numalg, p->keyid, 1900 + tp->tm_year, tp->tm_mon + 1, tp->tm_mday); + if (p->exp_time) + { + t = p->exp_time; + tp = gmtime (&t); + printf ("%04d-%02d-%02d", 1900 + tp->tm_year, tp->tm_mon + 1, + tp->tm_mday); + } + + printf (":::"); print_userid (uid->addr); printf (":\n"); diff -pru signing-party-1.1.3.orig/keyanalyze/pgpring/pgpring.1 signing-party-1.1.3/keyanalyze/pgpring/pgpring.1 --- signing-party-1.1.3.orig/keyanalyze/pgpring/pgpring.1 2010-02-11 19:26:31.000000000 +0100 +++ signing-party-1.1.3/keyanalyze/pgpring/pgpring.1 2010-11-08 09:21:23.000000000 +0100 @@ -12,7 +12,9 @@ pgpring \- key ring dumper .SH SYNTAX \fBpgpring\fP [ \fB\-k\fP \fIkeyring\fP | \fB\-2\fP | \fB\-5\fP ] -[ \fB\-s\fP ] [ \fB\-S\fP ] +[ \fB\-s\fP ] [ \fB\-S\fP ] [ \fB\-e\fP ] [ \fB\-E\fP ] + + .SH DESCRIPTION @@ -40,6 +42,12 @@ Dump the secret keyring. .TP .B \-S Include signatures. +.TP +.B \-e +Exclude expired signatures +.TP +.B \-E +Exclude expired keys .SH AUTHORS Thomas Roessler <roess...@does\-not\-exist.org>