Skip to content

Commit 1e9b6f1

Browse files
committed
Improved GPG key handling
This allows enforcing that SHA1 is weak on systems where this is not the default.
1 parent c209be5 commit 1e9b6f1

File tree

1 file changed

+40
-21
lines changed

1 file changed

+40
-21
lines changed

scripts/verify-git-tag

Lines changed: 40 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
# mainstream/master
88
# Default ref: HEAD
99
set -euo pipefail
10+
shopt -s extglob
1011
: "${KEYRING_DIR_GIT=}" "${NO_CHECK=}" "${DEBUG=}" "${VERBOSE=0}"
1112
unset GNUPGHOME tags tag hash_len format expected_hash BUILDER_DIR
1213

@@ -37,33 +38,51 @@ case ${CHECK=signed-tag} in
3738
;;
3839
esac
3940

41+
case ${SHA1_IS_WEAK=1} in
42+
(0|false) SHA1_IS_WEAK=;;
43+
(1|true) SHA1_IS_WEAK='weak-digest sha1\nweak-digest sha224\n';;
44+
(*) printf 'Invalid value for $SHA1_IS_WEAK: %q\n' "$SHA1_IS_WEAK">&2; exit 1;;
45+
esac
46+
47+
case ${FORCE_KEYRING_REGEN=false} in
48+
(false|true) :;;
49+
(*) printf 'Invalid value for $FORCE_KEYRING_REGEN: %q\n' "$FORCE_KEYRING_REGEN">&2; exit 1;;
50+
esac
51+
4052
if [ -n "$KEYRING_DIR_GIT" ]; then
4153
GNUPGHOME="$(readlink -m "$KEYRING_DIR_GIT")"
4254
export GNUPGHOME
4355
if [ ! -d "$GNUPGHOME" ]; then
44-
mkdir -p "$GNUPGHOME"
45-
chmod 700 "$GNUPGHOME"
46-
gpg --import qubes-developers-keys.asc
47-
# Trust Qubes Master Signing Key
48-
echo '427F11FD0FAA4B080123F01CDDFA1A3E36879494:6:' | gpg --import-ownertrust
49-
fi
50-
if [ qubes-developers-keys.asc -nt "$GNUPGHOME/pubring.gpg" ]; then
51-
gpg --import qubes-developers-keys.asc
52-
touch "$GNUPGHOME/pubring.gpg"
56+
mkdir -p -m 0700 -- "$GNUPGHOME"
5357
fi
54-
maintainers=$(env | grep -oP '^ALLOWED_COMPONENTS_[a-fA-F0-9]{40}') || :
55-
for maintainer in $maintainers
56-
do
57-
read -a allowed_components <<<"${!maintainer}"
58-
COMPONENT="$(basename "$1")"
59-
COMPONENT="${COMPONENT//./builder}"
60-
if elementIn "$COMPONENT" "${allowed_components[@]}"; then
61-
keyid=${maintainer#ALLOWED_COMPONENTS_}
62-
gpg --import "$BUILDER_DIR/keys/$keyid.asc" || exit 1
63-
echo "$keyid:6:" | gpg --import-ownertrust
58+
if :; then
59+
flock 9
60+
if [ "$FORCE_KEYRING_REGEN" = true ]; then rm -rf -- "$GNUPGHOME"/!(.|..|setup.lock); fi
61+
if [ ! -f "$GNUPGHOME/import.done" ]; then
62+
gpg --import qubes-developers-keys.asc
63+
# Trust Qubes Master Signing Key
64+
echo '427F11FD0FAA4B080123F01CDDFA1A3E36879494:6:' | gpg --import-ownertrust
65+
printf "weak-digest md5\nweak-digest ripemd160\n$SHA1_IS_WEAK" > "$GNUPGHOME/gpg.conf"
66+
if [ qubes-developers-keys.asc -nt "$GNUPGHOME/pubring.gpg" ]; then
67+
gpg --import qubes-developers-keys.asc
68+
touch "$GNUPGHOME/pubring.gpg"
69+
fi
70+
maintainers=$(env | grep -oP '^ALLOWED_COMPONENTS_[a-fA-F0-9]{40}') || :
71+
for maintainer in $maintainers
72+
do
73+
read -a allowed_components <<<"${!maintainer}"
74+
COMPONENT="$(basename "$1")"
75+
COMPONENT="${COMPONENT//./builder}"
76+
if elementIn "$COMPONENT" "${allowed_components[@]}"; then
77+
keyid=${maintainer#ALLOWED_COMPONENTS_}
78+
gpg --import "$BUILDER_DIR/keys/$keyid.asc" || exit 1
79+
echo "$keyid:6:" | gpg --import-ownertrust
80+
fi
81+
done
82+
gpgconf --kill gpg-agent
83+
touch -- "$GNUPGHOME/import.done"
6484
fi
65-
done
66-
gpgconf --kill gpg-agent
85+
fi 9> "$GNUPGHOME/setup.lock"
6786
fi
6887

6988
pushd "$1" > /dev/null || exit 2

0 commit comments

Comments
 (0)