Decrypt AEAD encrypted data packets with a session key

Adds the support to decrypt AEAD encrypted data packets
when decrypting the data packet with a session key directly.
This commit is contained in:
M. Thiercelin 2022-06-14 16:10:25 +02:00
parent 22acd6e231
commit 4cea9a0940
No known key found for this signature in database
GPG key ID: 29581E7E24EBEC0A

View file

@ -327,17 +327,19 @@ func decryptStreamWithSessionKey(sk *SessionKey, messageReader io.Reader, verify
// Decrypt data packet // Decrypt data packet
switch p := p.(type) { switch p := p.(type) {
case *packet.SymmetricallyEncrypted: case *packet.SymmetricallyEncrypted, *packet.AEADEncrypted:
dc, err := sk.GetCipherFunc() dc, err := sk.GetCipherFunc()
if err != nil { if err != nil {
return nil, errors.Wrap(err, "gopenpgp: unable to decrypt with session key") return nil, errors.Wrap(err, "gopenpgp: unable to decrypt with session key")
} }
encryptedDataPacket, isDataPacket := p.(packet.EncryptedDataPacket)
decrypted, err = p.Decrypt(dc, sk.Key) if !isDataPacket {
return nil, errors.Wrap(err, "gopenpgp: unknown data packet")
}
decrypted, err = encryptedDataPacket.Decrypt(dc, sk.Key)
if err != nil { if err != nil {
return nil, errors.Wrap(err, "gopenpgp: unable to decrypt symmetric packet") return nil, errors.Wrap(err, "gopenpgp: unable to decrypt symmetric packet")
} }
default: default:
return nil, errors.New("gopenpgp: invalid packet type") return nil, errors.New("gopenpgp: invalid packet type")
} }