Skip to main content

oint_keys/algorithms/slug/
mod.rs

1use libslug::slugcrypt::internals::signature;
2use serde::{Serialize,Deserialize};
3use zeroize::{Zeroize,ZeroizeOnDrop};
4use crate::constants::*;
5
6#[derive(Clone, Serialize, Deserialize, Debug, PartialEq, PartialOrd, Hash, Zeroize, ZeroizeOnDrop)]
7pub enum SlugPublicKey {
8    /// ShulginSigning: A hybrid signature scheme combining classical and post-quantum algorithms.
9    ShulginSigning(signature::shulginsigning::ShulginKeypair),
10    /// EsphandSigning: A signature scheme based on the Esphand algorithm, designed for high security and efficiency.
11    EsphandSigning(signature::esphand_signature::EsphandKeypair),
12    /// AbsolveSigning: A signature scheme that provides strong security guarantees while maintaining performance.
13    AbsolveSigning(signature::absolvesigning::AbsolveKeypair),
14    
15    //=====CLASSICAL======//
16    ED25519(signature::ed25519::ED25519PublicKey),
17    ED448(signature::ed448::Ed448PublicKey),
18    ECDSA(signature::ecdsa::ECDSAPublicKey),
19    BLS12_381(signature::bls::BLSPublicKey),
20    SchnorrOverRistretto(signature::schnorr::SchnorrPublicKey),
21
22    //=====PQ=====//
23    SPHINCS(signature::sphincs_plus::SPHINCSPublicKey),
24    FALCON1024(signature::falcon::Falcon1024PublicKey),
25    MLDSA3(signature::ml_dsa::MLDSA3PublicKey),
26}
27
28#[derive(Clone, Serialize, Deserialize, Debug, PartialEq, PartialOrd, Hash, Zeroize, ZeroizeOnDrop)]
29pub enum SlugSecretKey {
30    /// ShulginSigning: A hybrid signature scheme combining classical and post-quantum algorithms.
31    ShulginSigning(signature::shulginsigning::ShulginKeypair),
32    /// EsphandSigning: A signature scheme based on the Esphand algorithm, designed for high security and efficiency.
33    EsphandSigning(signature::esphand_signature::EsphandKeypair),
34    /// AbsolveSigning: A signature scheme that provides strong security guarantees while maintaining performance.
35    AbsolveSigning(signature::absolvesigning::AbsolveKeypair),
36
37    //=====CLASSICAL=====//
38    ED25519(signature::ed25519::ED25519SecretKey),
39    ED448(signature::ed448::Ed448SecretKey),
40    ECDSA(signature::ecdsa::ECDSASecretKey),
41    BLS12_381(signature::bls::BLSSecretKey),
42    SchnorrOverRistretto(signature::schnorr::SchnorrSecretKey),
43
44    //=====PQ=====//
45    SPHINCS((signature::sphincs_plus::SPHINCSSecretKey, signature::sphincs_plus::SPHINCSPublicKey)),
46    FALCON1024((signature::falcon::Falcon1024SecretKey, signature::falcon::Falcon1024PublicKey)),
47    MLDSA3((signature::ml_dsa::MLDSA3SecretKey, signature::ml_dsa::MLDSA3PublicKey)),
48}
49
50impl SlugSecretKey {
51    pub fn as_alg(&self) -> Algorithms {
52        match self {
53            Self::ShulginSigning(_) => return Algorithms::ShulginSigning,
54            Self::EsphandSigning(_) => return Algorithms::EsphandSigning,
55            Self::AbsolveSigning(_) => return Algorithms::AbsolveSigning,
56            Self::ED25519(_) => return Algorithms::ED25519,
57            Self::ED448(_) => return Algorithms::ED448,
58            Self::ECDSA(_) => return Algorithms::ECDSA,
59            Self::BLS12_381(_) => return Algorithms::BLS12_381,
60            Self::SchnorrOverRistretto(_) => return Algorithms::Schnorr,
61            Self::SPHINCS(_) => return Algorithms::Sphincs,
62            Self::FALCON1024(_) => return Algorithms::Falcon1024,
63            Self::MLDSA3(_) => return Algorithms::MLDSA3,
64        }
65    }
66
67}
68
69#[derive(Clone, Serialize, Deserialize, Debug, PartialEq, PartialOrd, Hash, Zeroize, ZeroizeOnDrop)]
70pub enum SlugSignature {
71    /// ShulginSigning: A hybrid signature scheme combining classical and post-quantum algorithms.
72    ShulginSigning(signature::shulginsigning::ShulginSignature),
73    /// EsphandSigning: A signature scheme based on the Esphand algorithm, designed for high security and efficiency.
74    EsphandSigning(signature::esphand_signature::EsphandSignature),
75    /// AbsolveSigning: A signature scheme that provides strong security guarantees while maintaining performance.
76    AbsolveSigning(signature::absolvesigning::AbsolveSignature),
77
78    //=====CLASSICAL=====//
79    ED25519(signature::ed25519::ED25519Signature),
80    ED448(signature::ed448::Ed448Signature),
81    ECDSA(signature::ecdsa::ECDSASignature,signature::ecdsa::ECDSASignatureRecoveryID),
82    BLS12_381(signature::bls::BLSSignature),
83    SchnorrOverRistretto(signature::schnorr::SchnorrSignature),
84
85    //=====PQ=====//
86    SPHINCS(signature::sphincs_plus::SPHINCSSignature),
87    FALCON1024(signature::falcon::Falcon1024Signature),
88    MLDSA3(signature::ml_dsa::MLDSA3Signature),
89}
90
91impl SlugPublicKey {
92    pub fn as_alg(&self) -> Algorithms {
93        match self {
94            Self::ShulginSigning(_) => return Algorithms::ShulginSigning,
95            Self::EsphandSigning(_) => return Algorithms::EsphandSigning,
96            Self::AbsolveSigning(_) => return Algorithms::AbsolveSigning,
97            Self::ED25519(_) => return Algorithms::ED25519,
98            Self::ED448(_) => return Algorithms::ED448,
99            Self::ECDSA(_) => return Algorithms::ECDSA,
100            Self::BLS12_381(_) => return Algorithms::BLS12_381,
101            Self::SchnorrOverRistretto(_) => return Algorithms::Schnorr,
102            Self::SPHINCS(_) => return Algorithms::Sphincs,
103            Self::FALCON1024(_) => return Algorithms::Falcon1024,
104            Self::MLDSA3(_) => return Algorithms::MLDSA3,
105        }
106    }
107}
108
109impl SlugSignature {
110    pub fn as_alg(&self) -> Algorithms {
111        match self {
112            Self::ShulginSigning(_) => return Algorithms::ShulginSigning,
113            Self::EsphandSigning(_) => return Algorithms::EsphandSigning,
114            Self::AbsolveSigning(_) => return Algorithms::AbsolveSigning,
115            Self::ED25519(_) => return Algorithms::ED25519,
116            Self::ED448(_) => return Algorithms::ED448,
117            Self::ECDSA(_, _) => return Algorithms::ECDSA,
118            Self::BLS12_381(_) => return Algorithms::BLS12_381,
119            Self::SchnorrOverRistretto(_) => return Algorithms::Schnorr,
120            Self::SPHINCS(_) => return Algorithms::Sphincs,
121            Self::FALCON1024(_) => return Algorithms::Falcon1024,
122            Self::MLDSA3(_) => return Algorithms::MLDSA3,
123        }
124    }
125}
126#[derive(Clone, Serialize, Deserialize, Debug, PartialEq, PartialOrd, Hash, Zeroize, ZeroizeOnDrop)]
127pub enum Algorithms {
128    ShulginSigning,
129    EsphandSigning,
130    AbsolveSigning,
131    ED25519,
132    ED448,
133    ECDSA,
134    Schnorr,
135    BLS12_381,
136    Falcon1024,
137    Sphincs,
138    MLDSA3,
139}
140
141impl Algorithms {
142    /// # Cipher Suite Output
143    /// 
144    /// Outputs the cipher suite identifier for the given algorithm using:
145    /// 
146    /// - [X] slug20/ShulginSigning
147    /// - [X] slug20/EsphandSigning
148    /// - [X] slug20/AbsolveSigning
149    /// - [X] slug20/ed25519
150    /// - [X] slug20/ed448
151    /// - [X] slug20/ecdsa
152    /// - [X] slug20/bls12-381
153    /// - [X] slug20/schnorr
154    /// - [X] slug20/Falcon1024
155    /// - [X] slug20/sphincs_plus
156    /// - [X] slug20/ml-dsa3
157    /// 
158    pub fn cipher_suite(&self) -> &str {
159        match self {
160            Self::ShulginSigning => return SLUG20_SHULGINSIGNING_ID,
161            Self::EsphandSigning => return SLUG20_ESPHANDSIGNING_ID,
162            Self::AbsolveSigning => return SLUG20_ABSOLVESIGNING_ID,
163            Self::ED25519 => return SLUG20_ED25519_ID,
164            Self::ED448 => return SLUG20_ED448_ID,
165            Self::ECDSA => return SLUG20_ECDSA_SECP256k1_ID,
166            Self::Schnorr => return SLUG20_SCHNORR_ID,
167            Self::BLS12_381 => return SLUG20_BLS_12_381_ID,
168            Self::Falcon1024 => return SLUG20_FALCON1024_ID,
169            Self::Sphincs => return SLUG20_SPHINCS_PLUS_ID,
170            Self::MLDSA3 => return SLUG20_MLDSA3_ID,
171        }
172    }
173}