pulseengine_mcp_auth/crypto/
mod.rs1pub mod encryption;
7pub mod hashing;
8pub mod keys;
9
10pub use encryption::{EncryptionError, decrypt_data, encrypt_data};
11pub use hashing::{HashingError, generate_salt, hash_api_key, verify_api_key};
12pub use keys::{KeyDerivationError, derive_key, generate_secure_key};
13
14pub use encryption::EncryptedData;
15pub use hashing::Salt;
17
18pub fn init() -> Result<(), CryptoError> {
20 use rand::RngCore;
22 let mut rng = rand::thread_rng();
23 let mut test_bytes = [0u8; 32];
24 rng.fill_bytes(&mut test_bytes);
25
26 if test_bytes.iter().all(|&b| b == 0) {
28 return Err(CryptoError::RandomnessError(
29 "Failed to generate random bytes".into(),
30 ));
31 }
32
33 Ok(())
34}
35
36#[derive(Debug, thiserror::Error)]
38pub enum CryptoError {
39 #[error("Encryption error: {0}")]
40 Encryption(#[from] EncryptionError),
41
42 #[error("Hashing error: {0}")]
43 Hashing(#[from] HashingError),
44
45 #[error("Key derivation error: {0}")]
46 KeyDerivation(#[from] KeyDerivationError),
47
48 #[error("Randomness error: {0}")]
49 RandomnessError(String),
50}
51
52#[cfg(test)]
53mod tests {
54 use super::*;
55
56 #[test]
57 fn test_crypto_init() {
58 assert!(init().is_ok());
59 }
60}