A portable RSA implementation in pure Rust.
extern crate rsa;
extern crate rand;
use rsa::{PublicKey, RSAPrivateKey, PaddingScheme};
use rand::rngs::OsRng;
let mut rng = OsRng::new().expect("no secure randomness available");
let bits = 2048;
let key = RSAPrivateKey::new(&mut rng, bits).expect("failed to generate a key");
// Encrypt
let data = b"hello world";
let enc_data = key.encrypt(&mut rng, PaddingScheme::PKCS1v15, &data[..]).expect("failed to encrypt");
assert_ne!(&data[..], &enc_data[..]);
// Decrypt
let dec_data = key.decrypt(PaddingScheme::PKCS1v15, &enc_data).expect("failed to decrypt");
assert_eq!(&data[..], &dec_data[..]);
Currently at Phase 1 (v) 🚧.
There will be three phases before 1.0
🚢 can be released.
- 🚧 Make it work
- Prime generation ✅
- Key generation ✅
- PKCS1v1.5: Encryption & Decryption ✅
- PKCS1v1.5: Sign & Verify ✅
- PKCS1v1.5 (session key): Encryption & Decryption
- OAEP: Encryption & Decryption
- PSS: Sign & Verify
- Key import & export
- 🚀 Make it fast
- Benchmarks ✅
- compare to other implementations 🚧
- optimize 🚧
- 🔒 Make it secure
- Fuzz testing
- Security Audits
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.