From: myon-guest Date: Sat, 21 May 2005 20:59:32 +0000 (+0000) Subject: updated gpgsigs: X-Git-Url: https://git.sthu.org/?p=pgp-tools.git;a=commitdiff_plain;h=855a696b9f9c1d14bae8fb6cd305545d2583cab3 updated gpgsigs: * use the user's normal keyring to find signatures * support for multiple user keys * better charset conversion * pod documentation updated the web page and README git-svn-id: svn://svn.debian.org/pgp-tools/trunk@40 b513b33f-fedd-0310-b452-c3deb5f4c849 --- diff --git a/README b/README index ee12833..7bc04a1 100644 --- a/README +++ b/README @@ -1,5 +1,7 @@ This repository is home for several projects relating to OpenPGP. +* caff -- CA - fire and forget +* gpgsigs -- annotate list of GnuPG keys with already done signatures Please note that each individual project has its own license, please consult the licensing information in the subdirectories. diff --git a/gpgsigs/Makefile b/gpgsigs/Makefile new file mode 100644 index 0000000..bc5569c --- /dev/null +++ b/gpgsigs/Makefile @@ -0,0 +1,7 @@ +all: gpgsigs.1 + +gpgsigs.1: gpgsigs + pod2man $< > $@ + +clean: + rm -f gpgsigs.1 diff --git a/gpgsigs/gpgsigs b/gpgsigs/gpgsigs index d89b1d5..5e97c2b 100644 --- a/gpgsigs/gpgsigs +++ b/gpgsigs/gpgsigs @@ -1,67 +1,93 @@ #!/usr/bin/perl -# Copyright (c) 2004 Uli Martens -# Copyright (c) 2004 Peter Palfrader -# Copyright (c) 2004 Christoph Berg -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# 3. The name of the author may not be used to endorse or promote products -# derived from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# +# See the pod documentation at the end of this file for author, +# copyright, and licence information. # # Depends: # libintl-perl (Locale::Recode) # OR libtext-iconv-perl (Text::Iconv), # OR the "recode" binary +# +# Changelog: +# 0.1 +# 0.2 2005-05-14 cb: +# * use the user's normal keyring to find signatures +# * support for multiple user keys +# * better charset conversion +# * pod documentation +my $VERSION = "0.2"; use strict; use warnings; -use File::Temp qw{tempdir}; use English; use IPC::Open3; +use Getopt::Long; + + +sub version +{ + print STDERR < + (c) 2004 Peter Palfrader + (c) 2004, 2005 Christoph Berg +EOF +} + +sub usage +{ + version(); + print STDERR <] [] + +keyid is a long or short keyid (e.g. DE7AAF6E94C09C7F or 94C09C7F) +separate multiple keyids with ',' +-r call gpg --recv-keys before proceeding +-f convert from charset +-t convert UIDs to charset in output +EOF + exit shift; +} + -my $r; -my $i; +my ($fromcharset, $charset, $recv_keys); +GetOptions( + f => \$fromcharset, + t => \$charset, + r => \$recv_keys, + help => sub { usage(0); }, + version => sub { version(); exit 0;}, +) or usage(1); + + +# charset conversion +$fromcharset ||= "ISO-8859-1"; +$charset ||= $ENV{LC_ALL} || $ENV{LC_CTYPE} || $ENV{LANG} || "ISO-8859-1"; +$charset = "ISO-8859-1" unless $charset =~ /[\.-]/; +$charset =~ s/.*\.//; +$charset =~ s/@.*//; + +my ($rf, $rt, $if, $it); if (eval "require Locale::Recode") { - $r = Locale::Recode->new (from => 'UTF-8', - to => 'ISO-8859-1'); + $rf = Locale::Recode->new (from => $fromcharset, to => $charset) if $fromcharset; + $rt = Locale::Recode->new (from => 'UTF-8', to => $charset); } elsif (eval "require Text::Iconv") { - $i = Text::Iconv->new("UTF-8", "ISO-8859-1"); + $if = Text::Iconv->new($fromcharset, $charset) if $fromcharset; + $it = Text::Iconv->new("UTF-8", $charset); } -sub myrecode($) { +sub myfromrecode($) { my ($text) = @_; - if (defined $r) { + if (defined $rf) { my $orig = $text; - $r->recode($text); -#printf STDERR "perl: $orig to $text\n"; + $rf->recode($text); return $text; - } elsif (defined $i) { - $text = $i->convert($text); + } elsif (defined $if) { + return $if->convert($text); } else { - my $pid = open3(\*WTRFH, \*RDRFH, \*ERRFH, 'recode', 'utf8..iso8859-1'); + my $pid = open3(\*WTRFH, \*RDRFH, \*ERRFH, 'recode', "$fromcharset..$charset"); print WTRFH $text; close WTRFH; local $/ = undef; @@ -69,58 +95,83 @@ sub myrecode($) { close RDRFH; close ERRFH; waitpid $pid, 0; - die ("'recode' failed, is it installed?\n") unless defined $result; -#printf STDERR "manual: $text to $result\n"; return $result; - }; + } } +sub myrecode($) { + my ($text) = @_; + if (defined $rt) { + my $orig = $text; + $rt->recode($text); + return $text; + } elsif (defined $it) { + return $it->convert($text); + } else { + my $pid = open3(\*WTRFH, \*RDRFH, \*ERRFH, 'recode', "utf8..$charset"); + print WTRFH $text; + close WTRFH; + local $/ = undef; + my $result = ; + close RDRFH; + close ERRFH; + waitpid $pid, 0; + die ("'recode' failed, is it installed?\n") unless defined $result; + return $result; + } +} -my $EXPECTED_MD5 = '90 43 B8 1B'; +# parse options my $mykey = uc(shift @ARGV); -my $keyring = shift @ARGV; -my $keytxt = shift @ARGV; -my $outfile = shift @ARGV; - -$keyring = 'ksp-lt2k4.asc' unless defined $keyring; -$keytxt = 'ksp-lt2k4.txt' unless defined $keytxt; -$outfile = 'ksp-lt2k4-annotated.txt' unless defined $outfile; - -if (!defined $mykey || scalar @ARGV || ($mykey !~ /^[0-9A-F]{16,16}$/ && $mykey !~ /^[0-9A-F]{8,8}$/)) { - print STDERR "Usage: $PROGRAM_NAME keyid [ [ [) { + if ( m/^pub +(?:\d+)[DR]\/([0-9A-F]{8}) [0-9]{4}-[0-9]{2}-[0-9]{2} *(.*)/ ) { + push @keys, $1; + } +} +close TXT; -my $tempdir = tempdir( "gpgsigs-XXXXX", DIR => '/tmp/', CLEANUP => 1); -$ENV{'GNUPGHOME'} = $tempdir; -print STDERR "Creating a temporary gnupghome and importing keys\n"; -system(qw{gpg --import}, $keyring); +# get all known signatures +if ($recv_keys) { + print STDERR "Requesting keys from keyserver\n"; + system "gpg --recv-keys @keys"; +} -print STDERR "Running --list-sigs, this will take a while\n"; -open SIGS, "gpg --fixed-list-mode --with-colons --list-sigs 2>/dev/null |" +print STDERR "Running --list-sigs, this will take a while "; +open SIGS, "gpg --fixed-list-mode --with-colons --list-sigs @keys 2>/dev/null |" or die "can't get gpg listing"; -my $key; -my $uid; +my ($key, $uid, $sigs); while () { if ( m/^pub:(?:.*?:){3,3}([0-9A-F]{16,16}):/ ) { $key = $1; + print STDERR "."; next; } - if ( m/^uid:(?:.*?:){8,8}(.*):/ ) { - $uid = $1; - $uid = myrecode($uid); + if ( m/^uid:(?:.*?:){8,8}(.*):/s ) { + $uid = myrecode($1); next; } if ( m/^sig:(?:.*?:){3,3}([0-9A-F]{8})([0-9A-F]{8}):(?:.*?:){3,3}(.*):.*?:/ ) { @@ -136,6 +187,7 @@ while () { warn "unknown value: '$_', key: ".(defined $key ? $key :'none')."\n"; } close SIGS; +print STDERR "\n"; for my $k ( keys %{$sigs} ) { if ( $k =~ m/^[0-9A-F]{8}([0-9A-F]{8})$/ ) { @@ -144,6 +196,7 @@ for my $k ( keys %{$sigs} ) { } +# read checksums open MD, "gpg --print-md md5 $keytxt|" or warn "can't get gpg md5"; my $MD5 = ; close MD; @@ -157,50 +210,158 @@ my $metatxt = quotemeta($keytxt); $MD5 =~ s/^$metatxt:\s*//; $SHA1 =~ s/^$metatxt:\s*//; -if (defined $MD5) { - warn ("md5 of $keytxt does not begin with $EXPECTED_MD5") unless ($MD5 =~ /^$EXPECTED_MD5/); -}; + +# write out result +sub print_tag +{ + my ($key, $uid) = @_; + if (! defined $sigs->{$key}->{$uid}) { + warn "uid '$uid' not found on key $key"; + return; + } + my $r = '('; + foreach my $mykey (@mykeys) { + $r .= defined $sigs->{$key}->{$uid}->{$mykey} ? "S" : " "; + } + $r .= ')'; + return $r; +} print STDERR "Annotating $keytxt, writing into $outfile\n"; open (TXT, $keytxt) or die ("Cannot open $keytxt\n"); open (WRITE, '>'.$outfile) or die ("Cannot open $outfile for writing\n"); while () { - if (/^MD5 Checksum: __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __/ && defined $MD5) { - print WRITE "MD5 Checksum: $MD5 [ ]\n"; + $_ = myfromrecode($_); + if (/^MD5 Checksum:/ && defined $MD5) { + s/_[_ ]+_/$MD5/; } - elsif (/^SHA1 Checksum: ____ ____ ____ ____ ____ ____ ____ ____ ____ ____/ && defined $SHA1) { - print WRITE "SHA1 Checksum: $SHA1 [ ]\n"; - } else { - print WRITE; - }; - if ( m/^([0-9]{3}) \[ \] Fingerprint OK \[ \] ID OK$/ ) { - $_ = ; - if ( m/^pub ( 768|1024|2048|4096)[DR]\/([0-9A-F]{8}) [0-9]{4}-[0-9]{2}-[0-9]{2} (.*)/ ) { - my $l2 = $_; - my $uid = $3; - my $keyid = $2; - if ( ! defined $sigs->{$keyid}->{$uid} ) { - warn "uid '$uid' not found on key $keyid"; - }; - print WRITE ( defined $sigs->{$keyid}->{$uid}->{$mykey} ? "(S)" : "( )" ); - print WRITE " $l2"; - $_ = ; - print WRITE $_; - while () { - my $l3 = $_; - if ( m/^uid (.*)$/ ) { - print WRITE defined $sigs->{$keyid}->{$1} - ? ( defined $sigs->{$keyid}->{$1}->{$mykey} ? "(S)" : "( )" ) - : " "; - print WRITE " $l3"; - } else { - print WRITE "$l3"; - last; - } - } - } else { - print WRITE "$_"; + if (/^SHA1 Checksum:/ && defined $SHA1) { + s/_[_ ]+_/$SHA1/; + } + if ( m/^pub +(?:\d+)[DR]\/([0-9A-F]{8}) [0-9]{4}-[0-9]{2}-[0-9]{2} *(.*)/ ) { + $key = $1; + $uid = $2; + if ($uid) { # in gpg 1.2, the first uid is here + print WRITE print_tag($key, $uid) . " $_"; + next; } } + if ( m/^uid +(.*)$/ ) { + $uid = $1; + print WRITE print_tag($key, $uid) . " $_"; + next; + } + print WRITE; +} + +print WRITE "Legend:\n"; +foreach my $i (0 .. @mykeys - 1) { + print WRITE '('. ' 'x$i . 'S' . ' 'x(@mykeys-$i-1) . ") signed with $mykeys[$i]\n"; } -close TXT +close TXT; + +__END__ + +=head1 NAME + +B - annotate list of GnuPG keys with already done signatures + +=head1 SYNOPSIS + +B [-r] [-f I] [-t I] I F [F] + +=head1 DESCRIPTION + +B was written to assist the user in signing keys during a keysigning +party. It takes as input a file containing keys in C format +and prepends every line with a tag indicating if the user has already signed +that uid. When the file contains C or C lines +and placeholders (C<__ __>), the checksum is inserted. + +=head1 OPTIONS + +=over + +=item -r + +Call I before creating the output. + +=item -f I + +Convert F from I. The default is ISO-8859-1. + +=item -t I + +Convert UIDs to I. The default is derived from LC_ALL, LC_CTYPE, and +LANG, and if all these are unset, the default is ISO-8859-1. + +=item I + +Use this keyid (8 or 16 byte) for annotation. Multiple keyids can be separated +by I<,>. + +=item F + +Read input from F. + +=item F + +Write output to F. Default is stdout. + +=back + +=head1 EXAMPLES + +The following key signing parties are using B: + +http://www.palfrader.org/ksp-lt2k4.html + +http://www.palfrader.org/ksp-lt2k5.html + +=head1 BUGS + +B is known to change its output format quite often. This version has +been tested with gpg 1.2.5 and gpg 1.4.1. YMMV. + +=head1 SEE ALSO + +gpg(1), caff(1). + +http://pgp-tools.alioth.debian.org/ + +=head1 AUTHORS AND COPYRIGHT + +(c) 2004 Uli Martens + +(c) 2004 Peter Palfrader + +(c) 2004, 2005 Christoph Berg + +=head1 LICENSE + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +3. The name of the author may not be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/gpgsigs/gpgsigs-lt2k5-annotated.txt b/gpgsigs/gpgsigs-lt2k5-annotated.txt new file mode 100644 index 0000000..8fac952 --- /dev/null +++ b/gpgsigs/gpgsigs-lt2k5-annotated.txt @@ -0,0 +1,103 @@ +Saturday, June 25th, 2005; 14:00 Room R 2.05 + Peter Palfrader + + + + + ######## ######## ### ######## ######## + ## ## ## ## ## ## ## ## + ## ## ## ## ## ## ## ## + ## ## ######## ## ## ###### ## + ## ## ## ## ######### ## ## + ## ## ## ## ## ## ## ## + ######## ## ## ## ## ## ## + + + + + + L I N U X T A G K E Y S I G N I N G P A R T Y + + List of Participants (v 0.0) + + +Here's what you have to do with this file: +(1) Print this file to paper. +(2) Compute this file's MD5 checksum and optionally also its SHA1 checksum. + gpg --print-md md5 ksp-lt2k5.txt (or use md5sum) + gpg --print-md sha1 ksp-lt2k5.txt (or use sha1sum) +(3) fill in the hash values on the printout. +(4) Bring the printout, a pen, and proof of identity to the keysigningparty (and be on time!). + +MD5 Checksum: 37 90 98 40 22 7D 68 90 1E B1 1C 1B FF 7C 0A 49 [ ] + + + +SHA1 Checksum: 4A01 4EC9 1043 8C39 7F5F 4CA8 FC51 AC99 16F8 2FE9 [ ] + + + + +001 [ ] Fingerprint OK [ ] ID OK +pub 1024D/CD15A883 2002-09-28 + Key fingerprint = 02DF 08F5 FD35 6BF2 7F5F 7B83 8921 B5DC CD15 A883 +(S ) uid Alexander Schmehl (privat) +(S ) uid Alexander Schmehl (private) +( ) uid Alexander Schmehl (knOEpix) +( ) uid Alexander Schmehl (Skolelinux) +(S ) uid Alexander Schmehl (university) +(S ) uid Alexander Schmehl (university) +(S ) uid Alexander Schmehl (unused, but read) + +002 [ ] Fingerprint OK [ ] ID OK +pub 1024D/00D8CD16 2002-09-28 + Key fingerprint = 46CD D292 0692 D5A2 8F81 2E48 0717 74E0 00D8 CD16 +(SS) uid Alexander Schmehl (university) +(SS) uid Alexander Schmehl (privat) +(SS) uid Alexander Schmehl (university) + +003 [ ] Fingerprint OK [ ] ID OK +pub 1024R/6D8ABE71 1998-07-25 + Key fingerprint = 09 9D 09 8F 89 52 24 12 FE C2 31 9D FE F8 5C 03 +(SS) uid Christoph Berg +(SS) uid Christoph Berg + +004 [ ] Fingerprint OK [ ] ID OK +pub 1024D/58510B5A 2004-04-17 + Key fingerprint = D224 C8B0 7E63 A694 6DA3 2E07 C5AF 774A 5851 0B5A +(SS) uid Christoph Berg + +005 [ ] Fingerprint OK [ ] ID OK +pub 1024D/514B3E7C 2003-07-19 + Key fingerprint = 34F8 7997 8BC1 03F0 9C43 F3D7 B375 3E4D 514B 3E7C +(SS) uid Florian Ernst +( ) uid Florian Ernst +(SS) uid Florian Ernst +(SS) uid Florian Ernst + +006 [ ] Fingerprint OK [ ] ID OK +pub 1024D/7E7B8AC9 2002-05-11 + Key fingerprint = DF7D EB2F DB28 FD2B A9FB FA6D 715E D6A0 7E7B 8AC9 +(SS) uid Joerg Jaspert +(SS) uid Joerg Jaspert +(SS) uid Joerg Jaspert +(SS) uid Joerg Jaspert + +007 [ ] Fingerprint OK [ ] ID OK +pub 1024D/94C09C7F 1999-11-10 + Key fingerprint = 5B00 C96D 5D54 AEE1 206B AF84 DE7A AF6E 94C0 9C7F +( ) uid Peter Palfrader +(SS) uid Weasel +(SS) uid Peter Palfrader +(SS) uid Peter Palfrader +(SS) uid Peter Palfrader + +008 [ ] Fingerprint OK [ ] ID OK +pub 4096R/C82E0039 2003-03-24 + Key fingerprint = 25FC 1614 B8F8 7B52 FF2F 99B9 62AF 4031 C82E 0039 +( ) uid Peter Palfrader +( ) uid Peter Palfrader + +Legend: +(S ) signed with 6D8ABE71 +( S) signed with 58510B5A diff --git a/gpgsigs/gpgsigs-lt2k5.txt b/gpgsigs/gpgsigs-lt2k5.txt new file mode 100644 index 0000000..1bd8906 --- /dev/null +++ b/gpgsigs/gpgsigs-lt2k5.txt @@ -0,0 +1,100 @@ +Saturday, June 25th, 2005; 14:00 Room R 2.05 + Peter Palfrader + + + + + ######## ######## ### ######## ######## + ## ## ## ## ## ## ## ## + ## ## ## ## ## ## ## ## + ## ## ######## ## ## ###### ## + ## ## ## ## ######### ## ## + ## ## ## ## ## ## ## ## + ######## ## ## ## ## ## ## + + + + + + L I N U X T A G K E Y S I G N I N G P A R T Y + + List of Participants (v 0.0) + + +Here's what you have to do with this file: +(1) Print this file to paper. +(2) Compute this file's MD5 checksum and optionally also its SHA1 checksum. + gpg --print-md md5 ksp-lt2k5.txt (or use md5sum) + gpg --print-md sha1 ksp-lt2k5.txt (or use sha1sum) +(3) fill in the hash values on the printout. +(4) Bring the printout, a pen, and proof of identity to the keysigningparty (and be on time!). + +MD5 Checksum: __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ [ ] + + + +SHA1 Checksum: ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ [ ] + + + + +001 [ ] Fingerprint OK [ ] ID OK +pub 1024D/CD15A883 2002-09-28 + Key fingerprint = 02DF 08F5 FD35 6BF2 7F5F 7B83 8921 B5DC CD15 A883 +uid Alexander Schmehl (privat) +uid Alexander Schmehl (private) +uid Alexander Schmehl (knOEpix) +uid Alexander Schmehl (Skolelinux) +uid Alexander Schmehl (university) +uid Alexander Schmehl (university) +uid Alexander Schmehl (unused, but read) + +002 [ ] Fingerprint OK [ ] ID OK +pub 1024D/00D8CD16 2002-09-28 + Key fingerprint = 46CD D292 0692 D5A2 8F81 2E48 0717 74E0 00D8 CD16 +uid Alexander Schmehl (university) +uid Alexander Schmehl (privat) +uid Alexander Schmehl (university) + +003 [ ] Fingerprint OK [ ] ID OK +pub 1024R/6D8ABE71 1998-07-25 + Key fingerprint = 09 9D 09 8F 89 52 24 12 FE C2 31 9D FE F8 5C 03 +uid Christoph Berg +uid Christoph Berg + +004 [ ] Fingerprint OK [ ] ID OK +pub 1024D/58510B5A 2004-04-17 + Key fingerprint = D224 C8B0 7E63 A694 6DA3 2E07 C5AF 774A 5851 0B5A +uid Christoph Berg + +005 [ ] Fingerprint OK [ ] ID OK +pub 1024D/514B3E7C 2003-07-19 + Key fingerprint = 34F8 7997 8BC1 03F0 9C43 F3D7 B375 3E4D 514B 3E7C +uid Florian Ernst +uid Florian Ernst +uid Florian Ernst +uid Florian Ernst + +006 [ ] Fingerprint OK [ ] ID OK +pub 1024D/7E7B8AC9 2002-05-11 + Key fingerprint = DF7D EB2F DB28 FD2B A9FB FA6D 715E D6A0 7E7B 8AC9 +uid Joerg Jaspert +uid Joerg Jaspert +uid Joerg Jaspert +uid Joerg Jaspert + +007 [ ] Fingerprint OK [ ] ID OK +pub 1024D/94C09C7F 1999-11-10 + Key fingerprint = 5B00 C96D 5D54 AEE1 206B AF84 DE7A AF6E 94C0 9C7F +uid Peter Palfrader +uid Weasel +uid Peter Palfrader +uid Peter Palfrader +uid Peter Palfrader + +008 [ ] Fingerprint OK [ ] ID OK +pub 4096R/C82E0039 2003-03-24 + Key fingerprint = 25FC 1614 B8F8 7B52 FF2F 99B9 62AF 4031 C82E 0039 +uid Peter Palfrader +uid Peter Palfrader +