From 893e52fe204f77abed001ac16676949c58130738 Mon Sep 17 00:00:00 2001 From: Hanh Date: Sun, 25 Dec 2022 05:04:42 +0800 Subject: [PATCH] Report decryption error --- binding.h | 2 +- src/api/dart_ffi.rs | 6 +++--- src/db/backup.rs | 5 +++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/binding.h b/binding.h index d7189a0..9e0690a 100644 --- a/binding.h +++ b/binding.h @@ -161,7 +161,7 @@ struct CResult_____c_char generate_key(void); struct CResult_u8 zip_backup(char *key, char *dst_dir); -void unzip_backup(char *key, char *data_path, char *dst_dir); +struct CResult_u8 unzip_backup(char *key, char *data_path, char *dst_dir); struct CResult_____c_char split_data(uint32_t id, char *data); diff --git a/src/api/dart_ffi.rs b/src/api/dart_ffi.rs index af18b55..1aa5630 100644 --- a/src/api/dart_ffi.rs +++ b/src/api/dart_ffi.rs @@ -682,16 +682,16 @@ pub unsafe extern "C" fn unzip_backup( key: *mut c_char, data_path: *mut c_char, dst_dir: *mut c_char, -) { +) -> CResult { from_c_str!(key); from_c_str!(data_path); from_c_str!(dst_dir); let res = || { let backup = FullEncryptedBackup::new(&dst_dir); backup.restore(&key, &data_path)?; - Ok(()) + Ok(0) }; - log_error(res()) + to_cresult(res()) } #[no_mangle] diff --git a/src/db/backup.rs b/src/db/backup.rs index 629606d..969454c 100644 --- a/src/db/backup.rs +++ b/src/db/backup.rs @@ -60,13 +60,14 @@ impl FullEncryptedBackup { let mut f = File::open(data_path)?; f.read_to_end(&mut cipher_text)?; - let decryptor = match age::Decryptor::new(&*cipher_text)? { + let decryptor = match age::Decryptor::new(&*cipher_text).map_err(|_| anyhow!("Decryption Error"))? { age::Decryptor::Recipients(d) => d, _ => unreachable!(), }; let mut plain_text = vec![]; - let mut reader = decryptor.decrypt(iter::once(&key as &dyn age::Identity))?; + let mut reader = decryptor.decrypt(iter::once(&key as &dyn age::Identity)) + .map_err(|_| anyhow!("Decryption Error"))?; reader.read_to_end(&mut plain_text)?; self.unzip(&plain_text)?;