use crate::raw_signature::{RawSigner, RawSignerError, SigningAlg};
mod ecdsa_signer;
mod ed25519_signer;
mod rsa_signer;
pub(crate) fn signer_from_cert_chain_and_private_key(
cert_chain: &[u8],
private_key: &[u8],
alg: SigningAlg,
time_stamp_service_url: Option<String>,
) -> Result<Box<dyn RawSigner + Send + Sync>, RawSignerError> {
match alg {
SigningAlg::Ed25519 => Ok(Box::new(
ed25519_signer::Ed25519Signer::from_cert_chain_and_private_key(
cert_chain,
private_key,
time_stamp_service_url,
)?,
)),
SigningAlg::Ps256 | SigningAlg::Ps384 | SigningAlg::Ps512 => Ok(Box::new(
rsa_signer::RsaSigner::from_cert_chain_and_private_key(
cert_chain,
private_key,
alg,
time_stamp_service_url,
)?,
)),
SigningAlg::Es256 | SigningAlg::Es384 => Ok(Box::new(
ecdsa_signer::EcdsaSigner::from_cert_chain_and_private_key(
cert_chain,
private_key,
alg,
time_stamp_service_url,
)?,
)),
_ => Err(RawSignerError::InternalError(format!(
"unsupported signing algorithm {alg}"
))),
}
}