Crate rsa[−][src]
Expand description
RSA Implementation in pure Rust.
Usage
Using PKCS1v15.
use rsa::{PublicKey, RsaPrivateKey, RsaPublicKey, PaddingScheme}; use rand::rngs::OsRng; let mut rng = OsRng; let bits = 2048; let private_key = RsaPrivateKey::new(&mut rng, bits).expect("failed to generate a key"); let public_key = RsaPublicKey::from(&private_key); // Encrypt let data = b"hello world"; let padding = PaddingScheme::new_pkcs1v15_encrypt(); let enc_data = public_key.encrypt(&mut rng, padding, &data[..]).expect("failed to encrypt"); assert_ne!(&data[..], &enc_data[..]); // Decrypt let padding = PaddingScheme::new_pkcs1v15_encrypt(); let dec_data = private_key.decrypt(padding, &enc_data).expect("failed to decrypt"); assert_eq!(&data[..], &dec_data[..]);
Using OAEP.
use rsa::{PublicKey, RsaPrivateKey, RsaPublicKey, PaddingScheme}; use rand::rngs::OsRng; let mut rng = OsRng; let bits = 2048; let private_key = RsaPrivateKey::new(&mut rng, bits).expect("failed to generate a key"); let public_key = RsaPublicKey::from(&private_key); // Encrypt let data = b"hello world"; let padding = PaddingScheme::new_oaep::<sha2::Sha256>(); let enc_data = public_key.encrypt(&mut rng, padding, &data[..]).expect("failed to encrypt"); assert_ne!(&data[..], &enc_data[..]); // Decrypt let padding = PaddingScheme::new_oaep::<sha2::Sha256>(); let dec_data = private_key.decrypt(padding, &enc_data).expect("failed to decrypt"); assert_eq!(&data[..], &dec_data[..]);
PKCS#1 RSA Key Encoding
PKCS#1 is a legacy format for encoding RSA keys as binary (DER) or text (PEM) data.
You can recognize PEM encoded PKCS#1 keys because they have “RSA * KEY” in the type label, e.g.:
-----BEGIN RSA PRIVATE KEY-----
Most modern applications use the newer PKCS#8 format instead (see below).
The following traits can be used to decode/encode RsaPrivateKey
and
RsaPublicKey
as PKCS#1. Note that pkcs1
is re-exported from the
toplevel of the rsa
crate:
pkcs1::FromRsaPrivateKey
: decode RSA private keys from PKCS#1pkcs1::FromRsaPublicKey
: decode RSA public keys from PKCS#1pkcs1::ToRsaPrivateKey
: encode RSA private keys to PKCS#1pkcs1::ToRsaPublicKey
: encode RSA public keys to PKCS#1
Example
use rsa::{RsaPublicKey, pkcs1::FromRsaPublicKey}; let pem = "-----BEGIN RSA PUBLIC KEY----- MIIBCgKCAQEAtsQsUV8QpqrygsY+2+JCQ6Fw8/omM71IM2N/R8pPbzbgOl0p78MZ GsgPOQ2HSznjD0FPzsH8oO2B5Uftws04LHb2HJAYlz25+lN5cqfHAfa3fgmC38Ff wBkn7l582UtPWZ/wcBOnyCgb3yLcvJrXyrt8QxHJgvWO23ITrUVYszImbXQ67YGS 0YhMrbixRzmo2tpm3JcIBtnHrEUMsT0NfFdfsZhTT8YbxBvA8FdODgEwx7u/vf3J 9qbi4+Kv8cvqyJuleIRSjVXPsIMnoejIn04APPKIjpMyQdnWlby7rNyQtE4+CV+j cFjqJbE/Xilcvqxt6DirjFCvYeKYl1uHLwIDAQAB -----END RSA PUBLIC KEY-----"; let public_key = RsaPublicKey::from_pkcs1_pem(pem)?;
PKCS#8 RSA Key Encoding
PKCS#8 is a private key format with support for multiple algorithms. Like PKCS#1, it can be encoded as binary (DER) or text (PEM).
You can recognize PEM encoded PKCS#8 keys because they don’t have an algorithm name in the type label, e.g.:
-----BEGIN PRIVATE KEY-----
The following traits can be used to decode/encode RsaPrivateKey
and
RsaPublicKey
as PKCS#8. Note that pkcs8
is re-exported from the
toplevel of the rsa
crate:
pkcs8::FromPrivateKey
: decode private keys from PKCS#8pkcs8::FromPublicKey
: decode public keys from PKCS#8pkcs8::ToPrivateKey
: encode private keys to PKCS#8pkcs8::ToPublicKey
: encode public keys to PKCS#8
Example
use rsa::{RsaPublicKey, pkcs8::FromPublicKey}; let pem = "-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtsQsUV8QpqrygsY+2+JC Q6Fw8/omM71IM2N/R8pPbzbgOl0p78MZGsgPOQ2HSznjD0FPzsH8oO2B5Uftws04 LHb2HJAYlz25+lN5cqfHAfa3fgmC38FfwBkn7l582UtPWZ/wcBOnyCgb3yLcvJrX yrt8QxHJgvWO23ITrUVYszImbXQ67YGS0YhMrbixRzmo2tpm3JcIBtnHrEUMsT0N fFdfsZhTT8YbxBvA8FdODgEwx7u/vf3J9qbi4+Kv8cvqyJuleIRSjVXPsIMnoejI n04APPKIjpMyQdnWlby7rNyQtE4+CV+jcFjqJbE/Xilcvqxt6DirjFCvYeKYl1uH LwIDAQAB -----END PUBLIC KEY-----"; let public_key = RsaPublicKey::from_public_key_pem(pem)?;
Re-exports
Modules
Useful algorithms.
Error types.
Supported hash functions.
Supported padding schemes.
Structs
A big unsigned integer type.
Represents a whole RSA key, public and private parts.
Represents the public part of an RSA key.