--- tests/keytrans.orig 1970-01-01 01:00:00.000000000 +0100 +++ tests/keytrans 2019-08-10 16:52:38.586758941 +0100 @@ -0,0 +1,230 @@ +#!/usr/bin/env bash + +# Tests to ensure that the monkeysphere is working + +# Authors: +# Daniel Kahn Gillmor +# Jameson Rollins +# Micah Anderson +# +# Copyright: 2008-2009 +# License: GPL v3 or later + +# these tests should all be able to run as a non-privileged user. + +# all subcommands in this script should complete without failure: +set -e +# piped commands should return the code of the first non-zero return +set -o pipefail + +# make sure the TESTDIR is an absolute path, not a relative one. +export TESTDIR=$(cd $(dirname "$0") && pwd) + +source "$TESTDIR"/common + +perl -MCrypt::OpenSSL::RSA -e 1 2>/dev/null || { echo "You must have the perl module Crypt::OpenSSL::RSA installed to run this test. +On debian-derived systems, you can set this up with: + apt-get install libcrypt-openssl-rsa-perl" ; exit 1; } + +perl -MDigest::SHA -e 1 2>/dev/null || { echo "You must have the perl module Digest::SHA installed to run this test. +On debian-derived systems, you can set this up with: + apt-get install libdigest-sha1-perl" ; exit 1; } + + +###################################################################### +### SETUP VARIABLES + +## set up some variables to ensure that we're operating strictly in +## the tests, not system-wide: + +mkdir -p "$TESTDIR"/tmp +TEMPDIR=$(mktemp -d "${TMPDIR:-$TESTDIR/tmp}/ms.XXX") + +mkdir "$TEMPDIR"/bin +ln -s "$TESTDIR"/../src/share/keytrans "$TEMPDIR"/bin/openpgp2ssh +ln -s "$TESTDIR"/../src/share/keytrans "$TEMPDIR"/bin/pem2openpgp +ln -s "$TESTDIR"/../src/share/keytrans "$TEMPDIR"/bin/keytrans + +# Use the local copy of executables first, instead of system ones. +# This should help us test without installing. +export PATH="$TEMPDIR"/bin:"$PATH" + +## setup trap +trap failed_cleanup EXIT + +###################################################################### +### TEST KEYTRANS + +echo "##################################################" +echo "### generating openpgp key..." +export GNUPGHOME="$TEMPDIR" +chmod 700 "$TEMPDIR" + + +# create the key with the same preferences that monkeysphere uses. +cat > "$TEMPDIR"/gpg.conf < "$TEMPDIR"/gpg-agent.conf < \ + "$TEMPDIR"/test.pem + +gpg --export-secret-keys > "$TEMPDIR"/secret.key + +PEM2OPENPGP_USAGE_FLAGS=sign,certify \ +PEM2OPENPGP_TIMESTAMP="$timestamp" pem2openpgp testtest \ + < "$TEMPDIR"/test.pem > "$TEMPDIR"/converted.secret.key + +echo "##################################################" +echo "### reconvert key, and compare to key in gpg keyring..." +diff -u \ + <(gpg --list-packets < "$TEMPDIR"/secret.key) \ + <(gpg --list-packets < "$TEMPDIR"/converted.secret.key) + +diff -u \ + <(hd "$TEMPDIR"/secret.key) \ + <(hd "$TEMPDIR"/converted.secret.key) + +KEYFPR=$(gpg --fingerprint --with-colons --list-keys | awk -F: '/^fpr:/{ if (ok) { print $10 } ; ok=0 } /^pub:/{ ok=1 }') +KEYID=$(printf "%s" "$KEYFPR" | cut -b25-40) + +echo "conversions look good!" + +echo "Now working with key $KEYID at time $timestamp" + +gpg --check-trustdb +gpg --list-keys + + +echo "##################################################" +echo "### test User ID addition..." +gpg --export-secret-keys | \ +PEM2OPENPGP_TIMESTAMP="$timestamp" \ + PEM2OPENPGP_USAGE_FLAGS=sign,certify \ + keytrans adduserid "$KEYID" "monkeymonkey" | gpg --import + +gpg --check-trustdb +gpg --list-keys + +cat >"$TEMPDIR"/expectedout <"$TEMPDIR"/expectedout < "$TEMPDIR"/newkey.gpg + +NEWKEYFPR=$(< "$TEMPDIR"/newkey.gpg keytrans listfprs) +NEWKEYID=$( printf "%s" "$NEWKEYFPR" | cut -b25-40) + +< "$TEMPDIR"/newkey.gpg gpg --import + +gpg --export-secret-keys | \ +PEM2OPENPGP_TIMESTAMP="$timestamp" \ + keytrans adduserid "$KEYID" "baz" | gpg --import + +cat >"$TEMPDIR"/expectedout <"$TEMPDIR"/expectedout <