From: Jef Poskanzer <jef@ee.lbl.gov>
To: cypherpunks@toad.com
Message Hash: 2081fdc44e128b638eb948778fa7e54243938f81ba0c6bd252e861e49ee8d0d2
Message ID: <199405160714.AAA09329@hot.ee.lbl.gov>
Reply To: N/A
UTC Datetime: 1994-05-16 07:14:22 UTC
Raw Date: Mon, 16 May 94 00:14:22 PDT
From: Jef Poskanzer <jef@ee.lbl.gov>
Date: Mon, 16 May 94 00:14:22 PDT
To: cypherpunks@toad.com
Subject: a couple of shell scripts for use with PGP
Message-ID: <199405160714.AAA09329@hot.ee.lbl.gov>
MIME-Version: 1.0
Content-Type: text/plain
pgpextract: Given one or more keyids or userids, either on the command
line or on stdin, extracts the keys and writes them to stdout.
Basically just a more useful interface for 'pgp -kxa'.
pgpgetweb: Given one or more keyids or userids, either on the command
line or on stdin, expands the "web of trust" out to the specified depth
and writes the resulting keyids to stdout. You could feed the
resulting file to pgpextract to make a subset keyring of only your
'close neighbors'.
If I come up with more scripts I'll add them to the sharchive in
my ftp dir on netcom.
---
Jef
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
# README
# pgpscripts.1
# Makefile
# pgpextract
# pgpgetweb
# This archive created: Mon May 16 00:11:13 1994
export PATH; PATH=/bin:$PATH
echo shar: extracting "'README'" '(536 characters)'
if test -f 'README'
then
echo shar: will not over-write existing file "'README'"
else
sed 's/^X//' << \SHAR_EOF > 'README'
X pgpscripts - shell scripts for using PGP
X version of 15may94
X
XSome simple scripts that give a more Unix-like interface to some
Xof PGP's functions. See the manual entry for more details.
X
XFiles in this distribution:
X README this
X Makefile guess
X pgpscripts.1 manual entry
X pgpextract script
X pgpgetweb ...
X
XTo install:
X Unpack the files.
X Edit the Makefile to change the configuration options if necessary.
X Make install.
X
XComments to:
X Jef Poskanzer jef@netcom.com jef@well.sf.ca.us
SHAR_EOF
if test 536 -ne "`wc -c < 'README'`"
then
echo shar: error transmitting "'README'" '(should have been 536 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'pgpscripts.1'" '(744 characters)'
if test -f 'pgpscripts.1'
then
echo shar: will not over-write existing file "'pgpscripts.1'"
else
sed 's/^X//' << \SHAR_EOF > 'pgpscripts.1'
X.TH pgpscripts 1 "15 May 1993"
X.SH NAME
Xpgpextract, pgpgetweb - shell scripts for using PGP
X.SH SYNOPSIS
X.B pgpextract
X.RI [ keyid... ]
X.br
X.B pgpgetweb
X.I depth
X.RI [ keyid... ]
X.SH DESCRIPTION
X.PP
XDescription of each script:
X.TP
X.I pgpextract
XGiven one or more keyids or userids, either on the command line or
Xon stdin, extracts the keys and writes them to stdout. Basically
Xjust a more useful interface for 'pgp -kxa'.
X.TP
X.I pgpgetweb
XGiven one or more keyids or userids, either on the command line or
Xon stdin, expands the "web of trust"
Xout to the specified depth and writes the resulting keyids to stdout.
XYou could feed the resulting file to
X.B pgpextract
Xto make a subset keyring of only your 'close neighbors'.
X.SH "SEE ALSO"
Xpgp(1)
SHAR_EOF
if test 744 -ne "`wc -c < 'pgpscripts.1'`"
then
echo shar: error transmitting "'pgpscripts.1'" '(should have been 744 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'Makefile'" '(592 characters)'
if test -f 'Makefile'
then
echo shar: will not over-write existing file "'Makefile'"
else
sed 's/^X//' << \SHAR_EOF > 'Makefile'
X# CONFIGURE: the directory where you want the executables installed
XINSTDIR = /usr/local/bin
X
X# CONFIGURE: the directory tree where you want the man pages installed
XMANDIR = /usr/local/man
X
X# End of configurable definitions.
X
XSCRIPTS = pgpextract pgpgetweb
X
Xall:
X
Xinstall: all
X for i in $(SCRIPTS) ; do \
X rm -f $(INSTDIR)/$$i ; \
X cp $$i $(INSTDIR) ; \
X done
X rm -f $(MANDIR)/man1/pgpscripts.1
X cp pgpscripts.1 $(MANDIR)/man1
X for i in $(SCRIPTS) ; do ( \
X rm -f $(MANDIR)/man1/$$i.1 ; \
X echo '.so man1/pgpscripts.1' > $(MANDIR)/man1/$$i.1 ; \
X ) done
X
Xclean:
X rm -f core
SHAR_EOF
if test 592 -ne "`wc -c < 'Makefile'`"
then
echo shar: error transmitting "'Makefile'" '(should have been 592 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'pgpextract'" '(894 characters)'
if test -f 'pgpextract'
then
echo shar: will not over-write existing file "'pgpextract'"
else
sed 's/^X//' << \SHAR_EOF > 'pgpextract'
X#!/bin/sh
X#
X# pgpextract - extract multiple pgp keys onto stdout
X#
X# Copyright (C) 1994 by Jef Poskanzer <jef@netcom.com>.
X# Permission to use, copy, modify, and distribute this software and its
X# documentation for any purpose and without fee is hereby granted, provided
X# that the above copyright notice appear in all copies and that both that
X# copyright notice and this permission notice appear in supporting
X# documentation. This software is provided "as is" without express or
X# implied warranty.
X
Xout=peo.$$
Xkey=pek.$$
Xkeya=${key}.asc
Xrm -f ${out} ${keya}
Xumask 077
X
X(
X if [ $# -eq 0 ] ; then
X cat
X else
X while [ $# -ne 0 ] ; do
X echo $1
X shift
X done
X fi
X) | (
X while read id ; do
X pgp -kxa ${id} ${key} > ${out} 2>&1
X if [ -z "`grep 'Key not found' ${out}`" ] ; then
X cat ${keya}
X else
X echo "Keyid ${id} not found." >&2
X fi
X rm -f ${out} ${keya}
X done
X)
SHAR_EOF
if test 894 -ne "`wc -c < 'pgpextract'`"
then
echo shar: error transmitting "'pgpextract'" '(should have been 894 characters)'
fi
chmod +x 'pgpextract'
fi # end of overwriting check
echo shar: extracting "'pgpgetweb'" '(1338 characters)'
if test -f 'pgpgetweb'
then
echo shar: will not over-write existing file "'pgpgetweb'"
else
sed 's/^X//' << \SHAR_EOF > 'pgpgetweb'
X#!/bin/sh
X#
X# pgpgetweb - finds the keyids that comprise the 'web of trust' for
X# specified ids
X#
X# Copyright (C) 1994 by Jef Poskanzer <jef@netcom.com>.
X# Permission to use, copy, modify, and distribute this software and its
X# documentation for any purpose and without fee is hereby granted, provided
X# that the above copyright notice appear in all copies and that both that
X# copyright notice and this permission notice appear in supporting
X# documentation. This software is provided "as is" without express or
X# implied warranty.
X
Xif [ $# -eq 0 ] ; then
X echo "usage: $0 depth [keyid...]" >&2
X exit 1
Xfi
Xdepth=$1
Xshift
X
Xids=/tmp/pgwid.$$
Xtodo=/tmp/pgwtd.$$
Xout=/tmp/pgwo.$$
Xrm -f ${ids} ${todo} ${out}
Xumask 077
X(
X if [ $# -eq 0 ] ; then
X cat
X else
X while [ $# -ne 0 ] ; do
X echo $1
X shift
X done
X fi
X) | sort -u > ${ids}
Xcat ${ids} > ${todo}
X
Xecho "Starting with `cat ${ids} | wc -l` keyids." >&2
Xn=0
Xwhile [ ${n} -lt ${depth} ] ; do
X cat ${todo} | (
X while read id ; do
X pgp -kvv ${id} 2>&1 | egrep '^sig ' | awk '{printf "0x%s\n", $2}'
X done
X ) | sort -u > ${out}
X comm -13 ${ids} ${out} > ${todo}
X cat ${ids} >> ${out}
X sort -u ${out} > ${ids}
X
X n=`echo ${n}+1 | bc`
X echo "At depth ${n}, `cat ${ids} | wc -l` keyids." >&2
Xdone
X
Xcat ${ids}
Xrm -f ${ids} ${todo} ${out}
SHAR_EOF
if test 1338 -ne "`wc -c < 'pgpgetweb'`"
then
echo shar: error transmitting "'pgpgetweb'" '(should have been 1338 characters)'
fi
chmod +x 'pgpgetweb'
fi # end of overwriting check
# End of shell archive
exit 0
Return to May 1994
Return to “Jef Poskanzer <jef@ee.lbl.gov>”
1994-05-16 (Mon, 16 May 94 00:14:22 PDT) - a couple of shell scripts for use with PGP - Jef Poskanzer <jef@ee.lbl.gov>