#!/usr/bin/perl # # gpg-key2ps: convert a PGP/GnuPG key into paper slips. # # $Id$ $version = '$Rev$'; $version =~ s/\$Rev:\s*(\d+)\s*\$/$1/; $usage = "Usage: $0 [-p papersize] [-r revoked-style] keyid-or-name\n"; $keyids = ""; $revokestyle="hide"; if ( $#ARGV < 0 ) { print $usage; exit 1; } use Getopt::Std; getopt('pr', \%opts); if ( $opts{r} ) { $revokestyle = $opts{'r'}; } if ( $opts{p} ) { $ENV{'PAPERSIZE'} = $opts{'p'}; } foreach (@ARGV) { $keyids .= $_ . " "; } if ( $revokestyle !~ /^(grey|hide|note|show|strike)$/ ) { print STDERR "Unknown style \"$revokestyle\". Please use one of\n"; print STDERR " grey - Print text in grey\n"; print STDERR " hide - Don't show revoked uids\n"; print STDERR " note - Add \"(revoked)\"\n"; print STDERR " show - List revoked uids normally\n"; print STDERR " strike - Strike through lines\n"; exit 1; } if ( -x "/usr/bin/paperconf" ) { $w=`paperconf -w`; $h=`paperconf -h`; chomp($w); chomp($h); } else { # Default to A4. $w=596; $h=842; } open(GPG, "gpg --fingerprint --with-colons $keyids |"); print <> exch get show } def /pub { condhline 50 y moveto (pub) show 70 y moveto show showAlgorithm (/) show show 150 y moveto show 200 y moveto show newline needhline } def /fpr { 70 y moveto (Key fingerprint = ) show show newline } def /uid { 50 y moveto (uid) show 200 y moveto show newline } def EOF if ( $revokestyle eq "grey" ) { print "/revuid {\n"; print " .5 setgray\n"; print " uid\n"; print " 0 setgray\n"; print "} def\n"; } elsif ( $revokestyle eq "hide" ) { print "/revuid {} def\n"; } elsif ( $revokestyle eq "note" ) { print "/revuid {\n"; print " 50 y moveto (uid) show\n"; print " 200 y moveto show ([revoked]) show\n"; print " newline\n"; print "} def\n"; } elsif ( $revokestyle eq "show" ) { print "/revuid { uid } def\n"; } elsif ( $revokestyle eq "strike" ) { print "/revuid {\n"; print " uid\n"; print " 45 y 9 add moveto h 2 div 45 sub y 18 add lineto stroke\n"; print "} def\n"; } print <) { if ( /^(tru|uat):/ ) { next; } if ( /^pub:/ ) { $numlines++; } s/^pub:[^:]*:([^:]*):([0-9]*):.{8,8}(.{8,8}):([^:]*):[^:]*:[^:]*:[^:]*:([^:]*):[^:]*:[^:]*:.*/ ($5) ($4) ($3) $2 ($1) pub/; if ( /^fpr:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:([^:]*):.*/ ) { $fpr = $1; # v4 key $fpr =~ s/(\w{4})(\w{4})(\w{4})(\w{4})(\w{4})(\w{4})(\w{4})(\w{4})(\w{4})(\w{4})/$1 $2 $3 $4 $5 $6 $7 $8 $9 $10/; # v3 key $fpr =~ s/(\w{2})(\w{2})(\w{2})(\w{2})(\w{2})(\w{2})(\w{2})(\w{2})(\w{2})(\w{2})(\w{2})(\w{2})(\w{2})(\w{2})(\w{2})(\w{2})/$1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 $16/g; $_ = " ($fpr) fpr\n"; } s/^uid:[^:r]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:([^:]*):.*/ ($1) uid/; s/^uid:[^:r]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:([^:]*):.*/ ($1) uid/; s/^uid:r[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:([^:]*):.*/ ($1) revuid/; s/^sub:[^:]*:([^:]*):([0-9]*):.{8,8}(.{8,8}):([^:]*):[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:.*/ ($4) ($3) $2 ($1) sbk/; $numlines++; print; } $numlines -= 1; close(GPG); print <