浏览代码

LibTLS: Rename Version to ProtocolVersion

This matches the wording used in the TLS RFC
Also define GREASE values as specified in RFC8701
stelar7 2 年之前
父节点
当前提交
ca6b8bfe7f

+ 26 - 0
Userland/Libraries/LibTLS/Extensions.h

@@ -28,6 +28,32 @@ enum class ContentType : u8 {
     __ENUM_CONTENT_TYPES
     __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
 #undef _ENUM_KEY_VALUE
 #undef _ENUM_KEY_VALUE
 
 

+ 1 - 1
Userland/Libraries/LibTLS/HandshakeClient.cpp

@@ -169,7 +169,7 @@ void TLSv12::build_rsa_pre_master_secret(PacketBuilder& builder)
         dbgln("Server mode not supported");
         dbgln("Server mode not supported");
         return;
         return;
     } else {
     } 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);
     auto premaster_key_result = ByteBuffer::copy(random_bytes, bytes);

+ 1 - 1
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");
         dbgln("not enough data for version");
         return (i8)Error::NeedMoreData;
         return (i8)Error::NeedMoreData;
     }
     }
-    auto version = static_cast<Version>(AK::convert_between_host_and_network_endian(ByteReader::load16(buffer.offset_pointer(res))));
+    auto version = static_cast<ProtocolVersion>(AK::convert_between_host_and_network_endian(ByteReader::load16(buffer.offset_pointer(res))));
 
 
     res += 2;
     res += 2;
     if (!supports_version(version))
     if (!supports_version(version))

+ 2 - 9
Userland/Libraries/LibTLS/TLSPacketBuilder.h

@@ -14,21 +14,14 @@
 
 
 namespace TLS {
 namespace TLS {
 
 
-enum class Version : u16 {
-    V10 = 0x0301,
-    V11 = 0x0302,
-    V12 = 0x0303,
-    V13 = 0x0304
-};
-
 class PacketBuilder {
 class PacketBuilder {
 public:
 public:
     PacketBuilder(ContentType type, u16 version, size_t size_hint = 0xfdf)
     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.
         // FIXME: Handle possible OOM situation.
         m_packet_data = ByteBuffer::create_uninitialized(size_hint + 16).release_value_but_fixme_should_propagate_errors();
         m_packet_data = ByteBuffer::create_uninitialized(size_hint + 16).release_value_but_fixme_should_propagate_errors();

+ 3 - 3
Userland/Libraries/LibTLS/TLSv12.h

@@ -240,7 +240,7 @@ struct Options {
         return move(*this);                  \
         return move(*this);                  \
     }
     }
 
 
-    OPTION_WITH_DEFAULTS(Version, version, Version::V12)
+    OPTION_WITH_DEFAULTS(ProtocolVersion, version, ProtocolVersion::VERSION_1_2)
     OPTION_WITH_DEFAULTS(Vector<SignatureAndHashAlgorithm>, supported_signature_algorithms,
     OPTION_WITH_DEFAULTS(Vector<SignatureAndHashAlgorithm>, supported_signature_algorithms,
         { HashAlgorithm::SHA512, SignatureAlgorithm::RSA },
         { HashAlgorithm::SHA512, SignatureAlgorithm::RSA },
         { HashAlgorithm::SHA384, 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);
     void alert(AlertLevel, AlertDescription);