From 2abd43bfb2805affce18c955934f489deb5f64b3 Mon Sep 17 00:00:00 2001 From: Kavin <20838718+FireMasterK@users.noreply.github.com> Date: Fri, 17 Nov 2023 17:04:35 +0000 Subject: [PATCH] Make the hashing run on spawn_blocking. --- src/main.rs | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/src/main.rs b/src/main.rs index e6c879a..94748ef 100644 --- a/src/main.rs +++ b/src/main.rs @@ -151,32 +151,39 @@ async fn index(req: HttpRequest) -> Result> { let qhash = qhash.unwrap(); - // check that qhash is valid if qhash.len() != 8 { return Err("Invalid qhash provided".into()); } - // store sorted key-value pairs + // Store sorted key-value pairs let mut set = BTreeSet::new(); - - query.to_pairs().iter().for_each(|(key, value)| { - if matches!(*key, "qhash" | "range" | "rewrite") { - return; + { + let pairs = query.to_pairs(); + for (key, value) in &pairs { + if matches!(*key, "qhash" | "range" | "rewrite") { + continue; + } + set.insert((key.as_bytes().to_owned(), value.as_bytes().to_owned())); } - set.insert((key.as_bytes(), value.as_bytes())); - }); - - let mut hasher = blake3::Hasher::new(); - - for (key, value) in set { - hasher.update(key); - hasher.update(value); } - hasher.update(secret.as_bytes()); + let (tx, rx) = oneshot::channel::(); + spawn_blocking(move || { + let mut hasher = blake3::Hasher::new(); - let hash = hasher.finalize().to_hex(); - let hash = &hash[..8]; + for (key, value) in set { + hasher.update(&key); + hasher.update(&value); + } + + hasher.update(secret.as_bytes()); + + let hash = hasher.finalize().to_hex(); + let hash = hash[..8].to_owned(); + tx.send(hash).unwrap(); + }); + + let hash = rx.await.unwrap(); if hash != qhash { return Err("Invalid qhash provided".into());