summaryrefslogtreecommitdiff
path: root/src/lib/libssl/ssl_lib.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/ssl_lib.c')
-rw-r--r--src/lib/libssl/ssl_lib.c43
1 files changed, 42 insertions, 1 deletions
diff --git a/src/lib/libssl/ssl_lib.c b/src/lib/libssl/ssl_lib.c
index c593e7b42b..d933acb32d 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.161 2017/05/07 04:22:24 beck Exp $ */ 1/* $OpenBSD: ssl_lib.c,v 1.162 2017/08/09 22:24:25 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 *
@@ -1259,6 +1259,33 @@ ssl_get_ciphers_by_id(SSL *s)
1259 return (NULL); 1259 return (NULL);
1260} 1260}
1261 1261
1262/* See if we have any ECC cipher suites. */
1263int
1264ssl_has_ecc_ciphers(SSL *s)
1265{
1266 STACK_OF(SSL_CIPHER) *ciphers;
1267 unsigned long alg_k, alg_a;
1268 SSL_CIPHER *cipher;
1269 int i;
1270
1271 if (s->version == DTLS1_VERSION)
1272 return 0;
1273 if ((ciphers = SSL_get_ciphers(s)) == NULL)
1274 return 0;
1275
1276 for (i = 0; i < sk_SSL_CIPHER_num(ciphers); i++) {
1277 cipher = sk_SSL_CIPHER_value(ciphers, i);
1278
1279 alg_k = cipher->algorithm_mkey;
1280 alg_a = cipher->algorithm_auth;
1281
1282 if ((alg_k & SSL_kECDHE) || (alg_a & SSL_aECDSA))
1283 return 1;
1284 }
1285
1286 return 0;
1287}
1288
1262/* The old interface to get the same thing as SSL_get_ciphers(). */ 1289/* The old interface to get the same thing as SSL_get_ciphers(). */
1263const char * 1290const char *
1264SSL_get_cipher_list(const SSL *s, int n) 1291SSL_get_cipher_list(const SSL *s, int n)
@@ -2085,6 +2112,20 @@ ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher)
2085 c->valid = 1; 2112 c->valid = 1;
2086} 2113}
2087 2114
2115/* See if this handshake is using an ECC cipher suite. */
2116int
2117ssl_using_ecc_cipher(SSL *s)
2118{
2119 unsigned long alg_a, alg_k;
2120
2121 alg_a = S3I(s)->hs.new_cipher->algorithm_auth;
2122 alg_k = S3I(s)->hs.new_cipher->algorithm_mkey;
2123
2124 return SSI(s)->tlsext_ecpointformatlist != NULL &&
2125 SSI(s)->tlsext_ecpointformatlist_length > 0 &&
2126 ((alg_k & SSL_kECDHE) || (alg_a & SSL_aECDSA));
2127}
2128
2088int 2129int
2089ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s) 2130ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s)
2090{ 2131{