gnupg/tests/openpgp/export.test

111 lines
2.7 KiB
Bash
Executable File

#!/bin/sh
. $srcdir/defs.inc || exit 3
check_exported_public_key()
{
$GPG --list-packets $1 >$1.packets
grep '^:public key packet:' $1.packets >/dev/null
grep "^ keyid: .*$KEY$" $1.packets >/dev/null
grep '^:user ID packet:' $1.packets >/dev/null
grep "^:signature packet:.*keyid.*$KEY" $1.packets >/dev/null
rm $1.packets
}
check_armored_public_key()
{
grep '^-----BEGIN PGP PUBLIC KEY BLOCK-----$' $1 >/dev/null
grep '^-----END PGP PUBLIC KEY BLOCK-----$' $1 >/dev/null
check_exported_public_key $1
}
check_exported_private_key()
{
$GPG --list-packets $1 >$1.packets
grep '^:secret key packet:' $1.packets >/dev/null
grep "^ keyid: .*$KEY$" $1.packets >/dev/null
grep '^:user ID packet:' $1.packets >/dev/null
grep "^:signature packet:.*keyid.*$KEY" $1.packets >/dev/null
rm $1.packets
}
check_armored_private_key()
{
grep '^-----BEGIN PGP PRIVATE KEY BLOCK-----$' $1 >/dev/null
grep '^-----END PGP PRIVATE KEY BLOCK-----$' $1 >/dev/null
check_exported_private_key $1
}
logfile="`pwd`/pinentry.log"
ppfile="`pwd`/passphrases"
rm -f -- $logfile $ppfile
touch $ppfile
prepare_passphrase()
{
echo $* >>$ppfile
}
prepare_passphrase_confirm()
{
echo "fake-entry being started to CONFIRM the weak phrase" >>$ppfile
}
assert_passphrases_consumed()
{
if test -s $ppfile; then
echo "Expected $ppfile to be empty, but these are enqueued:" >&2
cat "$ppfile" >&2
exit 1
fi
rm -f -- $logfile
}
export PINENTRY_USER_DATA="--logfile=$logfile --passphrasefile=$ppfile"
info "Checking key export."
for KEY in D74C5F22 C40FDECF ECABF51D
do
progress $KEY
$GPG --export $KEY >$KEY.public
check_exported_public_key $KEY.public
rm $KEY.public
$GPG --armor --export $KEY >$KEY.public
check_armored_public_key $KEY.public
rm $KEY.public
# test without --armor:
if [ $KEY = D74C5F22 ]; then
# Key D74C5F22 is protected by a passphrase. Prepare this
# one. Currently, GnuPG does not ask for an export passphrase
# in this case.
prepare_passphrase "$usrpass1"
fi
$GPG --export-secret-keys $KEY >$KEY.private
check_exported_private_key $KEY.private
rm $KEY.private
assert_passphrases_consumed
# test with --armor:
if [ $KEY = D74C5F22 ]; then
# Key D74C5F22 is protected by a passphrase. Prepare this
# one. Currently, GnuPG does not ask for an export passphrase
# in this case.
prepare_passphrase "$usrpass1"
fi
$GPG --armor --export-secret-keys $KEY >$KEY.private
check_armored_private_key $KEY.private
rm $KEY.private
assert_passphrases_consumed
done
progress_end