
=pod

=head1 NAME

SSL - OpenSSL SSL/TLS library

=head1 SYNOPSIS

=head1 DESCRIPTION

The OpenSSL B<ssl> library implements the Secure Sockets Layer (SSL v2/v3) and
Transport Layer Security (TLS v1) protocols. It provides a rich API which is
documented here.

At first the library must be initialized; see
L<SSL_library_init(3)|SSL_library_init(3)>.

Then an B<SSL_CTX> object is created as a framework to establish
TLS/SSL enabled connections (see L<SSL_CTX_new(3)|SSL_CTX_new(3)>).
Various options regarding certificates, algorithms etc. can be set
in this object.

When a network connection has been created, it can be assigned to an
B<SSL> object. After the B<SSL> object has been created using
L<SSL_new(3)|SSL_new(3)>, L<SSL_set_fd(3)|SSL_set_fd(3)> or
L<SSL_set_bio(3)|SSL_set_bio(3)> can be used to associate the network
connection with the object.

Then the TLS/SSL handshake is performed using
L<SSL_accept(3)|SSL_accept(3)> or L<SSL_connect(3)|SSL_connect(3)>
respectively.
L<SSL_read(3)|SSL_read(3)> and L<SSL_write(3)|SSL_write(3)> are used
to read and write data on the TLS/SSL connection.
L<SSL_shutdown(3)|SSL_shutdown(3)> can be used to shut down the
TLS/SSL connection.

=head1 DATA STRUCTURES

Currently the OpenSSL B<ssl> library functions deals with the following data
structures:

=over 4

=item B<SSL_METHOD> (SSL Method)

That's a dispatch structure describing the internal B<ssl> library
methods/functions which implement the various protocol versions (SSLv1, SSLv2
and TLSv1). It's needed to create an B<SSL_CTX>.

=item B<SSL_CIPHER> (SSL Cipher)

This structure holds the algorithm information for a particular cipher which
are a core part of the SSL/TLS protocol. The available ciphers are configured
on a B<SSL_CTX> basis and the actually used ones are then part of the
B<SSL_SESSION>.

=item B<SSL_CTX> (SSL Context)

That's the global context structure which is created by a server or client
once per program life-time and which holds mainly default values for the
B<SSL> structures which are later created for the connections.

=item B<SSL_SESSION> (SSL Session)

This is a structure containing the current TLS/SSL session details for a
connection: B<SSL_CIPHER>s, client and server certificates, keys, etc.

=item B<SSL> (SSL Connection)

That's the main SSL/TLS structure which is created by a server or client per
established connection. This actually is the core structure in the SSL API.
Under run-time the application usually deals with this structure which has
links to mostly all other structures.

=back


=head1 HEADER FILES

Currently the OpenSSL B<ssl> library provides the following C header files
containing the prototypes for the data structures and and functions:

=over 4

=item B<ssl.h>

That's the common header file for the SSL/TLS API.  Include it into your
program to make the API of the B<ssl> library available. It internally
includes both more private SSL headers and headers from the B<crypto> library.
Whenever you need hard-core details on the internals of the SSL API, look
inside this header file.

=item B<ssl2.h>

That's the sub header file dealing with the SSLv2 protocol only.
I<Usually you don't have to include it explicitly because
it's already included by ssl.h>.

=item B<ssl3.h>

That's the sub header file dealing with the SSLv3 protocol only.
I<Usually you don't have to include it explicitly because
it's already included by ssl.h>.

=item B<ssl23.h>

That's the sub header file dealing with the combined use of the SSLv2 and
SSLv3 protocols.
I<Usually you don't have to include it explicitly because
it's already included by ssl.h>.

=item B<tls1.h>

That's the sub header file dealing with the TLSv1 protocol only.
I<Usually you don't have to include it explicitly because
it's already included by ssl.h>.

=back

=head1 API FUNCTIONS

Currently the OpenSSL B<ssl> library exports 214 API functions.
They are documented in the following:

=head2 DEALING WITH PROTOCOL METHODS

Here we document the various API functions which deal with the SSL/TLS
protocol methods defined in B<SSL_METHOD> structures.

=over 4

=item const SSL_METHOD *B<SSLv2_client_method>(void);

Constructor for the SSLv2 SSL_METHOD structure for a dedicated client.

=item const SSL_METHOD *B<SSLv2_server_method>(void);

Constructor for the SSLv2 SSL_METHOD structure for a dedicated server.

=item const SSL_METHOD *B<SSLv2_method>(void);

Constructor for the SSLv2 SSL_METHOD structure for combined client and server.

=item const SSL_METHOD *B<SSLv3_client_method>(void);

Constructor for the SSLv3 SSL_METHOD structure for a dedicated client.

=item const SSL_METHOD *B<SSLv3_server_method>(void);

Constructor for the SSLv3 SSL_METHOD structure for a dedicated server.

=item const SSL_METHOD *B<SSLv3_method>(void);

Constructor for the SSLv3 SSL_METHOD structure for combined client and server.

=item const SSL_METHOD *B<TLSv1_client_method>(void);

Constructor for the TLSv1 SSL_METHOD structure for a dedicated client.

=item const SSL_METHOD *B<TLSv1_server_method>(void);

Constructor for the TLSv1 SSL_METHOD structure for a dedicated server.

=item const SSL_METHOD *B<TLSv1_method>(void);

Constructor for the TLSv1 SSL_METHOD structure for combined client and server.

=back

=head2 DEALING WITH CIPHERS

Here we document the various API functions which deal with the SSL/TLS
ciphers defined in B<SSL_CIPHER> structures.

=over 4

=item char *B<SSL_CIPHER_description>(SSL_CIPHER *cipher, char *buf, int len);

Write a string to I<buf> (with a maximum size of I<len>) containing a human
readable description of I<cipher>. Returns I<buf>.

=item int B<SSL_CIPHER_get_bits>(SSL_CIPHER *cipher, int *alg_bits);

Determine the number of bits in I<cipher>. Because of export crippled ciphers
there are two bits: The bits the algorithm supports in general (stored to
I<alg_bits>) and the bits which are actually used (the return value).

=item const char *B<SSL_CIPHER_get_name>(SSL_CIPHER *cipher);

Return the internal name of I<cipher> as a string. These are the various
strings defined by the I<SSL2_TXT_xxx>, I<SSL3_TXT_xxx> and I<TLS1_TXT_xxx>
definitions in the header files.

=item char *B<SSL_CIPHER_get_version>(SSL_CIPHER *cipher);

Returns a string like "C<TLSv1/SSLv3>" or "C<SSLv2>" which indicates the
SSL/TLS protocol version to which I<cipher> belongs (i.e. where it was defined
in the specification the first time).

=back

=head2 DEALING WITH PROTOCOL CONTEXTS

Here we document the various API functions which deal with the SSL/TLS
protocol context defined in the B<SSL_CTX> structure.

=over 4

=item int B<SSL_CTX_add_client_CA>(SSL_CTX *ctx, X509 *x);

=item long B<SSL_CTX_add_extra_chain_cert>(SSL_CTX *ctx, X509 *x509);

=item int B<SSL_CTX_add_session>(SSL_CTX *ctx, SSL_SESSION *c);

=item int B<SSL_CTX_check_private_key>(const SSL_CTX *ctx);

=item long B<SSL_CTX_ctrl>(SSL_CTX *ctx, int cmd, long larg, char *parg);

=item void B<SSL_CTX_flush_sessions>(SSL_CTX *s, long t);

=item void B<SSL_CTX_free>(SSL_CTX *a);

=item char *B<SSL_CTX_get_app_data>(SSL_CTX *ctx);

=item X509_STORE *B<SSL_CTX_get_cert_store>(SSL_CTX *ctx);

=item STACK *B<SSL_CTX_get_client_CA_list>(const SSL_CTX *ctx);

=item int (*B<SSL_CTX_get_client_cert_cb>(SSL_CTX *ctx))(SSL *ssl, X509 **x509, EVP_PKEY **pkey);

=item void B<SSL_CTX_get_default_read_ahead>(SSL_CTX *ctx);

=item char *B<SSL_CTX_get_ex_data>(const SSL_CTX *s, int idx);

=item int B<SSL_CTX_get_ex_new_index>(long argl, char *argp, int (*new_func);(void), int (*dup_func)(void), void (*free_func)(void))

=item void (*B<SSL_CTX_get_info_callback>(SSL_CTX *ctx))(SSL *ssl, int cb, int ret);

=item int B<SSL_CTX_get_quiet_shutdown>(const SSL_CTX *ctx);

=item void B<SSL_CTX_get_read_ahead>(SSL_CTX *ctx);

=item int B<SSL_CTX_get_session_cache_mode>(SSL_CTX *ctx);

=item long B<SSL_CTX_get_timeout>(const SSL_CTX *ctx);

=item int (*B<SSL_CTX_get_verify_callback>(const SSL_CTX *ctx))(int ok, X509_STORE_CTX *ctx);

=item int B<SSL_CTX_get_verify_mode>(SSL_CTX *ctx);

=item int B<SSL_CTX_load_verify_locations>(SSL_CTX *ctx, char *CAfile, char *CApath);

=item long B<SSL_CTX_need_tmp_RSA>(SSL_CTX *ctx);

=item SSL_CTX *B<SSL_CTX_new>(const SSL_METHOD *meth);

=item int B<SSL_CTX_remove_session>(SSL_CTX *ctx, SSL_SESSION *c);

=item int B<SSL_CTX_sess_accept>(SSL_CTX *ctx);

=item int B<SSL_CTX_sess_accept_good>(SSL_CTX *ctx);

=item int B<SSL_CTX_sess_accept_renegotiate>(SSL_CTX *ctx);

=item int B<SSL_CTX_sess_cache_full>(SSL_CTX *ctx);

=item int B<SSL_CTX_sess_cb_hits>(SSL_CTX *ctx);

=item int B<SSL_CTX_sess_connect>(SSL_CTX *ctx);

=item int B<SSL_CTX_sess_connect_good>(SSL_CTX *ctx);

=item int B<SSL_CTX_sess_connect_renegotiate>(SSL_CTX *ctx);

=item int B<SSL_CTX_sess_get_cache_size>(SSL_CTX *ctx);

=item SSL_SESSION *(*B<SSL_CTX_sess_get_get_cb>(SSL_CTX *ctx))(SSL *ssl, unsigned char *data, int len, int *copy);

=item int (*B<SSL_CTX_sess_get_new_cb>(SSL_CTX *ctx)(SSL *ssl, SSL_SESSION *sess);

=item void (*B<SSL_CTX_sess_get_remove_cb>(SSL_CTX *ctx)(SSL_CTX *ctx, SSL_SESSION *sess);

=item int B<SSL_CTX_sess_hits>(SSL_CTX *ctx);

=item int B<SSL_CTX_sess_misses>(SSL_CTX *ctx);

=item int B<SSL_CTX_sess_number>(SSL_CTX *ctx);

=item void B<SSL_CTX_sess_set_cache_size>(SSL_CTX *ctx,t);

=item void B<SSL_CTX_sess_set_get_cb>(SSL_CTX *ctx, SSL_SESSION *(*cb)(SSL *ssl, unsigned char *data, int len, int *copy));

=item void B<SSL_CTX_sess_set_new_cb>(SSL_CTX *ctx, int (*cb)(SSL *ssl, SSL_SESSION *sess));

=item void B<SSL_CTX_sess_set_remove_cb>(SSL_CTX *ctx, void (*cb)(SSL_CTX *ctx, SSL_SESSION *sess));

=item int B<SSL_CTX_sess_timeouts>(SSL_CTX *ctx);

=item LHASH *B<SSL_CTX_sessions>(SSL_CTX *ctx);

=item void B<SSL_CTX_set_app_data>(SSL_CTX *ctx, void *arg);

=item void B<SSL_CTX_set_cert_store>(SSL_CTX *ctx, X509_STORE *cs);

=item void B<SSL_CTX_set_cert_verify_cb>(SSL_CTX *ctx, int (*cb)(), char *arg)

=item int B<SSL_CTX_set_cipher_list>(SSL_CTX *ctx, char *str);

=item void B<SSL_CTX_set_client_CA_list>(SSL_CTX *ctx, STACK *list);

=item void B<SSL_CTX_set_client_cert_cb>(SSL_CTX *ctx, int (*cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey));

=item void B<SSL_CTX_set_default_passwd_cb>(SSL_CTX *ctx, int (*cb);(void))

=item void B<SSL_CTX_set_default_read_ahead>(SSL_CTX *ctx, int m);

=item int B<SSL_CTX_set_default_verify_paths>(SSL_CTX *ctx);

=item int B<SSL_CTX_set_ex_data>(SSL_CTX *s, int idx, char *arg);

=item void B<SSL_CTX_set_info_callback>(SSL_CTX *ctx, void (*cb)(SSL *ssl, int cb, int ret));

=item void B<SSL_CTX_set_msg_callback>(SSL_CTX *ctx, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg));

=item void B<SSL_CTX_set_msg_callback_arg>(SSL_CTX *ctx, void *arg);

=item void B<SSL_CTX_set_options>(SSL_CTX *ctx, unsigned long op);

=item void B<SSL_CTX_set_quiet_shutdown>(SSL_CTX *ctx, int mode);

=item void B<SSL_CTX_set_read_ahead>(SSL_CTX *ctx, int m);

=item void B<SSL_CTX_set_session_cache_mode>(SSL_CTX *ctx, int mode);

=item int B<SSL_CTX_set_ssl_version>(SSL_CTX *ctx, const SSL_METHOD *meth);

=item void B<SSL_CTX_set_timeout>(SSL_CTX *ctx, long t);

=item long B<SSL_CTX_set_tmp_dh>(SSL_CTX* ctx, DH *dh);

=item long B<SSL_CTX_set_tmp_dh_callback>(SSL_CTX *ctx, DH *(*cb)(void));

=item long B<SSL_CTX_set_tmp_rsa>(SSL_CTX *ctx, RSA *rsa);

=item SSL_CTX_set_tmp_rsa_callback

C<long B<SSL_CTX_set_tmp_rsa_callback>(SSL_CTX *B<ctx>, RSA *(*B<cb>)(SSL *B<ssl>, int B<export>, int B<keylength>));>

Sets the callback which will be called when a temporary private key is
required. The B<C<export>> flag will be set if the reason for needing
a temp key is that an export ciphersuite is in use, in which case,
B<C<keylength>> will contain the required keylength in bits. Generate a key of
appropriate size (using ???) and return it.

=item SSL_set_tmp_rsa_callback

long B<SSL_set_tmp_rsa_callback>(SSL *ssl, RSA *(*cb)(SSL *ssl, int export, int keylength));

The same as B<SSL_CTX_set_tmp_rsa_callback>, except it operates on an SSL
session instead of a context.

=item void B<SSL_CTX_set_verify>(SSL_CTX *ctx, int mode, int (*cb);(void))

=item int B<SSL_CTX_use_PrivateKey>(SSL_CTX *ctx, EVP_PKEY *pkey);

=item int B<SSL_CTX_use_PrivateKey_ASN1>(int type, SSL_CTX *ctx, unsigned char *d, long len);

=item int B<SSL_CTX_use_PrivateKey_file>(SSL_CTX *ctx, char *file, int type);

=item int B<SSL_CTX_use_RSAPrivateKey>(SSL_CTX *ctx, RSA *rsa);

=item int B<SSL_CTX_use_RSAPrivateKey_ASN1>(SSL_CTX *ctx, unsigned char *d, long len);

=item int B<SSL_CTX_use_RSAPrivateKey_file>(SSL_CTX *ctx, char *file, int type);

=item int B<SSL_CTX_use_certificate>(SSL_CTX *ctx, X509 *x);

=item int B<SSL_CTX_use_certificate_ASN1>(SSL_CTX *ctx, int len, unsigned char *d);

=item int B<SSL_CTX_use_certificate_file>(SSL_CTX *ctx, char *file, int type);

=item void B<SSL_CTX_set_psk_client_callback>(SSL_CTX *ctx, unsigned int (*callback)(SSL *ssl, const char *hint, char *identity, unsigned int max_identity_len, unsigned char *psk, unsigned int max_psk_len));

=item int B<SSL_CTX_use_psk_identity_hint>(SSL_CTX *ctx, const char *hint);

=item void B<SSL_CTX_set_psk_server_callback>(SSL_CTX *ctx, unsigned int (*callback)(SSL *ssl, const char *identity, unsigned char *psk, int max_psk_len));




=back

=head2 DEALING WITH SESSIONS

Here we document the various API functions which deal with the SSL/TLS
sessions defined in the B<SSL_SESSION> structures.

=over 4

=item int B<SSL_SESSION_cmp>(const SSL_SESSION *a, const SSL_SESSION *b);

=item void B<SSL_SESSION_free>(SSL_SESSION *ss);

=item char *B<SSL_SESSION_get_app_data>(SSL_SESSION *s);

=item char *B<SSL_SESSION_get_ex_data>(const SSL_SESSION *s, int idx);

=item int B<SSL_SESSION_get_ex_new_index>(long argl, char *argp, int (*new_func);(void), int (*dup_func)(void), void (*free_func)(void))

=item long B<SSL_SESSION_get_time>(const SSL_SESSION *s);

=item long B<SSL_SESSION_get_timeout>(const SSL_SESSION *s);

=item unsigned long B<SSL_SESSION_hash>(const SSL_SESSION *a);

=item SSL_SESSION *B<SSL_SESSION_new>(void);

=item int B<SSL_SESSION_print>(BIO *bp, const SSL_SESSION *x);

=item int B<SSL_SESSION_print_fp>(FILE *fp, const SSL_SESSION *x);

=item void B<SSL_SESSION_set_app_data>(SSL_SESSION *s, char *a);

=item int B<SSL_SESSION_set_ex_data>(SSL_SESSION *s, int idx, char *arg);

=item long B<SSL_SESSION_set_time>(SSL_SESSION *s, long t);

=item long B<SSL_SESSION_set_timeout>(SSL_SESSION *s, long t);

=back

=head2 DEALING WITH CONNECTIONS

Here we document the various API functions which deal with the SSL/TLS
connection defined in the B<SSL> structure.

=over 4

=item int B<SSL_accept>(SSL *ssl);

=item int B<SSL_add_dir_cert_subjects_to_stack>(STACK *stack, const char *dir);

=item int B<SSL_add_file_cert_subjects_to_stack>(STACK *stack, const char *file);

=item int B<SSL_add_client_CA>(SSL *ssl, X509 *x);

=item char *B<SSL_alert_desc_string>(int value);

=item char *B<SSL_alert_desc_string_long>(int value);

=item char *B<SSL_alert_type_string>(int value);

=item char *B<SSL_alert_type_string_long>(int value);

=item int B<SSL_check_private_key>(const SSL *ssl);

=item void B<SSL_clear>(SSL *ssl);

=item long B<SSL_clear_num_renegotiations>(SSL *ssl);

=item int B<SSL_connect>(SSL *ssl);

=item void B<SSL_copy_session_id>(SSL *t, const SSL *f);

=item long B<SSL_ctrl>(SSL *ssl, int cmd, long larg, char *parg);

=item int B<SSL_do_handshake>(SSL *ssl);

=item SSL *B<SSL_dup>(SSL *ssl);

=item STACK *B<SSL_dup_CA_list>(STACK *sk);

=item void B<SSL_free>(SSL *ssl);

=item SSL_CTX *B<SSL_get_SSL_CTX>(const SSL *ssl);

=item char *B<SSL_get_app_data>(SSL *ssl);

=item X509 *B<SSL_get_certificate>(const SSL *ssl);

=item const char *B<SSL_get_cipher>(const SSL *ssl);

=item int B<SSL_get_cipher_bits>(const SSL *ssl, int *alg_bits);

=item char *B<SSL_get_cipher_list>(const SSL *ssl, int n);

=item char *B<SSL_get_cipher_name>(const SSL *ssl);

=item char *B<SSL_get_cipher_version>(const SSL *ssl);

=item STACK *B<SSL_get_ciphers>(const SSL *ssl);

=item STACK *B<SSL_get_client_CA_list>(const SSL *ssl);

=item SSL_CIPHER *B<SSL_get_current_cipher>(SSL *ssl);

=item long B<SSL_get_default_timeout>(const SSL *ssl);

=item int B<SSL_get_error>(const SSL *ssl, int i);

=item char *B<SSL_get_ex_data>(const SSL *ssl, int idx);

=item int B<SSL_get_ex_data_X509_STORE_CTX_idx>(void);

=item int B<SSL_get_ex_new_index>(long argl, char *argp, int (*new_func);(void), int (*dup_func)(void), void (*free_func)(void))

=item int B<SSL_get_fd>(const SSL *ssl);

=item void (*B<SSL_get_info_callback>(const SSL *ssl);)()

=item STACK *B<SSL_get_peer_cert_chain>(const SSL *ssl);

=item X509 *B<SSL_get_peer_certificate>(const SSL *ssl);

=item EVP_PKEY *B<SSL_get_privatekey>(SSL *ssl);

=item int B<SSL_get_quiet_shutdown>(const SSL *ssl);

=item BIO *B<SSL_get_rbio>(const SSL *ssl);

=item int B<SSL_get_read_ahead>(const SSL *ssl);

=item SSL_SESSION *B<SSL_get_session>(const SSL *ssl);

=item char *B<SSL_get_shared_ciphers>(const SSL *ssl, char *buf, int len);

=item int B<SSL_get_shutdown>(const SSL *ssl);

=item const SSL_METHOD *B<SSL_get_ssl_method>(SSL *ssl);

=item int B<SSL_get_state>(const SSL *ssl);

=item long B<SSL_get_time>(const SSL *ssl);

=item long B<SSL_get_timeout>(const SSL *ssl);

=item int (*B<SSL_get_verify_callback>(const SSL *ssl))(int,X509_STORE_CTX *)

=item int B<SSL_get_verify_mode>(const SSL *ssl);

=item long B<SSL_get_verify_result>(const SSL *ssl);

=item char *B<SSL_get_version>(const SSL *ssl);

=item BIO *B<SSL_get_wbio>(const SSL *ssl);

=item int B<SSL_in_accept_init>(SSL *ssl);

=item int B<SSL_in_before>(SSL *ssl);

=item int B<SSL_in_connect_init>(SSL *ssl);

=item int B<SSL_in_init>(SSL *ssl);

=item int B<SSL_is_init_finished>(SSL *ssl);

=item STACK *B<SSL_load_client_CA_file>(char *file);

=item void B<SSL_load_error_strings>(void);

=item SSL *B<SSL_new>(SSL_CTX *ctx);

=item long B<SSL_num_renegotiations>(SSL *ssl);

=item int B<SSL_peek>(SSL *ssl, void *buf, int num);

=item int B<SSL_pending>(const SSL *ssl);

=item int B<SSL_read>(SSL *ssl, void *buf, int num);

=item int B<SSL_renegotiate>(SSL *ssl);

=item char *B<SSL_rstate_string>(SSL *ssl);

=item char *B<SSL_rstate_string_long>(SSL *ssl);

=item long B<SSL_session_reused>(SSL *ssl);

=item void B<SSL_set_accept_state>(SSL *ssl);

=item void B<SSL_set_app_data>(SSL *ssl, char *arg);

=item void B<SSL_set_bio>(SSL *ssl, BIO *rbio, BIO *wbio);

=item int B<SSL_set_cipher_list>(SSL *ssl, char *str);

=item void B<SSL_set_client_CA_list>(SSL *ssl, STACK *list);

=item void B<SSL_set_connect_state>(SSL *ssl);

=item int B<SSL_set_ex_data>(SSL *ssl, int idx, char *arg);

=item int B<SSL_set_fd>(SSL *ssl, int fd);

=item void B<SSL_set_info_callback>(SSL *ssl, void (*cb);(void))

=item void B<SSL_set_msg_callback>(SSL *ctx, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg));

=item void B<SSL_set_msg_callback_arg>(SSL *ctx, void *arg);

=item void B<SSL_set_options>(SSL *ssl, unsigned long op);

=item void B<SSL_set_quiet_shutdown>(SSL *ssl, int mode);

=item void B<SSL_set_read_ahead>(SSL *ssl, int yes);

=item int B<SSL_set_rfd>(SSL *ssl, int fd);

=item int B<SSL_set_session>(SSL *ssl, SSL_SESSION *session);

=item void B<SSL_set_shutdown>(SSL *ssl, int mode);

=item int B<SSL_set_ssl_method>(SSL *ssl, const SSL_METHOD *meth);

=item void B<SSL_set_time>(SSL *ssl, long t);

=item void B<SSL_set_timeout>(SSL *ssl, long t);

=item void B<SSL_set_verify>(SSL *ssl, int mode, int (*callback);(void))

=item void B<SSL_set_verify_result>(SSL *ssl, long arg);

=item int B<SSL_set_wfd>(SSL *ssl, int fd);

=item int B<SSL_shutdown>(SSL *ssl);

=item int B<SSL_state>(const SSL *ssl);

=item char *B<SSL_state_string>(const SSL *ssl);

=item char *B<SSL_state_string_long>(const SSL *ssl);

=item long B<SSL_total_renegotiations>(SSL *ssl);

=item int B<SSL_use_PrivateKey>(SSL *ssl, EVP_PKEY *pkey);

=item int B<SSL_use_PrivateKey_ASN1>(int type, SSL *ssl, unsigned char *d, long len);

=item int B<SSL_use_PrivateKey_file>(SSL *ssl, char *file, int type);

=item int B<SSL_use_RSAPrivateKey>(SSL *ssl, RSA *rsa);

=item int B<SSL_use_RSAPrivateKey_ASN1>(SSL *ssl, unsigned char *d, long len);

=item int B<SSL_use_RSAPrivateKey_file>(SSL *ssl, char *file, int type);

=item int B<SSL_use_certificate>(SSL *ssl, X509 *x);

=item int B<SSL_use_certificate_ASN1>(SSL *ssl, int len, unsigned char *d);

=item int B<SSL_use_certificate_file>(SSL *ssl, char *file, int type);

=item int B<SSL_version>(const SSL *ssl);

=item int B<SSL_want>(const SSL *ssl);

=item int B<SSL_want_nothing>(const SSL *ssl);

=item int B<SSL_want_read>(const SSL *ssl);

=item int B<SSL_want_write>(const SSL *ssl);

=item int B<SSL_want_x509_lookup>(const SSL *ssl);

=item int B<SSL_write>(SSL *ssl, const void *buf, int num);

=item void B<SSL_set_psk_client_callback>(SSL *ssl, unsigned int (*callback)(SSL *ssl, const char *hint, char *identity, unsigned int max_identity_len, unsigned char *psk, unsigned int max_psk_len));

=item int B<SSL_use_psk_identity_hint>(SSL *ssl, const char *hint);

=item void B<SSL_set_psk_server_callback>(SSL *ssl, unsigned int (*callback)(SSL *ssl, const char *identity, unsigned char *psk, int max_psk_len));

=item const char *B<SSL_get_psk_identity_hint>(SSL *ssl);

=item const char *B<SSL_get_psk_identity>(SSL *ssl);

=back

=head1 SEE ALSO

L<openssl(1)|openssl(1)>, L<crypto(3)|crypto(3)>,
L<SSL_accept(3)|SSL_accept(3)>, L<SSL_clear(3)|SSL_clear(3)>,
L<SSL_connect(3)|SSL_connect(3)>,
L<SSL_CIPHER_get_name(3)|SSL_CIPHER_get_name(3)>,
L<SSL_COMP_add_compression_method(3)|SSL_COMP_add_compression_method(3)>,
L<SSL_CTX_add_extra_chain_cert(3)|SSL_CTX_add_extra_chain_cert(3)>,
L<SSL_CTX_add_session(3)|SSL_CTX_add_session(3)>,
L<SSL_CTX_ctrl(3)|SSL_CTX_ctrl(3)>,
L<SSL_CTX_flush_sessions(3)|SSL_CTX_flush_sessions(3)>,
L<SSL_CTX_get_ex_new_index(3)|SSL_CTX_get_ex_new_index(3)>,
L<SSL_CTX_get_verify_mode(3)|SSL_CTX_get_verify_mode(3)>,
L<SSL_CTX_load_verify_locations(3)|SSL_CTX_load_verify_locations(3)>
L<SSL_CTX_new(3)|SSL_CTX_new(3)>,
L<SSL_CTX_sess_number(3)|SSL_CTX_sess_number(3)>,
L<SSL_CTX_sess_set_cache_size(3)|SSL_CTX_sess_set_cache_size(3)>,
L<SSL_CTX_sess_set_get_cb(3)|SSL_CTX_sess_set_get_cb(3)>,
L<SSL_CTX_sessions(3)|SSL_CTX_sessions(3)>,
L<SSL_CTX_set_cert_store(3)|SSL_CTX_set_cert_store(3)>,
L<SSL_CTX_set_cert_verify_callback(3)|SSL_CTX_set_cert_verify_callback(3)>,
L<SSL_CTX_set_cipher_list(3)|SSL_CTX_set_cipher_list(3)>,
L<SSL_CTX_set_client_CA_list(3)|SSL_CTX_set_client_CA_list(3)>,
L<SSL_CTX_set_client_cert_cb(3)|SSL_CTX_set_client_cert_cb(3)>,
L<SSL_CTX_set_default_passwd_cb(3)|SSL_CTX_set_default_passwd_cb(3)>,
L<SSL_CTX_set_generate_session_id(3)|SSL_CTX_set_generate_session_id(3)>,
L<SSL_CTX_set_info_callback(3)|SSL_CTX_set_info_callback(3)>,
L<SSL_CTX_set_max_cert_list(3)|SSL_CTX_set_max_cert_list(3)>,
L<SSL_CTX_set_mode(3)|SSL_CTX_set_mode(3)>,
L<SSL_CTX_set_msg_callback(3)|SSL_CTX_set_msg_callback(3)>,
L<SSL_CTX_set_options(3)|SSL_CTX_set_options(3)>,
L<SSL_CTX_set_quiet_shutdown(3)|SSL_CTX_set_quiet_shutdown(3)>,
L<SSL_CTX_set_read_ahead(3)|SSL_CTX_set_read_ahead(3)>,
L<SSL_CTX_set_session_cache_mode(3)|SSL_CTX_set_session_cache_mode(3)>,
L<SSL_CTX_set_session_id_context(3)|SSL_CTX_set_session_id_context(3)>,
L<SSL_CTX_set_ssl_version(3)|SSL_CTX_set_ssl_version(3)>,
L<SSL_CTX_set_timeout(3)|SSL_CTX_set_timeout(3)>,
L<SSL_CTX_set_tmp_rsa_callback(3)|SSL_CTX_set_tmp_rsa_callback(3)>,
L<SSL_CTX_set_tmp_dh_callback(3)|SSL_CTX_set_tmp_dh_callback(3)>,
L<SSL_CTX_set_verify(3)|SSL_CTX_set_verify(3)>,
L<SSL_CTX_use_certificate(3)|SSL_CTX_use_certificate(3)>,
L<SSL_alert_type_string(3)|SSL_alert_type_string(3)>,
L<SSL_do_handshake(3)|SSL_do_handshake(3)>,
L<SSL_get_SSL_CTX(3)|SSL_get_SSL_CTX(3)>,
L<SSL_get_ciphers(3)|SSL_get_ciphers(3)>,
L<SSL_get_client_CA_list(3)|SSL_get_client_CA_list(3)>,
L<SSL_get_default_timeout(3)|SSL_get_default_timeout(3)>,
L<SSL_get_error(3)|SSL_get_error(3)>,
L<SSL_get_ex_data_X509_STORE_CTX_idx(3)|SSL_get_ex_data_X509_STORE_CTX_idx(3)>,
L<SSL_get_ex_new_index(3)|SSL_get_ex_new_index(3)>,
L<SSL_get_fd(3)|SSL_get_fd(3)>,
L<SSL_get_peer_cert_chain(3)|SSL_get_peer_cert_chain(3)>,
L<SSL_get_rbio(3)|SSL_get_rbio(3)>,
L<SSL_get_session(3)|SSL_get_session(3)>,
L<SSL_get_verify_result(3)|SSL_get_verify_result(3)>,
L<SSL_get_version(3)|SSL_get_version(3)>,
L<SSL_library_init(3)|SSL_library_init(3)>,
L<SSL_load_client_CA_file(3)|SSL_load_client_CA_file(3)>,
L<SSL_new(3)|SSL_new(3)>,
L<SSL_pending(3)|SSL_pending(3)>,
L<SSL_read(3)|SSL_read(3)>,
L<SSL_rstate_string(3)|SSL_rstate_string(3)>,
L<SSL_session_reused(3)|SSL_session_reused(3)>,
L<SSL_set_bio(3)|SSL_set_bio(3)>,
L<SSL_set_connect_state(3)|SSL_set_connect_state(3)>,
L<SSL_set_fd(3)|SSL_set_fd(3)>,
L<SSL_set_session(3)|SSL_set_session(3)>,
L<SSL_set_shutdown(3)|SSL_set_shutdown(3)>,
L<SSL_shutdown(3)|SSL_shutdown(3)>,
L<SSL_state_string(3)|SSL_state_string(3)>,
L<SSL_want(3)|SSL_want(3)>,
L<SSL_write(3)|SSL_write(3)>,
L<SSL_SESSION_free(3)|SSL_SESSION_free(3)>,
L<SSL_SESSION_get_ex_new_index(3)|SSL_SESSION_get_ex_new_index(3)>,
L<SSL_SESSION_get_time(3)|SSL_SESSION_get_time(3)>,
L<d2i_SSL_SESSION(3)|d2i_SSL_SESSION(3)>,
L<SSL_CTX_set_psk_client_callback(3)|SSL_CTX_set_psk_client_callback(3)>,
L<SSL_CTX_use_psk_identity_hint(3)|SSL_CTX_use_psk_identity_hint(3)>,
L<SSL_get_psk_identity(3)|SSL_get_psk_identity(3)>

=head1 HISTORY

The L<ssl(3)|ssl(3)> document appeared in OpenSSL 0.9.2

=cut

