rust_qrng 0.1.2

Tsotchkes quantum random number generator library with cryptographic, financial, and gaming applications converted to Rust
Documentation
use crate::QuantumRNG;

pub struct QuantumKeyExchange {
    quantum_rng: QuantumRNG,
}

impl QuantumKeyExchange {
    pub fn new() -> Self {
        QuantumKeyExchange {
            quantum_rng: QuantumRNG::new(),
        }
    }

    pub fn generate_random_bytes(&mut self, len: usize) -> Vec<u8> {
        self.quantum_rng.generate_random_bytes(len)
    }

    pub fn generate_key_pair(&mut self) -> (Vec<u8>, Vec<u8>) {
        let public_key = self.generate_random_bytes(32);
        let private_key = self.generate_random_bytes(32);
        (public_key, private_key)
    }

    pub fn derive_shared_secret(&mut self, private_key: &[u8], public_key: &[u8]) -> Vec<u8> {
        // Simple key derivation - in practice this would use proper ECDH
        let mut shared_secret = Vec::new();
        for i in 0..32 {
            let combined = private_key[i % private_key.len()] ^ public_key[i % public_key.len()];
            shared_secret.push(combined);
        }
        shared_secret
    }
}

pub fn generate_keys() -> (Vec<u8>, Vec<u8>) {
    let mut key_exchange = QuantumKeyExchange::new();
    let public_key = key_exchange.generate_random_bytes(32);
    let private_key = key_exchange.generate_random_bytes(32);
    (public_key, private_key)
}

pub fn validate_keys(public_key: &[u8], private_key: &[u8]) -> bool {
    !public_key.is_empty() && !private_key.is_empty() && public_key.len() == 32 && private_key.len() == 32
}

// Alias for backwards compatibility
pub type KeyExchange = QuantumKeyExchange;