}
int ret = 0;
+ uint16_t version = 0;
SCLogDebug("looking for tls_data->ver 0x%02X (flags 0x%02X)", tls_data->ver, flags);
if (flags & STREAM_TOCLIENT) {
- SCLogDebug("server (toclient) version is 0x%02X", ssl_state->server_connp.version);
- if (tls_data->ver == ssl_state->server_connp.version)
- ret = 1;
+ version = ssl_state->server_connp.version;
+ SCLogDebug("server (toclient) version is 0x%02X", version);
} else if (flags & STREAM_TOSERVER) {
- SCLogDebug("client (toserver) version is 0x%02X", ssl_state->client_connp.version);
- if (tls_data->ver == ssl_state->client_connp.version)
- ret = 1;
+ version = ssl_state->client_connp.version;
+ SCLogDebug("client (toserver) version is 0x%02X", version);
+ }
+
+ /* Match all TLSv1.3 drafts as TLSv1.3 */
+ if (((version >> 8) & 0xff) == 0x7f) {
+ version = TLS_VERSION_13;
+ }
+
+ if (tls_data->ver == version) {
+ ret = 1;
}
SCReturnInt(ret);
temp = TLS_VERSION_11;
} else if (strcmp("1.2", tmp_str) == 0) {
temp = TLS_VERSION_12;
+ } else if (strcmp("1.3", tmp_str) == 0) {
+ temp = TLS_VERSION_13;
} else {
SCLogError(SC_ERR_INVALID_VALUE, "Invalid value");
SCFree(orig);