oint_keys/algorithms/slug/
mod.rs1use 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(signature::shulginsigning::ShulginKeypair),
10 EsphandSigning(signature::esphand_signature::EsphandKeypair),
12 AbsolveSigning(signature::absolvesigning::AbsolveKeypair),
14
15 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 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(signature::shulginsigning::ShulginKeypair),
32 EsphandSigning(signature::esphand_signature::EsphandKeypair),
34 AbsolveSigning(signature::absolvesigning::AbsolveKeypair),
36
37 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 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(signature::shulginsigning::ShulginSignature),
73 EsphandSigning(signature::esphand_signature::EsphandSignature),
75 AbsolveSigning(signature::absolvesigning::AbsolveSignature),
77
78 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 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 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}