AirLibrary/Updates/
ChecksumUtil.rs1use sha2::{Digest, Sha256, Sha512};
9
10pub fn sha256_hex(data:&[u8]) -> String {
12 let mut h = Sha256::new();
13
14 h.update(data);
15
16 hex::encode(h.finalize())
17}
18
19pub fn sha512_hex(data:&[u8]) -> String {
21 let mut h = Sha512::new();
22
23 h.update(data);
24
25 hex::encode(h.finalize())
26}
27
28pub fn md5_hex(data:&[u8]) -> String {
30 let digest = md5::compute(data);
31
32 format!("{:x}", digest)
33}
34
35pub fn crc32_hex(data:&[u8]) -> String {
37 let crc = crc32fast::hash(data);
38
39 format!("{:08x}", crc)
40}
41
42pub async fn sha256_file(path:&std::path::Path) -> Result<String, std::io::Error> {
44 let content = tokio::fs::read(path).await?;
45
46 Ok(sha256_hex(&content))
47}
48
49pub fn verify(data:&[u8], algorithm:&str, expected:&str) -> bool {
53 let actual = match algorithm.to_lowercase().as_str() {
54 "sha256" => sha256_hex(data),
55
56 "sha512" => sha512_hex(data),
57
58 "md5" => md5_hex(data),
59
60 "crc32" => crc32_hex(data),
61
62 _ => return false,
63 };
64
65 actual == expected
66}