cas_lib/hashers/
blake2.rs1use std::sync::mpsc;
2
3use super::cas_hasher::CASHasher;
4use blake2::{Blake2b512, Blake2s256, Digest};
5
6pub struct CASBlake2;
7
8impl CASHasher for CASBlake2 {
9 fn hash_512(data_to_hash: Vec<u8>) -> Vec<u8> {
10 let mut hasher = Blake2b512::new();
11 hasher.update(data_to_hash);
12 let result = hasher.finalize();
13 return result.to_vec();
14 }
15
16 fn verify_512(hash_to_verify: Vec<u8>, data_to_verify: Vec<u8>) -> bool {
17 let mut hasher = Blake2b512::new();
18 hasher.update(data_to_verify);
19 let result = hasher.finalize();
20 return hash_to_verify.eq(&result.to_vec());
21 }
22
23 fn hash_256(data_to_hash: Vec<u8>) -> Vec<u8> {
24 let mut hasher = Blake2s256::new();
25 hasher.update(data_to_hash);
26 let result = hasher.finalize();
27 return result.to_vec();
28 }
29
30 fn verify_256(hash_to_verify: Vec<u8>, data_to_verify: Vec<u8>) -> bool {
31 let mut hasher = Blake2s256::new();
32 hasher.update(data_to_verify);
33 let result = hasher.finalize();
34 return hash_to_verify.eq(&result.to_vec());
35 }
36
37 fn hash_512_threadpool(data_to_hash: Vec<u8>) -> Vec<u8> {
38 let (sender, receiver) = mpsc::channel();
39 rayon::spawn(move || {
40 let result = <CASBlake2 as CASHasher>::hash_512(data_to_hash);
41 sender.send(result).unwrap();
42 });
43 let result = receiver.recv().unwrap();
44 result
45 }
46
47 fn verify_512_threadpool(hash_to_verify: Vec<u8>, data_to_verify: Vec<u8>) -> bool {
48 let (sender, receiver) = mpsc::channel();
49 rayon::spawn(move || {
50 let result = <CASBlake2 as CASHasher>::verify_512(hash_to_verify, data_to_verify);
51 sender.send(result).unwrap();
52 });
53 let result = receiver.recv().unwrap();
54 result
55 }
56
57 fn hash_256_threadpool(data_to_hash: Vec<u8>) -> Vec<u8> {
58 let (sender, receiver) = mpsc::channel();
59 rayon::spawn(move || {
60 let result = <CASBlake2 as CASHasher>::hash_256(data_to_hash);
61 sender.send(result).unwrap();
62 });
63 let result = receiver.recv().unwrap();
64 result
65 }
66
67 fn verify_256_threadpool(hash_to_verify: Vec<u8>, data_to_verify: Vec<u8>) -> bool {
68 let (sender, receiver) = mpsc::channel();
69 rayon::spawn(move || {
70 let result = <CASBlake2 as CASHasher>::verify_256(hash_to_verify, data_to_verify);
71 sender.send(result).unwrap();
72 });
73 let result = receiver.recv().unwrap();
74 result
75 }
76}