diff options
Diffstat (limited to 'src/lib/libssl/ssl_ciph.c')
-rw-r--r-- | src/lib/libssl/ssl_ciph.c | 56 |
1 files changed, 26 insertions, 30 deletions
diff --git a/src/lib/libssl/ssl_ciph.c b/src/lib/libssl/ssl_ciph.c index 7c32354902..dce141101d 100644 --- a/src/lib/libssl/ssl_ciph.c +++ b/src/lib/libssl/ssl_ciph.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_ciph.c,v 1.145 2024/07/20 04:04:23 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_ciph.c,v 1.146 2024/07/22 14:47: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 | * |
@@ -373,21 +373,18 @@ static const SSL_CIPHER cipher_aliases[] = { | |||
373 | /* cipher suite aliases */ | 373 | /* cipher suite aliases */ |
374 | #ifdef LIBRESSL_HAS_TLS1_3 | 374 | #ifdef LIBRESSL_HAS_TLS1_3 |
375 | { | 375 | { |
376 | .valid = 1, | 376 | .value = 0x1301, |
377 | .name = "TLS_AES_128_GCM_SHA256", | 377 | .name = "TLS_AES_128_GCM_SHA256", |
378 | .id = TLS1_3_CK_AES_128_GCM_SHA256, | ||
379 | .algorithm_ssl = SSL_TLSV1_3, | 378 | .algorithm_ssl = SSL_TLSV1_3, |
380 | }, | 379 | }, |
381 | { | 380 | { |
382 | .valid = 1, | 381 | .value = 0x1302, |
383 | .name = "TLS_AES_256_GCM_SHA384", | 382 | .name = "TLS_AES_256_GCM_SHA384", |
384 | .id = TLS1_3_CK_AES_256_GCM_SHA384, | ||
385 | .algorithm_ssl = SSL_TLSV1_3, | 383 | .algorithm_ssl = SSL_TLSV1_3, |
386 | }, | 384 | }, |
387 | { | 385 | { |
388 | .valid = 1, | 386 | .value = 0x1303, |
389 | .name = "TLS_CHACHA20_POLY1305_SHA256", | 387 | .name = "TLS_CHACHA20_POLY1305_SHA256", |
390 | .id = TLS1_3_CK_CHACHA20_POLY1305_SHA256, | ||
391 | .algorithm_ssl = SSL_TLSV1_3, | 388 | .algorithm_ssl = SSL_TLSV1_3, |
392 | }, | 389 | }, |
393 | #endif | 390 | #endif |
@@ -619,7 +616,7 @@ ssl_cipher_collect_ciphers(const SSL_METHOD *ssl_method, int num_of_ciphers, | |||
619 | * Drop any invalid ciphers and any which use unavailable | 616 | * Drop any invalid ciphers and any which use unavailable |
620 | * algorithms. | 617 | * algorithms. |
621 | */ | 618 | */ |
622 | if ((c != NULL) && c->valid && | 619 | if ((c != NULL) && |
623 | !(c->algorithm_mkey & disabled_mkey) && | 620 | !(c->algorithm_mkey & disabled_mkey) && |
624 | !(c->algorithm_auth & disabled_auth) && | 621 | !(c->algorithm_auth & disabled_auth) && |
625 | !(c->algorithm_enc & disabled_enc) && | 622 | !(c->algorithm_enc & disabled_enc) && |
@@ -725,7 +722,7 @@ ssl_cipher_collect_aliases(const SSL_CIPHER **ca_list, int num_of_group_aliases, | |||
725 | } | 722 | } |
726 | 723 | ||
727 | static void | 724 | static void |
728 | ssl_cipher_apply_rule(unsigned long cipher_id, unsigned long alg_mkey, | 725 | ssl_cipher_apply_rule(uint16_t cipher_value, unsigned long alg_mkey, |
729 | unsigned long alg_auth, unsigned long alg_enc, unsigned long alg_mac, | 726 | unsigned long alg_auth, unsigned long alg_enc, unsigned long alg_mac, |
730 | unsigned long alg_ssl, unsigned long algo_strength, int rule, | 727 | unsigned long alg_ssl, unsigned long algo_strength, int rule, |
731 | int strength_bits, CIPHER_ORDER **head_p, CIPHER_ORDER **tail_p) | 728 | int strength_bits, CIPHER_ORDER **head_p, CIPHER_ORDER **tail_p) |
@@ -757,7 +754,7 @@ ssl_cipher_apply_rule(unsigned long cipher_id, unsigned long alg_mkey, | |||
757 | 754 | ||
758 | cp = curr->cipher; | 755 | cp = curr->cipher; |
759 | 756 | ||
760 | if (cipher_id && cp->id != cipher_id) | 757 | if (cipher_value != 0 && cp->value != cipher_value) |
761 | continue; | 758 | continue; |
762 | 759 | ||
763 | /* | 760 | /* |
@@ -882,7 +879,7 @@ ssl_cipher_process_rulestr(const char *rule_str, CIPHER_ORDER **head_p, | |||
882 | unsigned long alg_mkey, alg_auth, alg_enc, alg_mac, alg_ssl; | 879 | unsigned long alg_mkey, alg_auth, alg_enc, alg_mac, alg_ssl; |
883 | unsigned long algo_strength; | 880 | unsigned long algo_strength; |
884 | int j, multi, found, rule, retval, ok, buflen; | 881 | int j, multi, found, rule, retval, ok, buflen; |
885 | unsigned long cipher_id = 0; | 882 | uint16_t cipher_value = 0; |
886 | const char *l, *buf; | 883 | const char *l, *buf; |
887 | char ch; | 884 | char ch; |
888 | 885 | ||
@@ -974,7 +971,7 @@ ssl_cipher_process_rulestr(const char *rule_str, CIPHER_ORDER **head_p, | |||
974 | * '\0' terminated.) | 971 | * '\0' terminated.) |
975 | */ | 972 | */ |
976 | j = found = 0; | 973 | j = found = 0; |
977 | cipher_id = 0; | 974 | cipher_value = 0; |
978 | while (ca_list[j]) { | 975 | while (ca_list[j]) { |
979 | if (!strncmp(buf, ca_list[j]->name, buflen) && | 976 | if (!strncmp(buf, ca_list[j]->name, buflen) && |
980 | (ca_list[j]->name[buflen] == '\0')) { | 977 | (ca_list[j]->name[buflen] == '\0')) { |
@@ -1047,13 +1044,13 @@ ssl_cipher_process_rulestr(const char *rule_str, CIPHER_ORDER **head_p, | |||
1047 | SSL_STRONG_MASK; | 1044 | SSL_STRONG_MASK; |
1048 | } | 1045 | } |
1049 | 1046 | ||
1050 | if (ca_list[j]->valid) { | 1047 | if (ca_list[j]->value != 0) { |
1051 | /* | 1048 | /* |
1052 | * explicit ciphersuite found; its protocol | 1049 | * explicit ciphersuite found; its protocol |
1053 | * version does not become part of the search | 1050 | * version does not become part of the search |
1054 | * pattern! | 1051 | * pattern! |
1055 | */ | 1052 | */ |
1056 | cipher_id = ca_list[j]->id; | 1053 | cipher_value = ca_list[j]->value; |
1057 | if (ca_list[j]->algorithm_ssl == SSL_TLSV1_3) | 1054 | if (ca_list[j]->algorithm_ssl == SSL_TLSV1_3) |
1058 | *tls13_seen = 1; | 1055 | *tls13_seen = 1; |
1059 | } else { | 1056 | } else { |
@@ -1109,7 +1106,7 @@ ssl_cipher_process_rulestr(const char *rule_str, CIPHER_ORDER **head_p, | |||
1109 | } else if (found) { | 1106 | } else if (found) { |
1110 | if (alg_ssl == SSL_TLSV1_3) | 1107 | if (alg_ssl == SSL_TLSV1_3) |
1111 | *tls13_seen = 1; | 1108 | *tls13_seen = 1; |
1112 | ssl_cipher_apply_rule(cipher_id, alg_mkey, alg_auth, | 1109 | ssl_cipher_apply_rule(cipher_value, alg_mkey, alg_auth, |
1113 | alg_enc, alg_mac, alg_ssl, algo_strength, rule, | 1110 | alg_enc, alg_mac, alg_ssl, algo_strength, rule, |
1114 | -1, head_p, tail_p); | 1111 | -1, head_p, tail_p); |
1115 | } else { | 1112 | } else { |
@@ -1470,24 +1467,23 @@ SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int len) | |||
1470 | LSSL_ALIAS(SSL_CIPHER_description); | 1467 | LSSL_ALIAS(SSL_CIPHER_description); |
1471 | 1468 | ||
1472 | const char * | 1469 | const char * |
1473 | SSL_CIPHER_get_version(const SSL_CIPHER *c) | 1470 | SSL_CIPHER_get_version(const SSL_CIPHER *cipher) |
1474 | { | 1471 | { |
1475 | if (c == NULL) | 1472 | if (cipher == NULL) |
1476 | return("(NONE)"); | 1473 | return "(NONE)"; |
1477 | if ((c->id >> 24) == 3) | 1474 | |
1478 | return("TLSv1/SSLv3"); | 1475 | return "TLSv1/SSLv3"; |
1479 | else | ||
1480 | return("unknown"); | ||
1481 | } | 1476 | } |
1482 | LSSL_ALIAS(SSL_CIPHER_get_version); | 1477 | LSSL_ALIAS(SSL_CIPHER_get_version); |
1483 | 1478 | ||
1484 | /* return the actual cipher being used */ | 1479 | /* return the actual cipher being used */ |
1485 | const char * | 1480 | const char * |
1486 | SSL_CIPHER_get_name(const SSL_CIPHER *c) | 1481 | SSL_CIPHER_get_name(const SSL_CIPHER *cipher) |
1487 | { | 1482 | { |
1488 | if (c != NULL) | 1483 | if (cipher == NULL) |
1489 | return (c->name); | 1484 | return "(NONE)"; |
1490 | return("(NONE)"); | 1485 | |
1486 | return cipher->name; | ||
1491 | } | 1487 | } |
1492 | LSSL_ALIAS(SSL_CIPHER_get_name); | 1488 | LSSL_ALIAS(SSL_CIPHER_get_name); |
1493 | 1489 | ||
@@ -1507,16 +1503,16 @@ SSL_CIPHER_get_bits(const SSL_CIPHER *c, int *alg_bits) | |||
1507 | LSSL_ALIAS(SSL_CIPHER_get_bits); | 1503 | LSSL_ALIAS(SSL_CIPHER_get_bits); |
1508 | 1504 | ||
1509 | unsigned long | 1505 | unsigned long |
1510 | SSL_CIPHER_get_id(const SSL_CIPHER *c) | 1506 | SSL_CIPHER_get_id(const SSL_CIPHER *cipher) |
1511 | { | 1507 | { |
1512 | return c->id; | 1508 | return SSL3_CK_ID | cipher->value; |
1513 | } | 1509 | } |
1514 | LSSL_ALIAS(SSL_CIPHER_get_id); | 1510 | LSSL_ALIAS(SSL_CIPHER_get_id); |
1515 | 1511 | ||
1516 | uint16_t | 1512 | uint16_t |
1517 | SSL_CIPHER_get_value(const SSL_CIPHER *c) | 1513 | SSL_CIPHER_get_value(const SSL_CIPHER *cipher) |
1518 | { | 1514 | { |
1519 | return ssl3_cipher_get_value(c); | 1515 | return cipher->value; |
1520 | } | 1516 | } |
1521 | LSSL_ALIAS(SSL_CIPHER_get_value); | 1517 | LSSL_ALIAS(SSL_CIPHER_get_value); |
1522 | 1518 | ||