summary refs log tree commit diff
path: root/ripple
diff options
context:
space:
mode:
authoredef <edef@unfathomable.blue>2022-04-19 15:08:23 +0000
committeredef <edef@unfathomable.blue>2022-04-19 15:08:23 +0000
commit4c784b0b1562d7465908fcb671c4f48ce299d272 (patch)
tree32cd784281c1ff1fda1fd31dae44c13dcc49d34d /ripple
parent6a51ad1041f0a5639fc7b0b6e39a04642d5a3c2e (diff)
ripple/fossil: use bao to one-shot verify hashes
Change-Id: I77ace8ee9f69ccb92afaa0a41d69538d28f11583
Diffstat (limited to 'ripple')
-rw-r--r--ripple/Cargo.lock12
-rw-r--r--ripple/fossil/Cargo.toml1
-rw-r--r--ripple/fossil/src/lib.rs11
3 files changed, 19 insertions, 5 deletions
diff --git a/ripple/Cargo.lock b/ripple/Cargo.lock
index b857ee0..359d48d 100644
--- a/ripple/Cargo.lock
+++ b/ripple/Cargo.lock
@@ -47,6 +47,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
 
 [[package]]
+name = "bao"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f51ef7e16e840728c95d71045a7f67fb0c17e0c03560b0aa99ae607bd31a3c"
+dependencies = [
+ "arrayref",
+ "arrayvec",
+ "blake3",
+]
+
+[[package]]
 name = "bitflags"
 version = "1.3.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -209,6 +220,7 @@ checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d"
 name = "fossil"
 version = "0.1.0"
 dependencies = [
+ "bao",
  "blake3",
  "byteorder",
  "bytes",
diff --git a/ripple/fossil/Cargo.toml b/ripple/fossil/Cargo.toml
index 70554ea..ecfa5b4 100644
--- a/ripple/fossil/Cargo.toml
+++ b/ripple/fossil/Cargo.toml
@@ -17,6 +17,7 @@ log = "0.4.14"
 libc = "0.2.112"
 env_logger = "0.9.0"
 lazy_static = "1.4.0"
+bao = "0.12.0"
 
 [build-dependencies]
 prost-build = "0.8.0"
diff --git a/ripple/fossil/src/lib.rs b/ripple/fossil/src/lib.rs
index 3492789..9e380f2 100644
--- a/ripple/fossil/src/lib.rs
+++ b/ripple/fossil/src/lib.rs
@@ -7,7 +7,7 @@ use {
 	std::{
 		collections::BTreeMap,
 		fs,
-		io::{self, BufRead, Read},
+		io::{self, BufRead, Read, Write},
 		os::unix::fs::PermissionsExt,
 		path::Path,
 	},
@@ -107,10 +107,11 @@ impl Store {
 		let mut buffer = Vec::new();
 		self.raw_blob(ident).read_to_end(&mut buffer).unwrap();
 
-		let computed_ident = {
-			let mut h = blake3::Hasher::new();
-			h.update_rayon(&buffer);
-			h.finalize()
+		let mut outboard = Vec::new();
+		let computed_ident: blake3::Hash = {
+			let mut encoder = bao::encode::Encoder::new_outboard(io::Cursor::new(&mut outboard));
+			encoder.write_all(&buffer).unwrap();
+			encoder.finalize().unwrap()
 		};
 
 		if computed_ident != ident {