-
Notifications
You must be signed in to change notification settings - Fork 18.8k
Description
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!