diff --git a/ipa-core/src/cli/crypto.rs b/ipa-core/src/cli/crypto.rs index 84871776a..8428f477d 100644 --- a/ipa-core/src/cli/crypto.rs +++ b/ipa-core/src/cli/crypto.rs @@ -129,8 +129,10 @@ async fn build_hpke_registry( } struct DecryptedReports { + filename: PathBuf, reader: BufReader, key_registry: KeyRegistry, + iter_index: usize, } impl DecryptedReports { @@ -139,8 +141,10 @@ impl DecryptedReports { .unwrap_or_else(|e| panic!("unable to open file {filename:?}. {e}")); let reader = BufReader::new(file); Self { + filename: filename.to_path_buf(), reader, key_registry, + iter_index: 0, } } } @@ -151,11 +155,22 @@ impl Iterator for DecryptedReports { fn next(&mut self) -> Option { let mut line = String::new(); if self.reader.read_line(&mut line).unwrap() > 0 { + self.iter_index += 1; let encrypted_report_bytes = hex::decode(line.trim()).unwrap(); let enc_report = EncryptedOprfReport::from_bytes(encrypted_report_bytes.as_slice()).unwrap(); let dec_report = enc_report.decrypt(&self.key_registry); - Some(dec_report) + match dec_report { + Ok(dec_report) => Some(Ok(dec_report)), + Err(e) => { + eprintln!( + "Decryption failed: File: {0}. Record: {1}. Error: {e}.", + self.filename.display(), + self.iter_index + ); + Some(Err(e)) + } + } } else { None } @@ -180,10 +195,8 @@ pub async fn decrypt_and_reconstruct(args: DecryptArgs) -> Result<(), BoxError> .create_new(true) .open(args.output_file)?, ); - let mut first_error = Ok(()); - for (idx, (dec_report1, (dec_report2, dec_report3))) in decrypted_reports1 - .zip(decrypted_reports2.zip(decrypted_reports3)) - .enumerate() + for (dec_report1, (dec_report2, dec_report3)) in + decrypted_reports1.zip(decrypted_reports2.zip(decrypted_reports3)) { match (dec_report1, dec_report2, dec_report3) { (Ok(dec_report1), Ok(dec_report2), Ok(dec_report3)) => { @@ -236,32 +249,9 @@ pub async fn decrypt_and_reconstruct(args: DecryptArgs) -> Result<(), BoxError> trigger_value, )?; } - // error handling in case decryption failed - (Err(e1), _, _) => { - writeln!(writer, "Decryption failed Record: {idx} Reason:{e1}",)?; - eprintln!("Decryption failed Record: {idx} Reason:{e1}"); - if first_error.is_ok() { - first_error = Err(e1); - } - } - (Ok(_), Err(e2), _) => { - writeln!(writer, "Decryption failed Record: {idx} Reason:{e2}",)?; - eprintln!("Decryption failed Record: {idx} Reason:{e2}"); - if first_error.is_ok() { - first_error = Err(e2); - } - } - (Ok(_), Ok(_), Err(e3)) => { - writeln!(writer, "Decryption failed Record: {idx} Reason:{e3}",)?; - eprintln!("Decryption failed Record: {idx} Reason:{e3}"); - if first_error.is_ok() { - first_error = Err(e3); - } - } + (_, _, _) => {} } } - - first_error.unwrap(); Ok(()) }