X-Git-Url: https://git.sthu.org/?p=pgp-tools.git;a=blobdiff_plain;f=gpg-key2ps%2Fgpg-key2ps;h=da3231c7dd8f224ac84629af26de5a3250f94018;hp=c4efc6358a92d215ac67b740a830ef904a3af052;hb=e69aea6f5797cb54f3748b983ffc977958f347cc;hpb=e7ab88242d5d6ee2e3083f25fc645349d7ad65d7 diff --git a/gpg-key2ps/gpg-key2ps b/gpg-key2ps/gpg-key2ps index c4efc63..da3231c 100755 --- a/gpg-key2ps/gpg-key2ps +++ b/gpg-key2ps/gpg-key2ps @@ -1,91 +1,113 @@ -#! /bin/sh - -set -e - -VERSION="0.3.1" -USAGE="Usage: $0 [-p papersize] [-r revoked-style] keyid-or-name" - - -if [ -z "$*" ]; then - echo $USAGE - exit 1 -fi - -KEYIDS= -REVOKESTYLE=hide - -while [ -n "$1" ]; do - case "$1" in - -p) - PAPERSIZE=$2 - export PAPERSIZE - shift 2 - ;; - -p*) - PAPERSIZE=`echo $1 | sed -e 's/^-p//'` - export PAPERSIZE - shift 1 - ;; - -r) - REVOKESTYLE=$2 - shift 2 - ;; - -r*) - REVOKESTYLE=`echo $1 | sed -e 's/^-r//'` - shift 1 - ;; - -*) - echo $USAGE - exit 1 - ;; - *) - KEYIDS=$1 - shift 1 - ;; - esac -done - -case "$REVOKESTYLE" in -grey|hide|note|show|strike) - ;; -*) - echo >&2 "Unknown style \"$REVOKESTYLE\". Please use one of" - echo >&2 " grey - Print text in grey" - echo >&2 " hide - Don't show revoked uids" - echo >&2 " note - Add \"(revoked)\"" - echo >&2 " show - List revoked uids normally" - echo >&2 " strike - Strike through lines" - exit 1 - ;; -esac - -TMPFILE=`mktemp -t gpg-key2ps.XXXXXX` - -if ! gpg --fingerprint --with-colons $KEYIDS 2>/dev/null >$TMPFILE; then - echo >&2 "Key not found. Try 'gpg --list-keys'" - rm $TMPFILE - exit 1 -fi - -NUMLINES=$((`wc -l <$TMPFILE` + `grep '^pub:' $TMPFILE | wc -l` - 1)) - -if test -x /usr/bin/paperconf; then - w=`paperconf -w` - h=`paperconf -h` -else +#!/usr/bin/perl -w +# +# gpg-key2ps: convert a PGP/GnuPG key into paper slips. +# Copyright (C) 2001-2005 Simon Richter +# Copyright (C) 2005-2007 Thijs Kinkhorst +# Copyright (C) 2005-2008 Christoph Berg +# Licenced under the GNU General Public License, +# version 2 or later. +# +# $Id$ + +use strict; +use Getopt::Long; + +my $version = '$Rev$'; +$version =~ s/\$Rev:\s*(\d+)\s*\$/$1/; +my $revokestyle = "hide"; +my $columns = 2; +my $creationdate = scalar(localtime); + +sub version($) { + my $fd = shift; + print $fd "gpg-key2ps $version - (c) 2001-2008 Simon Richter, Thijs Kinkhorst, Christoph Berg\n"; +} + +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}, + '-1' => \$opts->{1}, +)) { + 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 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 ( `which paperconf` && $? == 0 ) { + $w=`paperconf -w`; + $h=`paperconf -h`; + chomp($w); + chomp($h); +} else { # Default to A4. - w=596 - h=842 -fi - -cat <> exch get + show +} def + /pub { condhline 50 y moveto (pub) show - 70 y moveto show show (/) show show + 70 y moveto show showAlgorithm (/) show show 150 y moveto show 200 y moveto show newline @@ -135,80 +162,131 @@ cat <) { + # we don't use these + if ( /^(tru|uat):/ ) { next; } + # 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:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:([^:]*):.*/ ) { + 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/\\x([0-9a-f][0-9a-f])/ chr(hex($1)) /gie; + $_ = `echo "$_" | iconv -ct latin1`; + s/^uid:[^:r]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:([^:]*):.*/ ($1) uid/; + # revoked user id + if (s/^uid:r[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:([^:]*):.*/ ($1) revuid/) { + next if $revokestyle eq "hide"; + } + # subkey + s/^sub:[^r:]*:([^:]*):([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) revsbk/) { + next if $revokestyle eq "hide"; + } + $numlines++; + # print this line + print; +} +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 and subkeys. 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 + +=over + +=item gpg(1) + +GNU Privacy Guard. + +=item http://pgp-tools.alioth.debian.org/ + +The homepage of B and the other tools bundled in B. + +=item http://www.debian.org/events/materials/business-cards/ + +B 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 + +=over + +=item (c) 2001-2005 Simon Richter + +=item (c) 2005-2007 Thijs Kinkhorst + +=item (c) 2005-2008 Christoph Berg + +=back