#
# gpg-key2ps: convert a PGP/GnuPG key into paper slips.
# Copyright (C) 2001-2005 Simon Richter
-# Copyright (C) 2005 Thijs Kinkhorst
-# Copyright (C) 2005 Christoph Berg <cb@df7cb.de>
+# Copyright (C) 2005-2008 Thijs Kinkhorst
+# Copyright (C) 2005-2008 Christoph Berg <cb@df7cb.de>
# Licenced under the GNU General Public License,
# version 2 or later.
#
my $version = '$Rev$';
$version =~ s/\$Rev:\s*(\d+)\s*\$/$1/;
+my $showsubkeys = 0;
my $revokestyle = "hide";
+my $columns = 2;
my $creationdate = scalar(localtime);
sub version($) {
my $fd = shift;
- print $fd "gpg-key2ps $version - (c) 2001-2005 Simon Richter, Thijs Kinkhorst, Christoph Berg\n";
+ print $fd "gpg-key2ps $version - (c) 2001-2008 Simon Richter, Thijs Kinkhorst, Christoph Berg\n";
}
sub usage($$) {
my ($fd, $exitcode) = @_;
version ($fd);
print $fd <<EOF;
-Usage: $0 [-p papersize] [-r revoked-style] keyid-or-name ...
+Usage: $0 [-p papersize] [-r revoked-style] [-1] [-s] keyid-or-name ...
Options:
-p --paper-size
+ -s --show-subkeys
-r --revoked-style
- hide - Don't show revoked uids (default)
+ hide - Don't show revoked uids and subkeys (default)
grey - Print text in grey
note - Add "[revoked]"
show - List revoked uids normally
strike - Strike through lines
+ -1 Only print one column, for extra wide keys
-h --help
-v --version
EOF
'--help' => \$opts->{help},
'-v' => \$opts->{version},
'--version' => \$opts->{version},
+ '-s' => \$opts->{showsubkeys},
+ '--show-subkeys' => \$opts->{showsubkeys},
'-p=s' => \$opts->{papersize},
'--paper-size=s' => \$opts->{papersize},
'-r=s' => \$opts->{revokestyle},
'--revoked-style=s' => \$opts->{revokestyle},
+ '-1' => \$opts->{1},
)) {
usage(\*STDERR, 1);
}
exit 0;
}
-if ( $opts->{revokestyle} ) { $revokestyle = $opts->{revokestyle}; }
if ( $opts->{papersize} ) { $ENV{'PAPERSIZE'} = $opts->{papersize}; }
+if ( $opts->{showsubkeys} ) { $showsubkeys = 1; }
+if ( $opts->{revokestyle} ) { $revokestyle = $opts->{revokestyle}; }
if ( $revokestyle !~ /^(grey|hide|note|show|strike)$/ ) {
print STDERR "Unknown revoked-style \"$revokestyle\".\n";
usage (\*STDERR, 1);
}
+if ( $opts->{1} ) { $columns = 1; }
+
usage(\*STDERR, 1) unless scalar @ARGV >= 1;
# determine the paper size through the paperconf tool
my $w; my $h;
-if ( -x "/usr/bin/paperconf" ) {
+if ( `which paperconf` && $? == 0 ) {
$w=`paperconf -w`;
$h=`paperconf -h`;
chomp($w);
# open a gpg process we'll be reading from below
map { s/'/'\\''/g; } @ARGV; # quote single quotes
-open(GPG, "gpg --fingerprint --with-colons '". (join "' '", @ARGV) ."' |");
+# --list-key due to #382794
+open(GPG, "gpg --list-key --with-fingerprint --with-colons '". (join "' '", @ARGV) ."' |");
sub start_postscript {
# start the PostScript output
/hline {
30 y 3 add moveto
- w 2 div 30 sub y 3 add lineto stroke
+ w $columns div 30 sub y 3 add lineto stroke
newline
} def
newline
} def
+/sbk {
+ 50 y moveto (sub) show
+ 70 y moveto show showAlgorithm (/) show show
+ 150 y moveto show
+ newline
+} def
+
EOF
# output the desired display for revoked uids
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";
+ print <<EOF;
+/revuid {
+ .5 setgray
+ uid
+ 0 setgray
+} def
+/revsbk {
+ .5 setgray
+ sbk
+ 0 setgray
+} def
+EOF
} 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";
+ print <<EOF;
+/revuid {
+ 50 y moveto (uid) show
+ 200 y moveto show ( [revoked]) show
+ newline
+} def
+/revsbk {
+ sbk
+ ( [revoked]) show
+} def
+EOF
} elsif ( $revokestyle eq "show" ) {
- print "/revuid { uid } def\n";
+ print <<EOF;
+/revuid { uid } def
+/revsbk { sbk } def
+EOF
} 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 <<EOF;
+/revuid {
+ uid
+ 45 y 9 add moveto h 2 div 45 sub y 18 add lineto stroke
+} def
+/revsbk {
+ sbk
+ 45 y 9 add moveto h 2 div 45 sub y 18 add lineto stroke
+} def
+EOF
}
print <<EOF;
-/sbk {
- 50 y moveto (sub) show
- 70 y moveto show showAlgorithm (/) show show
- 150 y moveto show
- newline
-} def
-
/key {
noneedhline
EOF
$_ = " ($fpr) fpr\n";
}
# user ids
+ s/\\x([0-9a-f][0-9a-f])/ chr(hex($1)) /gie;
+ $_ = `echo "$_" | iconv -c -f utf-8 -t latin1`;
s/^uid:[^:r]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:([^:]*):.*/ ($1) uid/;
# revoked user id
- s/^uid:r[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:([^:]*):.*/ ($1) revuid/;
+ if (s/^uid:r[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:([^:]*):.*/ ($1) revuid/) {
+ next if $revokestyle eq "hide";
+ }
# subkey
- s/^sub:[^:]*:([^:]*):([0-9]*):.{8,8}(.{8,8}):([^:]*):[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:.*/ ($4) ($3) $2 ($1) sbk/;
+ if (s/^sub:[^r:]*:([^:]*):([0-9]*):.{8,8}(.{8,8}):([^:]*):[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:.*/ ($4) ($3) $2 ($1) sbk/) {
+ next if ! $showsubkeys;
+ }
+ if (s/^sub:r[^:]*:([^:]*):([0-9]*):.{8,8}(.{8,8}):([^:]*):[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:.*/ ($4) ($3) $2 ($1) revsbk/) {
+ next if (!$showsubkeys) || $revokestyle eq "hide";
+ }
$numlines++;
# print this line
print;
/y w 20 sub def
1 1 num {
gsave
- 0 0 h 2 div w rectclip
+ 0 0 h $columns div w rectclip
/upper y 11 add def
key
newline
/lower y 11 add def
- 0 upper h 2 div upper h 2 div lower 0 lower 0 upper moveto lineto lineto lineto lineto stroke
+ 0 upper h $columns div upper h $columns div lower 0 lower 0 upper moveto lineto lineto lineto lineto stroke
grestore
} for
} def
w 0 translate
90 rotate
column
-h 2 div 0 translate
+EOF
+
+if ( $columns == 2 ) {
+ print <<EOF;
+h $columns div 0 translate
column
+EOF
+}
+
+print <<EOF;
showpage
%%Trailer
=head1 SYNOPSIS
-B<gpg-key2ps> [B<-r> I<revoked-style>] [B<-p> I<papersize>] I<keyid-or-name> [ I<...> ]
+B<gpg-key2ps> [B<-r> I<revoked-style>] [B<-p> I<papersize>] [B<-1>] [B<-s>] I<keyid-or-name> [ I<...> ]
=head1 DESCRIPTION
Select the output paper size. Default is to look into /etc/papersize or A4 if
libpaper isn't installed.
+=item B<-s> B<--show-subkeys>
+
+Enable subkey information to be printed on the slips. Subkey information is
+normally not relevant to the key signing process.
+
=item B<-r> B<--revoked-style> I<revoked-style>
-Select how to mark revoked UIDs. Five styles are available:
+Select how to mark revoked UIDs and subkeys. Five styles are available:
B<hide> don't show at all (default),
B<show> show normally,
B<grey> display in 50% grey,
B<note> add "[revoked]", and
B<strike> strike through.
+=item B<-1>
+
+Print only one column of paper slips instead of the default two. Useful for keys
+with long UIDs that otherwise won't fit.
+
=item I<keyid>
Keyids to print. Multiple can be separated by spaces.
=back
-
=head1 SEE ALSO
-gpg(1)
+=over
+
+=item gpg(1)
+
+GNU Privacy Guard.
+
+=item http://pgp-tools.alioth.debian.org/
+
+The homepage of B<gpg-key2ps> and the other tools bundled in B<signing-party>.
-http://pgp-tools.alioth.debian.org/
+=item http://www.debian.org/events/materials/business-cards/
+
+B<gpg-key2ps> prints plain fingerprint slips. If you are looking for something
+more stylish, look at these latex templates for business cards that also
+include fingerprints.
+
+=back
=head1 AUTHORS AND COPYRIGHT
-(c) 2001 - 2005 Simon Richter <sjr@debian.org>
+=over
+
+=item (c) 2001-2005 Simon Richter <sjr@debian.org>
-(c) 2005 Thijs Kinkhorst <thijs@kinkhorst.com>
+=item (c) 2005-2008 Thijs Kinkhorst <thijs@kinkhorst.com>
-(c) 2005 Christoph Berg <cb@df7cb.de>
+=item (c) 2005-2008 Christoph Berg <cb@df7cb.de>
+=back