cas_lib/hashers/
sha.rs

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