GnuPG 2.4.4 still using legacy packets?
Loup Vaillant
loup at loup-vaillant.fr
Wed Nov 12 02:31:49 CET 2025
I have to say, what I'm seing for my first interaction with this mailing
list doesn't encourage me to stick around. I'll try not to waste too
much of your time. Still, I feel compelled to correct a couple
reasoning flaws.
---
First, a note on the meaning of the word "obsolete".
Just so we understand each other.
To me, and I believe most people, "obsolete" does *not* mean "we can
drop support right now". It just means it is time to deprecate it. The
way that happens for wire formats (at least those who have a version
marker) is always the same:
1. Have all readers support both formats.
2. Have all writers output the new format.
3. Let readers drop support for the old format.
When there are very few implementations, the process can be very quick.
Or it can take forever, if some popular implementation keeps outputting
the old format decades after the new is supported by all readers.
---
> RFC-9580 states:
>
>> ...as the Legacy packet format was obsoleted by [RFC2440] in 1998.
>
> That statement is literally incorrect for RFC2440. So I don't really
> know what you mean here. It is simply wrong and I don't see how any
> further discussion is possible.
In 1998, RFC 2440 introduced a new packet header format.
That new format subsumes the old format.
The new format is required for packets types 16 and higher.
In 2007, RFC 4880 introduced packets 17, 18, and 19.
It would be hard, given the above, to argue that the old format wasn't
obsolete in 2007. They didn't say "obsolete" or "deprecated", but still:
- Any fully compliant RFC 2440 reader has to understand the new format.
- Any fully compliant RFC 4880 writer has to sometimes write in the new
format.
There's also a reasonable argument to be made that deprecation should
have started as soon as 1998. I'm personally in that camp, though I
understand reluctance to do so before 2007, since there was no
substantial official functionality behind it yet.
> Yes, but *why* was the language strngthened from RFC-4880 to more
> strongly prefer the newer format?
I can make an educated guess: despite the lenient wording of RFC 2440
and RFC 2880, it is pretty obvious to me that the old format should have
been deprecated since at least 2007. The stronger wording is a signal
to implementers who haven't gotten the memo, so hopefully phase (2) of
the deprecation process can finally complete. It is simply the right
thing to do.
Now of course, I base my guess on two important premises:
- The new format is needed to support functionality from RFC 4880.
- The new format subsumes the old format.
Or in simpler terms, the new format is simply better. Of course we
should support only that one, instead of both formats.
> *Why* drop it? I happen to know that a popular implementation (GnuPG)
> generates old packet headers as a matter of course and has been doing
> that since forever. So the usage is completely standard in
> practice.
That, my friend, is circular reasoning. A form of "Might Makes Right".
It should be obvious by now why we should drop it. Again:
- It is subsumed by the new format.
- The new format is needed to support RFC 4880.
Once that's established, the onus is on you to show why we should
support both formats, instead of just one.
Unless GnuPG doesn't read nor write packets of type 17, 18, or 19? I
would be genuinely surprised. Or maybe the header writing logic has
been duplicated, and the necessary refactoring is difficult?
> If you want to change the RFC-4880 wording then you have an
> obligation to first convince the implementations to discontinue
> use. Standaards should follow practice, not the other way around.
Unless of course practice is bad. Which it is. It only takes one
popular implementation to keep outputting the old format to force
everyone else to support reading both formats. Which is more complex
and more bug prone. _At scale._
And I am beginning to suspect GnuPG is the only popular application that
still outputs the old format by default. I know it's a fairly minor
detail: the additional format represents less than 30 lines of code in a
properly written code base. Still, for an application that is supposed
to promote security that is quite the bad look. Please don't do that.
Loup.
More information about the Gnupg-users
mailing list