lgx_runtime/utils/
crypto.rs1use anyhow::Result;
2use base64::Engine;
3use sha2::{Digest, Sha256};
4use tracing::debug;
5use uuid::Uuid;
6
7pub fn hash_string(input: &str) -> Result<String> {
8 debug!("Hashing string of length: {}", input.len());
9
10 let mut hasher = Sha256::new();
11 hasher.update(input.as_bytes());
12 let result = hasher.finalize();
13
14 Ok(format!("{:x}", result))
15}
16
17pub fn generate_token() -> Result<String> {
18 debug!("Generating new token");
19
20 let token = Uuid::new_v4().to_string();
21 let hashed_token = hash_string(&token)?;
22
23 Ok(hashed_token)
24}
25
26pub fn verify_signature(data: &str, signature: &str, public_key: &str) -> Result<bool> {
27 debug!("Verifying signature for data length: {}", data.len());
28
29 let expected_signature = hash_string(&format!("{}{}", data, public_key))?;
32
33 Ok(signature == expected_signature)
34}
35
36pub fn encrypt_data(data: &str, key: &str) -> Result<String> {
37 debug!("Encrypting data of length: {}", data.len());
38
39 let key_bytes = key.as_bytes();
42 let data_bytes = data.as_bytes();
43 let mut encrypted = Vec::new();
44
45 for (i, &byte) in data_bytes.iter().enumerate() {
46 let key_byte = key_bytes[i % key_bytes.len()];
47 encrypted.push(byte ^ key_byte);
48 }
49
50 Ok(base64::engine::general_purpose::STANDARD.encode(encrypted))
51}
52
53pub fn decrypt_data(encrypted_data: &str, key: &str) -> Result<String> {
54 debug!("Decrypting data");
55
56 let encrypted_bytes = base64::engine::general_purpose::STANDARD.decode(encrypted_data)?;
57 let key_bytes = key.as_bytes();
58 let mut decrypted = Vec::new();
59
60 for (i, &byte) in encrypted_bytes.iter().enumerate() {
61 let key_byte = key_bytes[i % key_bytes.len()];
62 decrypted.push(byte ^ key_byte);
63 }
64
65 Ok(String::from_utf8(decrypted)?)
66}