Submitted by: Peter Sylvester <peter.sylvester@edelweb.fr>
Localize client hello extension parsing in t1_lib.c (backport from HEAD)
This commit is contained in:
parent
e46c807e4f
commit
1d0c47fd55
3 changed files with 22 additions and 10 deletions
|
@ -1175,16 +1175,11 @@ int ssl3_get_client_hello(SSL *s)
|
||||||
/* TLS extensions*/
|
/* TLS extensions*/
|
||||||
if (s->version >= SSL3_VERSION)
|
if (s->version >= SSL3_VERSION)
|
||||||
{
|
{
|
||||||
if (!ssl_parse_clienthello_tlsext(s,&p,d,n, &al))
|
if (!ssl_parse_clienthello_tlsext(s,&p,d,n))
|
||||||
{
|
{
|
||||||
/* 'al' set by ssl_parse_clienthello_tlsext */
|
|
||||||
SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_PARSE_TLSEXT);
|
SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_PARSE_TLSEXT);
|
||||||
goto f_err;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (ssl_check_clienthello_tlsext(s) <= 0) {
|
|
||||||
SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_CLIENTHELLO_TLSEXT);
|
|
||||||
goto err;
|
goto err;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check if we want to use external pre-shared secret for this
|
/* Check if we want to use external pre-shared secret for this
|
||||||
|
|
|
@ -1122,7 +1122,7 @@ int tls1_shared_list(SSL *s,
|
||||||
int nmatch);
|
int nmatch);
|
||||||
unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *p, unsigned char *limit);
|
unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *p, unsigned char *limit);
|
||||||
unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *p, unsigned char *limit);
|
unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *p, unsigned char *limit);
|
||||||
int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **data, unsigned char *d, int n, int *al);
|
int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **data, unsigned char *d, int n);
|
||||||
int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **data, unsigned char *d, int n, int *al);
|
int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **data, unsigned char *d, int n, int *al);
|
||||||
int ssl_prepare_clienthello_tlsext(SSL *s);
|
int ssl_prepare_clienthello_tlsext(SSL *s);
|
||||||
int ssl_prepare_serverhello_tlsext(SSL *s);
|
int ssl_prepare_serverhello_tlsext(SSL *s);
|
||||||
|
|
19
ssl/t1_lib.c
19
ssl/t1_lib.c
|
@ -1175,7 +1175,7 @@ unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *p, unsigned cha
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, int n, int *al)
|
static int ssl_scan_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, int n, int *al)
|
||||||
{
|
{
|
||||||
unsigned short type;
|
unsigned short type;
|
||||||
unsigned short size;
|
unsigned short size;
|
||||||
|
@ -1669,6 +1669,23 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, in
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, int n)
|
||||||
|
{
|
||||||
|
int al = -1;
|
||||||
|
if (ssl_scan_clienthello_tlsext(s, p, d, n, &al) <= 0)
|
||||||
|
{
|
||||||
|
ssl3_send_alert(s,SSL3_AL_FATAL,al);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ssl_check_clienthello_tlsext(s) <= 0)
|
||||||
|
{
|
||||||
|
SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_CLIENTHELLO_TLSEXT);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_NEXTPROTONEG
|
#ifndef OPENSSL_NO_NEXTPROTONEG
|
||||||
/* ssl_next_proto_validate validates a Next Protocol Negotiation block. No
|
/* ssl_next_proto_validate validates a Next Protocol Negotiation block. No
|
||||||
* elements of zero length are allowed and the set of elements must exactly fill
|
* elements of zero length are allowed and the set of elements must exactly fill
|
||||||
|
|
Loading…
Reference in a new issue