| Crates.io | ever-crypto |
| lib.rs | ever-crypto |
| version | 0.1.0 |
| created_at | 2025-07-05 01:05:16.858835+00 |
| updated_at | 2025-07-05 01:05:16.858835+00 |
| description | A simple Rust library providing easy-to-use APIs for XChaCha20Poly1305 and Kyber1024 post-quantum cryptography at the same time. Based on chacha20poly1305 and pqcrypto-kyber. |
| homepage | |
| repository | https://github.com/evercrypted/ever-crypto |
| max_upload_size | |
| id | 1738670 |
| size | 46,675 |
A simple Rust library providing easy-to-use APIs for modern cryptographic operations, specifically:
Add this to your Cargo.toml:
[dependencies]
ever-crypto = "0.1.0"
use ever_crypto::{XChaChaCrypto, XChaChaKey, XChaChaNonce};
// Generate a key and nonce
let key = XChaChaKey::generate();
let nonce = XChaChaNonce::generate();
// Encrypt a message
let plaintext = b"Hello, World!";
let ciphertext = XChaChaCrypto::encrypt(&key, &nonce, plaintext, None).unwrap();
// Decrypt the message
let decrypted = XChaChaCrypto::decrypt(&key, &nonce, &ciphertext, None).unwrap();
assert_eq!(plaintext, &decrypted[..]);
use ever_crypto::{XChaChaCrypto, XChaChaKey};
let key = XChaChaKey::generate();
let plaintext = b"Secret message";
let aad = b"Additional authenticated data";
// Encrypt with random nonce
let (nonce, ciphertext) = XChaChaCrypto::encrypt_with_random_nonce(
&key,
plaintext,
Some(aad),
).unwrap();
// Decrypt
let decrypted = XChaChaCrypto::decrypt(&key, &nonce, &ciphertext, Some(aad)).unwrap();
assert_eq!(plaintext, &decrypted[..]);
use ever_crypto::{KyberCrypto, KyberKeyPair};
// Alice generates a key pair
let alice_keypair = KyberCrypto::generate_keypair();
// Bob encapsulates a shared secret for Alice
let (bob_shared_secret, ciphertext) = KyberCrypto::encapsulate(&alice_keypair.public_key);
// Alice decapsulates the shared secret
let alice_shared_secret = KyberCrypto::decapsulate(&ciphertext, &alice_keypair.secret_key);
// Both parties now have the same shared secret
assert_eq!(bob_shared_secret.as_bytes(), alice_shared_secret.as_bytes());
use ever_crypto::{KyberCrypto, XChaChaCrypto, XChaChaKey};
// Step 1: Key establishment with Kyber1024
let alice_keypair = KyberCrypto::generate_keypair();
let (shared_secret, kyber_ciphertext) = KyberCrypto::encapsulate(&alice_keypair.public_key);
// Step 2: Use shared secret as XChaCha20Poly1305 key
let xchacha_key = XChaChaKey::from_bytes(shared_secret.as_bytes()).unwrap();
// Step 3: Encrypt data with XChaCha20Poly1305
let plaintext = b"This is a secret message using hybrid encryption!";
let (nonce, ciphertext) = XChaChaCrypto::encrypt_with_random_nonce(
&xchacha_key,
plaintext,
None,
).unwrap();
// Decryption process:
// Step 1: Alice decapsulates the shared secret
let alice_shared_secret = KyberCrypto::decapsulate(&kyber_ciphertext, &alice_keypair.secret_key);
let alice_xchacha_key = XChaChaKey::from_bytes(alice_shared_secret.as_bytes()).unwrap();
// Step 2: Decrypt the message
let decrypted = XChaChaCrypto::decrypt(&alice_xchacha_key, &nonce, &ciphertext, None).unwrap();
assert_eq!(plaintext, &decrypted[..]);
XChaChaKey: 256-bit encryption keyXChaChaNonce: 192-bit nonce (24 bytes)XChaChaCrypto: Main encryption/decryption operationsXChaChaKey::generate(): Generate a random keyXChaChaKey::from_bytes(bytes): Create key from bytesXChaChaNonce::generate(): Generate a random nonceXChaChaCrypto::encrypt(key, nonce, plaintext, aad): Encrypt dataXChaChaCrypto::decrypt(key, nonce, ciphertext, aad): Decrypt dataXChaChaCrypto::encrypt_with_random_nonce(key, plaintext, aad): Encrypt with auto-generated nonceKyberKeyPair: Public and secret key pairKyberPublicKey: Public key for encapsulationKyberSecretKey: Secret key for decapsulationKyberSharedSecret: 32-byte shared secretKyberCiphertext: Encapsulated ciphertextKyberCrypto::generate_keypair(): Generate a new key pairKyberCrypto::encapsulate(public_key): Encapsulate a shared secretKyberCrypto::decapsulate(ciphertext, secret_key): Decapsulate shared secretKyberCrypto::sizes(): Get component sizes| Component | Size (bytes) |
|---|---|
| XChaCha20Poly1305 Key | 32 |
| XChaCha20Poly1305 Nonce | 24 |
| Kyber1024 Public Key | 1,568 |
| Kyber1024 Secret Key | 3,168 |
| Kyber1024 Ciphertext | 1,568 |
| Kyber1024 Shared Secret | 32 |
Run the test suite:
cargo test
For verbose output:
cargo test -- --nocapture
chacha20poly1305: Pure Rust implementation of XChaCha20Poly1305pqcrypto-kyber: Post-quantum cryptography (Kyber1024)aead: Authenticated encryption trait definitionsrand_core: Random number generationthiserror: Error handlingzeroize: Secure memory cleanupThis project is licensed under the MIT License.