quantrs2_device/quantum_network/
qkd.rs

1//! Quantum Key Distribution (QKD) protocols and configurations
2
3use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5use std::time::Duration;
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct KeyGenerationConfig {
9    pub protocol: String,
10    pub key_length: u32,
11    pub generation_rate: f64,
12    pub basis_choices: Vec<String>,
13    pub error_correction: bool,
14    pub privacy_amplification: bool,
15}
16
17impl Default for KeyGenerationConfig {
18    fn default() -> Self {
19        Self {
20            protocol: "BB84".to_string(),
21            key_length: 256,
22            generation_rate: 1000.0,
23            basis_choices: vec!["Z".to_string(), "X".to_string()],
24            error_correction: true,
25            privacy_amplification: true,
26        }
27    }
28}
29
30#[derive(Debug, Clone, Serialize, Deserialize)]
31pub struct PrivacyAmplificationConfig {
32    pub hash_function: String,
33    pub compression_ratio: f64,
34    pub security_parameter: u32,
35    pub randomness_extraction: String,
36    pub verification_enabled: bool,
37}
38
39impl Default for PrivacyAmplificationConfig {
40    fn default() -> Self {
41        Self {
42            hash_function: "SHA-256".to_string(),
43            compression_ratio: 0.5,
44            security_parameter: 128,
45            randomness_extraction: "leftover_hash".to_string(),
46            verification_enabled: true,
47        }
48    }
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize)]
52pub struct ErrorReconciliationConfig {
53    pub algorithm: String,
54    pub efficiency: f64,
55    pub parity_bits: u32,
56    pub syndrome_length: u32,
57    pub interactive_rounds: u32,
58}
59
60impl Default for ErrorReconciliationConfig {
61    fn default() -> Self {
62        Self {
63            algorithm: "Cascade".to_string(),
64            efficiency: 1.2,
65            parity_bits: 1024,
66            syndrome_length: 512,
67            interactive_rounds: 4,
68        }
69    }
70}
71
72#[derive(Debug, Clone, Serialize, Deserialize)]
73pub struct QKDSecurityConfig {
74    pub security_proofs: Vec<String>,
75    pub threat_model: String,
76    pub privacy_parameter: f64,
77    pub soundness_parameter: f64,
78}
79
80impl Default for QKDSecurityConfig {
81    fn default() -> Self {
82        Self {
83            security_proofs: vec!["Finite-key".to_string()],
84            threat_model: "Individual attack".to_string(),
85            privacy_parameter: 0.11,
86            soundness_parameter: 128.0,
87        }
88    }
89}
90
91#[derive(Debug, Clone, Serialize, Deserialize)]
92pub struct DistanceParameters {
93    pub max_distance: f64,
94    pub attenuation_coefficient: f64,
95    pub dark_count_rate: f64,
96}
97
98impl Default for DistanceParameters {
99    fn default() -> Self {
100        Self {
101            max_distance: 100.0,
102            attenuation_coefficient: 0.2,
103            dark_count_rate: 1000.0,
104        }
105    }
106}
107
108#[derive(Debug, Clone, Serialize, Deserialize)]
109pub struct QKDPerformanceConfig {
110    pub target_key_rate: f64,
111    pub distance_parameters: DistanceParameters,
112    pub channel_model: String,
113    pub optimization_targets: Vec<String>,
114}
115
116impl Default for QKDPerformanceConfig {
117    fn default() -> Self {
118        Self {
119            target_key_rate: 1000.0,
120            distance_parameters: DistanceParameters::default(),
121            channel_model: "QBER".to_string(),
122            optimization_targets: vec!["key_rate".to_string(), "efficiency".to_string()],
123        }
124    }
125}