=pod

=head1 NAME

SSL_get_current_cipher, SSL_get_cipher_name, SSL_get_cipher,
SSL_get_cipher_bits, SSL_get_cipher_version - get SSL_CIPHER of a connection

=head1 SYNOPSIS

 #include <openssl/ssl.h>

 SSL_CIPHER *SSL_get_current_cipher(const SSL *ssl);

 const char *SSL_get_cipher_name(const SSL *s);
 const char *SSL_get_cipher(const SSL *s);
 int SSL_get_cipher_bits(const SSL *s, int *np) \
 const char *SSL_get_cipher_version(const SSL *s);

=head1 DESCRIPTION

SSL_get_current_cipher() returns a pointer to an SSL_CIPHER object containing
the description of the actually used cipher of a connection established with
the B<ssl> object.
See L<SSL_CIPHER_get_name(3)> for more details.

SSL_get_cipher_name() obtains the
name of the currently used cipher.
SSL_get_cipher() is identical to SSL_get_cipher_name().
SSL_get_cipher_bits() is a
macro to obtain the number of secret/algorithm bits used and
SSL_get_cipher_version() returns the protocol name.

=head1 RETURN VALUES

SSL_get_current_cipher() returns the cipher actually used, or NULL if
no session has been established.

=head1 NOTES

These are implemented as macros.

=head1 SEE ALSO

L<ssl(7)>, L<SSL_CIPHER_get_name(3)>

=head1 COPYRIGHT

Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the OpenSSL license (the "License").  You may not use
this file except in compliance with the License.  You can obtain a copy
in the file LICENSE in the source distribution or at
L<https://www.openssl.org/source/license.html>.

=cut
