=pod

=head1 NAME

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

=head1 SYNOPSIS

 #include <openssl/ssl.h>

 SSL_CIPHER *SSL_get_current_cipher(const SSL *ssl);
 SSL_CIPHER *SSL_get_pending_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.

SSL_get_pending_cipher() returns a pointer to an SSL_CIPHER object containing
the description of the cipher (if any) that has been negotiated for future use
on the connection established with the B<ssl> object, but is not yet in use.
This may be the case during handshake processing, when control flow can be
returned to the application via any of several callback methods.  The internal
sequencing of handshake processing and callback invocation is not guaranteed
to be stable from release to release, and at present only the callback set
by SSL_CTX_set_alpn_select_cb() is guaranteed to have a non-NULL return value.
Other callbacks may be added to this list over time.

=head1 RETURN VALUES

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

SSL_get_pending_cipher() returns the cipher to be used at the next change
of cipher suite, or NULL if no such cipher is known.

=head1 NOTES

SSL_get_cipher, SSL_get_cipher_bits, SSL_get_cipher_version, and
SSL_get_cipher_name are implemented as macros.

=head1 SEE ALSO

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

=head1 COPYRIGHT

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

Licensed under the Apache License 2.0 (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
