Small doc tweaks.
[pgp-tools.git] / gpg-key2ps / gpg-key2ps
1 #! /bin/sh
2 #
3 # gpg-key2ps: convert a PGP/GnuPG key into paper slips.
4 #
5 # $Id$
6
7 set -e
8
9 VERSION="0.4.0"
10 USAGE="Usage: $0 [-p papersize] [-r revoked-style] keyid-or-name"
11
12
13 if [ -z "$*" ]; then
14 echo $USAGE
15 exit 1
16 fi
17
18 KEYIDS=
19 REVOKESTYLE=hide
20
21 while [ -n "$1" ]; do
22 case "$1" in
23 -p)
24 PAPERSIZE=$2
25 export PAPERSIZE
26 shift 2
27 ;;
28 -p*)
29 PAPERSIZE=`echo $1 | sed -e 's/^-p//'`
30 export PAPERSIZE
31 shift 1
32 ;;
33 -r)
34 REVOKESTYLE=$2
35 shift 2
36 ;;
37 -r*)
38 REVOKESTYLE=`echo $1 | sed -e 's/^-r//'`
39 shift 1
40 ;;
41 -*)
42 echo $USAGE
43 exit 1
44 ;;
45 *)
46 KEYIDS=$1
47 shift 1
48 ;;
49 esac
50 done
51
52 case "$REVOKESTYLE" in
53 grey|hide|note|show|strike)
54 ;;
55 *)
56 echo >&2 "Unknown style \"$REVOKESTYLE\". Please use one of"
57 echo >&2 " grey - Print text in grey"
58 echo >&2 " hide - Don't show revoked uids"
59 echo >&2 " note - Add \"(revoked)\""
60 echo >&2 " show - List revoked uids normally"
61 echo >&2 " strike - Strike through lines"
62 exit 1
63 ;;
64 esac
65
66 TMPFILE=`mktemp -t gpg-key2ps.XXXXXX`
67
68 if ! gpg --fingerprint --with-colons $KEYIDS 2>/dev/null >$TMPFILE; then
69 echo >&2 "Key not found. Try 'gpg --list-keys'"
70 rm $TMPFILE
71 exit 1
72 fi
73
74 NUMLINES=$((`wc -l <$TMPFILE` + `grep '^pub:' $TMPFILE | wc -l` - 1))
75
76 if test -x /usr/bin/paperconf; then
77 w=`paperconf -w`
78 h=`paperconf -h`
79 else
80 # Default to A4.
81 w=596
82 h=842
83 fi
84
85 cat <<EOF
86 %!PS-Adobe-3.0
87 %%BoundingBox: 0 0 $w $h
88 %%Title:
89 %%Creator: gpg-key2ps $VERSION
90 EOF
91 echo "%%CreationDate: `date`"
92 cat <<EOF
93 %%Pages: 1
94 %%EndComments
95
96 %%Page: 1 1
97
98 /w $w def
99 /h $h def
100
101 /Times-Roman findfont 9 scalefont setfont
102
103 /newline {
104 /y y 10 sub def
105 } def
106
107 /hline {
108 30 y 3 add moveto
109 w 2 div 30 sub y 3 add lineto stroke
110 newline
111 } def
112
113 /needhline {
114 /condhline { hline } def
115 } def
116
117 /noneedhline {
118 /condhline { } def
119 } def
120
121 /pub {
122 condhline
123 50 y moveto (pub) show
124 70 y moveto show show (/) show show
125 150 y moveto show
126 200 y moveto show
127 newline
128 needhline
129 } def
130
131 /fpr {
132 70 y moveto (Key fingerprint = ) show show
133 newline
134 } def
135
136 /uid {
137 50 y moveto (uid) show
138 200 y moveto show
139 newline
140 } def
141
142 EOF
143
144 case "$REVOKESTYLE" in
145 grey)
146 echo "/revuid {"
147 echo " .5 setgray"
148 echo " uid"
149 echo " 0 setgray"
150 echo "} def"
151 ;;
152 hide)
153 echo "/revuid {} def"
154 ;;
155 note)
156 echo "/revuid {"
157 echo " 50 y moveto (uid) show"
158 echo " 200 y moveto show ([revoked]) show"
159 echo " newline"
160 echo "} def"
161 ;;
162 show)
163 echo "/revuid { uid } def"
164 ;;
165 strike)
166 echo "/revuid {"
167 echo " uid"
168 echo " 45 y 9 add moveto h 2 div 45 sub y 18 add lineto stroke"
169 echo "} def"
170 ;;
171 esac
172
173 cat <<EOF
174
175 /sbk {
176 50 y moveto (sub) show
177 70 y moveto show show (/) show show
178 150 y moveto show
179 newline
180 } def
181
182 /key {
183 noneedhline
184 EOF
185 sed -e '/^tru:/d' \
186 -e '/^uat:/d' \
187 -e 's/^pub:[^:]*:\([^:]*\):1:.\{8,8\}\(.\{8,8\}\):\([^:]*\):[^:]*:[^:]*:[^:]*:\([^:]*\):[^:]*:[^:]*:.*/ (\4) (\3) (\2) (R) (\1) pub/' \
188 -e 's/^pub:[^:]*:\([^:]*\):17:.\{8,8\}\(.\{8,8\}\):\([^:]*\):[^:]*:[^:]*:[^:]*:\([^:]*\):[^:]*:[^:]*:.*/ (\4) (\3) (\2) (D) (\1) pub/' \
189 -e 's/^fpr:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\):.*/ (\1) fpr/' \
190 -e 's/(\(.\{16,16\}\)\(.\{16,16\}\)) fpr/(@split@\1@ @split@\2@) fpr/' \
191 -e 's/@split@\(.\{2,2\}\)\(.\{2,2\}\)\(.\{2,2\}\)\(.\{2,2\}\)\(.\{2,2\}\)\(.\{2,2\}\)\(.\{2,2\}\)\(.\{2,2\}\)@/\1 \2 \3 \4 \5 \6 \7 \8/g' \
192 -e 's/(\(.\{20,20\}\)\(.\{20,20\}\)) fpr/(@split@\1@ @split@\2@) fpr/' \
193 -e 's/@split@\(.\{4,4\}\)\(.\{4,4\}\)\(.\{4,4\}\)\(.\{4,4\}\)\(.\{4,4\}\)@/\1 \2 \3 \4 \5/g' \
194 -e 's/^uid:[^:r]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\):.*/ (\1) uid/' \
195 -e 's/^uid:r[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\):.*/ (\1) revuid/' \
196 -e 's/^sub:[^:]*:\([^:]*\):[^:]*:.\{8,8\}\(.\{8,8\}\):\([^:]*\):[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:.*/ (\3) (\2) (g) (\1) sbk/' \
197 <$TMPFILE
198 cat <<EOF
199 } def
200
201 EOF
202 echo "/numlines $(($NUMLINES + 1)) def"
203 cat <<EOF
204 /num w 16 sub 10 div numlines div def
205
206 /column {
207 /y w 20 sub def
208 1 1 num {
209 gsave
210 0 0 h 2 div w rectclip
211 /upper y 11 add def
212 key
213 newline
214 /lower y 11 add def
215 0 upper h 2 div upper h 2 div lower 0 lower 0 upper moveto lineto lineto lineto lineto stroke
216 grestore
217 } for
218 } def
219
220 w 0 translate
221 90 rotate
222 column
223 h 2 div 0 translate
224 column
225
226 showpage
227
228 %%Trailer
229 %%EOF
230 EOF
231
232 rm $TMPFILE