quantcrypt/dsa/api/
algorithm.rsuse crate::dsa::common::{config::oids::Oid, dsa_type::DsaType};
use strum::IntoEnumIterator;
use strum_macros::{Display, EnumIter};
#[derive(Clone, Debug, PartialEq, EnumIter, Display, Copy)]
pub enum DsaAlgorithm {
MlDsa44,
MlDsa65,
MlDsa87,
MlDsa44Rsa2048PssSha256,
MlDsa44Rsa2048Pkcs15Sha256,
MlDsa44Ed25519SHA512,
MlDsa44EcdsaP256SHA256,
MlDsa44EcdsaBrainpoolP256r1SHA256,
MlDsa65Rsa3072PssSHA512,
MlDsa65Rsa3072Pkcs15SHA512,
MlDsa65EcdsaP256SHA512,
MlDsa65EcdsaBrainpoolP256r1SHA512,
MlDsa65Ed25519SHA512,
MlDsa87EcdsaP384SHA512,
MlDsa87EcdsaBrainpoolP384r1SHA512,
MlDsa87Ed448SHA512,
}
impl DsaAlgorithm {
pub(crate) fn all() -> Vec<DsaAlgorithm> {
DsaAlgorithm::iter().collect()
}
pub(crate) fn get_dsa_type(&self) -> DsaType {
match self {
DsaAlgorithm::MlDsa44 => DsaType::MlDsa44,
DsaAlgorithm::MlDsa65 => DsaType::MlDsa65,
DsaAlgorithm::MlDsa87 => DsaType::MlDsa87,
DsaAlgorithm::MlDsa44Rsa2048PssSha256 => DsaType::MlDsa44Rsa2048PssSha256,
DsaAlgorithm::MlDsa44Rsa2048Pkcs15Sha256 => DsaType::MlDsa44Rsa2048Pkcs15Sha256,
DsaAlgorithm::MlDsa44Ed25519SHA512 => DsaType::MlDsa44Ed25519SHA512,
DsaAlgorithm::MlDsa44EcdsaP256SHA256 => DsaType::MlDsa44EcdsaP256SHA256,
DsaAlgorithm::MlDsa44EcdsaBrainpoolP256r1SHA256 => {
DsaType::MlDsa44EcdsaBrainpoolP256r1SHA256
}
DsaAlgorithm::MlDsa65Rsa3072PssSHA512 => DsaType::MlDsa65Rsa3072PssSHA512,
DsaAlgorithm::MlDsa65Rsa3072Pkcs15SHA512 => DsaType::MlDsa65Rsa3072Pkcs15SHA512,
DsaAlgorithm::MlDsa65EcdsaP256SHA512 => DsaType::MlDsa65EcdsaP256SHA512,
DsaAlgorithm::MlDsa65EcdsaBrainpoolP256r1SHA512 => {
DsaType::MlDsa65EcdsaBrainpoolP256r1SHA512
}
DsaAlgorithm::MlDsa65Ed25519SHA512 => DsaType::MlDsa65Ed25519SHA512,
DsaAlgorithm::MlDsa87EcdsaP384SHA512 => DsaType::MlDsa87EcdsaP384SHA512,
DsaAlgorithm::MlDsa87EcdsaBrainpoolP384r1SHA512 => {
DsaType::MlDsa87EcdsaBrainpoolP384r1SHA512
}
DsaAlgorithm::MlDsa87Ed448SHA512 => DsaType::MlDsa87Ed448SHA512,
}
}
pub fn is_composite(&self) -> bool {
!matches!(
self,
DsaAlgorithm::MlDsa44 | DsaAlgorithm::MlDsa65 | DsaAlgorithm::MlDsa87
)
}
pub fn get_oid(&self) -> String {
self.get_dsa_type().get_oid()
}
pub fn from_oid(oid: &str) -> Option<DsaAlgorithm> {
DsaAlgorithm::all()
.iter()
.find(|x| x.get_oid() == oid)
.cloned()
}
}