Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package blake3 for openSUSE:Factory checked 
in at 2026-09-01 15:45:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/blake3 (Old)
 and      /work/SRC/openSUSE:Factory/.blake3.new.1265 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "blake3"

Tue Sep  1 15:45:57 2026 rev:7 rq:1374765 version:1.8.7

Changes:
--------
--- /work/SRC/openSUSE:Factory/blake3/blake3.changes    2026-08-11 
17:09:22.450315471 +0200
+++ /work/SRC/openSUSE:Factory/.blake3.new.1265/blake3.changes  2026-09-01 
15:46:37.333123425 +0200
@@ -1,0 +2,6 @@
+Sun Aug 30 22:44:46 UTC 2026 - Eyad Issa <[email protected]>
+
+- Update to version 1.8.7:
+  * Remove the arrayref dependency.
+
+-------------------------------------------------------------------

Old:
----
  blake3-1.8.6.tar.gz

New:
----
  blake3-1.8.7.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ blake3.spec ++++++
--- /var/tmp/diff_new_pack.L6wwxg/_old  2026-09-01 15:46:38.465163003 +0200
+++ /var/tmp/diff_new_pack.L6wwxg/_new  2026-09-01 15:46:38.467163073 +0200
@@ -30,7 +30,7 @@
 %bcond_with     b3sum
 
 Name:           blake3
-Version:        1.8.6
+Version:        1.8.7
 Release:        0
 Summary:        A cryptographic hash function
 License:        Apache-2.0

++++++ blake3-1.8.6.tar.gz -> blake3-1.8.7.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/BLAKE3-1.8.6/Cargo.toml new/BLAKE3-1.8.7/Cargo.toml
--- old/BLAKE3-1.8.6/Cargo.toml 2026-08-06 00:26:34.000000000 +0200
+++ new/BLAKE3-1.8.7/Cargo.toml 2026-08-20 10:50:34.000000000 +0200
@@ -1,6 +1,6 @@
 [package]
 name = "blake3"
-version = "1.8.6"
+version = "1.8.7"
 authors = ["Jack O'Connor <[email protected]>", "Samuel Neves"]
 description = "the BLAKE3 hash function"
 repository = "https://github.com/BLAKE3-team/BLAKE3";
@@ -112,7 +112,6 @@
 features = ["mmap", "rayon", "serde", "zeroize"]
 
 [dependencies]
-arrayref = "0.3.5"
 arrayvec = { version = "0.7.4", default-features = false }
 constant_time_eq = { version = "0.4.2", default-features = false }
 cfg-if = "1.0.0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/BLAKE3-1.8.6/b3sum/Cargo.lock 
new/BLAKE3-1.8.7/b3sum/Cargo.lock
--- old/BLAKE3-1.8.6/b3sum/Cargo.lock   2026-08-06 00:26:34.000000000 +0200
+++ new/BLAKE3-1.8.7/b3sum/Cargo.lock   2026-08-20 10:50:34.000000000 +0200
@@ -59,12 +59,6 @@
 checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470"
 
 [[package]]
-name = "arrayref"
-version = "0.3.9"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb"
-
-[[package]]
 name = "arrayvec"
 version = "0.7.8"
 source = "registry+https://github.com/rust-lang/crates.io-index";
@@ -72,7 +66,7 @@
 
 [[package]]
 name = "b3sum"
-version = "1.8.6"
+version = "1.8.7"
 dependencies = [
  "anyhow",
  "blake3",
@@ -92,9 +86,8 @@
 
 [[package]]
 name = "blake3"
-version = "1.8.6"
+version = "1.8.7"
 dependencies = [
- "arrayref",
  "arrayvec",
  "cc",
  "cfg-if",
@@ -106,9 +99,9 @@
 
 [[package]]
 name = "cc"
-version = "1.4.0"
+version = "1.4.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "5add81bb678e6cb321aff7fa0dc7689ad82b112dbc032cea19f91d6b8e3582b9"
+checksum = "509591b7bcd67f4ef775afad7662703b4935daaa6ec0e5605cfb1090b32a2b6d"
 dependencies = [
  "find-msvc-tools",
  "shlex",
@@ -122,9 +115,9 @@
 
 [[package]]
 name = "clap"
-version = "4.6.5"
+version = "4.6.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "301b56658598e48f3648647ac6fc887be7e7108eddfa4e9b63fcf3ec58c0cadf"
+checksum = "473c7e07f409a8d772161724aa8db6a765a2532a70f9667eeb7b49d3d02fbdca"
 dependencies = [
  "clap_builder",
  "clap_derive",
@@ -132,9 +125,9 @@
 
 [[package]]
 name = "clap_builder"
-version = "4.6.5"
+version = "4.6.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "94a65403d1a1bd28f7dc68eb8506e8874808ee5eecb59298de588e2e1407a078"
+checksum = "7b48fea5a88e9ae728a2dcbedbfc0e730f7d60da42e1cb049a83c9fb8b789889"
 dependencies = [
  "anstream",
  "anstyle",
@@ -237,9 +230,9 @@
 
 [[package]]
 name = "find-msvc-tools"
-version = "0.1.9"
+version = "0.1.11"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
+checksum = "d45db016d36b838f563236e9193d0ee6ce38f3f68b6c94e914b4929c96bbb890"
 
 [[package]]
 name = "getrandom"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/BLAKE3-1.8.6/b3sum/Cargo.toml 
new/BLAKE3-1.8.7/b3sum/Cargo.toml
--- old/BLAKE3-1.8.6/b3sum/Cargo.toml   2026-08-06 00:26:34.000000000 +0200
+++ new/BLAKE3-1.8.7/b3sum/Cargo.toml   2026-08-20 10:50:34.000000000 +0200
@@ -1,6 +1,6 @@
 [package]
 name = "b3sum"
-version = "1.8.6"
+version = "1.8.7"
 authors = ["Jack O'Connor <[email protected]>"]
 description = "a command line implementation of the BLAKE3 hash function"
 repository = "https://github.com/BLAKE3-team/BLAKE3";
@@ -15,7 +15,7 @@
 
 [dependencies]
 anyhow = "1.0.25"
-blake3 = { version = "1.8", path = "..", features = ["mmap", "rayon"] }
+blake3 = { version = "1.8.7", path = "..", features = ["mmap", "rayon"] }
 clap = { version = "4.0.8", features = ["derive", "wrap_help"] }
 hex = "0.4.0"
 rayon-core = "1.12.1"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/BLAKE3-1.8.6/benches/bench.rs 
new/BLAKE3-1.8.7/benches/bench.rs
--- old/BLAKE3-1.8.6/benches/bench.rs   2026-08-06 00:26:34.000000000 +0200
+++ new/BLAKE3-1.8.7/benches/bench.rs   2026-08-20 10:50:34.000000000 +0200
@@ -2,7 +2,6 @@
 
 extern crate test;
 
-use arrayref::array_ref;
 use arrayvec::ArrayVec;
 use blake3::OUT_LEN;
 use blake3::platform::{MAX_SIMD_DEGREE, Platform};
@@ -52,7 +51,7 @@
 fn bench_single_compression_fn(b: &mut Bencher, platform: Platform) {
     let mut state = [1u32; 8];
     let mut r = RandomInput::new(b, 64);
-    let input = array_ref!(r.get(), 0, 64);
+    let input = (&r.get()[..64]).try_into().unwrap();
     b.iter(|| platform.compress_in_place(&mut state, input, 64 as u8, 0, 0));
 }
 
@@ -95,7 +94,7 @@
         let input_arrays: ArrayVec<&[u8; CHUNK_LEN], MAX_SIMD_DEGREE> = inputs
             .iter_mut()
             .take(degree)
-            .map(|i| array_ref!(i.get(), 0, CHUNK_LEN))
+            .map(|i| (&i.get()[..CHUNK_LEN]).try_into().unwrap())
             .collect();
         let mut out = [0; MAX_SIMD_DEGREE * OUT_LEN];
         platform.hash_many(
@@ -166,7 +165,7 @@
         let input_arrays: ArrayVec<&[u8; BLOCK_LEN], MAX_SIMD_DEGREE> = inputs
             .iter_mut()
             .take(degree)
-            .map(|i| array_ref!(i.get(), 0, BLOCK_LEN))
+            .map(|i| (&i.get()[..BLOCK_LEN]).try_into().unwrap())
             .collect();
         let mut out = [0; MAX_SIMD_DEGREE * OUT_LEN];
         platform.hash_many(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/BLAKE3-1.8.6/c/CMakeLists.txt 
new/BLAKE3-1.8.7/c/CMakeLists.txt
--- old/BLAKE3-1.8.6/c/CMakeLists.txt   2026-08-06 00:26:34.000000000 +0200
+++ new/BLAKE3-1.8.7/c/CMakeLists.txt   2026-08-20 10:50:34.000000000 +0200
@@ -10,7 +10,7 @@
 endif()
 
 project(libblake3
-  VERSION 1.8.6
+  VERSION 1.8.7
   DESCRIPTION "BLAKE3 C implementation"
   LANGUAGES C CXX ASM
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/BLAKE3-1.8.6/c/blake3.h new/BLAKE3-1.8.7/c/blake3.h
--- old/BLAKE3-1.8.6/c/blake3.h 2026-08-06 00:26:34.000000000 +0200
+++ new/BLAKE3-1.8.7/c/blake3.h 2026-08-20 10:50:34.000000000 +0200
@@ -30,7 +30,7 @@
 extern "C" {
 #endif
 
-#define BLAKE3_VERSION_STRING "1.8.6"
+#define BLAKE3_VERSION_STRING "1.8.7"
 #define BLAKE3_KEY_LEN 32
 #define BLAKE3_OUT_LEN 32
 #define BLAKE3_BLOCK_LEN 64
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/BLAKE3-1.8.6/c/blake3_c_rust_bindings/Cargo.toml 
new/BLAKE3-1.8.7/c/blake3_c_rust_bindings/Cargo.toml
--- old/BLAKE3-1.8.6/c/blake3_c_rust_bindings/Cargo.toml        2026-08-06 
00:26:34.000000000 +0200
+++ new/BLAKE3-1.8.7/c/blake3_c_rust_bindings/Cargo.toml        2026-08-20 
10:50:34.000000000 +0200
@@ -20,7 +20,6 @@
 tbb = []
 
 [dev-dependencies]
-arrayref = "0.3.5"
 arrayvec = { version = "0.7.0", default-features = false }
 page_size = "0.6.0"
 rand = "0.10.0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/BLAKE3-1.8.6/c/blake3_c_rust_bindings/benches/bench.rs 
new/BLAKE3-1.8.7/c/blake3_c_rust_bindings/benches/bench.rs
--- old/BLAKE3-1.8.6/c/blake3_c_rust_bindings/benches/bench.rs  2026-08-06 
00:26:34.000000000 +0200
+++ new/BLAKE3-1.8.7/c/blake3_c_rust_bindings/benches/bench.rs  2026-08-20 
10:50:34.000000000 +0200
@@ -2,7 +2,6 @@
 
 extern crate test;
 
-use arrayref::array_ref;
 use arrayvec::ArrayVec;
 use rand::prelude::*;
 use test::Bencher;
@@ -57,7 +56,7 @@
 fn bench_single_compression_fn(b: &mut Bencher, f: CompressInPlaceFn) {
     let mut state = [1u32; 8];
     let mut r = RandomInput::new(b, 64);
-    let input = array_ref!(r.get(), 0, 64);
+    let input: &[u8; 64] = (&r.get()[..64]).try_into().unwrap();
     b.iter(|| unsafe { f(state.as_mut_ptr(), input.as_ptr(), 64, 0, 0) });
 }
 
@@ -126,7 +125,7 @@
         let input_arrays: ArrayVec<&[u8; CHUNK_LEN], MAX_SIMD_DEGREE> = inputs
             .iter_mut()
             .take(degree)
-            .map(|i| array_ref!(i.get(), 0, CHUNK_LEN))
+            .map(|i| (&i.get()[..CHUNK_LEN]).try_into().unwrap())
             .collect();
         let mut out = [0; MAX_SIMD_DEGREE * OUT_LEN];
         unsafe {
@@ -218,7 +217,7 @@
         let input_arrays: ArrayVec<&[u8; BLOCK_LEN], MAX_SIMD_DEGREE> = inputs
             .iter_mut()
             .take(degree)
-            .map(|i| array_ref!(i.get(), 0, BLOCK_LEN))
+            .map(|i| (&i.get()[..BLOCK_LEN]).try_into().unwrap())
             .collect();
         let mut out = [0; MAX_SIMD_DEGREE * OUT_LEN];
         unsafe {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/BLAKE3-1.8.6/c/blake3_c_rust_bindings/src/test.rs 
new/BLAKE3-1.8.7/c/blake3_c_rust_bindings/src/test.rs
--- old/BLAKE3-1.8.6/c/blake3_c_rust_bindings/src/test.rs       2026-08-06 
00:26:34.000000000 +0200
+++ new/BLAKE3-1.8.7/c/blake3_c_rust_bindings/src/test.rs       2026-08-20 
10:50:34.000000000 +0200
@@ -2,9 +2,7 @@
 // could share more of it in the future.
 
 use crate::{BLOCK_LEN, CHUNK_LEN, OUT_LEN};
-use arrayref::{array_mut_ref, array_ref};
 use arrayvec::ArrayVec;
-use core::usize;
 use rand::prelude::*;
 
 const CHUNK_START: u8 = 1 << 0;
@@ -75,14 +73,14 @@
 #[inline(always)]
 fn le_bytes_from_words_32(words: &[u32; 8]) -> [u8; 32] {
     let mut out = [0; 32];
-    *array_mut_ref!(out, 0 * 4, 4) = words[0].to_le_bytes();
-    *array_mut_ref!(out, 1 * 4, 4) = words[1].to_le_bytes();
-    *array_mut_ref!(out, 2 * 4, 4) = words[2].to_le_bytes();
-    *array_mut_ref!(out, 3 * 4, 4) = words[3].to_le_bytes();
-    *array_mut_ref!(out, 4 * 4, 4) = words[4].to_le_bytes();
-    *array_mut_ref!(out, 5 * 4, 4) = words[5].to_le_bytes();
-    *array_mut_ref!(out, 6 * 4, 4) = words[6].to_le_bytes();
-    *array_mut_ref!(out, 7 * 4, 4) = words[7].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[0 * 4..][..4]).unwrap() = 
words[0].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[1 * 4..][..4]).unwrap() = 
words[1].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[2 * 4..][..4]).unwrap() = 
words[2].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[3 * 4..][..4]).unwrap() = 
words[3].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[4 * 4..][..4]).unwrap() = 
words[4].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[5 * 4..][..4]).unwrap() = 
words[5].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[6 * 4..][..4]).unwrap() = 
words[6].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[7 * 4..][..4]).unwrap() = 
words[7].to_le_bytes();
     out
 }
 
@@ -224,7 +222,11 @@
         // First hash chunks.
         let mut chunks = ArrayVec::<&[u8; CHUNK_LEN], NUM_INPUTS>::new();
         for i in 0..NUM_INPUTS {
-            chunks.push(array_ref!(input_buf, i * CHUNK_LEN, CHUNK_LEN));
+            chunks.push(
+                (&input_buf[i * CHUNK_LEN..][..CHUNK_LEN])
+                    .try_into()
+                    .unwrap(),
+            );
         }
         let mut portable_chunks_out = [0; NUM_INPUTS * OUT_LEN];
         unsafe {
@@ -268,7 +270,11 @@
         // Then hash parents.
         let mut parents = ArrayVec::<&[u8; 2 * OUT_LEN], NUM_INPUTS>::new();
         for i in 0..NUM_INPUTS {
-            parents.push(array_ref!(input_buf, i * 2 * OUT_LEN, 2 * OUT_LEN));
+            parents.push(
+                (&input_buf[i * 2 * OUT_LEN..][..2 * OUT_LEN])
+                    .try_into()
+                    .unwrap(),
+            );
         }
         let mut portable_parents_out = [0; NUM_INPUTS * OUT_LEN];
         unsafe {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/BLAKE3-1.8.6/src/lib.rs new/BLAKE3-1.8.7/src/lib.rs
--- old/BLAKE3-1.8.6/src/lib.rs 2026-08-06 00:26:34.000000000 +0200
+++ new/BLAKE3-1.8.7/src/lib.rs 2026-08-20 10:50:34.000000000 +0200
@@ -139,7 +139,6 @@
 mod io;
 mod join;
 
-use arrayref::{array_mut_ref, array_ref};
 use arrayvec::{ArrayString, ArrayVec};
 use core::cmp;
 use core::fmt;
@@ -566,7 +565,7 @@
             let block_flags = self.flags | self.start_flag(); // borrowck
             self.platform.compress_in_place(
                 &mut self.cv,
-                array_ref!(input, 0, BLOCK_LEN),
+                (&input[..BLOCK_LEN]).try_into().unwrap(),
                 BLOCK_LEN as u8,
                 self.chunk_counter,
                 block_flags,
@@ -686,7 +685,7 @@
     let mut chunks_exact = input.chunks_exact(CHUNK_LEN);
     let mut chunks_array = ArrayVec::<&[u8; CHUNK_LEN], 
MAX_SIMD_DEGREE>::new();
     for chunk in &mut chunks_exact {
-        chunks_array.push(array_ref!(chunk, 0, CHUNK_LEN));
+        chunks_array.push(chunk.try_into().unwrap());
     }
     platform.hash_many(
         &chunks_array,
@@ -706,7 +705,7 @@
         let counter = chunk_counter + chunks_so_far as u64;
         let mut chunk_state = ChunkState::new(key, counter, flags, platform);
         chunk_state.update(chunks_exact.remainder());
-        *array_mut_ref!(out, chunks_so_far * OUT_LEN, OUT_LEN) =
+        *<&mut [u8; OUT_LEN]>::try_from(&mut out[chunks_so_far * 
OUT_LEN..][..OUT_LEN]).unwrap() =
             chunk_state.output().chaining_value();
         chunks_so_far + 1
     } else {
@@ -736,7 +735,7 @@
     // the requirements of compress_subtree_wide().
     let mut parents_array = ArrayVec::<&[u8; BLOCK_LEN], 
MAX_SIMD_DEGREE_OR_2>::new();
     for parent in &mut parents_exact {
-        parents_array.push(array_ref!(parent, 0, BLOCK_LEN));
+        parents_array.push(parent.try_into().unwrap());
     }
     platform.hash_many(
         &parents_array,
@@ -872,7 +871,7 @@
         num_cvs = compress_parents_parallel(cv_slice, key, flags, platform, 
&mut out_array);
         cv_array[..num_cvs * OUT_LEN].copy_from_slice(&out_array[..num_cvs * 
OUT_LEN]);
     }
-    *array_ref!(cv_array, 0, 2 * OUT_LEN)
+    cv_array[..2 * OUT_LEN].try_into().unwrap()
 }
 
 // Hash a complete input all at once. Unlike compress_subtree_wide() and
@@ -1309,8 +1308,8 @@
                     self.chunk_state.flags,
                     self.chunk_state.platform,
                 );
-                let left_cv = array_ref!(cv_pair, 0, 32);
-                let right_cv = array_ref!(cv_pair, 32, 32);
+                let left_cv = (&cv_pair[..32]).try_into().unwrap();
+                let right_cv = (&cv_pair[32..64]).try_into().unwrap();
                 // Push the two CVs we received into the CV stack in order. 
Because
                 // the stack merges lazily, this guarantees we aren't merging 
the
                 // root.
@@ -1805,7 +1804,7 @@
 #[cfg(feature = "std")]
 impl std::io::Seek for OutputReader {
     fn seek(&mut self, pos: std::io::SeekFrom) -> std::io::Result<u64> {
-        let max_position = u64::max_value() as i128;
+        let max_position = u64::MAX as i128;
         let target_position: i128 = match pos {
             std::io::SeekFrom::Start(x) => x as i128,
             std::io::SeekFrom::Current(x) => self.position() as i128 + x as 
i128,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/BLAKE3-1.8.6/src/platform.rs 
new/BLAKE3-1.8.7/src/platform.rs
--- old/BLAKE3-1.8.6/src/platform.rs    2026-08-06 00:26:34.000000000 +0200
+++ new/BLAKE3-1.8.7/src/platform.rs    2026-08-20 10:50:34.000000000 +0200
@@ -1,5 +1,4 @@
 use crate::{BLOCK_LEN, CVWords, IncrementCounter, portable};
-use arrayref::{array_mut_ref, array_ref};
 
 cfg_if::cfg_if! {
     if #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] {
@@ -408,6 +407,7 @@
 #[cfg(blake3_avx512_ffi)]
 #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
 #[inline(always)]
+#[allow(deprecated)] // TODO: revert this after 
https://github.com/RustCrypto/utils/pull/1515 is released
 pub fn avx512_detected() -> bool {
     if cfg!(miri) {
         return false;
@@ -424,6 +424,7 @@
 
 #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
 #[inline(always)]
+#[allow(deprecated)] // TODO: revert this after 
https://github.com/RustCrypto/utils/pull/1515 is released
 pub fn avx2_detected() -> bool {
     if cfg!(miri) {
         return false;
@@ -440,6 +441,7 @@
 
 #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
 #[inline(always)]
+#[allow(deprecated)] // TODO: revert this after 
https://github.com/RustCrypto/utils/pull/1515 is released
 pub fn sse41_detected() -> bool {
     if cfg!(miri) {
         return false;
@@ -456,6 +458,7 @@
 
 #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
 #[inline(always)]
+#[allow(deprecated)] // TODO: revert this after 
https://github.com/RustCrypto/utils/pull/1515 is released
 pub fn sse2_detected() -> bool {
     if cfg!(miri) {
         return false;
@@ -473,71 +476,71 @@
 #[inline(always)]
 pub fn words_from_le_bytes_32(bytes: &[u8; 32]) -> [u32; 8] {
     let mut out = [0; 8];
-    out[0] = u32::from_le_bytes(*array_ref!(bytes, 0 * 4, 4));
-    out[1] = u32::from_le_bytes(*array_ref!(bytes, 1 * 4, 4));
-    out[2] = u32::from_le_bytes(*array_ref!(bytes, 2 * 4, 4));
-    out[3] = u32::from_le_bytes(*array_ref!(bytes, 3 * 4, 4));
-    out[4] = u32::from_le_bytes(*array_ref!(bytes, 4 * 4, 4));
-    out[5] = u32::from_le_bytes(*array_ref!(bytes, 5 * 4, 4));
-    out[6] = u32::from_le_bytes(*array_ref!(bytes, 6 * 4, 4));
-    out[7] = u32::from_le_bytes(*array_ref!(bytes, 7 * 4, 4));
+    out[0] = u32::from_le_bytes(bytes[0 * 4..][..4].try_into().unwrap());
+    out[1] = u32::from_le_bytes(bytes[1 * 4..][..4].try_into().unwrap());
+    out[2] = u32::from_le_bytes(bytes[2 * 4..][..4].try_into().unwrap());
+    out[3] = u32::from_le_bytes(bytes[3 * 4..][..4].try_into().unwrap());
+    out[4] = u32::from_le_bytes(bytes[4 * 4..][..4].try_into().unwrap());
+    out[5] = u32::from_le_bytes(bytes[5 * 4..][..4].try_into().unwrap());
+    out[6] = u32::from_le_bytes(bytes[6 * 4..][..4].try_into().unwrap());
+    out[7] = u32::from_le_bytes(bytes[7 * 4..][..4].try_into().unwrap());
     out
 }
 
 #[inline(always)]
 pub fn words_from_le_bytes_64(bytes: &[u8; 64]) -> [u32; 16] {
     let mut out = [0; 16];
-    out[0] = u32::from_le_bytes(*array_ref!(bytes, 0 * 4, 4));
-    out[1] = u32::from_le_bytes(*array_ref!(bytes, 1 * 4, 4));
-    out[2] = u32::from_le_bytes(*array_ref!(bytes, 2 * 4, 4));
-    out[3] = u32::from_le_bytes(*array_ref!(bytes, 3 * 4, 4));
-    out[4] = u32::from_le_bytes(*array_ref!(bytes, 4 * 4, 4));
-    out[5] = u32::from_le_bytes(*array_ref!(bytes, 5 * 4, 4));
-    out[6] = u32::from_le_bytes(*array_ref!(bytes, 6 * 4, 4));
-    out[7] = u32::from_le_bytes(*array_ref!(bytes, 7 * 4, 4));
-    out[8] = u32::from_le_bytes(*array_ref!(bytes, 8 * 4, 4));
-    out[9] = u32::from_le_bytes(*array_ref!(bytes, 9 * 4, 4));
-    out[10] = u32::from_le_bytes(*array_ref!(bytes, 10 * 4, 4));
-    out[11] = u32::from_le_bytes(*array_ref!(bytes, 11 * 4, 4));
-    out[12] = u32::from_le_bytes(*array_ref!(bytes, 12 * 4, 4));
-    out[13] = u32::from_le_bytes(*array_ref!(bytes, 13 * 4, 4));
-    out[14] = u32::from_le_bytes(*array_ref!(bytes, 14 * 4, 4));
-    out[15] = u32::from_le_bytes(*array_ref!(bytes, 15 * 4, 4));
+    out[0] = u32::from_le_bytes(bytes[0 * 4..][..4].try_into().unwrap());
+    out[1] = u32::from_le_bytes(bytes[1 * 4..][..4].try_into().unwrap());
+    out[2] = u32::from_le_bytes(bytes[2 * 4..][..4].try_into().unwrap());
+    out[3] = u32::from_le_bytes(bytes[3 * 4..][..4].try_into().unwrap());
+    out[4] = u32::from_le_bytes(bytes[4 * 4..][..4].try_into().unwrap());
+    out[5] = u32::from_le_bytes(bytes[5 * 4..][..4].try_into().unwrap());
+    out[6] = u32::from_le_bytes(bytes[6 * 4..][..4].try_into().unwrap());
+    out[7] = u32::from_le_bytes(bytes[7 * 4..][..4].try_into().unwrap());
+    out[8] = u32::from_le_bytes(bytes[8 * 4..][..4].try_into().unwrap());
+    out[9] = u32::from_le_bytes(bytes[9 * 4..][..4].try_into().unwrap());
+    out[10] = u32::from_le_bytes(bytes[10 * 4..][..4].try_into().unwrap());
+    out[11] = u32::from_le_bytes(bytes[11 * 4..][..4].try_into().unwrap());
+    out[12] = u32::from_le_bytes(bytes[12 * 4..][..4].try_into().unwrap());
+    out[13] = u32::from_le_bytes(bytes[13 * 4..][..4].try_into().unwrap());
+    out[14] = u32::from_le_bytes(bytes[14 * 4..][..4].try_into().unwrap());
+    out[15] = u32::from_le_bytes(bytes[15 * 4..][..4].try_into().unwrap());
     out
 }
 
 #[inline(always)]
 pub fn le_bytes_from_words_32(words: &[u32; 8]) -> [u8; 32] {
     let mut out = [0; 32];
-    *array_mut_ref!(out, 0 * 4, 4) = words[0].to_le_bytes();
-    *array_mut_ref!(out, 1 * 4, 4) = words[1].to_le_bytes();
-    *array_mut_ref!(out, 2 * 4, 4) = words[2].to_le_bytes();
-    *array_mut_ref!(out, 3 * 4, 4) = words[3].to_le_bytes();
-    *array_mut_ref!(out, 4 * 4, 4) = words[4].to_le_bytes();
-    *array_mut_ref!(out, 5 * 4, 4) = words[5].to_le_bytes();
-    *array_mut_ref!(out, 6 * 4, 4) = words[6].to_le_bytes();
-    *array_mut_ref!(out, 7 * 4, 4) = words[7].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[0 * 4..][..4]).unwrap() = 
words[0].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[1 * 4..][..4]).unwrap() = 
words[1].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[2 * 4..][..4]).unwrap() = 
words[2].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[3 * 4..][..4]).unwrap() = 
words[3].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[4 * 4..][..4]).unwrap() = 
words[4].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[5 * 4..][..4]).unwrap() = 
words[5].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[6 * 4..][..4]).unwrap() = 
words[6].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[7 * 4..][..4]).unwrap() = 
words[7].to_le_bytes();
     out
 }
 
 #[inline(always)]
 pub fn le_bytes_from_words_64(words: &[u32; 16]) -> [u8; 64] {
     let mut out = [0; 64];
-    *array_mut_ref!(out, 0 * 4, 4) = words[0].to_le_bytes();
-    *array_mut_ref!(out, 1 * 4, 4) = words[1].to_le_bytes();
-    *array_mut_ref!(out, 2 * 4, 4) = words[2].to_le_bytes();
-    *array_mut_ref!(out, 3 * 4, 4) = words[3].to_le_bytes();
-    *array_mut_ref!(out, 4 * 4, 4) = words[4].to_le_bytes();
-    *array_mut_ref!(out, 5 * 4, 4) = words[5].to_le_bytes();
-    *array_mut_ref!(out, 6 * 4, 4) = words[6].to_le_bytes();
-    *array_mut_ref!(out, 7 * 4, 4) = words[7].to_le_bytes();
-    *array_mut_ref!(out, 8 * 4, 4) = words[8].to_le_bytes();
-    *array_mut_ref!(out, 9 * 4, 4) = words[9].to_le_bytes();
-    *array_mut_ref!(out, 10 * 4, 4) = words[10].to_le_bytes();
-    *array_mut_ref!(out, 11 * 4, 4) = words[11].to_le_bytes();
-    *array_mut_ref!(out, 12 * 4, 4) = words[12].to_le_bytes();
-    *array_mut_ref!(out, 13 * 4, 4) = words[13].to_le_bytes();
-    *array_mut_ref!(out, 14 * 4, 4) = words[14].to_le_bytes();
-    *array_mut_ref!(out, 15 * 4, 4) = words[15].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[0 * 4..][..4]).unwrap() = 
words[0].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[1 * 4..][..4]).unwrap() = 
words[1].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[2 * 4..][..4]).unwrap() = 
words[2].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[3 * 4..][..4]).unwrap() = 
words[3].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[4 * 4..][..4]).unwrap() = 
words[4].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[5 * 4..][..4]).unwrap() = 
words[5].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[6 * 4..][..4]).unwrap() = 
words[6].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[7 * 4..][..4]).unwrap() = 
words[7].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[8 * 4..][..4]).unwrap() = 
words[8].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[9 * 4..][..4]).unwrap() = 
words[9].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[10 * 4..][..4]).unwrap() = 
words[10].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[11 * 4..][..4]).unwrap() = 
words[11].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[12 * 4..][..4]).unwrap() = 
words[12].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[13 * 4..][..4]).unwrap() = 
words[13].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[14 * 4..][..4]).unwrap() = 
words[14].to_le_bytes();
+    *<&mut [u8; 4]>::try_from(&mut out[15 * 4..][..4]).unwrap() = 
words[15].to_le_bytes();
     out
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/BLAKE3-1.8.6/src/portable.rs 
new/BLAKE3-1.8.7/src/portable.rs
--- old/BLAKE3-1.8.6/src/portable.rs    2026-08-06 00:26:34.000000000 +0200
+++ new/BLAKE3-1.8.7/src/portable.rs    2026-08-20 10:50:34.000000000 +0200
@@ -2,7 +2,6 @@
     BLOCK_LEN, CVBytes, CVWords, IV, IncrementCounter, MSG_SCHEDULE, OUT_LEN, 
counter_high,
     counter_low,
 };
-use arrayref::{array_mut_ref, array_ref};
 
 #[inline(always)]
 fn g(state: &mut [u32; 16], a: usize, b: usize, c: usize, d: usize, x: u32, y: 
u32) {
@@ -139,7 +138,7 @@
         }
         compress_in_place(
             &mut cv,
-            array_ref!(slice, 0, BLOCK_LEN),
+            (&slice[..BLOCK_LEN]).try_into().unwrap(),
             BLOCK_LEN as u8,
             counter,
             block_flags,
@@ -169,7 +168,7 @@
             flags,
             flags_start,
             flags_end,
-            array_mut_ref!(output, 0, OUT_LEN),
+            (&mut output[..OUT_LEN]).try_into().unwrap(),
         );
         if increment_counter.yes() {
             counter += 1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/BLAKE3-1.8.6/src/rust_avx2.rs 
new/BLAKE3-1.8.7/src/rust_avx2.rs
--- old/BLAKE3-1.8.6/src/rust_avx2.rs   2026-08-06 00:26:34.000000000 +0200
+++ new/BLAKE3-1.8.7/src/rust_avx2.rs   2026-08-20 10:50:34.000000000 +0200
@@ -6,7 +6,6 @@
 use crate::{
     BLOCK_LEN, CVWords, IV, IncrementCounter, MSG_SCHEDULE, OUT_LEN, 
counter_high, counter_low,
 };
-use arrayref::{array_mut_ref, mut_array_refs};
 
 pub const DEGREE: usize = 8;
 
@@ -276,9 +275,9 @@
                 _MM_HINT_T0,
             );
         }
-        let squares = mut_array_refs!(&mut vecs, DEGREE, DEGREE);
-        transpose_vecs(squares.0);
-        transpose_vecs(squares.1);
+        let (square0, square1) = vecs.split_at_mut(DEGREE);
+        transpose_vecs(square0.try_into().unwrap());
+        transpose_vecs(square1.try_into().unwrap());
         vecs
     }
 }
@@ -427,7 +426,7 @@
                 flags,
                 flags_start,
                 flags_end,
-                array_mut_ref!(out, 0, DEGREE * OUT_LEN),
+                (&mut out[..DEGREE * OUT_LEN]).try_into().unwrap(),
             );
         }
         if increment_counter.yes() {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/BLAKE3-1.8.6/src/rust_sse2.rs 
new/BLAKE3-1.8.7/src/rust_sse2.rs
--- old/BLAKE3-1.8.6/src/rust_sse2.rs   2026-08-06 00:26:34.000000000 +0200
+++ new/BLAKE3-1.8.7/src/rust_sse2.rs   2026-08-20 10:50:34.000000000 +0200
@@ -7,7 +7,6 @@
     BLOCK_LEN, CVBytes, CVWords, IV, IncrementCounter, MSG_SCHEDULE, OUT_LEN, 
counter_high,
     counter_low,
 };
-use arrayref::{array_mut_ref, array_ref, mut_array_refs};
 
 pub const DEGREE: usize = 4;
 
@@ -548,11 +547,13 @@
                 _MM_HINT_T0,
             );
         }
-        let squares = mut_array_refs!(&mut vecs, DEGREE, DEGREE, DEGREE, 
DEGREE);
-        transpose_vecs(squares.0);
-        transpose_vecs(squares.1);
-        transpose_vecs(squares.2);
-        transpose_vecs(squares.3);
+        let (square0, rest) = vecs.split_at_mut(DEGREE);
+        let (square1, rest) = rest.split_at_mut(DEGREE);
+        let (square2, square3) = rest.split_at_mut(DEGREE);
+        transpose_vecs(square0.try_into().unwrap());
+        transpose_vecs(square1.try_into().unwrap());
+        transpose_vecs(square2.try_into().unwrap());
+        transpose_vecs(square3.try_into().unwrap());
         vecs
     }
 }
@@ -653,9 +654,9 @@
             block_flags = flags;
         }
 
-        let squares = mut_array_refs!(&mut h_vecs, DEGREE, DEGREE);
-        transpose_vecs(squares.0);
-        transpose_vecs(squares.1);
+        let (square0, square1) = h_vecs.split_at_mut(DEGREE);
+        transpose_vecs(square0.try_into().unwrap());
+        transpose_vecs(square1.try_into().unwrap());
         // The first four vecs now contain the first half of each output, and 
the
         // second four vecs contain the second half of each output.
         storeu(h_vecs[0], out.as_mut_ptr().add(0 * 4 * DEGREE));
@@ -690,7 +691,7 @@
         unsafe {
             compress_in_place(
                 &mut cv,
-                array_ref!(slice, 0, BLOCK_LEN),
+                (&slice[..BLOCK_LEN]).try_into().unwrap(),
                 BLOCK_LEN as u8,
                 counter,
                 block_flags,
@@ -730,7 +731,7 @@
                 flags,
                 flags_start,
                 flags_end,
-                array_mut_ref!(out, 0, DEGREE * OUT_LEN),
+                (&mut out[..DEGREE * OUT_LEN]).try_into().unwrap(),
             );
         }
         if increment_counter.yes() {
@@ -748,7 +749,7 @@
                 flags,
                 flags_start,
                 flags_end,
-                array_mut_ref!(output, 0, OUT_LEN),
+                (&mut output[..OUT_LEN]).try_into().unwrap(),
             );
         }
         if increment_counter.yes() {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/BLAKE3-1.8.6/src/rust_sse41.rs 
new/BLAKE3-1.8.7/src/rust_sse41.rs
--- old/BLAKE3-1.8.6/src/rust_sse41.rs  2026-08-06 00:26:34.000000000 +0200
+++ new/BLAKE3-1.8.7/src/rust_sse41.rs  2026-08-20 10:50:34.000000000 +0200
@@ -7,7 +7,6 @@
     BLOCK_LEN, CVBytes, CVWords, IV, IncrementCounter, MSG_SCHEDULE, OUT_LEN, 
counter_high,
     counter_low,
 };
-use arrayref::{array_mut_ref, array_ref, mut_array_refs};
 
 pub const DEGREE: usize = 4;
 
@@ -537,11 +536,13 @@
                 _MM_HINT_T0,
             );
         }
-        let squares = mut_array_refs!(&mut vecs, DEGREE, DEGREE, DEGREE, 
DEGREE);
-        transpose_vecs(squares.0);
-        transpose_vecs(squares.1);
-        transpose_vecs(squares.2);
-        transpose_vecs(squares.3);
+        let (square0, rest) = vecs.split_at_mut(DEGREE);
+        let (square1, rest) = rest.split_at_mut(DEGREE);
+        let (square2, square3) = rest.split_at_mut(DEGREE);
+        transpose_vecs(square0.try_into().unwrap());
+        transpose_vecs(square1.try_into().unwrap());
+        transpose_vecs(square2.try_into().unwrap());
+        transpose_vecs(square3.try_into().unwrap());
         vecs
     }
 }
@@ -642,9 +643,9 @@
             block_flags = flags;
         }
 
-        let squares = mut_array_refs!(&mut h_vecs, DEGREE, DEGREE);
-        transpose_vecs(squares.0);
-        transpose_vecs(squares.1);
+        let (square0, square1) = h_vecs.split_at_mut(DEGREE);
+        transpose_vecs(square0.try_into().unwrap());
+        transpose_vecs(square1.try_into().unwrap());
         // The first four vecs now contain the first half of each output, and 
the
         // second four vecs contain the second half of each output.
         storeu(h_vecs[0], out.as_mut_ptr().add(0 * 4 * DEGREE));
@@ -679,7 +680,7 @@
         unsafe {
             compress_in_place(
                 &mut cv,
-                array_ref!(slice, 0, BLOCK_LEN),
+                (&slice[..BLOCK_LEN]).try_into().unwrap(),
                 BLOCK_LEN as u8,
                 counter,
                 block_flags,
@@ -719,7 +720,7 @@
                 flags,
                 flags_start,
                 flags_end,
-                array_mut_ref!(out, 0, DEGREE * OUT_LEN),
+                (&mut out[..DEGREE * OUT_LEN]).try_into().unwrap(),
             );
         }
         if increment_counter.yes() {
@@ -737,7 +738,7 @@
                 flags,
                 flags_start,
                 flags_end,
-                array_mut_ref!(output, 0, OUT_LEN),
+                (&mut output[..OUT_LEN]).try_into().unwrap(),
             );
         }
         if increment_counter.yes() {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/BLAKE3-1.8.6/src/test.rs new/BLAKE3-1.8.7/src/test.rs
--- old/BLAKE3-1.8.6/src/test.rs        2026-08-06 00:26:34.000000000 +0200
+++ new/BLAKE3-1.8.7/src/test.rs        2026-08-20 10:50:34.000000000 +0200
@@ -1,7 +1,5 @@
 use crate::{BLOCK_LEN, CHUNK_LEN, CVBytes, CVWords, IncrementCounter, OUT_LEN};
-use arrayref::array_ref;
 use arrayvec::ArrayVec;
-use core::usize;
 use rand::prelude::*;
 
 // Interesting input lengths to run tests on.
@@ -133,7 +131,11 @@
         // First hash chunks.
         let mut chunks = ArrayVec::<&[u8; CHUNK_LEN], NUM_INPUTS>::new();
         for i in 0..NUM_INPUTS {
-            chunks.push(array_ref!(input_buf, i * CHUNK_LEN, CHUNK_LEN));
+            chunks.push(
+                (&input_buf[i * CHUNK_LEN..][..CHUNK_LEN])
+                    .try_into()
+                    .unwrap(),
+            );
         }
         let mut portable_chunks_out = [0; NUM_INPUTS * OUT_LEN];
         crate::portable::hash_many(
@@ -172,7 +174,11 @@
         // Then hash parents.
         let mut parents = ArrayVec::<&[u8; 2 * OUT_LEN], NUM_INPUTS>::new();
         for i in 0..NUM_INPUTS {
-            parents.push(array_ref!(input_buf, i * 2 * OUT_LEN, 2 * OUT_LEN));
+            parents.push(
+                (&input_buf[i * 2 * OUT_LEN..][..2 * OUT_LEN])
+                    .try_into()
+                    .unwrap(),
+            );
         }
         let mut portable_parents_out = [0; NUM_INPUTS * OUT_LEN];
         crate::portable::hash_many(
@@ -350,18 +356,27 @@
 
             // all at once
             let test_out = crate::hash(input);
-            assert_eq!(test_out, *array_ref!(expected_out, 0, 32));
+            assert_eq!(
+                test_out,
+                *<&[u8; 32]>::try_from(&expected_out[..32]).unwrap()
+            );
             // incremental
             let mut hasher = crate::Hasher::new();
             hasher.update(input);
-            assert_eq!(hasher.finalize(), *array_ref!(expected_out, 0, 32));
+            assert_eq!(
+                hasher.finalize(),
+                *<&[u8; 32]>::try_from(&expected_out[..32]).unwrap()
+            );
             assert_eq!(hasher.finalize(), test_out);
             // incremental (rayon)
             #[cfg(feature = "rayon")]
             {
                 let mut hasher = crate::Hasher::new();
                 hasher.update_rayon(input);
-                assert_eq!(hasher.finalize(), *array_ref!(expected_out, 0, 
32));
+                assert_eq!(
+                    hasher.finalize(),
+                    *<&[u8; 32]>::try_from(&expected_out[..32]).unwrap()
+                );
                 assert_eq!(hasher.finalize(), test_out);
             }
             // xof
@@ -379,18 +394,27 @@
 
             // all at once
             let test_out = crate::keyed_hash(&TEST_KEY, input);
-            assert_eq!(test_out, *array_ref!(expected_out, 0, 32));
+            assert_eq!(
+                test_out,
+                *<&[u8; 32]>::try_from(&expected_out[..32]).unwrap()
+            );
             // incremental
             let mut hasher = crate::Hasher::new_keyed(&TEST_KEY);
             hasher.update(input);
-            assert_eq!(hasher.finalize(), *array_ref!(expected_out, 0, 32));
+            assert_eq!(
+                hasher.finalize(),
+                *<&[u8; 32]>::try_from(&expected_out[..32]).unwrap()
+            );
             assert_eq!(hasher.finalize(), test_out);
             // incremental (rayon)
             #[cfg(feature = "rayon")]
             {
                 let mut hasher = crate::Hasher::new_keyed(&TEST_KEY);
                 hasher.update_rayon(input);
-                assert_eq!(hasher.finalize(), *array_ref!(expected_out, 0, 
32));
+                assert_eq!(
+                    hasher.finalize(),
+                    *<&[u8; 32]>::try_from(&expected_out[..32]).unwrap()
+                );
                 assert_eq!(hasher.finalize(), test_out);
             }
             // xof
@@ -413,15 +437,27 @@
             // incremental
             let mut hasher = crate::Hasher::new_derive_key(context);
             hasher.update(input);
-            assert_eq!(hasher.finalize(), *array_ref!(expected_out, 0, 32));
-            assert_eq!(hasher.finalize(), *array_ref!(test_out, 0, 32));
+            assert_eq!(
+                hasher.finalize(),
+                *<&[u8; 32]>::try_from(&expected_out[..32]).unwrap()
+            );
+            assert_eq!(
+                hasher.finalize(),
+                *<&[u8; 32]>::try_from(&test_out[..32]).unwrap()
+            );
             // incremental (rayon)
             #[cfg(feature = "rayon")]
             {
                 let mut hasher = crate::Hasher::new_derive_key(context);
                 hasher.update_rayon(input);
-                assert_eq!(hasher.finalize(), *array_ref!(expected_out, 0, 
32));
-                assert_eq!(hasher.finalize(), *array_ref!(test_out, 0, 32));
+                assert_eq!(
+                    hasher.finalize(),
+                    *<&[u8; 32]>::try_from(&expected_out[..32]).unwrap()
+                );
+                assert_eq!(
+                    hasher.finalize(),
+                    *<&[u8; 32]>::try_from(&test_out[..32]).unwrap()
+                );
             }
             // xof
             let mut extended = [0; OUT];
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/BLAKE3-1.8.6/src/wasm32_simd.rs 
new/BLAKE3-1.8.7/src/wasm32_simd.rs
--- old/BLAKE3-1.8.6/src/wasm32_simd.rs 2026-08-06 00:26:34.000000000 +0200
+++ new/BLAKE3-1.8.7/src/wasm32_simd.rs 2026-08-20 10:50:34.000000000 +0200
@@ -20,7 +20,6 @@
     BLOCK_LEN, CVBytes, CVWords, IV, IncrementCounter, MSG_SCHEDULE, OUT_LEN, 
counter_high,
     counter_low,
 };
-use arrayref::{array_mut_ref, array_ref, mut_array_refs};
 
 pub const DEGREE: usize = 4;
 
@@ -555,11 +554,13 @@
             loadu(inputs[3].add(block_offset + 3 * 4 * DEGREE)),
         ]
     };
-    let squares = mut_array_refs!(&mut vecs, DEGREE, DEGREE, DEGREE, DEGREE);
-    transpose_vecs(squares.0);
-    transpose_vecs(squares.1);
-    transpose_vecs(squares.2);
-    transpose_vecs(squares.3);
+    let (square0, rest) = vecs.split_at_mut(DEGREE);
+    let (square1, rest) = rest.split_at_mut(DEGREE);
+    let (square2, square3) = rest.split_at_mut(DEGREE);
+    transpose_vecs(square0.try_into().unwrap());
+    transpose_vecs(square1.try_into().unwrap());
+    transpose_vecs(square2.try_into().unwrap());
+    transpose_vecs(square3.try_into().unwrap());
     vecs
 }
 
@@ -656,9 +657,9 @@
         block_flags = flags;
     }
 
-    let squares = mut_array_refs!(&mut h_vecs, DEGREE, DEGREE);
-    transpose_vecs(squares.0);
-    transpose_vecs(squares.1);
+    let (square0, square1) = h_vecs.split_at_mut(DEGREE);
+    transpose_vecs(square0.try_into().unwrap());
+    transpose_vecs(square1.try_into().unwrap());
     // The first four vecs now contain the first half of each output, and the
     // second four vecs contain the second half of each output.
     unsafe {
@@ -693,7 +694,7 @@
         }
         compress_in_place(
             &mut cv,
-            array_ref!(slice, 0, BLOCK_LEN),
+            (&slice[..BLOCK_LEN]).try_into().unwrap(),
             BLOCK_LEN as u8,
             counter,
             block_flags,
@@ -732,7 +733,7 @@
                 flags,
                 flags_start,
                 flags_end,
-                array_mut_ref!(out, 0, DEGREE * OUT_LEN),
+                (&mut out[..DEGREE * OUT_LEN]).try_into().unwrap(),
             );
         }
         if increment_counter.yes() {
@@ -750,7 +751,7 @@
                 flags,
                 flags_start,
                 flags_end,
-                array_mut_ref!(output, 0, OUT_LEN),
+                (&mut output[..OUT_LEN]).try_into().unwrap(),
             );
         }
         if increment_counter.yes() {

++++++ vendor.tar.zst ++++++
/work/SRC/openSUSE:Factory/blake3/vendor.tar.zst 
/work/SRC/openSUSE:Factory/.blake3.new.1265/vendor.tar.zst differ: char 7, line 
1

Reply via email to