diff options
author | miod <> | 2014-04-13 15:16:40 +0000 |
---|---|---|
committer | miod <> | 2014-04-13 15:16:40 +0000 |
commit | 52628ee3f51f011b463aaedb1a28aa0524b43cb3 (patch) | |
tree | 4bd2adeac981051908ec5756401424bbb4e57d6a /src/lib/libssl/s3_srvr.c | |
parent | 40c22d3625a3818690c889ed6216fedf2be522c9 (diff) | |
download | openbsd-52628ee3f51f011b463aaedb1a28aa0524b43cb3.tar.gz openbsd-52628ee3f51f011b463aaedb1a28aa0524b43cb3.tar.bz2 openbsd-52628ee3f51f011b463aaedb1a28aa0524b43cb3.zip |
Import OpenSSL 1.0.1g
Diffstat (limited to 'src/lib/libssl/s3_srvr.c')
-rw-r--r-- | src/lib/libssl/s3_srvr.c | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/src/lib/libssl/s3_srvr.c b/src/lib/libssl/s3_srvr.c index 118939fabb..9ac19c05f2 100644 --- a/src/lib/libssl/s3_srvr.c +++ b/src/lib/libssl/s3_srvr.c | |||
@@ -191,7 +191,8 @@ static int ssl_check_srp_ext_ClientHello(SSL *s, int *al) | |||
191 | { | 191 | { |
192 | if(s->srp_ctx.login == NULL) | 192 | if(s->srp_ctx.login == NULL) |
193 | { | 193 | { |
194 | /* There isn't any srp login extension !!! */ | 194 | /* RFC 5054 says SHOULD reject, |
195 | we do so if There is no srp login name */ | ||
195 | ret = SSL3_AL_FATAL; | 196 | ret = SSL3_AL_FATAL; |
196 | *al = SSL_AD_UNKNOWN_PSK_IDENTITY; | 197 | *al = SSL_AD_UNKNOWN_PSK_IDENTITY; |
197 | } | 198 | } |
@@ -378,6 +379,7 @@ int ssl3_accept(SSL *s) | |||
378 | } | 379 | } |
379 | } | 380 | } |
380 | #endif | 381 | #endif |
382 | |||
381 | s->renegotiate = 2; | 383 | s->renegotiate = 2; |
382 | s->state=SSL3_ST_SW_SRVR_HELLO_A; | 384 | s->state=SSL3_ST_SW_SRVR_HELLO_A; |
383 | s->init_num=0; | 385 | s->init_num=0; |
@@ -956,7 +958,8 @@ int ssl3_get_client_hello(SSL *s) | |||
956 | (s->version != DTLS1_VERSION && s->client_version < s->version)) | 958 | (s->version != DTLS1_VERSION && s->client_version < s->version)) |
957 | { | 959 | { |
958 | SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_WRONG_VERSION_NUMBER); | 960 | SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_WRONG_VERSION_NUMBER); |
959 | if ((s->client_version>>8) == SSL3_VERSION_MAJOR) | 961 | if ((s->client_version>>8) == SSL3_VERSION_MAJOR && |
962 | !s->enc_write_ctx && !s->write_hash) | ||
960 | { | 963 | { |
961 | /* similar to ssl3_get_record, send alert using remote version number */ | 964 | /* similar to ssl3_get_record, send alert using remote version number */ |
962 | s->version = s->client_version; | 965 | s->version = s->client_version; |
@@ -1181,7 +1184,7 @@ int ssl3_get_client_hello(SSL *s) | |||
1181 | goto f_err; | 1184 | goto f_err; |
1182 | } | 1185 | } |
1183 | } | 1186 | } |
1184 | if (ssl_check_clienthello_tlsext(s) <= 0) { | 1187 | if (ssl_check_clienthello_tlsext_early(s) <= 0) { |
1185 | SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_CLIENTHELLO_TLSEXT); | 1188 | SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_CLIENTHELLO_TLSEXT); |
1186 | goto err; | 1189 | goto err; |
1187 | } | 1190 | } |
@@ -1191,12 +1194,9 @@ int ssl3_get_client_hello(SSL *s) | |||
1191 | * server_random before calling tls_session_secret_cb in order to allow | 1194 | * server_random before calling tls_session_secret_cb in order to allow |
1192 | * SessionTicket processing to use it in key derivation. */ | 1195 | * SessionTicket processing to use it in key derivation. */ |
1193 | { | 1196 | { |
1194 | unsigned long Time; | ||
1195 | unsigned char *pos; | 1197 | unsigned char *pos; |
1196 | Time=(unsigned long)time(NULL); /* Time */ | ||
1197 | pos=s->s3->server_random; | 1198 | pos=s->s3->server_random; |
1198 | l2n(Time,pos); | 1199 | if (ssl_fill_hello_random(s, 1, pos, SSL3_RANDOM_SIZE) <= 0) |
1199 | if (RAND_pseudo_bytes(pos,SSL3_RANDOM_SIZE-4) <= 0) | ||
1200 | { | 1200 | { |
1201 | al=SSL_AD_INTERNAL_ERROR; | 1201 | al=SSL_AD_INTERNAL_ERROR; |
1202 | goto f_err; | 1202 | goto f_err; |
@@ -1389,7 +1389,10 @@ int ssl3_get_client_hello(SSL *s) | |||
1389 | if (TLS1_get_version(s) < TLS1_2_VERSION || !(s->verify_mode & SSL_VERIFY_PEER)) | 1389 | if (TLS1_get_version(s) < TLS1_2_VERSION || !(s->verify_mode & SSL_VERIFY_PEER)) |
1390 | { | 1390 | { |
1391 | if (!ssl3_digest_cached_records(s)) | 1391 | if (!ssl3_digest_cached_records(s)) |
1392 | { | ||
1393 | al = SSL_AD_INTERNAL_ERROR; | ||
1392 | goto f_err; | 1394 | goto f_err; |
1395 | } | ||
1393 | } | 1396 | } |
1394 | 1397 | ||
1395 | /* we now have the following setup. | 1398 | /* we now have the following setup. |
@@ -1403,6 +1406,16 @@ int ssl3_get_client_hello(SSL *s) | |||
1403 | * s->tmp.new_cipher - the new cipher to use. | 1406 | * s->tmp.new_cipher - the new cipher to use. |
1404 | */ | 1407 | */ |
1405 | 1408 | ||
1409 | /* Handles TLS extensions that we couldn't check earlier */ | ||
1410 | if (s->version >= SSL3_VERSION) | ||
1411 | { | ||
1412 | if (ssl_check_clienthello_tlsext_late(s) <= 0) | ||
1413 | { | ||
1414 | SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_CLIENTHELLO_TLSEXT); | ||
1415 | goto err; | ||
1416 | } | ||
1417 | } | ||
1418 | |||
1406 | if (ret < 0) ret=1; | 1419 | if (ret < 0) ret=1; |
1407 | if (0) | 1420 | if (0) |
1408 | { | 1421 | { |
@@ -1420,19 +1433,13 @@ int ssl3_send_server_hello(SSL *s) | |||
1420 | unsigned char *p,*d; | 1433 | unsigned char *p,*d; |
1421 | int i,sl; | 1434 | int i,sl; |
1422 | unsigned long l; | 1435 | unsigned long l; |
1423 | #ifdef OPENSSL_NO_TLSEXT | ||
1424 | unsigned long Time; | ||
1425 | #endif | ||
1426 | 1436 | ||
1427 | if (s->state == SSL3_ST_SW_SRVR_HELLO_A) | 1437 | if (s->state == SSL3_ST_SW_SRVR_HELLO_A) |
1428 | { | 1438 | { |
1429 | buf=(unsigned char *)s->init_buf->data; | 1439 | buf=(unsigned char *)s->init_buf->data; |
1430 | #ifdef OPENSSL_NO_TLSEXT | 1440 | #ifdef OPENSSL_NO_TLSEXT |
1431 | p=s->s3->server_random; | 1441 | p=s->s3->server_random; |
1432 | /* Generate server_random if it was not needed previously */ | 1442 | if (ssl_fill_hello_random(s, 1, p, SSL3_RANDOM_SIZE) <= 0) |
1433 | Time=(unsigned long)time(NULL); /* Time */ | ||
1434 | l2n(Time,p); | ||
1435 | if (RAND_pseudo_bytes(p,SSL3_RANDOM_SIZE-4) <= 0) | ||
1436 | return -1; | 1443 | return -1; |
1437 | #endif | 1444 | #endif |
1438 | /* Do the message type and length last */ | 1445 | /* Do the message type and length last */ |
@@ -1823,7 +1830,7 @@ int ssl3_send_server_key_exchange(SSL *s) | |||
1823 | SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE); | 1830 | SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE); |
1824 | goto f_err; | 1831 | goto f_err; |
1825 | } | 1832 | } |
1826 | for (i=0; r[i] != NULL && i<4; i++) | 1833 | for (i=0; i < 4 && r[i] != NULL; i++) |
1827 | { | 1834 | { |
1828 | nr[i]=BN_num_bytes(r[i]); | 1835 | nr[i]=BN_num_bytes(r[i]); |
1829 | #ifndef OPENSSL_NO_SRP | 1836 | #ifndef OPENSSL_NO_SRP |
@@ -1859,7 +1866,7 @@ int ssl3_send_server_key_exchange(SSL *s) | |||
1859 | d=(unsigned char *)s->init_buf->data; | 1866 | d=(unsigned char *)s->init_buf->data; |
1860 | p= &(d[4]); | 1867 | p= &(d[4]); |
1861 | 1868 | ||
1862 | for (i=0; r[i] != NULL && i<4; i++) | 1869 | for (i=0; i < 4 && r[i] != NULL; i++) |
1863 | { | 1870 | { |
1864 | #ifndef OPENSSL_NO_SRP | 1871 | #ifndef OPENSSL_NO_SRP |
1865 | if ((i == 2) && (type & SSL_kSRP)) | 1872 | if ((i == 2) && (type & SSL_kSRP)) |