src/backup/crypt_config.rs: remove encode_chunk, use encrypt_to instead

This commit is contained in:
Dietmar Maurer
2019-06-22 13:02:53 +02:00
parent ee8a7e8080
commit 0066c6d972
3 changed files with 63 additions and 70 deletions

View File

@ -77,13 +77,38 @@ impl DataBlob {
if let Some(config) = config {
let enc_data = config.encode_chunk(
data,
compress,
&ENCRYPTED_BLOB_MAGIC_1_0,
&ENCR_COMPR_BLOB_MAGIC_1_0,
)?;
return Ok(DataBlob { raw_data: enc_data });
let compr_data;
let (_compress, data, magic) = if compress {
compr_data = zstd::block::compress(data, 1)?;
// Note: We only use compression if result is shorter
if compr_data.len() < data.len() {
(true, &compr_data[..], ENCR_COMPR_BLOB_MAGIC_1_0)
} else {
(false, data, ENCRYPTED_BLOB_MAGIC_1_0)
}
} else {
(false, data, ENCRYPTED_BLOB_MAGIC_1_0)
};
let header_len = std::mem::size_of::<EncryptedDataBlobHeader>();
let mut raw_data = Vec::with_capacity(data.len() + header_len);
let dummy_head = EncryptedDataBlobHeader {
head: DataBlobHeader { magic: [0u8; 8], crc: [0; 4] },
iv: [0u8; 16],
tag: [0u8; 16],
};
raw_data.write_value(&dummy_head)?;
let (iv, tag) = config.encrypt_to(data, &mut raw_data)?;
let head = EncryptedDataBlobHeader {
head: DataBlobHeader { magic, crc: [0; 4] }, iv, tag,
};
(&mut raw_data[0..header_len]).write_value(&head)?;
return Ok(DataBlob { raw_data });
} else {
let max_data_len = data.len() + std::mem::size_of::<DataBlobHeader>();