Skip to content

x/crypto/openpgp: fails to handle expired subkeys correctly #15353

@abarisani

Description

@abarisani

Hello,

importing OpenPGP keys with expired signature subkeys, but a valid non-expired signature subkey, is not being handled correctly by golang.org/x/crypto/openpgp functions such as ReadEntity.

What I am experiencing is that when the imported public key has a single non-expired signature subkey then there are no issues.

However if the imported key has one or more expired signature subkeys, and a valid one as the last packet, only the first expired subkey is considered when creating the PublicKey object, making it invalid for encryption.

I am attaching a public key that exhibits these properties, the key was parsed as follows:

keyBlock, _ := armor.Decode(keyFile)
reader := packet.NewReader(keyBlock.Body)
entity, _ := openpgp.ReadEntity(reader)

and later used with openpgp.Encrypt().

Currently gpg --export, even with --export-options export-minimal, always carry expired signature subkeys (despite gpg documentation suggesting the contrary). This means that I have no easy way of exporting the public key in a way which is friendly to golang.org/x/crypto/openpgp, unless I am missing something.

Let me know if you need further information to debug this.

Thanks!

test_key.txt

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions