[openpgp] Re: Key Flags subpacket interpretation question

Andrew Gallagher <[email protected]> Fri, 7 Nov 2025 15:52:01 +0000
Newsgroups gmane.ietf.openpgp
Message-ID <[email protected]>
On 07/11/2025 15:10, Wyllys Ingersoll wrote:
> 
> What if there are multiple UIDs with signatures that have differing key 
> usage sub-packets - how should the primary key usage be determined in 
> that case?

The primary UID is the User ID packet whose most recent 
self-certification contains a Primary User ID subpacket. Key preferences 
on the primary UID apply to the primary key itself.

Now, there are edge cases such as what if (none|more than one) of the 
most-recent-self-certs contain a Primary User ID subpacket. If there is 
only one UID then that's the primary UID by default. Otherwise, I'd 
suggest sorting the candidate primary UIDs by most-recent-self-cert 
creation date, and taking the most recent of those.

So for example, if there are three User ID packets A B C, each with 
self-certification signatures A1 A2 A3 B1 etc.:

A : A1 A2 A3
B : B1 B2
C : C1 C2

Then:

1. Consider only the most-recent self-certifications A3, B2, and C2.

2. IFF one or more of them have Primary User ID subpackets, then throw 
away the ones that don't.

3. If there is more than one remaining, take the most recent.

That self-certification both identifies the primary UID and contains the 
primary key preference subpackets. It's not guaranteed that this is 
always what the owner or their implementation intended, particularly if 
you need step 3 to decide between them, but it gives a reasonable and 
unambiguous result that is actionable.

> Implementation code that follows the rules for applying key usage 
> quickly gets pretty complicated. V6 simplifies it a little with the 
> Direct Key signature, though.
Yes, v4 UID logic is a can of worms...

A good reference for this kind of high-level beyond-the-RFCs guidance is 
the OpenPGP for Application Developers guide at [1], which is thoroughly 
researched and very readable. Beyond that, you're in the realm of "there 
is no general consensus" and I'd point you in the direction of the draft 
document at [2] for some collected thoughts (with the caveat that this 
is WIP and different implementers disagree on quite a few details). And 
if even this doesn't answer your questions, please let me know and I'll 
add it to the (ever increasing!) list...

A

[1] https://openpgp.dev/book
[2] https://datatracker.ietf.org/doc/html/draft-gallagher-openpgp-signatures

_______________________________________________
openpgp mailing list -- [email protected]
To unsubscribe send an email to [email protected]