1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use nom::number::streaming::be_u16;

/// Diffie-Hellman parameters, defined in [RFC5246] section 7.4.3
#[derive(PartialEq)]
pub struct ServerDHParams<'a> {
    /// The prime modulus used for the Diffie-Hellman operation.
    pub dh_p: &'a [u8],
    /// The generator used for the Diffie-Hellman operation.
    pub dh_g: &'a [u8],
    /// The server's Diffie-Hellman public value (g^X mod p).
    pub dh_ys: &'a [u8],
}

named! {pub parse_dh_params<ServerDHParams>,
    do_parse!(
        p:  length_data!(be_u16) >>
        g:  length_data!(be_u16) >>
        ys: length_data!(be_u16) >>
        ( ServerDHParams{
            dh_p:  p,
            dh_g:  g,
            dh_ys: ys,
        })
    )
}