1 use crate::session::SessionRandoms;
2 use crate::msgs::handshake::{ServerExtension, SessionID};
3 use crate::suites;
4 use crate::key;
5 use crate::hash_hs;
6 
7 use std::mem;
8 
9 pub struct HandshakeDetails {
10     pub transcript: hash_hs::HandshakeHash,
11     pub hash_at_server_fin: Vec<u8>,
12     pub session_id: SessionID,
13     pub randoms: SessionRandoms,
14     pub using_ems: bool,
15     pub extra_exts: Vec<ServerExtension>,
16 }
17 
18 impl HandshakeDetails {
new(extra_exts: Vec<ServerExtension>) -> HandshakeDetails19     pub fn new(extra_exts: Vec<ServerExtension>) -> HandshakeDetails {
20         HandshakeDetails {
21             transcript: hash_hs::HandshakeHash::new(),
22             hash_at_server_fin: Vec::new(),
23             session_id: SessionID::empty(),
24             randoms: SessionRandoms::for_server(),
25             using_ems: false,
26             extra_exts,
27         }
28     }
29 }
30 
31 pub struct ServerKXDetails {
32     pub kx: Option<suites::KeyExchange>,
33 }
34 
35 impl ServerKXDetails {
new(kx: suites::KeyExchange) -> ServerKXDetails36     pub fn new(kx: suites::KeyExchange) -> ServerKXDetails {
37         ServerKXDetails {
38             kx: Some(kx),
39         }
40     }
41 
take_kx(&mut self) -> suites::KeyExchange42     pub fn take_kx(&mut self) -> suites::KeyExchange {
43         self.kx.take().unwrap()
44     }
45 }
46 
47 pub struct ClientCertDetails {
48     pub cert_chain: Vec<key::Certificate>,
49 }
50 
51 impl ClientCertDetails {
new(chain: Vec<key::Certificate>) -> ClientCertDetails52     pub fn new(chain: Vec<key::Certificate>) -> ClientCertDetails {
53         ClientCertDetails {
54             cert_chain: chain,
55         }
56     }
57 
take_chain(&mut self) -> Vec<key::Certificate>58     pub fn take_chain(&mut self) -> Vec<key::Certificate> {
59         mem::replace(&mut self.cert_chain, Vec::new())
60     }
61 }
62