quantrs2_device/quantum_network/
qkd.rs1use 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}