]>
git.sthu.org Git - pgp-tools.git/blob - gpg-key2ps
c47a53c3774e546e6d87d544e07750c4c8a6ece5
3 # gpg-key2ps: convert a PGP/GnuPG key into paper slips.
4 # Copyright (C) 2001-2005 Simon Richter
5 # Copyright (C) 2005-2007 Thijs Kinkhorst
6 # Copyright (C) 2005-2007 Christoph Berg <cb@df7cb.de>
7 # Licenced under the GNU General Public License,
15 my $version = '$Rev$';
16 $version =~ s/\$Rev:\s*(\d+)\s*\$/$1/;
17 my $revokestyle = "hide";
19 my $creationdate = scalar(localtime);
23 print $fd "gpg-key2ps $version - (c) 2001-2007 Simon Richter, Thijs Kinkhorst, Christoph Berg\n";
27 my ($fd, $exitcode) = @_;
30 Usage: $0 [-p papersize] [-r revoked-style] [-1] keyid-or-name ...
34 hide - Don't show revoked uids (default)
35 grey - Print text in grey
36 note - Add "[revoked]"
37 show - List revoked uids normally
38 strike - Strike through lines
39 -1 Only print one column, for extra wide keys
46 # fetch command line parameters
48 Getopt
::Long
::config
('bundling');
50 '-h' => \
$opts->{help
},
51 '--help' => \
$opts->{help
},
52 '-v' => \
$opts->{version
},
53 '--version' => \
$opts->{version
},
54 '-p=s' => \
$opts->{papersize
},
55 '--paper-size=s' => \
$opts->{papersize
},
56 '-r=s' => \
$opts->{revokestyle
},
66 if ($opts->{version
}) {
71 if ( $opts->{revokestyle
} ) { $revokestyle = $opts->{revokestyle
}; }
72 if ( $opts->{papersize
} ) { $ENV{'PAPERSIZE'} = $opts->{papersize
}; }
74 if ( $revokestyle !~ /^(grey|hide|note|show|strike)$/ ) {
75 print STDERR
"Unknown revoked-style \"$revokestyle\".\n";
79 if ( $opts->{1} ) { $columns = 1; }
81 usage
(\
*STDERR
, 1) unless scalar @ARGV >= 1;
83 # determine the paper size through the paperconf tool
85 if ( `which paperconf` && $?
== 0 ) {
92 print STDERR
"Warning: libpaper-utils is not installed, defaulting to A4.\n";
97 # open a gpg process we'll be reading from below
98 map { s/'/'\\''/g; } @ARGV; # quote single quotes
99 # --list-key due to #382794
100 open(GPG
, "gpg --list-key --with-fingerprint --with-colons '". (join "' '", @ARGV) ."' |");
102 sub start_postscript
{
103 # start the PostScript output
106 %%BoundingBox: 0 0 $w $h
108 %%Creator: gpg-key2ps $version
109 %%CreationDate: $creationdate
118 /Times-Roman findfont 9 scalefont setfont
126 w $columns div 30 sub y 3 add lineto stroke
131 /condhline { hline } def
139 << 1 (R) 2 (r) 3 (s) 16 (g) 20 (G) 17 (D) >> exch get
145 50 y moveto (pub) show
146 70 y moveto show showAlgorithm (/) show show
154 70 y moveto (Key fingerprint = ) show show
159 50 y moveto (uid) show
166 # output the desired display for revoked uids
167 if ( $revokestyle eq "grey" ) {
169 print " .5 setgray\n";
171 print " 0 setgray\n";
173 } elsif ( $revokestyle eq "note" ) {
175 print " 50 y moveto (uid) show\n";
176 print " 200 y moveto show ( [revoked]) show\n";
179 } elsif ( $revokestyle eq "show" ) {
180 print "/revuid { uid } def\n";
181 } elsif ( $revokestyle eq "strike" ) {
184 print " 45 y 9 add moveto h 2 div 45 sub y 18 add lineto stroke\n";
191 50 y moveto (sub) show
192 70 y moveto show showAlgorithm (/) show show
200 } # sub start_postscript
202 # walk the output of gpg line by line
203 # $numlines has the total number of lines so we'll know how many to put on page
208 if ( /^(tru|uat):/ ) { next; }
209 # every primary uid causes an extra line because of the separator
211 start_postscript
() unless $started;
216 s/^pub:[^:]*:([^:]*):([0-9]*):.{8,8}(.{8,8}):([^:]*):[^:]*:[^:]*:[^:]*:([^:]*):[^:]*:[^:]*:.*/ ($5) ($4) ($3) $2 ($1) pub/;
217 # fingerprint, format it nicely with spaces
218 if ( /^fpr:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:([^:]*):.*/ ) {
221 $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/;
223 $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;
224 $_ = " ($fpr) fpr\n";
227 s/^uid:[^:r]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:([^:]*):.*/ ($1) uid/;
229 if (s/^uid:r[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:([^:]*):.*/ ($1) revuid/) {
230 next if $revokestyle eq "hide";
233 s/^sub:[^:]*:([^:]*):([0-9]*):.{8,8}(.{8,8}):([^:]*):[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:.*/ ($4) ($3) $2 ($1) sbk/;
241 print STDERR
"No public key found.\n";
245 # output the remaining postscript
249 /numlines $numlines def
250 /num w 16 sub 10 div numlines div def
256 0 0 h $columns div w rectclip
261 0 upper h $columns div upper h $columns div lower 0 lower 0 upper moveto lineto lineto lineto lineto stroke
271 if ( $columns == 2 ) {
273 h $columns div 0 translate
294 B<gpg-key2ps> - generates a PS file from a GnuPG keyring
298 B<gpg-key2ps> [B<-r> I<revoked-style>] [B<-p> I<papersize>] I<keyid-or-name> [ I<...> ]
302 gpg-key2ps generates a PostScript file with your OpenPGP key fingerprint (repeated
303 as often as it fits) useful for keysigning parties. The only argument is the same
304 as you would pass to GPG's list-keys command, either a key-id or a (partial) name.
305 The PS data is written to stdout.
311 =item B<-p> B<--paper-size> I<paper-size>
313 Select the output paper size. Default is to look into /etc/papersize or A4 if
314 libpaper isn't installed.
316 =item B<-r> B<--revoked-style> I<revoked-style>
318 Select how to mark revoked UIDs. Five styles are available:
319 B<hide> don't show at all (default),
320 B<show> show normally,
321 B<grey> display in 50% grey,
322 B<note> add "[revoked]", and
323 B<strike> strike through.
327 Keyids to print. Multiple can be separated by spaces.
329 =item B<-h> B<--help>
331 Print usage and exit.
333 =item B<-v> B<--version>
335 Print version and exit.
347 =item http://pgp-tools.alioth.debian.org/
349 The homepage of B<gpg-key2ps> and the other tools bundled in B<signing-party>.
351 =item http://www.debian.org/events/materials/business-cards/
353 B<gpg-key2ps> prints plain fingerprint slips. If you are looking for something
354 more stylish, look at these latex templates for business cards that also
355 include fingerprints.
359 =head1 AUTHORS AND COPYRIGHT
363 =item (c) 2001-2005 Simon Richter <sjr@debian.org>
365 =item (c) 2005-2007 Thijs Kinkhorst <thijs@kinkhorst.com>
367 =item (c) 2005-2007 Christoph Berg <cb@df7cb.de>