feat: optimize code
This commit is contained in:
@@ -43,7 +43,7 @@ const DIRECT_ENCRYPT_MAGIC: &str = "e2c50001";
|
|||||||
// [n bytes] - ciphertext
|
// [n bytes] - ciphertext
|
||||||
// [16 bytes] - tag
|
// [16 bytes] - tag
|
||||||
pub fn direct_decrypt(cmd_direct_decrypt: CmdDirectDecrypt) -> XResult<()> {
|
pub fn direct_decrypt(cmd_direct_decrypt: CmdDirectDecrypt) -> XResult<()> {
|
||||||
let key = opt_result!(hex::decode(&cmd_direct_decrypt.key), "Parse key failed: {}");
|
let key = opt_result!(hex::decode(&cmd_direct_decrypt.key), "Parse encryption key failed: {}");
|
||||||
if key.len() != 32 {
|
if key.len() != 32 {
|
||||||
return simple_error!("Key length error, must be AES256.");
|
return simple_error!("Key length error, must be AES256.");
|
||||||
}
|
}
|
||||||
@@ -57,13 +57,13 @@ pub fn direct_decrypt(cmd_direct_decrypt: CmdDirectDecrypt) -> XResult<()> {
|
|||||||
let mut magic = [0_u8; 4];
|
let mut magic = [0_u8; 4];
|
||||||
opt_result!(file_in.read_exact(&mut magic), "Read magic failed: {}");
|
opt_result!(file_in.read_exact(&mut magic), "Read magic failed: {}");
|
||||||
if hex::encode(magic) != DIRECT_ENCRYPT_MAGIC {
|
if hex::encode(magic) != DIRECT_ENCRYPT_MAGIC {
|
||||||
return simple_error!("File magic mismatch.");
|
return simple_error!("In file magic mismatch.");
|
||||||
}
|
}
|
||||||
let mut key_digest = [0_u8; 32];
|
let mut key_digest = [0_u8; 32];
|
||||||
opt_result!(file_in.read_exact(&mut key_digest), "Read key digest failed: {}");
|
opt_result!(file_in.read_exact(&mut key_digest), "Read encryption key digest failed: {}");
|
||||||
if sha256::digest(&key) != hex::encode(key_digest) {
|
if sha256::digest(&key) != hex::encode(key_digest) {
|
||||||
debugging!("Key digest mismatch: {} vs {}", sha256::digest(&key), hex::encode(key_digest));
|
debugging!("Encryption key digest mismatch: {} vs {}", sha256::digest(&key), hex::encode(key_digest));
|
||||||
return simple_error!("Key digest mismatch.");
|
return simple_error!("Encryption key digest mismatch.");
|
||||||
}
|
}
|
||||||
let mut nonce = [0_u8; 12];
|
let mut nonce = [0_u8; 12];
|
||||||
opt_result!(file_in.read_exact(&mut nonce), "Read nonce failed: {}");
|
opt_result!(file_in.read_exact(&mut nonce), "Read nonce failed: {}");
|
||||||
@@ -103,17 +103,17 @@ fn decrypt_file(file_in: &mut impl Read, file_len: u64, file_out: &mut impl Writ
|
|||||||
let progress = Progress::new(file_len);
|
let progress = Progress::new(file_len);
|
||||||
let mut decryptor = cryptor.decryptor(key_nonce)?;
|
let mut decryptor = cryptor.decryptor(key_nonce)?;
|
||||||
loop {
|
loop {
|
||||||
let len = opt_result!(file_in.read(&mut buffer), "Read file failed: {}");
|
let len = opt_result!(file_in.read(&mut buffer), "Read in file failed: {}");
|
||||||
if len == 0 {
|
if len == 0 {
|
||||||
let last_block = opt_result!(decryptor.finalize(), "Decrypt file failed: {}");
|
let last_block = opt_result!(decryptor.finalize(), "Decrypt in file failed: {}");
|
||||||
opt_result!(file_out.write_all(&last_block), "Write file failed: {}");
|
opt_result!(file_out.write_all(&last_block), "Write out file failed: {}");
|
||||||
progress.finish();
|
progress.finish();
|
||||||
debugging!("Decrypt finished, total: {} byte(s)", total_len);
|
debugging!("Decrypt finished, total: {} byte(s)", total_len);
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
total_len += len as u64;
|
total_len += len as u64;
|
||||||
let decrypted = decryptor.update(&buffer[0..len]);
|
let decrypted = decryptor.update(&buffer[0..len]);
|
||||||
opt_result!(file_out.write_all(&decrypted), "Write file failed: {}");
|
opt_result!(file_out.write_all(&decrypted), "Write out file failed: {}");
|
||||||
progress.position(total_len);
|
progress.position(total_len);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user