quantcrypt/dsa/common/config/
pk_len.rs

1use crate::dsa::common::dsa_type::DsaType;
2/// A trait to get the length of the public key
3
4pub trait PKLen {
5    fn get_pk_len(&self) -> Option<usize>;
6}
7
8impl PKLen for DsaType {
9    /// Get the length of the public key
10    ///
11    /// # Returns
12    ///
13    /// The length of the public key in bytes or `None` if the length is not fixed
14    fn get_pk_len(&self) -> Option<usize> {
15        match self {
16            DsaType::Rsa2048Pkcs15SHA256 => None,
17            DsaType::Rsa2048PssSHA256 => None,
18            DsaType::Rsa3072Pkcs15SHA512 => None,
19            DsaType::Rsa3072PssSHA512 => None,
20
21            DsaType::EcdsaP256SHA256 => Some(65),
22            DsaType::EcdsaP256SHA512 => Some(65),
23            DsaType::EcdsaP384SHA512 => Some(97),
24            DsaType::EcdsaBrainpoolP256r1SHA256 => Some(65),
25            DsaType::EcdsaBrainpoolP256r1SHA512 => Some(65),
26            DsaType::EcdsaBrainpoolP384r1SHA512 => Some(97),
27            DsaType::Ed25519SHA512 => Some(32),
28            DsaType::Ed448SHA512 => Some(57),
29
30            DsaType::MlDsa44 => Some(1312),
31            DsaType::MlDsa65 => Some(1952),
32            DsaType::MlDsa87 => Some(2592),
33
34            // TODO: Investigate lengths
35            DsaType::MlDsa44Rsa2048PssSha256 => None,
36            DsaType::MlDsa44Rsa2048Pkcs15Sha256 => None,
37            DsaType::MlDsa44Ed25519SHA512 => None,
38            DsaType::MlDsa44EcdsaP256SHA256 => None,
39            DsaType::MlDsa44EcdsaBrainpoolP256r1SHA256 => None,
40            DsaType::MlDsa65Rsa3072PssSHA512 => None,
41            DsaType::MlDsa65Rsa3072Pkcs15SHA512 => None,
42            DsaType::MlDsa65EcdsaP256SHA512 => None,
43            DsaType::MlDsa65EcdsaBrainpoolP256r1SHA512 => None,
44            DsaType::MlDsa65Ed25519SHA512 => None,
45            DsaType::MlDsa87EcdsaP384SHA512 => None,
46            DsaType::MlDsa87EcdsaBrainpoolP384r1SHA512 => None,
47            DsaType::MlDsa87Ed448SHA512 => None,
48
49            #[cfg(not(feature = "ipd"))]
50            DsaType::SlhDsaSha2_128s => Some(32),
51            #[cfg(not(feature = "ipd"))]
52            DsaType::SlhDsaSha2_128f => Some(32),
53            #[cfg(not(feature = "ipd"))]
54            DsaType::SlhDsaSha2_192s => Some(48),
55            #[cfg(not(feature = "ipd"))]
56            DsaType::SlhDsaSha2_192f => Some(48),
57            #[cfg(not(feature = "ipd"))]
58            DsaType::SlhDsaSha2_256s => Some(64),
59            #[cfg(not(feature = "ipd"))]
60            DsaType::SlhDsaSha2_256f => Some(64),
61            #[cfg(not(feature = "ipd"))]
62            DsaType::SlhDsaShake128s => Some(32),
63            #[cfg(not(feature = "ipd"))]
64            DsaType::SlhDsaShake128f => Some(32),
65            #[cfg(not(feature = "ipd"))]
66            DsaType::SlhDsaShake192s => Some(48),
67            #[cfg(not(feature = "ipd"))]
68            DsaType::SlhDsaShake192f => Some(48),
69            #[cfg(not(feature = "ipd"))]
70            DsaType::SlhDsaShake256s => Some(64),
71            #[cfg(not(feature = "ipd"))]
72            DsaType::SlhDsaShake256f => Some(64),
73        }
74    }
75}