mod keys;
mod prime;
#[cfg(feature = "alloc")]
mod boxed;
#[cfg(feature = "alloc")]
mod emsa;
#[cfg(all(feature = "der", feature = "alloc"))]
mod encoding;
#[cfg(feature = "alloc")]
mod pkcs1;
#[cfg(feature = "alloc")]
mod pss;
#[cfg(all(feature = "x509", feature = "alloc"))]
pub(crate) mod registry;
#[cfg(feature = "alloc")]
pub use boxed::{BoxedRsaPrivateKey, BoxedRsaPublicKey};
pub use keys::{RsaPrivateKey, RsaPublicKey};
pub use prime::{is_prime, random_prime};
#[cfg(feature = "alloc")]
pub use pkcs1::Pkcs1Digest;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
pub enum Error {
MessageTooLong,
InvalidLength,
Decryption,
Verification,
InvalidKey,
}
impl core::fmt::Display for Error {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
let msg = match self {
Error::MessageTooLong => "message too long for RSA modulus",
Error::InvalidLength => "ciphertext/signature length mismatch",
Error::Decryption => "RSA decryption error",
Error::Verification => "RSA signature verification failed",
Error::InvalidKey => "RSA key components are malformed",
};
f.write_str(msg)
}
}
impl core::error::Error for Error {}