packaging: Add contrib installation
[platform/upstream/git.git] / t / lib-gpg.sh
old mode 100755 (executable)
new mode 100644 (file)
index 05824fa..9fc5241
@@ -1,29 +1,91 @@
-#!/bin/sh
+# We always set GNUPGHOME, even if no usable GPG was found, as
+#
+# - It does not hurt, and
+#
+# - we cannot set global environment variables in lazy prereqs because they are
+#   executed in an eval'ed subshell that changes the working directory to a
+#   temporary one.
+
+GNUPGHOME="$PWD/gpghome"
+export GNUPGHOME
+
+test_lazy_prereq GPG '
+       gpg_version=$(gpg --version 2>&1)
+       test $? != 127 || exit 1
 
-gpg_version=`gpg --version 2>&1`
-if test $? = 127; then
-       say "You do not seem to have gpg installed"
-else
        # As said here: http://www.gnupg.org/documentation/faqs.html#q6.19
-       # the gpg version 1.0.6 didn't parse trust packets correctly, so for
+       # the gpg version 1.0.6 did not parse trust packets correctly, so for
        # that version, creation of signed tags using the generated key fails.
        case "$gpg_version" in
-       'gpg (GnuPG) 1.0.6'*)
+       "gpg (GnuPG) 1.0.6"*)
                say "Your version of gpg (1.0.6) is too buggy for testing"
+               exit 1
                ;;
        *)
-               # key generation info: gpg --homedir t/lib-gpg --gen-key
-               # Type DSA and Elgamal, size 2048 bits, no expiration date.
-               # Name and email: C O Mitter <committer@example.com>
+               # Available key info:
+               # * Type DSA and Elgamal, size 2048 bits, no expiration date,
+               #   name and email: C O Mitter <committer@example.com>
+               # * Type RSA, size 2048 bits, no expiration date,
+               #   name and email: Eris Discordia <discord@example.net>
                # No password given, to enable non-interactive operation.
-               cp -R "$TEST_DIRECTORY"/lib-gpg ./gpghome
-               chmod 0700 gpghome
-               GNUPGHOME="$(pwd)/gpghome"
-               export GNUPGHOME
-               test_set_prereq GPG
+               # To generate new key:
+               #       gpg --homedir /tmp/gpghome --gen-key
+               # To write armored exported key to keyring:
+               #       gpg --homedir /tmp/gpghome --export-secret-keys \
+               #               --armor 0xDEADBEEF >> lib-gpg/keyring.gpg
+               #       gpg --homedir /tmp/gpghome --export \
+               #               --armor 0xDEADBEEF >> lib-gpg/keyring.gpg
+               # To export ownertrust:
+               #       gpg --homedir /tmp/gpghome --export-ownertrust \
+               #               > lib-gpg/ownertrust
+               mkdir "$GNUPGHOME" &&
+               chmod 0700 "$GNUPGHOME" &&
+               (gpgconf --kill gpg-agent || : ) &&
+               gpg --homedir "${GNUPGHOME}" --import \
+                       "$TEST_DIRECTORY"/lib-gpg/keyring.gpg &&
+               gpg --homedir "${GNUPGHOME}" --import-ownertrust \
+                       "$TEST_DIRECTORY"/lib-gpg/ownertrust &&
+               gpg --homedir "${GNUPGHOME}" </dev/null >/dev/null \
+                       --sign -u committer@example.com
                ;;
        esac
-fi
+'
+
+test_lazy_prereq GPGSM '
+       test_have_prereq GPG &&
+       # Available key info:
+       # * see t/lib-gpg/gpgsm-gen-key.in
+       # To generate new certificate:
+       #  * no passphrase
+       #       gpgsm --homedir /tmp/gpghome/ \
+       #               -o /tmp/gpgsm.crt.user \
+       #               --generate-key \
+       #               --batch t/lib-gpg/gpgsm-gen-key.in
+       # To import certificate:
+       #       gpgsm --homedir /tmp/gpghome/ \
+       #               --import /tmp/gpgsm.crt.user
+       # To export into a .p12 we can later import:
+       #       gpgsm --homedir /tmp/gpghome/ \
+       #               -o t/lib-gpg/gpgsm_cert.p12 \
+       #               --export-secret-key-p12 "committer@example.com"
+       echo | gpgsm --homedir "${GNUPGHOME}" \
+               --passphrase-fd 0 --pinentry-mode loopback \
+               --import "$TEST_DIRECTORY"/lib-gpg/gpgsm_cert.p12 &&
+
+       gpgsm --homedir "${GNUPGHOME}" -K |
+       grep fingerprint: |
+       cut -d" " -f4 |
+       tr -d "\\n" >"${GNUPGHOME}/trustlist.txt" &&
+
+       echo " S relax" >>"${GNUPGHOME}/trustlist.txt" &&
+       echo hello | gpgsm --homedir "${GNUPGHOME}" >/dev/null \
+              -u committer@example.com -o /dev/null --sign -
+'
+
+test_lazy_prereq RFC1991 '
+       test_have_prereq GPG &&
+       echo | gpg --homedir "${GNUPGHOME}" -b --rfc1991 >/dev/null
+'
 
 sanitize_pgp() {
        perl -ne '