diff --git a/Cargo.lock b/Cargo.lock
index 7546f83546ebb163a4978d4dff31ec9e96e8ef0f..8771f6eb8a777f544ae91ad10eaa5f4eb60b60ae 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -212,16 +212,15 @@ dependencies = [
 
 [[package]]
 name = "blake3"
-version = "1.4.1"
+version = "1.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "199c42ab6972d92c9f8995f086273d25c42fc0f7b2a1fcefba465c1352d25ba5"
+checksum = "0231f06152bf547e9c2b5194f247cd97aacf6dcd8b15d8e5ec0663f64580da87"
 dependencies = [
  "arrayref",
  "arrayvec 0.7.4",
  "cc",
  "cfg-if 1.0.0",
  "constant_time_eq 0.3.0",
- "digest 0.10.7",
 ]
 
 [[package]]
@@ -1237,7 +1236,7 @@ dependencies = [
 name = "redox_cookbook"
 version = "0.1.0"
 dependencies = [
- "blake3 1.4.1",
+ "blake3 1.5.0",
  "pbr",
  "pkgar",
  "pkgar-keys",
diff --git a/Cargo.toml b/Cargo.toml
index 1a6ebecc469f726435eba9a95ddedaa6d8cebeac..3d33a986ccc096b4fd576e9ee67697a24f3fe487 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -20,7 +20,7 @@ name = "cookbook"
 path = "src/lib.rs"
 
 [dependencies]
-blake3 = "1"
+blake3 = "1.5"
 pbr = "1.0.2"
 pkgar = "0.1.7"
 pkgar-keys = "0.1.0"
diff --git a/src/blake3.rs b/src/blake3.rs
index acc037d35b465665ae61be428813302a9f7021b0..746b829d1de8f728cdd29c3d02d1ef2b14ab4800 100644
--- a/src/blake3.rs
+++ b/src/blake3.rs
@@ -1,30 +1,8 @@
 use blake3::Hasher;
-use std::{
-    fs,
-    io::{Read, Result},
-    path::Path,
-    time::Duration,
-};
+use std::{fs, io::Result, path::Path, time::Duration};
 
 use crate::progress_bar::{ProgressBar, ProgressBarRead};
 
-pub fn blake3<R: Read>(r: &mut R) -> Result<String> {
-    let mut hasher = Hasher::new();
-
-    let mut data = vec![0; 4 * 1024 * 1024];
-    loop {
-        let count = r.read(&mut data)?;
-        if count == 0 {
-            break;
-        }
-
-        hasher.update(&data[..count]);
-    }
-
-    let hash = hasher.finalize();
-    Ok(format!("{}", hash.to_hex()))
-}
-
 pub fn blake3_progress<P: AsRef<Path>>(path: P) -> Result<String> {
     let len = fs::metadata(&path)?.len();
 
@@ -35,12 +13,11 @@ pub fn blake3_progress<P: AsRef<Path>>(path: P) -> Result<String> {
     pb.set_max_refresh_rate(Some(Duration::new(1, 0)));
     pb.set_units(pbr::Units::Bytes);
 
-    let res = {
-        let mut pbr = ProgressBarRead::new(&mut pb, &mut f);
-        blake3(&mut pbr)
-    };
+    let mut pbr = ProgressBarRead::new(&mut pb, &mut f);
+    let hash = Hasher::new().update_reader(&mut pbr)?.finalize();
+    let res = format!("{}", hash.to_hex());
 
     pb.finish_println("");
 
-    res
+    Ok(res)
 }