src/backup/file_formats.rs: moved header_size

This commit is contained in:
Dietmar Maurer 2019-08-14 12:35:53 +02:00
parent 41d08aa6de
commit c638542b4b
2 changed files with 22 additions and 18 deletions

View File

@ -7,6 +7,7 @@ const MAX_BLOB_SIZE: usize = 128*1024*1024;
use super::*; use super::*;
/// Data blob binary storage format /// Data blob binary storage format
/// ///
/// Data blobs store arbitrary binary data (< 128MB), and can be /// Data blobs store arbitrary binary data (< 128MB), and can be
@ -20,23 +21,6 @@ pub struct DataBlob {
impl DataBlob { impl DataBlob {
pub fn header_size(magic: &[u8; 8]) -> usize {
match magic {
&UNCOMPRESSED_CHUNK_MAGIC_1_0 => std::mem::size_of::<DataChunkHeader>(),
&COMPRESSED_CHUNK_MAGIC_1_0 => std::mem::size_of::<DataChunkHeader>(),
&ENCRYPTED_CHUNK_MAGIC_1_0 => std::mem::size_of::<EncryptedDataChunkHeader>(),
&ENCR_COMPR_CHUNK_MAGIC_1_0 => std::mem::size_of::<EncryptedDataChunkHeader>(),
&UNCOMPRESSED_BLOB_MAGIC_1_0 => std::mem::size_of::<DataBlobHeader>(),
&COMPRESSED_BLOB_MAGIC_1_0 => std::mem::size_of::<DataBlobHeader>(),
&ENCRYPTED_BLOB_MAGIC_1_0 => std::mem::size_of::<EncryptedDataBlobHeader>(),
&ENCR_COMPR_BLOB_MAGIC_1_0 => std::mem::size_of::<EncryptedDataBlobHeader>(),
&AUTHENTICATED_BLOB_MAGIC_1_0 => std::mem::size_of::<AuthenticatedDataBlobHeader>(),
&AUTH_COMPR_BLOB_MAGIC_1_0 => std::mem::size_of::<AuthenticatedDataBlobHeader>(),
_ => panic!("unknown blob magic"),
}
}
/// accessor to raw_data field /// accessor to raw_data field
pub fn raw_data(&self) -> &[u8] { pub fn raw_data(&self) -> &[u8] {
&self.raw_data &self.raw_data
@ -67,7 +51,7 @@ impl DataBlob {
/// compute the CRC32 checksum /// compute the CRC32 checksum
pub fn compute_crc(&self) -> u32 { pub fn compute_crc(&self) -> u32 {
let mut hasher = crc32fast::Hasher::new(); let mut hasher = crc32fast::Hasher::new();
let start = Self::header_size(self.magic()); // start after HEAD let start = header_size(self.magic()); // start after HEAD
hasher.update(&self.raw_data[start..]); hasher.update(&self.raw_data[start..]);
hasher.finalize() hasher.finalize()
} }

View File

@ -119,3 +119,23 @@ pub struct EncryptedDataChunkHeader {
pub iv: [u8; 16], pub iv: [u8; 16],
pub tag: [u8; 16], pub tag: [u8; 16],
} }
/// Header size for different file types
///
/// Panics on unknown magic numbers.
pub fn header_size(magic: &[u8; 8]) -> usize {
match magic {
&UNCOMPRESSED_CHUNK_MAGIC_1_0 => std::mem::size_of::<DataChunkHeader>(),
&COMPRESSED_CHUNK_MAGIC_1_0 => std::mem::size_of::<DataChunkHeader>(),
&ENCRYPTED_CHUNK_MAGIC_1_0 => std::mem::size_of::<EncryptedDataChunkHeader>(),
&ENCR_COMPR_CHUNK_MAGIC_1_0 => std::mem::size_of::<EncryptedDataChunkHeader>(),
&UNCOMPRESSED_BLOB_MAGIC_1_0 => std::mem::size_of::<DataBlobHeader>(),
&COMPRESSED_BLOB_MAGIC_1_0 => std::mem::size_of::<DataBlobHeader>(),
&ENCRYPTED_BLOB_MAGIC_1_0 => std::mem::size_of::<EncryptedDataBlobHeader>(),
&ENCR_COMPR_BLOB_MAGIC_1_0 => std::mem::size_of::<EncryptedDataBlobHeader>(),
&AUTHENTICATED_BLOB_MAGIC_1_0 => std::mem::size_of::<AuthenticatedDataBlobHeader>(),
&AUTH_COMPR_BLOB_MAGIC_1_0 => std::mem::size_of::<AuthenticatedDataBlobHeader>(),
_ => panic!("unknown blob magic"),
}
}