1 use crate::hash_hs;
2 use crate::key;
3 use crate::msgs::handshake::{ServerExtension, SessionID};
4 use crate::session::SessionRandoms;
5 use crate::suites;
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 { kx: Some(kx) }
38     }
39 
take_kx(&mut self) -> suites::KeyExchange40     pub fn take_kx(&mut self) -> suites::KeyExchange {
41         self.kx.take().unwrap()
42     }
43 }
44 
45 pub struct ClientCertDetails {
46     pub cert_chain: Vec<key::Certificate>,
47 }
48 
49 impl ClientCertDetails {
new(chain: Vec<key::Certificate>) -> ClientCertDetails50     pub fn new(chain: Vec<key::Certificate>) -> ClientCertDetails {
51         ClientCertDetails { cert_chain: chain }
52     }
53 
take_chain(&mut self) -> Vec<key::Certificate>54     pub fn take_chain(&mut self) -> Vec<key::Certificate> {
55         mem::replace(&mut self.cert_chain, Vec::new())
56     }
57 }
58