X-Git-Url: https://git.sthu.org/?a=blobdiff_plain;f=gpg-key2ps%2Fgpg-key2ps;h=c8e58fa57cc403a61fc51331cc3020dac41a89ee;hb=a17369aaa3f8783c7ea3ee7425e14f7c8534df18;hp=4186ba0d2f298e84a5e013b16499c3239e768bed;hpb=2d69c06eb060ddb74a79a6f0aefaacf1fa051b1b;p=pgp-tools.git diff --git a/gpg-key2ps/gpg-key2ps b/gpg-key2ps/gpg-key2ps index 4186ba0..c8e58fa 100755 --- a/gpg-key2ps/gpg-key2ps +++ b/gpg-key2ps/gpg-key2ps @@ -1,36 +1,83 @@ -#!/usr/bin/perl +#!/usr/bin/perl -w # # 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 +# Licenced under the GNU General Public License, +# version 2 or later. # # $Id$ -$version = '$Rev$'; +use strict; +use Getopt::Long; + +my $version = '$Rev$'; $version =~ s/\$Rev:\s*(\d+)\s*\$/$1/; -$usage = "Usage: $0 [-p papersize] [-r revoked-style] keyid-or-name\n"; -$keyids = ""; -$revokestyle="hide"; +my $revokestyle = "hide"; +my $creationdate = scalar(localtime); -if ( $#ARGV < 0 ) { - print $usage; - exit 1; +sub version($) { + my $fd = shift; + print $fd "gpg-key2ps $version - (c) 2001-2005 Simon Richter, Thijs Kinkhorst, Christoph Berg\n"; } -use Getopt::Std; -getopt('pr', \%opts); -if ( $opts{r} ) { $revokestyle = $opts{'r'}; } -if ( $opts{p} ) { $ENV{'PAPERSIZE'} = $opts{'p'}; } -foreach (@ARGV) { $keyids .= $_ . " "; } +sub usage($$) { + my ($fd, $exitcode) = @_; + version ($fd); + print $fd < \$opts->{help}, + '--help' => \$opts->{help}, + '-v' => \$opts->{version}, + '--version' => \$opts->{version}, + '-p=s' => \$opts->{papersize}, + '--paper-size=s' => \$opts->{papersize}, + '-r=s' => \$opts->{revokestyle}, + '--revoked-style=s' => \$opts->{revokestyle}, +)) { + usage(\*STDERR, 1); +} + +if ($opts->{help}) { + usage (\*STDOUT, 0); +} + +if ($opts->{version}) { + version (\*STDOUT); + exit 0; +} + +if ( $opts->{revokestyle} ) { $revokestyle = $opts->{revokestyle}; } +if ( $opts->{papersize} ) { $ENV{'PAPERSIZE'} = $opts->{papersize}; } 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; + print STDERR "Unknown revoked-style \"$revokestyle\".\n"; + usage (\*STDERR, 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" ) { $w=`paperconf -w`; $h=`paperconf -h`; @@ -42,16 +89,18 @@ if ( -x "/usr/bin/paperconf" ) { $h=842; } -open(GPG, "gpg --fingerprint --with-colons $keyids |"); +# 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) ."' |"); +sub start_postscript { +# start the PostScript output print <) { + # we don't use these if ( /^(tru|uat):/ ) { next; } - if ( /^pub:/ ) { $numlines++; } + # every primary uid causes an extra line because of the separator + if ( /^pub:/ ) { + start_postscript() unless $started; + $started = 1; + $numlines++; + } + # primary uid s/^pub:[^:]*:([^:]*):([0-9]*):.{8,8}(.{8,8}):([^:]*):[^:]*:[^:]*:[^:]*:([^:]*):[^:]*:[^:]*:.*/ ($5) ($4) ($3) $2 ($1) pub/; + # fingerprint, format it nicely with spaces if ( /^fpr:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:([^:]*):.*/ ) { - $fpr = $1; + my $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"; } + # user ids s/^uid:[^:r]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:([^:]*):.*/ ($1) uid/; - s/^uid:[^:r]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:([^:]*):.*/ ($1) uid/; + # revoked user id s/^uid:r[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:([^:]*):.*/ ($1) revuid/; + # subkey s/^sub:[^:]*:([^:]*):([0-9]*):.{8,8}(.{8,8}):([^:]*):[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:.*/ ($4) ($3) $2 ($1) sbk/; $numlines++; + # print this line print; } -$numlines -= 1; - close(GPG); +unless ($started) { + print STDERR "No public key found.\n"; + exit 1; +} + +# output the remaining postscript print < - generates a PS file from a GnuPG keyring + +=head1 SYNOPSIS + +B [B<-r> I] [B<-p> I] I [ I<...> ] + +=head1 DESCRIPTION + +gpg-key2ps generates a PostScript file with your OpenPGP key fingerprint (repeated +as often as it fits) useful for keysigning parties. The only argument is the same +as you would pass to GPG's list-keys command, either a key-id or a (partial) name. +The PS data is written to stdout. + +=head1 OPTIONS + +=over + +=item B<-p> B<--paper-size> I + +Select the output paper size. Default is to look into /etc/papersize or A4 if +libpaper isn't installed. + +=item B<-r> B<--revoked-style> I + +Select how to mark revoked UIDs. Five styles are available: + B don't show at all (default), + B show normally, + B display in 50% grey, + B add "[revoked]", and + B strike through. + +=item I + +Keyids to print. Multiple can be separated by spaces. + +=item B<-h> B<--help> + +Print usage and exit. + +=item B<-v> B<--version> + +Print version and exit. + +=back + + +=head1 SEE ALSO + +gpg(1) + +http://pgp-tools.alioth.debian.org/ + +=head1 AUTHORS AND COPYRIGHT + +(c) 2001 - 2005 Simon Richter + +(c) 2005 Thijs Kinkhorst + +(c) 2005 Christoph Berg