diff options
author | Justus Winter <justus@sequoia-pgp.org> | 2019-04-09 14:17:48 +0200 |
---|---|---|
committer | Justus Winter <justus@sequoia-pgp.org> | 2019-04-09 14:17:48 +0200 |
commit | e7408ca748260d1ca19cf3046e1a5f33e79112e2 (patch) | |
tree | 50d37e9990d3ac0098d443990a955d8169e53b84 /tool/src | |
parent | 712dd46883c058f5afa21a1183eca1cba388b042 (diff) |
tool: Fix error handling when decrypting using encrypted keys.
- Fixes #241.
Diffstat (limited to 'tool/src')
-rw-r--r-- | tool/src/commands/decrypt.rs | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/tool/src/commands/decrypt.rs b/tool/src/commands/decrypt.rs index 8bdb6c95..01bb0eef 100644 --- a/tool/src/commands/decrypt.rs +++ b/tool/src/commands/decrypt.rs @@ -134,7 +134,7 @@ impl<'a> DecryptionHelper for Helper<'a> { } // Second, we try those keys that are encrypted. - for pkesk in pkesks { + 'pkesk_loop: for pkesk in pkesks { let keyid = pkesk.recipient(); if let Some(key) = self.secret_keys.get(&keyid) { if key.secret().map(|s| ! s.is_encrypted()) @@ -153,19 +153,27 @@ impl<'a> DecryptionHelper for Helper<'a> { if let Ok(mpis) = key.secret().unwrap().decrypt(key.pk_algo(), &p) { - if let Ok(sk) = pkesk.decrypt(key, &mpis) + match pkesk.decrypt(key, &mpis) .and_then(|(algo, sk)| { decrypt(algo, &sk)?; Ok(sk) }) { - if self.dump_session_key { - eprintln!("Session key: {}", - hex::encode(&sk)); - } - return Ok(self.key_identities.get(keyid) - .map(|fp| fp.clone())); + Ok(sk) => { + if self.dump_session_key { + eprintln!("Session key: {}", + hex::encode(&sk)); + } + return Ok(self.key_identities.get(keyid) + .map(|fp| fp.clone())); + }, + Err(e) => { + eprintln!("Decryption using {} failed:\n {}", + self.key_hints.get(&keyid).unwrap(), + e); + continue 'pkesk_loop; + }, } - + } else { eprintln!("Bad password."); } } |