1#![doc(html_root_url = "https://docs.rs/quantum-shield/0.1.0")]
34#![warn(missing_docs, rust_2018_idioms)]
35#![cfg_attr(docsrs, feature(doc_cfg))]
36
37mod constants;
38mod crypto;
39mod error;
40mod keys;
41mod types;
42mod security;
43
44pub use constants::*;
45pub use crypto::HybridCrypto;
46pub use error::{Error, Result};
47pub use keys::{PublicKeys, PrivateKeys, KeyPair};
48pub use types::{HybridCiphertext, HybridSignature, CryptoVersion};
49pub use security::{
50 SecurityManager, EntropyMonitor, TimingProtection, SecureMemory,
51 AlgorithmAgility, SecurityAuditResult, constant_time_compare,
52 constant_time_select
53};
54
55pub mod prelude {
57 pub use crate::{HybridCrypto, PublicKeys, PrivateKeys, KeyPair, Result};
58 pub use crate::{HybridCiphertext, HybridSignature};
59}
60
61#[cfg(test)]
62mod tests {
63 use super::*;
64
65 #[test]
66 fn test_basic_encryption() {
67 let alice = HybridCrypto::generate_keypair().unwrap();
68 let bob = HybridCrypto::generate_keypair().unwrap();
69
70 let message = b"Test message";
71 let encrypted = alice.encrypt(message, &bob.public_keys()).unwrap();
72 let decrypted = bob.decrypt(&encrypted).unwrap();
73
74 assert_eq!(message, &decrypted[..]);
75 }
76
77 #[test]
78 fn test_basic_signature() {
79 let alice = HybridCrypto::generate_keypair().unwrap();
80
81 let message = b"Message to sign";
82 let signature = alice.sign(message).unwrap();
83 let valid = HybridCrypto::verify(message, &signature, &alice.public_keys()).unwrap();
84
85 assert!(valid);
86 }
87}
88