diff options
Diffstat (limited to 'tool')
-rw-r--r-- | tool/src/commands/decrypt.rs | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/tool/src/commands/decrypt.rs b/tool/src/commands/decrypt.rs index c762c454..a8c72f96 100644 --- a/tool/src/commands/decrypt.rs +++ b/tool/src/commands/decrypt.rs @@ -122,8 +122,9 @@ impl<'a> DecryptionHelper for Helper<'a> { for pkesk in pkesks { let keyid = pkesk.recipient(); if let Some(key) = self.secret_keys.get(&keyid) { - if let Some(SecretKey::Unencrypted { mpis }) = key.secret() { - if let Ok(sk) = pkesks[0].decrypt(key, mpis) + if let Some(SecretKey::Unencrypted { .. }) = key.secret() { + if let Ok(sk) = key.clone().into_keypair() + .and_then(|mut keypair| pkesks[0].decrypt(&mut keypair)) .and_then(|(algo, sk)| { decrypt(algo, &sk)?; Ok(sk) }) { if self.dump_session_key { @@ -159,10 +160,14 @@ impl<'a> DecryptionHelper for Helper<'a> { self.key_hints.get(&keyid).unwrap()))) ?.into(); - if let Ok(mpis) = - key.secret().unwrap().decrypt(key.pk_algo(), &p) + let mut key = key.clone(); + let algo = key.pk_algo(); + if let Some(()) = + key.secret_mut() + .and_then(|s| s.decrypt_in_place(algo, &p).ok()) { - match pkesk.decrypt(key, &mpis) + let mut keypair = key.into_keypair().unwrap(); + match pkesk.decrypt(&mut keypair) .and_then(|(algo, sk)| { decrypt(algo, &sk)?; Ok(sk) }) |