From: Junio C Hamano <gitster@pobox.com>
To: "Uwe Kleine-König" <ukleinek@kernel.org>
Cc: git@vger.kernel.org,
Linus Torvalds <torvalds@linux-foundation.org>,
"Neal H. Walfield" <neal@walfield.org>
Subject: Re: [PATCH v1] gpg-interface: Signatures by expired keys are fine
Date: Wed, 04 Feb 2026 13:27:06 -0800 [thread overview]
Message-ID: <xmqqa4xonqs5.fsf@gitster.g> (raw)
In-Reply-To: <o2xni4463jlbmv226ngrlvepluqm43vg3fsifubanw6unhei77@wwzsa4ciqexw> ("Uwe Kleine-König"'s message of "Wed, 4 Feb 2026 22:18:08 +0100")
Uwe Kleine-König <ukleinek@kernel.org> writes:
> Hello,
>
> On Wed, Feb 04, 2026 at 09:26:09AM -0800, Junio C Hamano wrote:
>> Uwe Kleine-König <ukleinek@kernel.org> writes:
>>
>> > If a signature is done with a valid key and that key later expires, the
>> > signature should still be considered good.
>> >
>> > GnuPG exmits in this case something like:
>>
>> "emits".
>>
>> > diff --git a/gpg-interface.c b/gpg-interface.c
>> > index 47222bf31b6e..6635c6c8e16f 100644
>> > --- a/gpg-interface.c
>> > +++ b/gpg-interface.c
>> > @@ -382,7 +382,7 @@ static int verify_gpg_signed_buffer(struct signature_check *sigc,
>> >
>> > delete_tempfile(&temp);
>> >
>> > - ret |= !strstr(gpg_stdout.buf, "\n[GNUPG:] GOODSIG ");
>> > + ret |= !strstr(gpg_stdout.buf, "\n[GNUPG:] GOODSIG ") && !strstr(gpg_stdout.buf, "\n[GNUPG:] EXPKEYSIG ");
>>
>> Makes sense; I'll wrap this overlong line while queuing, though.
>
> Just to be sure: That means I don't resent with the typo fixed and an
> additional line break and you care to apply this patch?
Unless there are other things you want to update, no need to resend.
FYI, here is what I queued.
---- >8 ----
From: Uwe Kleine-König <ukleinek@kernel.org>
Date: Wed, 4 Feb 2026 16:23:06 +0100
Subject: [PATCH] gpg-interface: signatures by expired keys are fine
If a signature is made with a valid key and that key later expires, the
signature should still be considered good.
GnuPG emits in this case something like:
[GNUPG:] NEWSIG
gpg: Signature made Wed 26 Nov 2014 05:56:50 AM CET
gpg: using RSA key FE3958F9067BC667
[GNUPG:] KEYEXPIRED 1478449622
[GNUPG:] KEY_CONSIDERED D783920D6D4F0C06AA4C25F3FE3958F9067BC667 0
[GNUPG:] KEYEXPIRED 1478449622
[GNUPG:] SIG_ID 8tAN3Fx6XB2NAoH5U8neoguQ9MI 2014-11-26 1416977810
[GNUPG:] EXPKEYSIG FE3958F9067BC667 Jason Cooper <jason@lakedaemon.net>
gpg: Good signature from "Jason Cooper <jason@lakedaemon.net>" [expired]
[GNUPG:] VALIDSIG D783920D6D4F0C06AA4C25F3FE3958F9067BC667 2014-11-26 1416977810 0 4 0 1 2 00 D783920D6D4F0C06AA4C25F3FE3958F9067BC667
gpg: Note: This key has expired!
D783920D6D4F0C06AA4C25F3FE3958F9067BC667
(signature and signed data in this example is taken from Linux commit
756f80cee766574ae282baa97fdcf9cc). So GnuPG is relaxed and the fact that
the key is expired is only worth a "Note" which is weaker than e.g.
gpg: WARNING: The key's User ID is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
which git still considers ok.
So stop coloring the signature by an expired key red and handle it like
any other good signature.
Signed-off-by: Uwe Kleine-König <ukleinek@kernel.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
gpg-interface.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/gpg-interface.c b/gpg-interface.c
index 47222bf31b..5a58f333df 100644
--- a/gpg-interface.c
+++ b/gpg-interface.c
@@ -382,7 +382,8 @@ static int verify_gpg_signed_buffer(struct signature_check *sigc,
delete_tempfile(&temp);
- ret |= !strstr(gpg_stdout.buf, "\n[GNUPG:] GOODSIG ");
+ ret |= !strstr(gpg_stdout.buf, "\n[GNUPG:] GOODSIG ") &&
+ !strstr(gpg_stdout.buf, "\n[GNUPG:] EXPKEYSIG ");
sigc->output = strbuf_detach(&gpg_stderr, NULL);
sigc->gpg_status = strbuf_detach(&gpg_stdout, NULL);
@@ -680,7 +681,7 @@ int check_signature(struct signature_check *sigc,
if (status && !sigc->output)
return !!status;
- status |= sigc->result != 'G';
+ status |= sigc->result != 'G' && sigc->result != 'Y';
status |= sigc->trust_level < configured_min_trust_level;
return !!status;
--
2.53.0-169-ga09cd4eb64
next prev parent reply other threads:[~2026-02-04 21:27 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-04 15:23 [PATCH v1] gpg-interface: Signatures by expired keys are fine Uwe Kleine-König
2026-02-04 15:35 ` Neal H. Walfield
2026-02-04 17:26 ` Junio C Hamano
2026-02-04 21:18 ` Uwe Kleine-König
2026-02-04 21:27 ` Junio C Hamano [this message]
2026-02-05 9:38 ` Uwe Kleine-König
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqa4xonqs5.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=neal@walfield.org \
--cc=torvalds@linux-foundation.org \
--cc=ukleinek@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox