ytls_typed/typed_groups.rs
1//! Typed (EC) Groups
2
3#[derive(Debug, PartialEq)]
4pub enum Group {
5 /// RFC 8422 s. 5.11.
6 Secp256r1,
7 /// RFC 8422 s. 5.11.
8 Secp384r1,
9 /// RFC 8422 s. 5.11.
10 Secp521r1,
11 /// RFC 8422 s. 5.11.
12 X25519,
13 /// RFC 8422 s. 5.11.
14 X448,
15 /// RFC 8422 s. 5.11.
16 Ffdhe2048,
17 /// RFC 7919 s. 8.3
18 Ffdhe3072,
19 /// RFC 7919 s. 8.3
20 Ffdhe4096,
21 /// RFC 7919 s. 8.3
22 Ffdhe6144,
23 /// RFC 7919 s. 8.3
24 Ffdhe8192,
25 /// draft-kwiatkowski-tls-ecdhe-mlkem-03 s. 5
26 SecP256r1Mlkem768,
27 /// draft-kwiatkowski-tls-ecdhe-mlkem-03 s. 5
28 X25519Mlkem768,
29 /// draft-kwiatkowski-tls-ecdhe-mlkem-03 s. 5
30 SecP384r1Mlkem1024,
31 /// Unknown Group (may be in future RFC / drafts)
32 Unknown(u16),
33}
34
35impl From<u16> for Group {
36 #[inline]
37 fn from(d: u16) -> Self {
38 match d {
39 // RFC 8422 s. 5.11.
40 23 => Self::Secp256r1,
41 // RFC 8422 s. 5.11.
42 24 => Self::Secp384r1,
43 // RFC 8422 s. 5.11.
44 25 => Self::Secp521r1,
45 // RFC 8422 s. 5.11.
46 29 => Self::X25519,
47 // RFC 8422 s. 5.11.
48 30 => Self::X448,
49 // RFC 7919 s. 8.3
50 256 => Self::Ffdhe2048,
51 // RFC 7919 s. 8.3
52 257 => Self::Ffdhe3072,
53 // RFC 7919 s. 8.3
54 258 => Self::Ffdhe4096,
55 // RFC 7919 s. 8.3
56 259 => Self::Ffdhe6144,
57 // RFC 7919 s. 8.3
58 260 => Self::Ffdhe8192,
59 // draft-ietf-tls-hybrid-design-16 & draft-kwiatkowski-tls-ecdhe-mlkem-03
60 4587 => Self::SecP256r1Mlkem768,
61 // draft-kwiatkowski-tls-ecdhe-mlkem-03 s. 5.2
62 4588 => Self::X25519Mlkem768,
63 // draft-kwiatkowski-tls-ecdhe-mlkem-03 s. 5.3
64 4589 => Self::SecP384r1Mlkem1024,
65 // draft-kwiatkowski-tls-ecdhe-mlkem-03 Obsoletes 25497 and 25498
66 _ => Self::Unknown(d),
67 }
68 }
69}