diff --git a/include/openssl/base.h b/include/openssl/base.h index 3f47521d..86211bc5 100644 --- a/include/openssl/base.h +++ b/include/openssl/base.h @@ -141,7 +141,7 @@ extern "C" { * A consumer may use this symbol in the preprocessor to temporarily build * against multiple revisions of BoringSSL at the same time. It is not * recommended to do so for longer than is necessary. */ -#define BORINGSSL_API_VERSION 2 +#define BORINGSSL_API_VERSION 3 #if defined(BORINGSSL_SHARED_LIBRARY) diff --git a/include/openssl/ssl.h b/include/openssl/ssl.h index 2d72fec0..6b390969 100644 --- a/include/openssl/ssl.h +++ b/include/openssl/ssl.h @@ -1366,6 +1366,10 @@ OPENSSL_EXPORT int SSL_set_strict_cipher_list(SSL *ssl, const char *str); * inputs, unless an empty cipher list results. */ OPENSSL_EXPORT int SSL_set_cipher_list(SSL *ssl, const char *str); +/* SSL_CTX_get_ciphers returns the cipher list for |ctx|, in order of + * preference. */ +OPENSSL_EXPORT STACK_OF(SSL_CIPHER) *SSL_CTX_get_ciphers(const SSL_CTX *ctx); + /* SSL_get_ciphers returns the cipher list for |ssl|, in order of preference. */ OPENSSL_EXPORT STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *ssl); diff --git a/ssl/ssl_lib.c b/ssl/ssl_lib.c index 93d84f49..7ead5545 100644 --- a/ssl/ssl_lib.c +++ b/ssl/ssl_lib.c @@ -1455,6 +1455,10 @@ int SSL_set_tmp_dh(SSL *ssl, const DH *dh) { return 1; } +OPENSSL_EXPORT STACK_OF(SSL_CIPHER) *SSL_CTX_get_ciphers(const SSL_CTX *ctx) { + return ctx->cipher_list->ciphers; +} + STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *ssl) { if (ssl == NULL) { return NULL; @@ -1470,19 +1474,16 @@ STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *ssl) { } const char *SSL_get_cipher_list(const SSL *ssl, int n) { - const SSL_CIPHER *c; - STACK_OF(SSL_CIPHER) *sk; - if (ssl == NULL) { return NULL; } - sk = SSL_get_ciphers(ssl); + STACK_OF(SSL_CIPHER) *sk = SSL_get_ciphers(ssl); if (sk == NULL || n < 0 || (size_t)n >= sk_SSL_CIPHER_num(sk)) { return NULL; } - c = sk_SSL_CIPHER_value(sk, n); + const SSL_CIPHER *c = sk_SSL_CIPHER_value(sk, n); if (c == NULL) { return NULL; }