summaryrefslogtreecommitdiff
path: root/eclass
diff options
context:
space:
mode:
Diffstat (limited to 'eclass')
-rw-r--r--eclass/Manifest.gzbin39031 -> 39023 bytes
-rw-r--r--eclass/ecm-common.eclass10
-rw-r--r--eclass/verify-sig.eclass74
3 files changed, 75 insertions, 9 deletions
diff --git a/eclass/Manifest.gz b/eclass/Manifest.gz
index 980253f12cef..e80e689b4e8b 100644
--- a/eclass/Manifest.gz
+++ b/eclass/Manifest.gz
Binary files differ
diff --git a/eclass/ecm-common.eclass b/eclass/ecm-common.eclass
index ba6840d75a6d..7f5d3d1e9915 100644
--- a/eclass/ecm-common.eclass
+++ b/eclass/ecm-common.eclass
@@ -165,8 +165,16 @@ if [[ ${ECM_KCM_TARGETS} ]]; then
KF6_BDEPEND+=( "kde-frameworks/kcmutils:6" )
fi
+KF6_BDEPEND+=( "dev-qt/qtbase:6" )
+
if $(ver_test ${KFMIN} -lt 5.240) && [[ ${KF6_BDEPEND} && ${KF5_BDEPEND} ]]; then
- BDEPEND+=" || ( ( ${KF6_BDEPEND[*]} ) ( ${KF5_BDEPEND[*]} ) )"
+ BDEPEND+=" || (
+ ( ${KF6_BDEPEND[*]} )
+ (
+ ${KF5_BDEPEND[*]}
+ dev-qt/qtcore:5
+ )
+ )"
else
BDEPEND+=" ${KF6_BDEPEND[*]}"
fi
diff --git a/eclass/verify-sig.eclass b/eclass/verify-sig.eclass
index b74ed78290aa..0e6b9b43e557 100644
--- a/eclass/verify-sig.eclass
+++ b/eclass/verify-sig.eclass
@@ -57,6 +57,7 @@ IUSE="verify-sig"
#
# - minisig -- verify signatures with (base64) Ed25519 public key using app-crypt/minisign
# - openpgp -- verify PGP signatures using app-crypt/gnupg (the default)
+# - sigstore -- verify signatures using dev-python/sigstore
# - signify -- verify signatures with Ed25519 public key using app-crypt/signify
: "${VERIFY_SIG_METHOD:=openpgp}"
@@ -75,6 +76,14 @@ case ${VERIFY_SIG_METHOD} in
signify)
BDEPEND="verify-sig? ( app-crypt/signify )"
;;
+ sigstore)
+ BDEPEND="
+ verify-sig? (
+ dev-python/sigstore
+ sec-keys/sigstore-trusted-root
+ )
+ "
+ ;;
*)
die "${ECLASS}: unknown method '${VERIFY_SIG_METHOD}'"
;;
@@ -89,8 +98,19 @@ esac
#
# The value of BROOT will be prepended to this path automatically.
#
-# NB: this variable is also used for non-OpenPGP signatures. The name
-# contains "OPENPGP" for historical reasons.
+# This variable is also used for non-OpenPGP signatures. The name
+# contains "OPENPGP" for historical reasons. It is not used
+# for sigstore, since it uses a single trusted root.
+
+# @ECLASS_VARIABLE: VERIFY_SIG_CERT_IDENTITY
+# @DEFAULT_UNSET
+# @DESCRIPTION:
+# --cert-identity passed to sigstore invocation.
+
+# @ECLASS_VARIABLE: VERIFY_SIG_CERT_OIDC_ISSUER
+# @DEFAULT_UNSET
+# @DESCRIPTION:
+# --cert-oidc-issuer passed to sigstore invocation.
# @ECLASS_VARIABLE: VERIFY_SIG_OPENPGP_KEYSERVER
# @DEFAULT_UNSET
@@ -108,7 +128,7 @@ esac
# in make.conf to enable. Note that this requires working Internet
# connection.
#
-# Supported for OpenPGP only.
+# Supported for OpenPGP and sigstore.
: "${VERIFY_SIG_OPENPGP_KEY_REFRESH:=no}"
# @FUNCTION: verify-sig_verify_detached
@@ -123,7 +143,17 @@ verify-sig_verify_detached() {
local sig=${2}
local key=${3}
- if [[ -z ${key} ]]; then
+ if [[ ${VERIFY_SIG_METHOD} == sigstore ]]; then
+ if [[ -n ${key:-${VERIFY_SIG_OPENPGP_KEY_PATH}} ]]; then
+ die "${FUNCNAME}: key unexpectedly specified for sigstore"
+ fi
+ if [[ -z ${VERIFY_SIG_CERT_IDENTITY} ]]; then
+ die "${FUNCNAME}: VERIFY_SIG_CERT_IDENTITY must be specified for sigstore"
+ fi
+ if [[ -z ${VERIFY_SIG_CERT_OIDC_ISSUER} ]]; then
+ die "${FUNCNAME}: VERIFY_SIG_CERT_OIDC_ISSUER must be specified for sigstore"
+ fi
+ elif [[ -z ${key} ]]; then
if [[ -z ${VERIFY_SIG_OPENPGP_KEY_PATH} ]]; then
die "${FUNCNAME}: no key passed and VERIFY_SIG_OPENPGP_KEY_PATH unset"
else
@@ -132,7 +162,6 @@ verify-sig_verify_detached() {
fi
local extra_args=()
- [[ ${VERIFY_SIG_OPENPGP_KEY_REFRESH} == yes ]] || extra_args+=( -R )
if [[ -n ${VERIFY_SIG_OPENPGP_KEYSERVER+1} ]]; then
[[ ${VERIFY_SIG_METHOD} == openpgp ]] ||
die "${FUNCNAME}: VERIFY_SIG_OPENPGP_KEYSERVER is not supported"
@@ -152,10 +181,15 @@ verify-sig_verify_detached() {
einfo "Verifying ${filename} ..."
case ${VERIFY_SIG_METHOD} in
minisig)
- minisign -V -P "$(<"${key}")" -x "${sig}" -m "${file}" ||
+ minisign "${extra_args[@]}" \
+ -V -P "$(<"${key}")" -x "${sig}" -m "${file}" ||
die "minisig signature verification failed"
;;
openpgp)
+ if [[ ${VERIFY_SIG_OPENPGP_KEY_REFRESH} != yes ]]; then
+ extra_args+=( -R )
+ fi
+
# gpg can't handle very long TMPDIR
# https://bugs.gentoo.org/854492
local -x TMPDIR=/tmp
@@ -165,9 +199,27 @@ verify-sig_verify_detached() {
die "PGP signature verification failed"
;;
signify)
- signify -V -p "${key}" -m "${file}" -x "${sig}" ||
+ signify "${extra_args[@]}" \
+ -V -p "${key}" -m "${file}" -x "${sig}" ||
die "Signify signature verification failed"
;;
+ sigstore)
+ if [[ ${VERIFY_SIG_OPENPGP_KEY_REFRESH} != yes ]]; then
+ extra_args+=( --offline )
+ fi
+
+ cp -r "${BROOT}"/usr/share/sigstore-gentoo/{.cache,.local} \
+ "${HOME}"/ || die
+ sigstore verify identity "${extra_args[@]}" \
+ --bundle "${sig}" \
+ --cert-identity "${VERIFY_SIG_CERT_IDENTITY}" \
+ --cert-oidc-issuer "${VERIFY_SIG_CERT_OIDC_ISSUER}" \
+ "${file}" ||
+ die "Sigstore signature verification failed"
+ ;;
+ *)
+ die "${FUNCNAME} not supported with ${VERIFY_SIG_METHOD}"
+ ;;
esac
}
@@ -229,6 +281,9 @@ verify-sig_verify_message() {
signify -V -e -p "${key}" -m "${output_file}" -x "${file}" ||
die "Signify signature verification failed"
;;
+ *)
+ die "${FUNCNAME} not supported with ${VERIFY_SIG_METHOD}"
+ ;;
esac
}
@@ -362,6 +417,9 @@ verify-sig_verify_signed_checksums() {
-x "${checksum_file}" "${files[@]}" ||
die "Signify signature verification failed"
;;
+ *)
+ die "${FUNCNAME} not supported with ${VERIFY_SIG_METHOD}"
+ ;;
esac
}
@@ -380,7 +438,7 @@ verify-sig_src_unpack() {
# find all distfiles and signatures, and combine them
for f in ${A}; do
found=
- for suffix in .asc .sig .minisig; do
+ for suffix in .asc .sig .minisig .sigstore; do
if [[ ${f} == *${suffix} ]]; then
signatures+=( "${f}" )
found=sig