diff options
Diffstat (limited to 'src/lib/libssl/ssl_lib.c')
| -rw-r--r-- | src/lib/libssl/ssl_lib.c | 36 |
1 files changed, 33 insertions, 3 deletions
diff --git a/src/lib/libssl/ssl_lib.c b/src/lib/libssl/ssl_lib.c index 11f46161a9..a4ca1afb1d 100644 --- a/src/lib/libssl/ssl_lib.c +++ b/src/lib/libssl/ssl_lib.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ssl_lib.c,v 1.123 2016/12/30 16:57:01 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_lib.c,v 1.124 2017/01/03 16:57:15 jsing Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -2516,14 +2516,44 @@ ssl_enabled_version_range(SSL *s, uint16_t *min_ver, uint16_t *max_ver) | |||
| 2516 | 2516 | ||
| 2517 | /* Everything has been disabled... */ | 2517 | /* Everything has been disabled... */ |
| 2518 | if (min_version == 0 || max_version == 0) | 2518 | if (min_version == 0 || max_version == 0) |
| 2519 | return -1; | 2519 | return 0; |
| 2520 | 2520 | ||
| 2521 | if (min_ver != NULL) | 2521 | if (min_ver != NULL) |
| 2522 | *min_ver = min_version; | 2522 | *min_ver = min_version; |
| 2523 | if (max_ver != NULL) | 2523 | if (max_ver != NULL) |
| 2524 | *max_ver = max_version; | 2524 | *max_ver = max_version; |
| 2525 | 2525 | ||
| 2526 | return 0; | 2526 | return 1; |
| 2527 | } | ||
| 2528 | |||
| 2529 | int | ||
| 2530 | ssl_max_shared_version(SSL *s, uint16_t peer_ver, uint16_t *max_ver) | ||
| 2531 | { | ||
| 2532 | uint16_t min_version, max_version, shared_version; | ||
| 2533 | |||
| 2534 | *max_ver = 0; | ||
| 2535 | |||
| 2536 | if (peer_ver >= TLS1_2_VERSION) | ||
| 2537 | shared_version = TLS1_2_VERSION; | ||
| 2538 | else if (peer_ver >= TLS1_1_VERSION) | ||
| 2539 | shared_version = TLS1_1_VERSION; | ||
| 2540 | else if (peer_ver >= TLS1_VERSION) | ||
| 2541 | shared_version = TLS1_VERSION; | ||
| 2542 | else | ||
| 2543 | return 0; | ||
| 2544 | |||
| 2545 | if (!ssl_enabled_version_range(s, &min_version, &max_version)) | ||
| 2546 | return 0; | ||
| 2547 | |||
| 2548 | if (shared_version < min_version) | ||
| 2549 | return 0; | ||
| 2550 | |||
| 2551 | if (shared_version > max_version) | ||
| 2552 | shared_version = max_version; | ||
| 2553 | |||
| 2554 | *max_ver = shared_version; | ||
| 2555 | |||
| 2556 | return 1; | ||
| 2527 | } | 2557 | } |
| 2528 | 2558 | ||
| 2529 | uint16_t | 2559 | uint16_t |
