tls: add function for decoding client_hello

Add function TLSDecodeHandshakeHello() to enable using the same code
for decoding both client_hello and server_hello.
pull/2284/head
Mats Klepsland 10 years ago committed by Victor Julien
parent 04da43d65d
commit 12da0e8681

@ -230,21 +230,14 @@ int SSLGetAlstateProgress(void *tx, uint8_t direction)
return TLS_STATE_IN_PROGRESS; return TLS_STATE_IN_PROGRESS;
} }
static int SSLv3ParseHandshakeType(SSLState *ssl_state, uint8_t *input, static int TLSDecodeHandshakeHello(SSLState *ssl_state, uint8_t *input,
uint32_t input_len) uint32_t input_len)
{ {
void *ptmp;
uint8_t *initial_input = input; uint8_t *initial_input = input;
uint32_t parsed = 0;
int rc;
if (input_len == 0) { /* only parse the message if it is complete */
if (input_len < ssl_state->curr_connp->message_length || input_len < 40)
return 0; return 0;
}
switch (ssl_state->curr_connp->handshake_type) {
case SSLV3_HS_CLIENT_HELLO:
ssl_state->current_flags = SSL_AL_FLAG_STATE_CLIENT_HELLO;
/* skip version */ /* skip version */
input += SSLV3_CLIENT_HELLO_VERSION_LEN; input += SSLV3_CLIENT_HELLO_VERSION_LEN;
@ -352,8 +345,7 @@ static int SSLv3ParseHandshakeType(SSLState *ssl_state, uint8_t *input,
if (unlikely(ssl_state->curr_connp->sni == NULL)) if (unlikely(ssl_state->curr_connp->sni == NULL))
goto end; goto end;
memcpy(ssl_state->curr_connp->sni, input, memcpy(ssl_state->curr_connp->sni, input, sni_strlen - 1);
sni_strlen - 1);
ssl_state->curr_connp->sni[sni_strlen-1] = 0; ssl_state->curr_connp->sni[sni_strlen-1] = 0;
input += sni_len; input += sni_len;
@ -367,7 +359,32 @@ static int SSLv3ParseHandshakeType(SSLState *ssl_state, uint8_t *input,
} }
processed_len += ext_len + 4; processed_len += ext_len + 4;
} }
end: end:
return 0;
}
static int SSLv3ParseHandshakeType(SSLState *ssl_state, uint8_t *input,
uint32_t input_len)
{
void *ptmp;
uint8_t *initial_input = input;
uint32_t parsed = 0;
int rc;
if (input_len == 0) {
return 0;
}
switch (ssl_state->curr_connp->handshake_type) {
case SSLV3_HS_CLIENT_HELLO:
ssl_state->current_flags = SSL_AL_FLAG_STATE_CLIENT_HELLO;
rc = TLSDecodeHandshakeHello(ssl_state, input, input_len);
if (rc < 0)
return rc;
break; break;
case SSLV3_HS_SERVER_HELLO: case SSLV3_HS_SERVER_HELLO:

Loading…
Cancel
Save