summaryrefslogtreecommitdiff
path: root/src/lib/libssl/s23_srvr.c
diff options
context:
space:
mode:
authordjm <>2012-10-13 21:25:14 +0000
committerdjm <>2012-10-13 21:25:14 +0000
commit93723b50b639d8dc717bc1bf463fd46e1b321239 (patch)
tree281e0a29ae8f87a8c47fbd4deaa1f3d48b8cc5c1 /src/lib/libssl/s23_srvr.c
parent65e72ac55a6405783db7a12d7e35a7561d46005b (diff)
downloadopenbsd-93723b50b639d8dc717bc1bf463fd46e1b321239.tar.gz
openbsd-93723b50b639d8dc717bc1bf463fd46e1b321239.tar.bz2
openbsd-93723b50b639d8dc717bc1bf463fd46e1b321239.zip
resolve conflicts
Diffstat (limited to 'src/lib/libssl/s23_srvr.c')
-rw-r--r--src/lib/libssl/s23_srvr.c52
1 files changed, 48 insertions, 4 deletions
diff --git a/src/lib/libssl/s23_srvr.c b/src/lib/libssl/s23_srvr.c
index 836dd1f1cf..4877849013 100644
--- a/src/lib/libssl/s23_srvr.c
+++ b/src/lib/libssl/s23_srvr.c
@@ -115,6 +115,9 @@
115#include <openssl/rand.h> 115#include <openssl/rand.h>
116#include <openssl/objects.h> 116#include <openssl/objects.h>
117#include <openssl/evp.h> 117#include <openssl/evp.h>
118#ifdef OPENSSL_FIPS
119#include <openssl/fips.h>
120#endif
118 121
119static const SSL_METHOD *ssl23_get_server_method(int ver); 122static const SSL_METHOD *ssl23_get_server_method(int ver);
120int ssl23_get_client_hello(SSL *s); 123int ssl23_get_client_hello(SSL *s);
@@ -128,6 +131,10 @@ static const SSL_METHOD *ssl23_get_server_method(int ver)
128 return(SSLv3_server_method()); 131 return(SSLv3_server_method());
129 else if (ver == TLS1_VERSION) 132 else if (ver == TLS1_VERSION)
130 return(TLSv1_server_method()); 133 return(TLSv1_server_method());
134 else if (ver == TLS1_1_VERSION)
135 return(TLSv1_1_server_method());
136 else if (ver == TLS1_2_VERSION)
137 return(TLSv1_2_server_method());
131 else 138 else
132 return(NULL); 139 return(NULL);
133 } 140 }
@@ -283,7 +290,20 @@ int ssl23_get_client_hello(SSL *s)
283 /* SSLv3/TLSv1 */ 290 /* SSLv3/TLSv1 */
284 if (p[4] >= TLS1_VERSION_MINOR) 291 if (p[4] >= TLS1_VERSION_MINOR)
285 { 292 {
286 if (!(s->options & SSL_OP_NO_TLSv1)) 293 if (p[4] >= TLS1_2_VERSION_MINOR &&
294 !(s->options & SSL_OP_NO_TLSv1_2))
295 {
296 s->version=TLS1_2_VERSION;
297 s->state=SSL23_ST_SR_CLNT_HELLO_B;
298 }
299 else if (p[4] >= TLS1_1_VERSION_MINOR &&
300 !(s->options & SSL_OP_NO_TLSv1_1))
301 {
302 s->version=TLS1_1_VERSION;
303 /* type=2; */ /* done later to survive restarts */
304 s->state=SSL23_ST_SR_CLNT_HELLO_B;
305 }
306 else if (!(s->options & SSL_OP_NO_TLSv1))
287 { 307 {
288 s->version=TLS1_VERSION; 308 s->version=TLS1_VERSION;
289 /* type=2; */ /* done later to survive restarts */ 309 /* type=2; */ /* done later to survive restarts */
@@ -350,7 +370,19 @@ int ssl23_get_client_hello(SSL *s)
350 v[1]=p[10]; /* minor version according to client_version */ 370 v[1]=p[10]; /* minor version according to client_version */
351 if (v[1] >= TLS1_VERSION_MINOR) 371 if (v[1] >= TLS1_VERSION_MINOR)
352 { 372 {
353 if (!(s->options & SSL_OP_NO_TLSv1)) 373 if (v[1] >= TLS1_2_VERSION_MINOR &&
374 !(s->options & SSL_OP_NO_TLSv1_2))
375 {
376 s->version=TLS1_2_VERSION;
377 type=3;
378 }
379 else if (v[1] >= TLS1_1_VERSION_MINOR &&
380 !(s->options & SSL_OP_NO_TLSv1_1))
381 {
382 s->version=TLS1_1_VERSION;
383 type=3;
384 }
385 else if (!(s->options & SSL_OP_NO_TLSv1))
354 { 386 {
355 s->version=TLS1_VERSION; 387 s->version=TLS1_VERSION;
356 type=3; 388 type=3;
@@ -393,6 +425,15 @@ int ssl23_get_client_hello(SSL *s)
393 } 425 }
394 } 426 }
395 427
428#ifdef OPENSSL_FIPS
429 if (FIPS_mode() && (s->version < TLS1_VERSION))
430 {
431 SSLerr(SSL_F_SSL23_GET_CLIENT_HELLO,
432 SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE);
433 goto err;
434 }
435#endif
436
396 if (s->state == SSL23_ST_SR_CLNT_HELLO_B) 437 if (s->state == SSL23_ST_SR_CLNT_HELLO_B)
397 { 438 {
398 /* we have SSLv3/TLSv1 in an SSLv2 header 439 /* we have SSLv3/TLSv1 in an SSLv2 header
@@ -567,8 +608,11 @@ int ssl23_get_client_hello(SSL *s)
567 s->s3->rbuf.left=0; 608 s->s3->rbuf.left=0;
568 s->s3->rbuf.offset=0; 609 s->s3->rbuf.offset=0;
569 } 610 }
570 611 if (s->version == TLS1_2_VERSION)
571 if (s->version == TLS1_VERSION) 612 s->method = TLSv1_2_server_method();
613 else if (s->version == TLS1_1_VERSION)
614 s->method = TLSv1_1_server_method();
615 else if (s->version == TLS1_VERSION)
572 s->method = TLSv1_server_method(); 616 s->method = TLSv1_server_method();
573 else 617 else
574 s->method = SSLv3_server_method(); 618 s->method = SSLv3_server_method();