From ca6b8bfe7f05d54af8ca408a8fc1011dcbc9d626 Mon Sep 17 00:00:00 2001 From: stelar7 Date: Thu, 13 Apr 2023 23:53:22 +0200 Subject: [PATCH] LibTLS: Rename Version to ProtocolVersion This matches the wording used in the TLS RFC Also define GREASE values as specified in RFC8701 --- Userland/Libraries/LibTLS/Extensions.h | 26 +++++++++++++++++++ Userland/Libraries/LibTLS/HandshakeClient.cpp | 2 +- Userland/Libraries/LibTLS/HandshakeServer.cpp | 2 +- Userland/Libraries/LibTLS/TLSPacketBuilder.h | 11 ++------ Userland/Libraries/LibTLS/TLSv12.h | 6 ++--- 5 files changed, 33 insertions(+), 14 deletions(-) diff --git a/Userland/Libraries/LibTLS/Extensions.h b/Userland/Libraries/LibTLS/Extensions.h index 5a374a4c37..68d1a13990 100644 --- a/Userland/Libraries/LibTLS/Extensions.h +++ b/Userland/Libraries/LibTLS/Extensions.h @@ -28,6 +28,32 @@ enum class ContentType : u8 { __ENUM_CONTENT_TYPES }; +#define __ENUM_PROTOCOL_VERSIONS \ + _ENUM_KEY_VALUE(VERSION_1_3, 0x0304) \ + _ENUM_KEY_VALUE(VERSION_1_2, 0x0303) \ + _ENUM_KEY_VALUE(VERSION_1_1, 0x0302) \ + _ENUM_KEY_VALUE(VERSION_1_0, 0x0301) \ + _ENUM_KEY_VALUE(GREASE_0, 0x0A0A) \ + _ENUM_KEY_VALUE(GREASE_1, 0x1A1A) \ + _ENUM_KEY_VALUE(GREASE_2, 0x2A2A) \ + _ENUM_KEY_VALUE(GREASE_3, 0x3A3A) \ + _ENUM_KEY_VALUE(GREASE_4, 0x4A4A) \ + _ENUM_KEY_VALUE(GREASE_5, 0x5A5A) \ + _ENUM_KEY_VALUE(GREASE_6, 0x6A6A) \ + _ENUM_KEY_VALUE(GREASE_7, 0x7A7A) \ + _ENUM_KEY_VALUE(GREASE_8, 0x8A8A) \ + _ENUM_KEY_VALUE(GREASE_9, 0x9A9A) \ + _ENUM_KEY_VALUE(GREASE_A, 0xAAAA) \ + _ENUM_KEY_VALUE(GREASE_B, 0xBABA) \ + _ENUM_KEY_VALUE(GREASE_C, 0xCACA) \ + _ENUM_KEY_VALUE(GREASE_D, 0xDADA) \ + _ENUM_KEY_VALUE(GREASE_E, 0xEAEA) \ + _ENUM_KEY_VALUE(GREASE_F, 0xFAFA) + +enum class ProtocolVersion : u16 { + __ENUM_PROTOCOL_VERSIONS +}; + #undef _ENUM_KEY #undef _ENUM_KEY_VALUE diff --git a/Userland/Libraries/LibTLS/HandshakeClient.cpp b/Userland/Libraries/LibTLS/HandshakeClient.cpp index b752f8992c..b0eb1fb1a8 100644 --- a/Userland/Libraries/LibTLS/HandshakeClient.cpp +++ b/Userland/Libraries/LibTLS/HandshakeClient.cpp @@ -169,7 +169,7 @@ void TLSv12::build_rsa_pre_master_secret(PacketBuilder& builder) dbgln("Server mode not supported"); return; } else { - *(u16*)random_bytes = AK::convert_between_host_and_network_endian((u16)Version::V12); + *(u16*)random_bytes = AK::convert_between_host_and_network_endian((u16)ProtocolVersion::VERSION_1_2); } auto premaster_key_result = ByteBuffer::copy(random_bytes, bytes); diff --git a/Userland/Libraries/LibTLS/HandshakeServer.cpp b/Userland/Libraries/LibTLS/HandshakeServer.cpp index 2d4f40c0a0..b1b63bd741 100644 --- a/Userland/Libraries/LibTLS/HandshakeServer.cpp +++ b/Userland/Libraries/LibTLS/HandshakeServer.cpp @@ -46,7 +46,7 @@ ssize_t TLSv12::handle_server_hello(ReadonlyBytes buffer, WritePacketStage& writ dbgln("not enough data for version"); return (i8)Error::NeedMoreData; } - auto version = static_cast(AK::convert_between_host_and_network_endian(ByteReader::load16(buffer.offset_pointer(res)))); + auto version = static_cast(AK::convert_between_host_and_network_endian(ByteReader::load16(buffer.offset_pointer(res)))); res += 2; if (!supports_version(version)) diff --git a/Userland/Libraries/LibTLS/TLSPacketBuilder.h b/Userland/Libraries/LibTLS/TLSPacketBuilder.h index d4637ff7aa..0707663802 100644 --- a/Userland/Libraries/LibTLS/TLSPacketBuilder.h +++ b/Userland/Libraries/LibTLS/TLSPacketBuilder.h @@ -14,21 +14,14 @@ namespace TLS { -enum class Version : u16 { - V10 = 0x0301, - V11 = 0x0302, - V12 = 0x0303, - V13 = 0x0304 -}; - class PacketBuilder { public: PacketBuilder(ContentType type, u16 version, size_t size_hint = 0xfdf) - : PacketBuilder(type, (Version)version, size_hint) + : PacketBuilder(type, (ProtocolVersion)version, size_hint) { } - PacketBuilder(ContentType type, Version version, size_t size_hint = 0xfdf) + PacketBuilder(ContentType type, ProtocolVersion version, size_t size_hint = 0xfdf) { // FIXME: Handle possible OOM situation. m_packet_data = ByteBuffer::create_uninitialized(size_hint + 16).release_value_but_fixme_should_propagate_errors(); diff --git a/Userland/Libraries/LibTLS/TLSv12.h b/Userland/Libraries/LibTLS/TLSv12.h index 92649343dd..3effa892ab 100644 --- a/Userland/Libraries/LibTLS/TLSv12.h +++ b/Userland/Libraries/LibTLS/TLSv12.h @@ -240,7 +240,7 @@ struct Options { return move(*this); \ } - OPTION_WITH_DEFAULTS(Version, version, Version::V12) + OPTION_WITH_DEFAULTS(ProtocolVersion, version, ProtocolVersion::VERSION_1_2) OPTION_WITH_DEFAULTS(Vector, supported_signature_algorithms, { HashAlgorithm::SHA512, SignatureAlgorithm::RSA }, { HashAlgorithm::SHA384, SignatureAlgorithm::RSA }, @@ -419,9 +419,9 @@ public: } } - bool supports_version(Version v) const + bool supports_version(ProtocolVersion v) const { - return v == Version::V12; + return v == ProtocolVersion::VERSION_1_2; } void alert(AlertLevel, AlertDescription);