From 97cc3475bf60ded08ba1ccda98c832af614dd4ad Mon Sep 17 00:00:00 2001 From: Mats Klepsland Date: Tue, 28 Aug 2018 22:25:50 +0200 Subject: [PATCH] app-layer-ssl: add function to get string from version Add 'SSLVersionToString' to get string from version. --- src/app-layer-ssl.c | 74 +++++++++++++++++++++++++++++++++++++++++++++ src/app-layer-ssl.h | 4 +++ 2 files changed, 78 insertions(+) diff --git a/src/app-layer-ssl.c b/src/app-layer-ssl.c index dd1a6eaa78..93947184bb 100644 --- a/src/app-layer-ssl.c +++ b/src/app-layer-ssl.c @@ -262,6 +262,80 @@ static void SSLSetTxDetectFlags(void *vtx, uint8_t dir, uint64_t flags) } } +void SSLVersionToString(uint16_t version, char *buffer) +{ + buffer[0] = '\0'; + + switch (version) { + case TLS_VERSION_UNKNOWN: + strlcat(buffer, "UNDETERMINED", 13); + break; + case SSL_VERSION_2: + strlcat(buffer, "SSLv2", 6); + break; + case SSL_VERSION_3: + strlcat(buffer, "SSLv3", 6); + break; + case TLS_VERSION_10: + strlcat(buffer, "TLSv1", 6); + break; + case TLS_VERSION_11: + strlcat(buffer, "TLS 1.1", 8); + break; + case TLS_VERSION_12: + strlcat(buffer, "TLS 1.2", 8); + break; + case TLS_VERSION_13: + strlcat(buffer, "TLS 1.3", 8); + break; + case TLS_VERSION_13_DRAFT28: + strlcat(buffer, "TLS 1.3 (draft 28)", 19); + break; + case TLS_VERSION_13_DRAFT27: + strlcat(buffer, "TLS 1.3 (draft 27)", 19); + break; + case TLS_VERSION_13_DRAFT26: + strlcat(buffer, "TLS 1.3 (draft 26)", 19); + break; + case TLS_VERSION_13_DRAFT25: + strlcat(buffer, "TLS 1.3 (draft 25)", 19); + break; + case TLS_VERSION_13_DRAFT24: + strlcat(buffer, "TLS 1.3 (draft 24)", 19); + break; + case TLS_VERSION_13_DRAFT23: + strlcat(buffer, "TLS 1.3 (draft 23)", 19); + break; + case TLS_VERSION_13_DRAFT22: + strlcat(buffer, "TLS 1.3 (draft 22)", 19); + break; + case TLS_VERSION_13_DRAFT21: + strlcat(buffer, "TLS 1.3 (draft 21)", 19); + break; + case TLS_VERSION_13_DRAFT20: + strlcat(buffer, "TLS 1.3 (draft 20)", 19); + break; + case TLS_VERSION_13_DRAFT19: + strlcat(buffer, "TLS 1.3 (draft 19)", 19); + break; + case TLS_VERSION_13_DRAFT18: + strlcat(buffer, "TLS 1.3 (draft 18)", 19); + break; + case TLS_VERSION_13_DRAFT17: + strlcat(buffer, "TLS 1.3 (draft 17)", 19); + break; + case TLS_VERSION_13_DRAFT16: + strlcat(buffer, "TLS 1.3 (draft 16)", 19); + break; + case TLS_VERSION_13_PRE_DRAFT16: + strlcat(buffer, "TLS 1.3 (draft <16)", 20); + break; + default: + snprintf(buffer, 7, "0x%04x", version); + break; + } +} + static void TlsDecodeHSCertificateErrSetEvent(SSLState *ssl_state, uint32_t err) { switch (err) { diff --git a/src/app-layer-ssl.h b/src/app-layer-ssl.h index 069c864679..468f445302 100644 --- a/src/app-layer-ssl.h +++ b/src/app-layer-ssl.h @@ -123,6 +123,9 @@ enum { /* SNI types */ #define SSL_SNI_TYPE_HOST_NAME 0 +/* Max string length of the TLS version string */ +#define SSL_VERSION_MAX_STRLEN 20 + /* SSL versions. We'll use a unified format for all, with the top byte * holding the major version and the lower byte the minor version */ enum { @@ -242,5 +245,6 @@ typedef struct SSLState_ { void RegisterSSLParsers(void); void SSLParserRegisterTests(void); void SSLSetEvent(SSLState *ssl_state, uint8_t event); +void SSLVersionToString(uint16_t, char *); #endif /* __APP_LAYER_SSL_H__ */ -- 2.47.2