Struct ClientHello

Source
pub struct ClientHello<'a> { /* private fields */ }
Expand description

A struct representing the received Client Hello

Implementations§

Source§

impl<'a> ClientHello<'a>

Source

pub fn server_name(&self) -> Option<&str>

Get the server name indicator.

Returns None if the client did not supply a SNI.

Source

pub fn signature_schemes(&self) -> &[SignatureScheme]

Get the compatible signature schemes.

Returns standard-specified default if the client omitted this extension.

Source

pub fn alpn(&self) -> Option<impl Iterator<Item = &'a [u8]>>

Get the ALPN protocol identifiers submitted by the client.

Returns None if the client did not include an ALPN extension.

Application Layer Protocol Negotiation (ALPN) is a TLS extension that lets a client submit a set of identifiers that each a represent an application-layer protocol. The server will then pick its preferred protocol from the set submitted by the client. Each identifier is represented as a byte array, although common values are often ASCII-encoded. See the official RFC-7301 specifications at https://datatracker.ietf.org/doc/html/rfc7301 for more information on ALPN.

For example, a HTTP client might specify “http/1.1” and/or “h2”. Other well-known values are listed in the at IANA registry at https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids.

The server can specify supported ALPN protocols by setting ServerConfig::alpn_protocols. During the handshake, the server will select the first protocol configured that the client supports.

Source

pub fn cipher_suites(&self) -> &[CipherSuite]

Get cipher suites.

Source

pub fn server_cert_types(&self) -> Option<&'a [CertificateType]>

Get the server certificate types offered in the ClientHello.

Returns None if the client did not include a certificate type extension.

Source

pub fn client_cert_types(&self) -> Option<&'a [CertificateType]>

Get the client certificate types offered in the ClientHello.

Returns None if the client did not include a certificate type extension.

Source

pub fn certificate_authorities(&self) -> Option<&'a [DistinguishedName]>

Get the certificate_authorities extension sent by the client.

Returns None if the client did not send this extension.

Source

pub fn named_groups(&self) -> Option<&'a [NamedGroup]>

Get the named_groups extension sent by the client.

This means different things in different versions of TLS:

Originally it was introduced as the “elliptic_curves” extension for TLS1.2. It described the elliptic curves supported by a client for all purposes: key exchange, signature verification (for server authentication), and signing (for client auth). Later RFC7919 extended this to include FFDHE “named groups”, but FFDHE groups in this context only relate to key exchange.

In TLS1.3 it was renamed to “named_groups” and now describes all types of key exchange mechanisms, and does not relate at all to elliptic curves used for signatures.

Trait Implementations§

Source§

impl<'a> Debug for ClientHello<'a>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<'a> Freeze for ClientHello<'a>

§

impl<'a> RefUnwindSafe for ClientHello<'a>

§

impl<'a> Send for ClientHello<'a>

§

impl<'a> Sync for ClientHello<'a>

§

impl<'a> Unpin for ClientHello<'a>

§

impl<'a> UnwindSafe for ClientHello<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.