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;
}
static int SSLv3ParseHandshakeType(SSLState *ssl_state, uint8_t *input,
static int TLSDecodeHandshakeHello(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) {
/* only parse the message if it is complete */
if (input_len < ssl_state->curr_connp->message_length || input_len < 40)
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 */
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))
goto end;
memcpy(ssl_state->curr_connp->sni, input,
sni_strlen - 1);
memcpy(ssl_state->curr_connp->sni, input, sni_strlen - 1);
ssl_state->curr_connp->sni[sni_strlen-1] = 0;
input += sni_len;
@ -367,7 +359,32 @@ static int SSLv3ParseHandshakeType(SSLState *ssl_state, uint8_t *input,
}
processed_len += ext_len + 4;
}
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;
case SSLV3_HS_SERVER_HELLO:

Loading…
Cancel
Save