From 5d15cb49b4a876acc489f71a108282983346c6ee Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Mon, 12 Aug 2019 11:32:26 +0200 Subject: [PATCH] src/backup/data_blob.rs - compute_crc: start after blob header --- src/backup/data_blob.rs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/backup/data_blob.rs b/src/backup/data_blob.rs index faec77a1..19d91f9d 100644 --- a/src/backup/data_blob.rs +++ b/src/backup/data_blob.rs @@ -20,6 +20,23 @@ pub struct DataBlob { impl DataBlob { + pub fn header_size(magic: &[u8; 8]) -> usize { + match magic { + &UNCOMPRESSED_CHUNK_MAGIC_1_0 => std::mem::size_of::(), + &COMPRESSED_CHUNK_MAGIC_1_0 => std::mem::size_of::(), + &ENCRYPTED_CHUNK_MAGIC_1_0 => std::mem::size_of::(), + &ENCR_COMPR_CHUNK_MAGIC_1_0 => std::mem::size_of::(), + + &UNCOMPRESSED_BLOB_MAGIC_1_0 => std::mem::size_of::(), + &COMPRESSED_BLOB_MAGIC_1_0 => std::mem::size_of::(), + &ENCRYPTED_BLOB_MAGIC_1_0 => std::mem::size_of::(), + &ENCR_COMPR_BLOB_MAGIC_1_0 => std::mem::size_of::(), + &AUTHENTICATED_BLOB_MAGIC_1_0 => std::mem::size_of::(), + &AUTH_COMPR_BLOB_MAGIC_1_0 => std::mem::size_of::(), + _ => panic!("unknown blob magic"), + } + } + /// accessor to raw_data field pub fn raw_data(&self) -> &[u8] { &self.raw_data @@ -50,7 +67,7 @@ impl DataBlob { /// compute the CRC32 checksum pub fn compute_crc(&self) -> u32 { let mut hasher = crc32fast::Hasher::new(); - let start = std::mem::size_of::(); // start after HEAD + let start = Self::header_size(self.magic()); // start after HEAD hasher.update(&self.raw_data[start..]); hasher.finalize() }