c2pa-rs

A fork of https://github.com/contentauth/c2pa-rs/
git clone git://archive.git.mtrnord.blog/mtrnords-photography-manager/c2pa-rs.git
Log | Files | Refs | README

commit b2506da00f5f9239fbe6cda1a4046d8b06dbc05f
parent 680871e00e4c811381b1d5f1dbaaae36cfaf0b45
Author: Gavin  Peacock <gpeacock@adobe.com>
Date:   Tue, 21 Nov 2023 18:34:19 -0800

Remove Blake3 dependency from c2pa-rs (#348)

Remove blake3 from core SDK
update blake3 in make_test_files
Diffstat:
Mmake_test_images/Cargo.toml | 2+-
Msdk/Cargo.toml | 1-
Msdk/src/utils/hash_utils.rs | 65-----------------------------------------------------------------
3 files changed, 1 insertion(+), 67 deletions(-)

diff --git a/make_test_images/Cargo.toml b/make_test_images/Cargo.toml @@ -8,7 +8,7 @@ rust-version = "1.70.0" [dependencies] anyhow = "1.0.40" -blake3 = "1.0.0" +blake3 = "1.5.0" c2pa = { path = "../sdk", features = [ "add_thumbnails", "file_io", diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml @@ -62,7 +62,6 @@ async-trait = { version = "0.1.48" } atree = "0.5.2" base64 = "0.21.2" bcder = "0.7.1" -blake3 = "1.0.0" bytes = "1.4.0" byteorder = { version = "1.4.3", default-features = false } byteordered = "0.6.0" diff --git a/sdk/src/utils/hash_utils.rs b/sdk/src/utils/hash_utils.rs @@ -491,71 +491,6 @@ pub fn verify_hash(hash: &str, data: &[u8]) -> bool { } } -// Fast implementation for Blake3 hashing that can handle large assets -pub fn blake3_from_asset(path: &Path) -> Result<String> { - let mut data = File::open(path)?; - data.rewind()?; - let data_len = data.seek(SeekFrom::End(0))?; - data.rewind()?; - - let mut hasher = blake3::Hasher::new(); - - let mut chunk_left = data_len; - - if cfg!(feature = "no_interleaved_io") { - loop { - let mut chunk = vec![0u8; std::cmp::min(chunk_left as usize, MAX_HASH_BUF)]; - - data.read_exact(&mut chunk)?; - - hasher.update(&chunk); - - chunk_left -= chunk.len() as u64; - if chunk_left == 0 { - break; - } - } - } else { - let mut chunk = vec![0u8; std::cmp::min(chunk_left as usize, MAX_HASH_BUF)]; - data.read_exact(&mut chunk)?; - - loop { - let (tx, rx) = std::sync::mpsc::channel(); - - chunk_left -= chunk.len() as u64; - - std::thread::spawn(move || { - hasher.update(&chunk); - tx.send(hasher).unwrap_or_default(); - }); - - // are we done - if chunk_left == 0 { - hasher = match rx.recv() { - Ok(hasher) => hasher, - Err(_) => return Err(Error::ThreadReceiveError), - }; - break; - } - - // read next chunk while we wait for hash - let mut next_chunk = vec![0u8; std::cmp::min(chunk_left as usize, MAX_HASH_BUF)]; - data.read_exact(&mut next_chunk)?; - - hasher = match rx.recv() { - Ok(hasher) => hasher, - Err(_) => return Err(Error::ThreadReceiveError), - }; - - chunk = next_chunk; - } - } - - let hash = blake3::Hasher::finalize(&hasher); - - Ok(hash.to_hex().as_str().to_owned()) -} - /// Return the hash of data in the same hash format in_hash pub fn hash_as_source(in_hash: &str, data: &[u8]) -> Option<String> { match decode(in_hash) {