Skip to main content

RsaPrivateKey

Struct RsaPrivateKey 

Source
pub struct RsaPrivateKey { /* private fields */ }
Available on crate feature private-key only.
Expand description

Represents a whole RSA key, public and private parts.

Implementations§

Source§

impl RsaPrivateKey

Source

pub fn new<R: CryptoRng + ?Sized>(rng: &mut R, bit_size: usize) -> Result<Self>

Generate a new RSA key pair with a modulus of the given bit size using the passed in rng.

§Errors
  • If bit_size is lower than the minimum 1024-bits.
Source

pub fn new_unchecked<R: CryptoRng + ?Sized>( rng: &mut R, bit_size: usize, ) -> Result<Self>

Available on crate feature hazmat only.

Generate a new RSA key pair of the given bit size.

#⚠️Warning: Hazmat! This version does not apply minimum key size checks, and as such may generate keys which are insecure!

Source

pub fn new_with_exp<R: CryptoRng + ?Sized>( rng: &mut R, bit_size: usize, exp: BoxedUint, ) -> Result<RsaPrivateKey>

Generate a new RSA key pair of the given bit size and the public exponent using the passed in rng.

Unless you have specific needs, you should use RsaPrivateKey::new instead.

Source

pub fn new_with_exp_unchecked<R: CryptoRng + ?Sized>( rng: &mut R, bit_size: usize, exp: BoxedUint, ) -> Result<RsaPrivateKey>

Available on crate feature hazmat only.

Generate a new RSA key pair of the given bit size and the public exponent using the passed in rng.

Unless you have specific needs, you should use RsaPrivateKey::new instead.

#⚠️Warning: Hazmat! This version does not apply minimum key size checks, and as such may generate keys which are insecure!

Source

pub fn from_components_with_large_exponent( n: BoxedUint, e: BoxedUint, d: BoxedUint, primes: Vec<BoxedUint>, ) -> Result<RsaPrivateKey>

Available on crate feature hazmat only.

Constructs an RSA key pair from individual components, accepting exponents outside the normal size bounds.

See RsaPrivateKey::from_components for an explanation on the parameters.

§⚠️ Warning: Hazmat!

This method accepts public exponents outside the standard bounds (2 ≤ e ≤ 2^33-1), but still performs full cryptographic validation to ensure the key is mathematically correct (i.e., verifies that de ≡ 1 mod λ(n)).

Note: This method is dangerous as it can be used as a DOS vector if used with untrusted input https://www.imperialviolet.org/2012/03/17/rsados.html

This is intended for interoperating with systems that use non-standard exponents or loading legacy keys. Use RsaPrivateKey::from_components for standard key construction.

Source

pub fn from_components( n: BoxedUint, e: BoxedUint, d: BoxedUint, primes: Vec<BoxedUint>, ) -> Result<RsaPrivateKey>

Constructs an RSA key pair from individual components:

  • n: RSA modulus
  • e: public exponent (i.e. encrypting exponent)
  • d: private exponent (i.e. decrypting exponent)
  • primes: prime factors of n: typically two primes p and q. More than two primes can be provided for multiprime RSA, however this is generally not recommended. If no primes are provided, a prime factor recovery algorithm will be employed to attempt to recover the factors (as described in NIST SP 800-56B Revision 2 Appendix C.2). This algorithm only works if there are just two prime factors p and q (as opposed to multiprime), and e is between 2^16 and 2^256.
Source

pub fn from_p_q( p: BoxedUint, q: BoxedUint, public_exponent: BoxedUint, ) -> Result<RsaPrivateKey>

Constructs an RSA key pair from its two primes p and q.

This will rebuild the private exponent and the modulus.

Private exponent will be rebuilt using the method defined in NIST 800-56B Section 6.2.1.

Source

pub fn from_primes( primes: Vec<BoxedUint>, public_exponent: BoxedUint, ) -> Result<RsaPrivateKey>

Constructs an RSA key pair from its primes.

This will rebuild the private exponent and the modulus.

Source

pub fn as_public_key(&self) -> &RsaPublicKey

Get the public key from the private key.

Specific alternative to AsRef::as_ref.

Source

pub fn to_public_key(&self) -> RsaPublicKey

Get the public key from the private key, cloning n and e.

Generally this is not needed since RsaPrivateKey implements the PublicKey trait, but it can occasionally be useful to discard the private information entirely.

Source

pub fn precompute(&mut self) -> Result<()>

Performs some calculations to speed up private key operations.

Source

pub fn clear_precomputed(&mut self)

Clears precomputed values by setting to None

Source

pub fn crt_coefficient(&self) -> Option<BoxedUint>

Compute CRT coefficient: (1/q) mod p.

Source

pub fn validate(&self) -> Result<()>

Performs basic sanity checks on the key. Returns Ok(()) if everything is good, otherwise an appropriate error.

Source

pub fn decrypt<P: PaddingScheme>( &self, padding: P, ciphertext: &[u8], ) -> Result<Vec<u8>>

Decrypt the given message.

Source

pub fn decrypt_blinded<R: CryptoRng + ?Sized, P: PaddingScheme>( &self, rng: &mut R, padding: P, ciphertext: &[u8], ) -> Result<Vec<u8>>

Decrypt the given message.

Uses rng to blind the decryption process.

Source

pub fn sign<S: SignatureScheme>( &self, padding: S, digest_in: &[u8], ) -> Result<Vec<u8>>

Sign the given digest.

Source

pub fn sign_with_rng<R: CryptoRng + ?Sized, S: SignatureScheme>( &self, rng: &mut R, padding: S, digest_in: &[u8], ) -> Result<Vec<u8>>

Sign the given digest using the provided rng, which is used in the following ways depending on the SignatureScheme:

  • Pkcs1v15Sign padding: uses the RNG to mask the private key operation with random blinding, which helps mitigate sidechannel attacks.
  • Pss always requires randomness. Use Pss::new for a standard RSASSA-PSS signature, or Pss::new_blinded for RSA-BSSA blind signatures.

Trait Implementations§

Source§

impl AsRef<GenericRsaPublicKey<BoxedUint, BoxedMontyParams>> for RsaPrivateKey

Source§

fn as_ref(&self) -> &RsaPublicKey

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl<D> AsRef<RsaPrivateKey> for BlindedSigningKey<D>
where D: Digest,

Source§

fn as_ref(&self) -> &RsaPrivateKey

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl<D> AsRef<RsaPrivateKey> for SigningKey<D>
where D: Digest,

Source§

fn as_ref(&self) -> &RsaPrivateKey

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl<D> AsRef<RsaPrivateKey> for SigningKey<D>
where D: Digest,

Source§

fn as_ref(&self) -> &RsaPrivateKey

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl Clone for RsaPrivateKey

Source§

fn clone(&self) -> RsaPrivateKey

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for RsaPrivateKey

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl DecodeRsaPrivateKey for RsaPrivateKey

Available on crate feature encoding only.
Source§

fn from_pkcs1_der(bytes: &[u8]) -> Result<Self>

Deserialize PKCS#1 private key from ASN.1 DER-encoded data (binary format).
Source§

fn from_pkcs1_pem(s: &str) -> Result<Self, Error>

Available on crate feature pem only.
Deserialize PKCS#1-encoded private key from PEM. Read more
Source§

fn read_pkcs1_der_file(path: impl AsRef<Path>) -> Result<Self, Error>

Available on crate feature std only.
Load PKCS#1 private key from an ASN.1 DER-encoded file on the local filesystem (binary format).
Source§

fn read_pkcs1_pem_file(path: impl AsRef<Path>) -> Result<Self, Error>

Available on crate features pem and std only.
Load PKCS#1 private key from a PEM-encoded file on the local filesystem.
Source§

impl<'de> Deserialize<'de> for RsaPrivateKey

Available on crate feature serde only.
Source§

fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Drop for RsaPrivateKey

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more
Source§

impl EncodePrivateKey for RsaPrivateKey

Available on crate feature encoding only.
Source§

fn to_pkcs8_der(&self) -> Result<SecretDocument>

Serialize a SecretDocument containing a PKCS#8-encoded private key. Read more
Source§

fn to_pkcs8_pem( &self, line_ending: LineEnding, ) -> Result<Zeroizing<String>, Error>

Available on crate feature pem only.
Serialize this private key as PEM-encoded PKCS#8 with the given LineEnding. Read more
Source§

fn write_pkcs8_der_file(&self, path: impl AsRef<Path>) -> Result<(), Error>

Available on crate feature std only.
Write ASN.1 DER-encoded PKCS#8 private key to the given path. Read more
Source§

fn write_pkcs8_pem_file( &self, path: impl AsRef<Path>, line_ending: LineEnding, ) -> Result<(), Error>

Available on crate features pem and std only.
Write ASN.1 PEM-encoded PKCS#8 private key to the given path. Read more
Source§

impl EncodeRsaPrivateKey for RsaPrivateKey

Available on crate feature encoding only.
Source§

fn to_pkcs1_der(&self) -> Result<SecretDocument>

Serialize a SecretDocument containing a PKCS#1-encoded private key.
Source§

fn to_pkcs1_pem( &self, line_ending: LineEnding, ) -> Result<Zeroizing<String>, Error>

Available on crate feature pem only.
Serialize this private key as PEM-encoded PKCS#1 with the given LineEnding.
Source§

fn write_pkcs1_der_file(&self, path: impl AsRef<Path>) -> Result<(), Error>

Available on crate feature std only.
Write ASN.1 DER-encoded PKCS#1 private key to the given path.
Source§

fn write_pkcs1_pem_file( &self, path: impl AsRef<Path>, line_ending: LineEnding, ) -> Result<(), Error>

Available on crate features pem and std only.
Write ASN.1 PEM-encoded PKCS#1 private key to the given path.
Source§

impl From<&RsaPrivateKey> for GenericRsaPublicKey<BoxedUint, BoxedMontyParams>

Source§

fn from(private_key: &RsaPrivateKey) -> Self

Converts to this type from the input type.
Source§

impl<D> From<BlindedSigningKey<D>> for RsaPrivateKey
where D: Digest,

Source§

fn from(key: BlindedSigningKey<D>) -> Self

Converts to this type from the input type.
Source§

impl<D> From<RsaPrivateKey> for BlindedSigningKey<D>
where D: Digest,

Source§

fn from(key: RsaPrivateKey) -> Self

Converts to this type from the input type.
Source§

impl From<RsaPrivateKey> for GenericRsaPublicKey<BoxedUint, BoxedMontyParams>

Source§

fn from(private_key: RsaPrivateKey) -> Self

Converts to this type from the input type.
Source§

impl<D> From<RsaPrivateKey> for SigningKey<D>
where D: Digest + AssociatedOid,

Source§

fn from(key: RsaPrivateKey) -> Self

Converts to this type from the input type.
Source§

impl<D> From<RsaPrivateKey> for SigningKey<D>
where D: Digest,

Source§

fn from(key: RsaPrivateKey) -> Self

Converts to this type from the input type.
Source§

impl<D> From<SigningKey<D>> for RsaPrivateKey
where D: Digest,

Source§

fn from(key: SigningKey<D>) -> Self

Converts to this type from the input type.
Source§

impl<D> From<SigningKey<D>> for RsaPrivateKey
where D: Digest,

Source§

fn from(key: SigningKey<D>) -> Self

Converts to this type from the input type.
Source§

impl Hash for RsaPrivateKey

Source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for RsaPrivateKey

Source§

fn eq(&self, other: &RsaPrivateKey) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PrivateKeyParts for RsaPrivateKey

Source§

fn d(&self) -> &BoxedUint

Returns the private exponent of the key.
Source§

fn primes(&self) -> &[BoxedUint]

Returns the prime factors.
Source§

fn dp(&self) -> Option<&BoxedUint>

Returns the precomputed dp value, D mod (P-1)
Source§

fn dq(&self) -> Option<&BoxedUint>

Returns the precomputed dq value, D mod (Q-1)
Source§

fn qinv(&self) -> Option<&BoxedMontyForm>

Returns the precomputed qinv value, Q^-1 mod P
Source§

fn crt_values(&self) -> Option<&[CrtValue]>

Returns an iterator over the CRT Values
Source§

fn p_params(&self) -> Option<&BoxedMontyParams>

Returns the params for p if precomputed.
Source§

fn q_params(&self) -> Option<&BoxedMontyParams>

Returns the params for q if precomputed.
Source§

impl PublicKeyParts<BoxedUint> for RsaPrivateKey

Source§

type MontyParams = BoxedMontyParams

Montgomery parameter type matching this modulus type.
Source§

fn n(&self) -> &NonZero<BoxedUint>

Returns the modulus of the key.
Source§

fn e(&self) -> &BoxedUint

Returns the public exponent of the key.
Source§

fn n_params(&self) -> &BoxedMontyParams

Returns the parameters for montgomery operations.
Source§

fn size(&self) -> usize

Returns the modulus size in bytes. Raw signatures and ciphertexts for or by this public key will have the same size.
Source§

fn n_bits_precision(&self) -> u32

Returns precision (in bits) of n.
Source§

fn n_bytes(&self) -> Box<[u8]>

Available on crate feature alloc only.
Returns the big endian serialization of the modulus of the key
Source§

fn e_bytes(&self) -> Box<[u8]>

Available on crate feature alloc only.
Returns the big endian serialization of the public exponent of the key
Source§

impl Serialize for RsaPrivateKey

Available on crate feature serde only.
Source§

fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl TryFrom<PrivateKeyInfo<AnyRef<'_>, &OctetStringRef, BitStringRef<'_>>> for RsaPrivateKey

Available on crate feature encoding only.
Source§

type Error = Error

The type returned in the event of a conversion error.
Source§

fn try_from(private_key_info: PrivateKeyInfoRef<'_>) -> Result<Self>

Performs the conversion.
Source§

impl TryFrom<RsaPrivateKey<'_>> for RsaPrivateKey

Available on crate feature encoding only.
Source§

type Error = Error

The type returned in the event of a conversion error.
Source§

fn try_from(pkcs1_key: RsaPrivateKey<'_>) -> Result<RsaPrivateKey>

Performs the conversion.
Source§

impl Eq for RsaPrivateKey

Source§

impl ZeroizeOnDrop for RsaPrivateKey

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DecodePrivateKey for T
where T: for<'a> TryFrom<PrivateKeyInfo<AnyRef<'a>, &'a OctetStringRef, BitStringRef<'a>>, Error = Error>,

Source§

fn from_pkcs8_der(bytes: &[u8]) -> Result<T, Error>

Deserialize PKCS#8 private key from ASN.1 DER-encoded data (binary format). Read more
Source§

fn from_pkcs8_pem(s: &str) -> Result<Self, Error>

Available on crate feature pem only.
Deserialize PKCS#8-encoded private key from PEM. Read more
Source§

fn read_pkcs8_der_file(path: impl AsRef<Path>) -> Result<Self, Error>

Available on crate feature std only.
Load PKCS#8 private key from an ASN.1 DER-encoded file (binary format) on the local filesystem. Read more
Source§

fn read_pkcs8_pem_file(path: impl AsRef<Path>) -> Result<Self, Error>

Available on crate features pem and std only.
Load PKCS#8 private key from a PEM-encoded file on the local filesystem. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,