summaryrefslogtreecommitdiff
path: root/tools/ring-a-party
diff options
context:
space:
mode:
Diffstat (limited to 'tools/ring-a-party')
-rwxr-xr-xtools/ring-a-party114
1 files changed, 114 insertions, 0 deletions
diff --git a/tools/ring-a-party b/tools/ring-a-party
new file mode 100755
index 0000000..01e0f3f
--- /dev/null
+++ b/tools/ring-a-party
@@ -0,0 +1,114 @@
+#!/bin/sh
+# ring-a-party - print a keyring suitable for a key signing party
+# Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+#
+# This file is free software; as a special exception the author gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+if [ $# -lt 1 ]; then
+ echo "usage: ring-a-party keyring [headerline]" >&2
+ exit 1
+fi
+
+keyring="$1"
+hdrline="$1"
+if [ $# -gt 1 ]; then
+ hdrline="$2"
+fi
+
+if [ ! -f $keyring ]; then
+ echo "ring-a-party: '$keyring': no such file" >&2
+ exit 1
+fi
+
+echo "ring-a-party: output will be written to 'a.pub'" >&2
+
+
+gpg --dry-run --with-fingerprint --with-colons $keyring \
+ | gawk -v "KEYRING=$hdrline" '
+BEGIN { FS=":"
+ algos[1] = "RSA";
+ algos[16] = "Elgamal";
+ algos[17] = "DSA";
+ any = 0;
+ lines = -1;
+ page = 0;
+ now = strftime("%b %d %H:%M %Y");
+ }
+END {
+ if (any) myflush();
+}
+$1 == "pub" {
+ if( any ) myflush();
+ uidcount = 0;
+ signencrypt = 0;
+ uids[uidcount++] = $10;
+ nbits = $3;
+ keyid = substr($5,9);
+ created = $6;
+ expires = $7;
+ algostr = mapalgo($4);
+ if( $4 == 20 || $4 == 1 ) signencrypt = 1;
+ any = 1;
+ }
+$1 == "fpr" { fpr = $10 }
+$1 == "uid" { uids[uidcount++] = $10 }
+$1 == "sub" { if( $4 != 17 && $4 != 3 ) signencrypt=1 }
+
+function myflush()
+{
+ # fixme: take lines to print here into account
+ if( lines > 45 || lines == -1 ) {
+ if( lines != -1 ) printf "\f";
+ page++;
+ printf "%s %-50.50s Page %d\n\n", now, KEYRING, page ;
+ printf " Type Bits KeyID Created Expires Algorithm Use\n\n";
+ lines = 1;
+ }
+ printf "[ ] pub %04d 0x%s %10s %10s %-10s %15s\n",
+ nbits, keyid, created, expires == ""? "----------":expires, algostr,
+ signencrypt == 1? "Sign & Encrypt":"Sign only";
+ length(fpr) == 40 ? printfpr20( fpr ) : printfpr16( fpr );
+ lnes += 2;
+ for( i=0; i < uidcount; i++ ) {
+ printf "( ) uid %s\n", uids[i];
+ lines++;
+ }
+ printf "\n\n";
+ lines += 2;
+}
+
+function mapalgo( no )
+{
+ if( no in algos )
+ return algos[no];
+ return sprintf( "algoID=%ds", no );
+}
+
+
+function printfpr16( s )
+{
+ printf " f16 Fingerprint16 =";
+ for(i=0; i < 16; i++ ) {
+ if( i == 8 ) printf " ";
+ printf " %s", substr( s, i*2+1, 2 );
+ }
+ printf "\n"
+}
+
+function printfpr20( s )
+{
+ printf " f20 Fingerprint20 =";
+ for(i=0; i < 10; i++ ) {
+ if( i == 5 ) printf " ";
+ printf " %s", substr( s, i*4+1, 4 );
+ }
+ printf "\n"
+}
+
+' | tee a.pub | gpg --print-mds