quantum_crypto/
quantum_crypto.rs1use quantrs2_ml::crypto::{ProtocolType, QuantumKeyDistribution, QuantumSignature, QSDC};
2use quantrs2_ml::prelude::*;
3use std::time::Instant;
4
5fn main() -> Result<()> {
6 println!("Quantum Cryptography Examples");
7 println!("============================");
8
9 run_bb84_example()?;
11
12 run_e91_example()?;
14
15 run_signature_example()?;
17
18 run_qsdc_example()?;
20
21 run_blockchain_example()?;
23
24 Ok(())
25}
26
27fn run_bb84_example() -> Result<()> {
28 println!("\nBB84 Quantum Key Distribution");
29 println!("----------------------------");
30
31 let num_qubits = 1000;
33 println!("Creating BB84 protocol with {} qubits", num_qubits);
34 let mut qkd = QuantumKeyDistribution::new(ProtocolType::BB84, num_qubits);
35
36 qkd = qkd.with_error_rate(0.03);
38 println!("Simulated error rate: {:.1}%", qkd.error_rate * 100.0);
39
40 println!("Performing quantum key distribution...");
42 let start = Instant::now();
43 let key_length = qkd.distribute_key()?;
44 println!("Key distribution completed in {:.2?}", start.elapsed());
45 println!("Final key length: {} bits", key_length);
46
47 println!("Verifying Alice and Bob have identical keys...");
49 if qkd.verify_keys() {
50 println!("✓ Key verification successful!");
51
52 if let Some(key) = qkd.get_alice_key() {
54 println!("First 8 bytes of key: {:?}", &key[0..8.min(key.len())]);
55 }
56 } else {
57 println!("✗ Key verification failed!");
58 }
59
60 if let Some(key) = qkd.get_alice_key() {
62 let message = b"Hello, quantum world!";
63
64 println!(
65 "Encrypting message: '{}'",
66 std::str::from_utf8(message).unwrap()
67 );
68 let encrypted = quantrs2_ml::crypto::encrypt_with_qkd(message, key);
69
70 println!("Encrypted data: {:?}", &encrypted);
71
72 if let Some(bob_key) = qkd.get_bob_key() {
74 let decrypted = quantrs2_ml::crypto::decrypt_with_qkd(&encrypted, bob_key);
75 println!(
76 "Decrypted message: '{}'",
77 std::str::from_utf8(&decrypted).unwrap()
78 );
79 }
80 }
81
82 Ok(())
83}
84
85fn run_e91_example() -> Result<()> {
86 println!("\nE91 Entanglement-Based Protocol");
87 println!("------------------------------");
88
89 let num_qubits = 800;
91 println!("Creating E91 protocol with {} qubits", num_qubits);
92 let mut qkd = QuantumKeyDistribution::new(ProtocolType::E91, num_qubits);
93
94 qkd = qkd.with_error_rate(0.02);
96 println!("Simulated error rate: {:.1}%", qkd.error_rate * 100.0);
97
98 println!("Performing quantum key distribution with entangled pairs...");
100 let start = Instant::now();
101 let key_length = qkd.distribute_key()?;
102 println!("Key distribution completed in {:.2?}", start.elapsed());
103 println!("Final key length: {} bits", key_length);
104
105 println!("Verifying Alice and Bob have identical keys...");
107 if qkd.verify_keys() {
108 println!("✓ Key verification successful!");
109
110 if let Some(key) = qkd.get_alice_key() {
112 println!("First 8 bytes of key: {:?}", &key[0..8.min(key.len())]);
113 }
114 } else {
115 println!("✗ Key verification failed!");
116 }
117
118 Ok(())
119}
120
121fn run_signature_example() -> Result<()> {
122 println!("\nQuantum Digital Signatures");
123 println!("-------------------------");
124
125 let num_qubits = 256;
127 println!(
128 "Creating quantum signature scheme with {} qubits",
129 num_qubits
130 );
131
132 let algorithm = "Dilithium";
134 println!("Using algorithm: {}", algorithm);
135
136 let signature = QuantumSignature::new(num_qubits, algorithm)?;
137 println!("Quantum signature scheme created");
138
139 let message = b"This message is quantum-signed";
141 println!(
142 "Signing message: '{}'",
143 std::str::from_utf8(message).unwrap()
144 );
145
146 let start = Instant::now();
147 let sig = signature.sign(message)?;
148 println!("Signature generated in {:.2?}", start.elapsed());
149 println!("Signature size: {} bytes", sig.len());
150
151 println!("Verifying signature...");
153 let start = Instant::now();
154 let is_valid = signature.verify(message, &sig)?;
155 println!("Verification completed in {:.2?}", start.elapsed());
156
157 if is_valid {
158 println!("✓ Signature verification successful!");
159 } else {
160 println!("✗ Signature verification failed!");
161 }
162
163 let tampered = b"This message has been modified";
165 println!("Verifying signature with tampered message...");
166 let is_valid = signature.verify(tampered, &sig)?;
167
168 if is_valid {
169 println!("✗ Signature incorrectly verified on tampered message!");
170 } else {
171 println!("✓ Signature correctly rejected tampered message!");
172 }
173
174 Ok(())
175}
176
177fn run_qsdc_example() -> Result<()> {
178 println!("\nQuantum Secure Direct Communication");
179 println!("---------------------------------");
180
181 let num_qubits = 1000;
183 println!("Creating QSDC protocol with {} qubits", num_qubits);
184 let qsdc = QSDC::new(num_qubits);
185
186 let message = b"This message is sent directly using quantum channel";
188 println!(
189 "Message to transmit: '{}'",
190 std::str::from_utf8(message).unwrap()
191 );
192
193 let start = Instant::now();
194 let received = qsdc.transmit_message(message)?;
195 println!("Transmission completed in {:.2?}", start.elapsed());
196
197 println!(
198 "Received message: '{}'",
199 std::str::from_utf8(&received).unwrap()
200 );
201
202 let errors = message
204 .iter()
205 .zip(received.iter())
206 .filter(|(&a, &b)| a != b)
207 .count();
208
209 println!(
210 "Bit error rate: {:.2}%",
211 (errors as f64) / (message.len() as f64) * 100.0
212 );
213
214 Ok(())
215}
216
217fn run_blockchain_example() -> Result<()> {
218 println!("\nQuantum Blockchain Example");
219 println!("-------------------------");
220
221 use quantrs2_ml::blockchain::{ConsensusType, QuantumBlockchain, Transaction};
222
223 let difficulty = 2; println!("Creating quantum blockchain with difficulty {}", difficulty);
226 let mut blockchain = QuantumBlockchain::new(ConsensusType::QuantumProofOfWork, difficulty);
227
228 let sender = vec![1, 2, 3, 4];
230 let recipient = vec![5, 6, 7, 8];
231 let amount = 100.0;
232
233 println!(
234 "Creating transaction: {} sends {} units to recipient",
235 sender
236 .iter()
237 .map(|&b| b.to_string())
238 .collect::<Vec<_>>()
239 .join(""),
240 amount
241 );
242
243 let transaction = Transaction::new(sender.clone(), recipient.clone(), amount, Vec::new());
244
245 println!("Adding transaction to blockchain...");
247 blockchain.add_transaction(transaction)?;
248
249 println!("Mining new block...");
251 let start = Instant::now();
252 let block = blockchain.mine_block()?;
253 println!("Block mined in {:.2?}", start.elapsed());
254
255 println!(
256 "Block hash: {:02x?}",
257 &block.hash[0..8.min(block.hash.len())]
258 );
259 println!("Blockchain length: {}", blockchain.chain.len());
260
261 println!("Verifying blockchain integrity...");
263 let is_valid = blockchain.verify_chain()?;
264
265 if is_valid {
266 println!("✓ Blockchain verification successful!");
267 } else {
268 println!("✗ Blockchain verification failed!");
269 }
270
271 Ok(())
272}