use hacl_sys::{Hacl_Blake2b_32_blake2b, Hacl_Blake2s_32_blake2s};
pub fn blake2b<const LEN: usize>(payload: &[u8], key: &[u8]) -> [u8; LEN] {
let nn = if LEN > 64 { 64u32 } else { LEN as u32 };
let mut digest = [0u8; LEN];
unsafe {
Hacl_Blake2b_32_blake2b(
nn,
digest.as_mut_ptr(),
payload.len() as u32,
payload.as_ptr() as _,
key.len() as u32,
key.as_ptr() as _,
)
}
digest
}
#[cfg(simd256)]
pub mod simd256 {
use hacl_sys::Hacl_Blake2b_256_blake2b;
pub fn blake2b<const LEN: usize>(payload: &[u8], key: &[u8]) -> [u8; LEN] {
let nn = if LEN > 64 { 64u32 } else { LEN as u32 };
let mut digest = [0u8; LEN];
unsafe {
Hacl_Blake2b_256_blake2b(
nn,
digest.as_mut_ptr(),
payload.len() as u32,
payload.as_ptr() as _,
key.len() as u32,
key.as_ptr() as _,
)
}
digest
}
}
pub fn blake2s<const LEN: usize>(payload: &[u8], key: &[u8]) -> [u8; LEN] {
let nn = if LEN > 32 { 32u32 } else { LEN as u32 };
let mut digest = [0u8; LEN];
unsafe {
Hacl_Blake2s_32_blake2s(
nn,
digest.as_mut_ptr(),
payload.len() as u32,
payload.as_ptr() as _,
key.len() as u32,
key.as_ptr() as _,
)
}
digest
}
#[cfg(simd128)]
pub mod simd128 {
use hacl_sys::Hacl_Blake2s_128_blake2s;
pub fn blake2s<const LEN: usize>(payload: &[u8], key: &[u8]) -> [u8; LEN] {
let nn = if LEN > 64 { 64u32 } else { LEN as u32 };
let mut digest = [0u8; LEN];
unsafe {
Hacl_Blake2s_128_blake2s(
nn,
digest.as_mut_ptr(),
payload.len() as u32,
payload.as_ptr() as _,
key.len() as u32,
key.as_ptr() as _,
)
}
digest
}
}