pub struct KyberSharedSecret(/* private fields */);Expand description
Kyber1024 shared secret
Implementations§
Sourcepub fn as_bytes(&self) -> &[u8] ⓘ
pub fn as_bytes(&self) -> &[u8] ⓘ
Get the raw shared secret bytes
Examples found in repository?
examples/benchmark.rs (line 115)
104fn benchmark_hybrid() -> Result<()> {
105 let plaintext = vec![0u8; MESSAGE_SIZE];
106
107 // Benchmark full hybrid encryption
108 let start = Instant::now();
109 for _ in 0..BENCHMARK_ITERATIONS {
110 // Key establishment
111 let alice_keypair = KyberCrypto::generate_keypair();
112 let (shared_secret, _kyber_ciphertext) = KyberCrypto::encapsulate(&alice_keypair.public_key);
113
114 // Data encryption
115 let xchacha_key = XChaChaKey::from_bytes(shared_secret.as_bytes())?;
116 let (_nonce, _ciphertext) = XChaChaCrypto::encrypt_with_random_nonce(
117 &xchacha_key,
118 &plaintext,
119 None,
120 )?;
121 }
122 let hybrid_time = start.elapsed();
123
124 let hybrid_throughput = (BENCHMARK_ITERATIONS * MESSAGE_SIZE) as f64 / hybrid_time.as_secs_f64() / 1_000_000.0;
125
126 println!(" Hybrid Encryption: {:.2} MB/s ({:.2} ms per operation)",
127 hybrid_throughput,
128 hybrid_time.as_millis() as f64 / BENCHMARK_ITERATIONS as f64);
129
130 Ok(())
131}More examples
examples/basic_usage.rs (line 72)
61fn kyber_example() -> Result<()> {
62 // Alice generates a key pair
63 let alice_keypair = KyberCrypto::generate_keypair();
64
65 println!(" Alice's public key size: {} bytes", alice_keypair.public_key.as_bytes().len());
66 println!(" Alice's secret key size: {} bytes", alice_keypair.secret_key.as_bytes().len());
67
68 // Bob encapsulates a shared secret for Alice
69 let (bob_shared_secret, ciphertext) = KyberCrypto::encapsulate(&alice_keypair.public_key);
70
71 println!(" Encapsulated ciphertext size: {} bytes", ciphertext.as_bytes().len());
72 println!(" Bob's shared secret: {} bytes", bob_shared_secret.as_bytes().len());
73
74 // Alice decapsulates the shared secret
75 let alice_shared_secret = KyberCrypto::decapsulate(&ciphertext, &alice_keypair.secret_key);
76
77 println!(" Alice's shared secret: {} bytes", alice_shared_secret.as_bytes().len());
78
79 // Verify they match
80 assert_eq!(bob_shared_secret.as_bytes(), alice_shared_secret.as_bytes());
81 println!(" ✓ Key encapsulation successful!");
82
83 // Display key sizes
84 let sizes = KyberCrypto::sizes();
85 println!(" Component sizes:");
86 println!(" - Public key: {} bytes", sizes.public_key);
87 println!(" - Secret key: {} bytes", sizes.secret_key);
88 println!(" - Ciphertext: {} bytes", sizes.ciphertext);
89 println!(" - Shared secret: {} bytes", sizes.shared_secret);
90
91 Ok(())
92}
93
94fn hybrid_example() -> Result<()> {
95 println!(" Setting up hybrid encryption...");
96
97 // Step 1: Key establishment with Kyber1024
98 let alice_keypair = KyberCrypto::generate_keypair();
99 let (shared_secret, kyber_ciphertext) = KyberCrypto::encapsulate(&alice_keypair.public_key);
100
101 // Step 2: Use shared secret as XChaCha20Poly1305 key
102 let xchacha_key = XChaChaKey::from_bytes(shared_secret.as_bytes())?;
103
104 // Step 3: Encrypt data with XChaCha20Poly1305
105 let plaintext = b"This is a secret message using hybrid post-quantum encryption!";
106 println!(" Message to encrypt: {:?}", std::str::from_utf8(plaintext).unwrap());
107
108 let (nonce, ciphertext) = XChaChaCrypto::encrypt_with_random_nonce(
109 &xchacha_key,
110 plaintext,
111 None,
112 )?;
113
114 println!(" Hybrid encryption complete!");
115 println!(" - Kyber ciphertext size: {} bytes", kyber_ciphertext.as_bytes().len());
116 println!(" - XChaCha nonce size: {} bytes", nonce.as_bytes().len());
117 println!(" - XChaCha ciphertext size: {} bytes", ciphertext.len());
118
119 // Decryption process:
120 println!(" Decrypting...");
121
122 // Step 1: Alice decapsulates the shared secret
123 let alice_shared_secret = KyberCrypto::decapsulate(&kyber_ciphertext, &alice_keypair.secret_key);
124 let alice_xchacha_key = XChaChaKey::from_bytes(alice_shared_secret.as_bytes())?;
125
126 // Step 2: Decrypt the message
127 let decrypted = XChaChaCrypto::decrypt(&alice_xchacha_key, &nonce, &ciphertext, None)?;
128
129 println!(" Decrypted message: {:?}", std::str::from_utf8(&decrypted).unwrap());
130
131 // Verify they match
132 assert_eq!(plaintext, &decrypted[..]);
133 println!(" ✓ Hybrid encryption/decryption successful!");
134
135 Ok(())
136}Trait Implementations§
Auto Trait Implementations§
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more