X-Git-Url: http://git.sthu.org/?a=blobdiff_plain;f=gpgsigs%2Fgpgsigs;h=49c6e3aff4d0dd14ea223db24344b48c9469360c;hb=c8a116b9d4187dd8a2ac248d8f738bc49d62aabc;hp=8909894b37750c9b988d0ee45cf5708a428fbead;hpb=021d8934526f5947ee2fe953f806973c6660c0d7;p=pgp-tools.git diff --git a/gpgsigs/gpgsigs b/gpgsigs/gpgsigs index 8909894..49c6e3a 100755 --- a/gpgsigs/gpgsigs +++ b/gpgsigs/gpgsigs @@ -59,12 +59,14 @@ EOF } -my ($fromcharset, $charset, $recv_keys); +my ($fromcharset, $charset, $recv_keys, $refresh, $latex); Getopt::Long::config('bundling'); GetOptions( '-f=s' => \$fromcharset, '-t=s' => \$charset, r => \$recv_keys, + refresh => \$refresh, + latex => \$latex, help => sub { usage(*STDOUT, 0); }, version => sub { version(*STDOUT); exit 0;}, ) or usage(*STDERR, 1); @@ -109,13 +111,12 @@ sub myrecode($$$) { # parse options -my $mykey = uc(shift @ARGV); +my @mykeys = split /,/, uc(shift @ARGV); my $keytxt = (shift @ARGV) || usage(*STDERR, 1); my $outfile = (shift @ARGV) || '-'; -my @mykeys = split /,/, $mykey; map { s/^0x//i; } @mykeys; -my %myuids = map { $_ => [] } @mykeys; +my %uids = map { $_ => [] } @mykeys; if (!@mykeys || scalar @ARGV) { usage(*STDERR, 1); @@ -149,7 +150,7 @@ print STDERR "Running --list-sigs, this will take a while "; open SIGS, "gpg --fixed-list-mode --with-colons --list-sigs @mykeys @keys 2>/dev/null |" or die "can't get gpg listing"; -my ($key, $uid, $sigs, $uidstatus); +my ($key, $uid, $sigs); while () { if ( m/^pub:(?:.*?:){3,3}([0-9A-F]{16,16}):/ ) { $key = $1; @@ -157,17 +158,28 @@ while () { next; } if ( m/^uid:(.):(?:.*?:){7,7}(.*):/s ) { - $uidstatus = $1; + my $uidstatus = $1; $uid = $2; $uid =~ s/\\x([0-9a-f][0-9a-f])/ chr(hex($1)) /gie; $uid = myrecode($uid, "UTF-8", $charset); my ($shortkey) = substr $key, -8; - # Remember own, non-revoked uids - if (exists $myuids{$shortkey} and $uidstatus ne "r") { - push @{$myuids{$shortkey}}, $uid + # Remember non-revoked uids + next if $uidstatus eq "r"; + push @{$uids{$shortkey}}, $uid; + next; + } + if ( m/^uat:(.)::::[^:]+::([0-9A-F]+)::\d+ (\d+)/ ) { # uat:-::::2006-08-03::27BAEAF742BD253C2F3F03B043DC1536880193C4::1 7993: + my $uidstatus = $1; + # $2 is hash of attribute data + my $size = $3 - 19; # FIXME: find a nicer way to find out picture size + $uid = "[jpeg image of size $size]"; + next if $uidstatus eq "r"; + if ($latex) { + system "gpg --photo-viewer 'convert - %k.eps' --list-options show-photos --list-key $key > /dev/null"; } - + my ($shortkey) = substr $key, -8; + push @{$uids{$shortkey}}, $uid; next; } if ( m/^sig:(?:.*?:){3,3}([0-9A-F]{8})([0-9A-F]{8}):(?:.*?:){5,5}(.*?):/ ) { @@ -190,7 +202,7 @@ while () { if ($before eq 'S' || $before eq 's') { $sigs->{$key}->{$uid}->{$1.$2} = $class; } elsif ($class eq 'S' || $class eq 's') { - # intentionall left blank + # intentionally left blank } elsif ($before < $class) { $sigs->{$key}->{$uid}->{$1.$2} = $class; }; @@ -200,10 +212,6 @@ while () { $sigs->{$key}->{$uid}->{$2} = $sigs->{$key}->{$uid}->{$1.$2}; next; } - if ( m/^uat:/ ) { - $uid = "Photo ID"; - next; - } next if ( m/^(rev|rvk|sub|tru):/ ); # revoke/revoker/subkey/trust warn "unknown value: '$_', key: ".(defined $key ? $key :'none')."\n"; } @@ -276,6 +284,18 @@ my $line = 0; 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"); + +if ($latex) { + print WRITE <<'EOF'; +\documentclass{article} +\usepackage[margin=2cm]{geometry} +\usepackage{alltt} +\usepackage{graphicx} +\begin{document} +\begin{alltt} +EOF +} + while () { $line++; $_ = myrecode($_, $fromcharset, $charset); @@ -295,24 +315,39 @@ while () { # print WRITE print_tag($key, $uid) . " $_"; # next; #} + print WRITE; + next; + } + + if ( m/^ *Key fingerprint/ ) { print WRITE; my $inc = ""; foreach my $mykey (@mykeys) { - foreach my $myuid (@{$myuids{$mykey}}) { + foreach my $myuid (@{$uids{$mykey}}) { $inc .= defined $sigs->{$mykey}->{$myuid}->{$key} ? $sigs->{$mykey}->{$myuid}->{$key} : ' '; } } print WRITE "[$inc] incoming signatures\n" if $inc =~ /\S/; + if ($refresh or $latex) { + foreach $uid (@{$uids{$key}}) { + print WRITE print_tag($key, $uid) . " $uid\n"; + if ($latex and ($uid =~ /^\[jpeg image/)) { + print WRITE "\\begin{flushright}\n"; + print WRITE "\\includegraphics[height=3cm]{$key.eps}\n"; + print WRITE "\\end{flushright}\n"; + } + } + } next; } if ( m/^uid +(.*)$/ ) { $uid = $1; + next if $refresh or $latex; unless (defined $key) { warn "key is undefined - input text is possibly malformed near line $line\n"; next; }; - die "uid is undefined, key $key" unless defined $uid; die "bad tag from $key | $uid" unless defined (print_tag($key, $uid)); print WRITE print_tag($key, $uid) . " $_"; next; @@ -323,12 +358,12 @@ while () { print WRITE "Legend:\n"; my $num_myuids = 0; foreach my $i (0 .. @mykeys - 1) { - print WRITE '(' . ' 'x$i . 'S' . ' 'x(@mykeys-$i-1) . ") signed with $mykeys[$i] $myuids{$mykeys[$i]}->[0]\n"; - $num_myuids += @{$myuids{$mykeys[$i]}}; + print WRITE '(' . ' 'x$i . 'S' . ' 'x(@mykeys-$i-1) . ") signed with $mykeys[$i] $uids{$mykeys[$i]}->[0]\n"; + $num_myuids += @{$uids{$mykeys[$i]}}; } my $i = 0; foreach my $mykey (@mykeys) { - foreach my $myuid (@{$myuids{$mykey}}) { + foreach my $myuid (@{$uids{$mykey}}) { my $inc = defined $sigs->{$mykey}->{$myuid}->{$key} ? $sigs->{$mykey}->{$myuid}->{$key} : ' '; print WRITE "[" . ' 'x$i . 'S' . ' 'x($num_myuids-$i-1) . "] has signed $mykey $myuid\n"; $i++; @@ -336,6 +371,15 @@ foreach my $mykey (@mykeys) { } close TXT; +if ($latex) { + print WRITE <<'EOF'; +\end{alltt} +\end{document} +EOF +} + +close WRITE; + __END__ =head1 NAME