javm_guest_tests/tests/
crypto.rs1use crate::fold_bytes_to_u64;
8use blake2::digest::consts::U32;
9use blake2::digest::Digest as _;
10use blake2::Blake2b;
11
12type Blake2b256 = Blake2b<U32>;
13
14const HASH_INPUTS: &[&[u8]] = &[
15 &[],
16 b"abc",
17 b"The quick brown fox jumps over the lazy dog",
18 &[0u8; 64],
19];
20
21pub fn blake2b_256(input: &[u8], output: &mut [u8]) -> usize {
22 let mut hasher = Blake2b256::new();
23 hasher.update(input);
24 let result = hasher.finalize();
25 output[..32].copy_from_slice(&result);
26 32
27}
28
29pub fn keccak_256(input: &[u8], output: &mut [u8]) -> usize {
30 use sha3::Digest as _;
31 let mut hasher = sha3::Keccak256::new();
32 hasher.update(input);
33 let result = hasher.finalize();
34 output[..32].copy_from_slice(&result);
35 32
36}
37
38pub fn blake2b_256_suite() -> u64 {
41 let mut acc = 0u64;
42 let mut output = [0u8; 32];
43 for input in HASH_INPUTS {
44 let len = blake2b_256(input, &mut output);
45 debug_assert_eq!(len, 32);
46 acc ^= fold_bytes_to_u64(&output);
47 }
48 acc
49}
50
51pub fn keccak_256_suite() -> u64 {
52 let mut acc = 0u64;
53 let mut output = [0u8; 32];
54 for input in HASH_INPUTS {
55 let len = keccak_256(input, &mut output);
56 debug_assert_eq!(len, 32);
57 acc ^= fold_bytes_to_u64(&output);
58 }
59 acc
60}