diff --git a/dtls/src/state.rs b/dtls/src/state.rs index 2d8fbc864..4a7dbe6ff 100644 --- a/dtls/src/state.rs +++ b/dtls/src/state.rs @@ -65,6 +65,13 @@ struct SerializedState { is_client: bool, } +#[derive(Serialize, Deserialize, Debug, Clone)] +pub struct KeyLogData { + pub local_random: Vec, + pub remote_random: Vec, + pub master_secret: Vec, +} + impl Default for State { fn default() -> Self { State { @@ -249,6 +256,26 @@ impl State { Ok(()) } + + /// key_log_data returns the key log data for the current state. + pub fn key_log_data(&self) -> Result { + let mut local_random = vec![]; + { + let mut writer = BufWriter::<&mut Vec>::new(local_random.as_mut()); + self.local_random.marshal(&mut writer)?; + } + let mut remote_random = vec![]; + { + let mut writer = BufWriter::<&mut Vec>::new(remote_random.as_mut()); + self.remote_random.marshal(&mut writer)?; + } + + Ok(KeyLogData { + local_random, + remote_random, + master_secret: self.master_secret.clone(), + }) + } } #[async_trait]