casper_execution_engine/runtime/
cryptography.rs1use blake2::{
5 digest::{Update, VariableOutput},
6 Blake2bVar,
7};
8use sha2::{Digest, Sha256};
9
10pub const DIGEST_LENGTH: usize = 32;
13
14pub fn blake2b<T: AsRef<[u8]>>(data: T) -> [u8; DIGEST_LENGTH] {
16 let mut result = [0; DIGEST_LENGTH];
17 let mut hasher = Blake2bVar::new(DIGEST_LENGTH).expect("should create hasher");
19
20 hasher.update(data.as_ref());
21
22 hasher.finalize_variable(&mut result).ok();
24
25 result
26}
27
28pub fn blake3<T: AsRef<[u8]>>(data: T) -> [u8; DIGEST_LENGTH] {
30 let mut result = [0; DIGEST_LENGTH];
31 let mut hasher = blake3::Hasher::new();
32
33 hasher.update(data.as_ref());
34 let hash = hasher.finalize();
35 let hash_bytes: &[u8; DIGEST_LENGTH] = hash.as_bytes();
36 result.copy_from_slice(hash_bytes);
37 result
38}
39
40pub fn sha256<T: AsRef<[u8]>>(data: T) -> [u8; DIGEST_LENGTH] {
42 Sha256::digest(data).into()
43}