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;
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.