clia_rustls_mod/msgs/
ffdhe_groups.rs1use crate::NamedGroup;
5
6#[derive(Clone, Copy, Debug, PartialEq, Eq)]
7pub struct FfdheGroup<'a> {
9 pub p: &'a [u8],
10 pub g: &'a [u8],
11}
12
13impl FfdheGroup<'static> {
14 pub fn from_named_group(named_group: NamedGroup) -> Option<Self> {
17 match named_group {
18 NamedGroup::FFDHE2048 => Some(FFDHE2048),
19 NamedGroup::FFDHE3072 => Some(FFDHE3072),
20 NamedGroup::FFDHE4096 => Some(FFDHE4096),
21 NamedGroup::FFDHE6144 => Some(FFDHE6144),
22 NamedGroup::FFDHE8192 => Some(FFDHE8192),
23 _ => None,
24 }
25 }
26}
27
28impl<'a> FfdheGroup<'a> {
29 pub fn named_group(&self) -> Option<NamedGroup> {
31 match *self {
32 FFDHE2048 => Some(NamedGroup::FFDHE2048),
33 FFDHE3072 => Some(NamedGroup::FFDHE3072),
34 FFDHE4096 => Some(NamedGroup::FFDHE4096),
35 FFDHE6144 => Some(NamedGroup::FFDHE6144),
36 FFDHE8192 => Some(NamedGroup::FFDHE8192),
37 _ => None,
38 }
39 }
40
41 pub fn from_params_trimming_leading_zeros(p: &'a [u8], g: &'a [u8]) -> Self {
43 fn trim_leading_zeros(buf: &[u8]) -> &[u8] {
44 for start in 0..buf.len() {
45 if buf[start] != 0 {
46 return &buf[start..];
47 }
48 }
49 &[]
50 }
51
52 FfdheGroup {
53 p: trim_leading_zeros(p),
54 g: trim_leading_zeros(g),
55 }
56 }
57}
58
59pub const FFDHE2048: FfdheGroup = FfdheGroup {
63 p: include_bytes!("ffdhe_groups/ffdhe2048-modulus.bin"),
64 g: &[2],
65};
66
67pub const FFDHE3072: FfdheGroup = FfdheGroup {
71 p: include_bytes!("ffdhe_groups/ffdhe3072-modulus.bin"),
72 g: &[2],
73};
74
75pub const FFDHE4096: FfdheGroup = FfdheGroup {
79 p: include_bytes!("ffdhe_groups/ffdhe4096-modulus.bin"),
80 g: &[2],
81};
82
83pub const FFDHE6144: FfdheGroup = FfdheGroup {
87 p: include_bytes!("ffdhe_groups/ffdhe6144-modulus.bin"),
88 g: &[2],
89};
90
91pub const FFDHE8192: FfdheGroup = FfdheGroup {
95 p: include_bytes!("ffdhe_groups/ffdhe8192-modulus.bin"),
96 g: &[2],
97};
98
99#[test]
100fn named_group_ffdhe_group_roudtrip() {
101 use NamedGroup::*;
102 let ffdhe_groups = [FFDHE2048, FFDHE3072, FFDHE4096, FFDHE6144, FFDHE8192];
103 for g in ffdhe_groups {
104 assert_eq!(
105 FfdheGroup::from_named_group(g)
106 .unwrap()
107 .named_group(),
108 Some(g)
109 );
110 }
111}