cas_lib/hashers/
blake2.rs

1use 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}