diff --git a/tls-aio/src/handshaker.rs b/tls-aio/src/handshaker.rs index 140ad0dc1..f83c2f9d6 100644 --- a/tls-aio/src/handshaker.rs +++ b/tls-aio/src/handshaker.rs @@ -1,7 +1,4 @@ -use tls_core::{ - key::PublicKey, - msgs::{handshake::Random, message::PlainMessage}, -}; +use tls_core::{key::PublicKey, msgs::handshake::Random}; use async_trait::async_trait; diff --git a/tls-core/src/key.rs b/tls-core/src/key.rs index 468a4a303..0e807bd65 100644 --- a/tls-core/src/key.rs +++ b/tls-core/src/key.rs @@ -1,5 +1,7 @@ use std::fmt; +use crate::msgs::enums::NamedGroup; + /// This type contains a private key by value. /// /// The private key must be DER-encoded ASN.1 in either @@ -33,6 +35,31 @@ impl fmt::Debug for Certificate { } } +#[derive(Debug, Clone, Eq, PartialEq)] +pub struct PublicKey { + pub group: NamedGroup, + pub key: Vec, +} + +impl PublicKey { + pub fn new(group: NamedGroup, key: &[u8]) -> Self { + Self { + group, + key: Vec::from(key), + } + } +} + +impl From for PublicKey { + #[inline] + fn from(k: crate::msgs::handshake::KeyShareEntry) -> Self { + Self { + group: k.group, + key: k.payload.0, + } + } +} + #[cfg(test)] mod test { use super::Certificate; diff --git a/tls-core/src/msgs/handshake.rs b/tls-core/src/msgs/handshake.rs index 925502080..d7a0a4464 100644 --- a/tls-core/src/msgs/handshake.rs +++ b/tls-core/src/msgs/handshake.rs @@ -403,6 +403,13 @@ impl Codec for KeyShareEntry { } } +impl From for KeyShareEntry { + #[inline] + fn from(k: crate::key::PublicKey) -> Self { + Self::new(k.group, &k.key) + } +} + // --- TLS 1.3 PresharedKey offers --- #[derive(Clone, Debug)] pub struct PresharedKeyIdentity {