From: Dietmar Maurer Date: Mon, 7 Oct 2019 09:36:39 +0000 (+0200) Subject: src/backup/data_blob.rs: avoid Arc X-Git-Tag: v0.1.3~558 X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=7123ff7d433d7d25a3d30b57bdc975a5b2bd3b02;p=proxmox-backup.git src/backup/data_blob.rs: avoid Arc use simple reference instead. --- diff --git a/src/backup/data_blob.rs b/src/backup/data_blob.rs index 12e19842..910461fd 100644 --- a/src/backup/data_blob.rs +++ b/src/backup/data_blob.rs @@ -1,6 +1,5 @@ use failure::*; use std::convert::TryInto; -use std::sync::Arc; use proxmox::tools::io::{ReadExt, WriteExt}; @@ -79,7 +78,7 @@ impl DataBlob { /// Create a DataBlob, optionally compressed and/or encrypted pub fn encode( data: &[u8], - config: Option>, + config: Option<&CryptConfig>, compress: bool, ) -> Result { @@ -168,7 +167,7 @@ impl DataBlob { } /// Decode blob data - pub fn decode(self, config: Option>) -> Result, Error> { + pub fn decode(self, config: Option<&CryptConfig>) -> Result, Error> { let magic = self.magic(); @@ -225,7 +224,7 @@ impl DataBlob { /// Create a signed DataBlob, optionally compressed pub fn create_signed( data: &[u8], - config: Arc, + config: &CryptConfig, compress: bool, ) -> Result { @@ -348,15 +347,15 @@ impl DataBlob { /// Main purpose is to centralize digest computation. Digest /// computation differ for encryped chunk, and this interface ensures that /// we always compute the correct one. -pub struct DataChunkBuilder<'a> { - config: Option>, +pub struct DataChunkBuilder<'a, 'b> { + config: Option<&'b CryptConfig>, orig_data: &'a [u8], digest_computed: bool, digest: [u8; 32], compress: bool, } -impl <'a> DataChunkBuilder<'a> { +impl <'a, 'b> DataChunkBuilder<'a, 'b> { /// Create a new builder instance. pub fn new(orig_data: &'a [u8]) -> Self { @@ -380,7 +379,7 @@ impl <'a> DataChunkBuilder<'a> { /// Set encryption Configuration /// /// If set, chunks are encrypted. - pub fn crypt_config(mut self, value: Arc) -> Self { + pub fn crypt_config(mut self, value: &'b CryptConfig) -> Self { if self.digest_computed { panic!("unable to set crypt_config after compute_digest()."); } diff --git a/src/backup/read_chunk.rs b/src/backup/read_chunk.rs index f825847d..51d0019b 100644 --- a/src/backup/read_chunk.rs +++ b/src/backup/read_chunk.rs @@ -35,7 +35,7 @@ impl ReadChunk for LocalChunkReader { let chunk = DataBlob::from_raw(raw_data)?; chunk.verify_crc()?; - let raw_data = chunk.decode(self.crypt_config.clone())?; + let raw_data = chunk.decode(self.crypt_config.as_ref().map(Arc::as_ref))?; // fixme: verify digest? diff --git a/src/bin/proxmox-backup-client.rs b/src/bin/proxmox-backup-client.rs index 21ea2f88..2a8b7289 100644 --- a/src/bin/proxmox-backup-client.rs +++ b/src/bin/proxmox-backup-client.rs @@ -888,7 +888,7 @@ async fn download_index_blob(client: Arc, crypt_config: Option Result<(), Error> { @@ -1159,7 +1159,7 @@ fn upload_log( let data = file_get_contents(logfile)?; - let blob = DataBlob::encode(&data, crypt_config, true)?; + let blob = DataBlob::encode(&data, crypt_config.as_ref().map(Arc::as_ref), true)?; let raw_data = blob.into_inner(); diff --git a/src/client/http_client.rs b/src/client/http_client.rs index 994a3a9a..cec442ab 100644 --- a/src/client/http_client.rs +++ b/src/client/http_client.rs @@ -674,7 +674,7 @@ impl BackupClient { sign_only: bool, ) -> Result { - let blob = if let Some(crypt_config) = crypt_config { + let blob = if let Some(ref crypt_config) = crypt_config { if sign_only { DataBlob::create_signed(&data, crypt_config, compress)? } else { @@ -713,7 +713,7 @@ impl BackupClient { .await .map_err(|err| format_err!("unable to read file {:?} - {}", src_path, err))?; - let blob = DataBlob::encode(&contents, crypt_config, compress)?; + let blob = DataBlob::encode(&contents, crypt_config.as_ref().map(AsRef::as_ref), compress)?; let raw_data = blob.into_inner(); let size = raw_data.len() as u64; let csum = openssl::sha::sha256(&raw_data); @@ -936,7 +936,7 @@ impl BackupClient { .compress(true); if let Some(ref crypt_config) = crypt_config { - chunk_builder = chunk_builder.crypt_config(crypt_config.clone()); + chunk_builder = chunk_builder.crypt_config(crypt_config); } let mut known_chunks = known_chunks.lock().unwrap(); diff --git a/src/client/remote_chunk_reader.rs b/src/client/remote_chunk_reader.rs index 59378c9d..6196c9ad 100644 --- a/src/client/remote_chunk_reader.rs +++ b/src/client/remote_chunk_reader.rs @@ -46,7 +46,7 @@ impl ReadChunk for RemoteChunkReader { let chunk = DataBlob::from_raw(chunk_data)?; chunk.verify_crc()?; - let raw_data = chunk.decode(self.crypt_config.clone())?; + let raw_data = chunk.decode(self.crypt_config.as_ref().map(Arc::as_ref))?; // fixme: verify chunk digest diff --git a/tests/blob_writer.rs b/tests/blob_writer.rs index 7579c348..5ae12394 100644 --- a/tests/blob_writer.rs +++ b/tests/blob_writer.rs @@ -53,7 +53,7 @@ fn verify_test_blob(mut cursor: Cursor>) -> Result<(), Error> { let blob = DataBlob::from_raw(raw_data)?; blob.verify_crc()?; - let data = blob.decode(Some(CRYPT_CONFIG.clone()))?; + let data = blob.decode(Some(&CRYPT_CONFIG))?; if data != *TEST_DATA { bail!("blob data is wrong (decode)"); }