ClientHello

Struct ClientHello 

Source
pub struct ClientHello<'a> { /* private fields */ }
Available on crate feature tls only.
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<(), Error>

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> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more