mod scheme;
pub use scheme::{Pkcs1v15Sha256, Pkcs1v15Sha512, PssSha256, PssSha512, SignatureScheme};
use crate::error::Result;
use crate::signature::Signature;
#[derive(Clone)]
pub struct RsaSigner<S: SignatureScheme = Pkcs1v15Sha256> {
inner: S::SigningKey,
}
impl<S: SignatureScheme> RsaSigner<S> {
pub fn from_pkcs8_pem(pem: &str) -> Result<Self> {
let inner = S::parse_private_pem(pem)?;
Ok(Self { inner })
}
pub fn sign(&self, payload: impl AsRef<[u8]>) -> Signature {
S::sign(&self.inner, payload.as_ref())
}
}
#[derive(Clone)]
pub struct RsaVerifier<S: SignatureScheme = Pkcs1v15Sha256> {
inner: S::VerifyingKey,
}
impl<S: SignatureScheme> RsaVerifier<S> {
pub fn from_pkcs8_public_pem(pem: &str) -> Result<Self> {
let inner = S::parse_public_pem(pem)?;
Ok(Self { inner })
}
pub fn verify(&self, sig: &Signature, payload: impl AsRef<[u8]>) -> Result<()> {
S::verify(&self.inner, payload.as_ref(), sig.as_bytes())
}
}