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}