diff options
author | Justus Winter <justus@sequoia-pgp.org> | 2020-05-18 13:06:12 +0200 |
---|---|---|
committer | Justus Winter <justus@sequoia-pgp.org> | 2020-05-28 11:51:33 +0200 |
commit | 47362eed301a4954af94afe84df16ab6eddecf8d (patch) | |
tree | f341bceb44d84b0cf071376f1165537e9ee39cb9 /ipc | |
parent | b902ef1bbe7ab1aa0f28554340550fb5cacef73b (diff) |
openpgp: Change PKESK::decrypt to return an Option<_>.
- Returning rich errors from this function may compromise secret key
material due to Bleichenbacher-style attacks. Change the API to
prevent this.
- Hat tip to Hanno Böck.
- See #507.
Diffstat (limited to 'ipc')
-rw-r--r-- | ipc/examples/gpg-agent-decrypt.rs | 4 | ||||
-rw-r--r-- | ipc/tests/gpg-agent.rs | 6 |
2 files changed, 6 insertions, 4 deletions
diff --git a/ipc/examples/gpg-agent-decrypt.rs b/ipc/examples/gpg-agent-decrypt.rs index 254aebdd..b580b353 100644 --- a/ipc/examples/gpg-agent-decrypt.rs +++ b/ipc/examples/gpg-agent-decrypt.rs @@ -106,8 +106,8 @@ impl<'a> DecryptionHelper for Helper<'a> { for pkesk in pkesks { if let Some(key) = self.keys.get(pkesk.recipient()) { let mut pair = KeyPair::new(self.ctx, key)?; - if let Ok(_) = pkesk.decrypt(&mut pair, sym_algo) - .and_then(|(algo, session_key)| decrypt(algo, &session_key)) + if let Some(_) = pkesk.decrypt(&mut pair, sym_algo) + .and_then(|(algo, session_key)| decrypt(algo, &session_key).ok()) { break; } diff --git a/ipc/tests/gpg-agent.rs b/ipc/tests/gpg-agent.rs index 9b0e2fc9..606dd683 100644 --- a/ipc/tests/gpg-agent.rs +++ b/ipc/tests/gpg-agent.rs @@ -287,10 +287,12 @@ fn decrypt() -> openpgp::Result<()> { .unwrap(); pkesks[0].decrypt(&mut keypair, sym_algo) - .and_then(|(algo, session_key)| decrypt(algo, &session_key)) - .map(|_| None) + .and_then( + |(algo, session_key)| decrypt(algo, &session_key).ok()); + // XXX: In production code, return the Fingerprint of the // recipient's Cert here + Ok(None) } } } |