use bcder::Oid;
use crate::raw_signature::{oids::*, AsyncRawSignatureValidator, SigningAlg};
pub fn async_validator_for_signing_alg(
alg: SigningAlg,
) -> Option<Box<dyn AsyncRawSignatureValidator>> {
match alg {
SigningAlg::Es256 => Some(Box::new(EcdsaValidator::Es256)),
SigningAlg::Es384 => Some(Box::new(EcdsaValidator::Es384)),
SigningAlg::Es512 => Some(Box::new(EcdsaValidator::Es512)),
_ => None,
}
}
pub(crate) fn async_validator_for_sig_and_hash_algs(
sig_alg: &Oid,
hash_alg: &Oid,
) -> Option<Box<dyn AsyncRawSignatureValidator>> {
if sig_alg.as_ref() == EC_PUBLICKEY_OID.as_bytes()
|| sig_alg.as_ref() == ECDSA_WITH_SHA256_OID.as_bytes()
|| sig_alg.as_ref() == ECDSA_WITH_SHA384_OID.as_bytes()
|| sig_alg.as_ref() == ECDSA_WITH_SHA512_OID.as_bytes()
{
if hash_alg.as_ref() == SHA256_OID.as_bytes() {
return async_validator_for_signing_alg(SigningAlg::Es256);
} else if hash_alg.as_ref() == SHA384_OID.as_bytes() {
return async_validator_for_signing_alg(SigningAlg::Es384);
} else if hash_alg.as_ref() == SHA512_OID.as_bytes() {
return async_validator_for_signing_alg(SigningAlg::Es512);
}
}
None
}
pub(crate) mod ecdsa_validator;
use ecdsa_validator::EcdsaValidator;