use super::HashFunction;
pub const SHA1_OUTPUT_SIZE: usize = 20;
extern "C" {
#[link_name = "sha1_hash"]
fn swift_sha1_hash(data: *const u8, length: i32, out_hash: *mut u8);
}
pub fn sha1_hash(data: &[u8]) -> [u8; 20] {
let mut output = [0u8; 20];
sha1_hash_to(data, &mut output);
output
}
pub fn sha1_hash_to(data: &[u8], output: &mut [u8]) {
assert!(
output.len() >= SHA1_OUTPUT_SIZE,
"Output buffer too small: {} < {}",
output.len(),
SHA1_OUTPUT_SIZE
);
unsafe {
swift_sha1_hash(data.as_ptr(), data.len() as i32, output.as_mut_ptr());
}
}
pub struct SHA1;
impl HashFunction for SHA1 {
const OUTPUT_SIZE: usize = SHA1_OUTPUT_SIZE;
fn hash_to(data: &[u8], output: &mut [u8]) {
sha1_hash_to(data, output)
}
}
pub use SHA1 as Sha1Algorithm;