pub struct KyberCiphertext(/* private fields */);Expand description
Kyber1024 ciphertext
Implementations§
Source§impl KyberCiphertext
impl KyberCiphertext
Sourcepub fn from_bytes(bytes: &[u8]) -> Result<Self>
pub fn from_bytes(bytes: &[u8]) -> Result<Self>
Create a ciphertext from raw bytes
Sourcepub fn as_bytes(&self) -> &[u8] ⓘ
pub fn as_bytes(&self) -> &[u8] ⓘ
Get the raw ciphertext bytes
Examples found in repository?
examples/basic_usage.rs (line 71)
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}Auto Trait Implementations§
impl Freeze for KyberCiphertext
impl RefUnwindSafe for KyberCiphertext
impl Send for KyberCiphertext
impl Sync for KyberCiphertext
impl Unpin for KyberCiphertext
impl UnsafeUnpin for KyberCiphertext
impl UnwindSafe for KyberCiphertext
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