#[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub enum TlsVersion {
Tls10,
Tls11,
Tls12,
Tls13,
Dtls12,
Dtls13,
}
impl TlsVersion {
#[must_use]
pub fn uses_tls13_handshake_semantics(self) -> bool {
matches!(self, Self::Tls13 | Self::Dtls13)
}
#[must_use]
pub fn is_dtls(self) -> bool {
matches!(self, Self::Dtls12 | Self::Dtls13)
}
}
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub enum HandshakeState {
Idle,
ClientHelloSent,
ServerHelloReceived,
ServerEncryptedExtensionsReceived,
ServerCertificateRequestReceived,
ServerCertificateReceived,
ServerCertificateVerified,
KeysDerived,
Finished,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub enum CipherSuite {
TlsAes128GcmSha256,
TlsAes256GcmSha384,
TlsChacha20Poly1305Sha256,
TlsEcdheRsaWithAes128GcmSha256,
TlsEcdheRsaWithAes256GcmSha384,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub enum RecordContentType {
Invalid,
ChangeCipherSpec,
Alert,
Handshake,
ApplicationData,
}
impl RecordContentType {
#[must_use]
pub fn to_u8(self) -> u8 {
match self {
Self::Invalid => 0x00,
Self::ChangeCipherSpec => 0x14,
Self::Alert => 0x15,
Self::Handshake => 0x16,
Self::ApplicationData => 0x17,
}
}
#[must_use]
pub fn from_u8(value: u8) -> Option<Self> {
match value {
0x00 => Some(Self::Invalid),
0x14 => Some(Self::ChangeCipherSpec),
0x15 => Some(Self::Alert),
0x16 => Some(Self::Handshake),
0x17 => Some(Self::ApplicationData),
_ => None,
}
}
}
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub enum AlertLevel {
Warning,
Fatal,
}
impl AlertLevel {
#[must_use]
pub fn to_u8(self) -> u8 {
match self {
Self::Warning => 1,
Self::Fatal => 2,
}
}
#[must_use]
pub fn from_u8(value: u8) -> Option<Self> {
match value {
1 => Some(Self::Warning),
2 => Some(Self::Fatal),
_ => None,
}
}
}
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub enum AlertDescription {
CloseNotify,
UnexpectedMessage,
BadRecordMac,
HandshakeFailure,
CertificateUnknown,
IllegalParameter,
InternalError,
UserCanceled,
}
impl AlertDescription {
#[must_use]
pub fn to_u8(self) -> u8 {
match self {
Self::CloseNotify => 0,
Self::UnexpectedMessage => 10,
Self::BadRecordMac => 20,
Self::HandshakeFailure => 40,
Self::CertificateUnknown => 46,
Self::IllegalParameter => 47,
Self::InternalError => 80,
Self::UserCanceled => 90,
}
}
#[must_use]
pub fn from_u8(value: u8) -> Option<Self> {
match value {
0 => Some(Self::CloseNotify),
10 => Some(Self::UnexpectedMessage),
20 => Some(Self::BadRecordMac),
40 => Some(Self::HandshakeFailure),
46 => Some(Self::CertificateUnknown),
47 => Some(Self::IllegalParameter),
80 => Some(Self::InternalError),
90 => Some(Self::UserCanceled),
_ => None,
}
}
}