Blame doc/man7/ssl.pod

Packit c4476c
=pod
Packit c4476c
Packit c4476c
=head1 NAME
Packit c4476c
Packit c4476c
ssl - OpenSSL SSL/TLS library
Packit c4476c
Packit c4476c
=head1 SYNOPSIS
Packit c4476c
Packit c4476c
See the individual manual pages for details.
Packit c4476c
Packit c4476c
=head1 DESCRIPTION
Packit c4476c
Packit c4476c
The OpenSSL B<ssl> library implements the Secure Sockets Layer (SSL v2/v3) and
Packit c4476c
Transport Layer Security (TLS v1) protocols. It provides a rich API which is
Packit c4476c
documented here.
Packit c4476c
Packit c4476c
An B<SSL_CTX> object is created as a framework to establish
Packit c4476c
TLS/SSL enabled connections (see L<SSL_CTX_new(3)>).
Packit c4476c
Various options regarding certificates, algorithms etc. can be set
Packit c4476c
in this object.
Packit c4476c
Packit c4476c
When a network connection has been created, it can be assigned to an
Packit c4476c
B<SSL> object. After the B<SSL> object has been created using
Packit c4476c
L<SSL_new(3)>, L<SSL_set_fd(3)> or
Packit c4476c
L<SSL_set_bio(3)> can be used to associate the network
Packit c4476c
connection with the object.
Packit c4476c
Packit c4476c
When the TLS/SSL handshake is performed using
Packit c4476c
L<SSL_accept(3)> or L<SSL_connect(3)>
Packit c4476c
respectively.
Packit c4476c
L<SSL_read_ex(3)>, L<SSL_read(3)>, L<SSL_write_ex(3)> and L<SSL_write(3)> are
Packit c4476c
used to read and write data on the TLS/SSL connection.
Packit c4476c
L<SSL_shutdown(3)> can be used to shut down the
Packit c4476c
TLS/SSL connection.
Packit c4476c
Packit c4476c
=head1 DATA STRUCTURES
Packit c4476c
Packit c4476c
Currently the OpenSSL B<ssl> library functions deals with the following data
Packit c4476c
structures:
Packit c4476c
Packit c4476c
=over 4
Packit c4476c
Packit c4476c
=item B<SSL_METHOD> (SSL Method)
Packit c4476c
Packit c4476c
This is a dispatch structure describing the internal B<ssl> library
Packit c4476c
methods/functions which implement the various protocol versions (SSLv3
Packit c4476c
TLSv1, ...). It's needed to create an B<SSL_CTX>.
Packit c4476c
Packit c4476c
=item B<SSL_CIPHER> (SSL Cipher)
Packit c4476c
Packit c4476c
This structure holds the algorithm information for a particular cipher which
Packit c4476c
are a core part of the SSL/TLS protocol. The available ciphers are configured
Packit c4476c
on a B<SSL_CTX> basis and the actual ones used are then part of the
Packit c4476c
B<SSL_SESSION>.
Packit c4476c
Packit c4476c
=item B<SSL_CTX> (SSL Context)
Packit c4476c
Packit c4476c
This is the global context structure which is created by a server or client
Packit c4476c
once per program life-time and which holds mainly default values for the
Packit c4476c
B<SSL> structures which are later created for the connections.
Packit c4476c
Packit c4476c
=item B<SSL_SESSION> (SSL Session)
Packit c4476c
Packit c4476c
This is a structure containing the current TLS/SSL session details for a
Packit c4476c
connection: B<SSL_CIPHER>s, client and server certificates, keys, etc.
Packit c4476c
Packit c4476c
=item B<SSL> (SSL Connection)
Packit c4476c
Packit c4476c
This is the main SSL/TLS structure which is created by a server or client per
Packit c4476c
established connection. This actually is the core structure in the SSL API.
Packit c4476c
At run-time the application usually deals with this structure which has
Packit c4476c
links to mostly all other structures.
Packit c4476c
Packit c4476c
=back
Packit c4476c
Packit c4476c
Packit c4476c
=head1 HEADER FILES
Packit c4476c
Packit c4476c
Currently the OpenSSL B<ssl> library provides the following C header files
Packit c4476c
containing the prototypes for the data structures and functions:
Packit c4476c
Packit c4476c
=over 4
Packit c4476c
Packit c4476c
=item B<ssl.h>
Packit c4476c
Packit c4476c
This is the common header file for the SSL/TLS API.  Include it into your
Packit c4476c
program to make the API of the B<ssl> library available. It internally
Packit c4476c
includes both more private SSL headers and headers from the B<crypto> library.
Packit c4476c
Whenever you need hard-core details on the internals of the SSL API, look
Packit c4476c
inside this header file.
Packit c4476c
Packit c4476c
=item B<ssl2.h>
Packit c4476c
Packit c4476c
Unused. Present for backwards compatibility only.
Packit c4476c
Packit c4476c
=item B<ssl3.h>
Packit c4476c
Packit c4476c
This is the sub header file dealing with the SSLv3 protocol only.
Packit c4476c
I
Packit c4476c
it's already included by ssl.h>.
Packit c4476c
Packit c4476c
=item B<tls1.h>
Packit c4476c
Packit c4476c
This is the sub header file dealing with the TLSv1 protocol only.
Packit c4476c
I
Packit c4476c
it's already included by ssl.h>.
Packit c4476c
Packit c4476c
=back
Packit c4476c
Packit c4476c
=head1 API FUNCTIONS
Packit c4476c
Packit c4476c
Currently the OpenSSL B<ssl> library exports 214 API functions.
Packit c4476c
They are documented in the following:
Packit c4476c
Packit c4476c
=head2 Dealing with Protocol Methods
Packit c4476c
Packit c4476c
Here we document the various API functions which deal with the SSL/TLS
Packit c4476c
protocol methods defined in B<SSL_METHOD> structures.
Packit c4476c
Packit c4476c
=over 4
Packit c4476c
Packit c4476c
=item const SSL_METHOD *B<TLS_method>(void);
Packit c4476c
Packit c4476c
Constructor for the I<version-flexible> SSL_METHOD structure for clients,
Packit c4476c
servers or both.
Packit c4476c
See L<SSL_CTX_new(3)> for details.
Packit c4476c
Packit c4476c
=item const SSL_METHOD *B<TLS_client_method>(void);
Packit c4476c
Packit c4476c
Constructor for the I<version-flexible> SSL_METHOD structure for clients.
Packit c4476c
Must be used to support the TLSv1.3 protocol.
Packit c4476c
Packit c4476c
=item const SSL_METHOD *B<TLS_server_method>(void);
Packit c4476c
Packit c4476c
Constructor for the I<version-flexible> SSL_METHOD structure for servers.
Packit c4476c
Must be used to support the TLSv1.3 protocol.
Packit c4476c
Packit c4476c
=item const SSL_METHOD *B<TLSv1_2_method>(void);
Packit c4476c
Packit c4476c
Constructor for the TLSv1.2 SSL_METHOD structure for clients, servers or both.
Packit c4476c
Packit c4476c
=item const SSL_METHOD *B<TLSv1_2_client_method>(void);
Packit c4476c
Packit c4476c
Constructor for the TLSv1.2 SSL_METHOD structure for clients.
Packit c4476c
Packit c4476c
=item const SSL_METHOD *B<TLSv1_2_server_method>(void);
Packit c4476c
Packit c4476c
Constructor for the TLSv1.2 SSL_METHOD structure for servers.
Packit c4476c
Packit c4476c
=item const SSL_METHOD *B<TLSv1_1_method>(void);
Packit c4476c
Packit c4476c
Constructor for the TLSv1.1 SSL_METHOD structure for clients, servers or both.
Packit c4476c
Packit c4476c
=item const SSL_METHOD *B<TLSv1_1_client_method>(void);
Packit c4476c
Packit c4476c
Constructor for the TLSv1.1 SSL_METHOD structure for clients.
Packit c4476c
Packit c4476c
=item const SSL_METHOD *B<TLSv1_1_server_method>(void);
Packit c4476c
Packit c4476c
Constructor for the TLSv1.1 SSL_METHOD structure for servers.
Packit c4476c
Packit c4476c
=item const SSL_METHOD *B<TLSv1_method>(void);
Packit c4476c
Packit c4476c
Constructor for the TLSv1 SSL_METHOD structure for clients, servers or both.
Packit c4476c
Packit c4476c
=item const SSL_METHOD *B<TLSv1_client_method>(void);
Packit c4476c
Packit c4476c
Constructor for the TLSv1 SSL_METHOD structure for clients.
Packit c4476c
Packit c4476c
=item const SSL_METHOD *B<TLSv1_server_method>(void);
Packit c4476c
Packit c4476c
Constructor for the TLSv1 SSL_METHOD structure for servers.
Packit c4476c
Packit c4476c
=item const SSL_METHOD *B<SSLv3_method>(void);
Packit c4476c
Packit c4476c
Constructor for the SSLv3 SSL_METHOD structure for clients, servers or both.
Packit c4476c
Packit c4476c
=item const SSL_METHOD *B<SSLv3_client_method>(void);
Packit c4476c
Packit c4476c
Constructor for the SSLv3 SSL_METHOD structure for clients.
Packit c4476c
Packit c4476c
=item const SSL_METHOD *B<SSLv3_server_method>(void);
Packit c4476c
Packit c4476c
Constructor for the SSLv3 SSL_METHOD structure for servers.
Packit c4476c
Packit c4476c
=back
Packit c4476c
Packit c4476c
=head2 Dealing with Ciphers
Packit c4476c
Packit c4476c
Here we document the various API functions which deal with the SSL/TLS
Packit c4476c
ciphers defined in B<SSL_CIPHER> structures.
Packit c4476c
Packit c4476c
=over 4
Packit c4476c
Packit c4476c
=item char *B<SSL_CIPHER_description>(SSL_CIPHER *cipher, char *buf, int len);
Packit c4476c
Packit c4476c
Write a string to I<buf> (with a maximum size of I<len>) containing a human
Packit c4476c
readable description of I<cipher>. Returns I<buf>.
Packit c4476c
Packit c4476c
=item int B<SSL_CIPHER_get_bits>(SSL_CIPHER *cipher, int *alg_bits);
Packit c4476c
Packit c4476c
Determine the number of bits in I<cipher>. Because of export crippled ciphers
Packit c4476c
there are two bits: The bits the algorithm supports in general (stored to
Packit c4476c
I<alg_bits>) and the bits which are actually used (the return value).
Packit c4476c
Packit c4476c
=item const char *B<SSL_CIPHER_get_name>(SSL_CIPHER *cipher);
Packit c4476c
Packit c4476c
Return the internal name of I<cipher> as a string. These are the various
Packit c4476c
strings defined by the I<SSL3_TXT_xxx> and I<TLS1_TXT_xxx>
Packit c4476c
definitions in the header files.
Packit c4476c
Packit c4476c
=item const char *B<SSL_CIPHER_get_version>(SSL_CIPHER *cipher);
Packit c4476c
Packit c4476c
Returns a string like "C<SSLv3>" or "C<TLSv1.2>" which indicates the
Packit c4476c
SSL/TLS protocol version to which I<cipher> belongs (i.e. where it was defined
Packit c4476c
in the specification the first time).
Packit c4476c
Packit c4476c
=back
Packit c4476c
Packit c4476c
=head2 Dealing with Protocol Contexts
Packit c4476c
Packit c4476c
Here we document the various API functions which deal with the SSL/TLS
Packit c4476c
protocol context defined in the B<SSL_CTX> structure.
Packit c4476c
Packit c4476c
=over 4
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_add_client_CA>(SSL_CTX *ctx, X509 *x);
Packit c4476c
Packit c4476c
=item long B<SSL_CTX_add_extra_chain_cert>(SSL_CTX *ctx, X509 *x509);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_add_session>(SSL_CTX *ctx, SSL_SESSION *c);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_check_private_key>(const SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=item long B<SSL_CTX_ctrl>(SSL_CTX *ctx, int cmd, long larg, char *parg);
Packit c4476c
Packit c4476c
=item void B<SSL_CTX_flush_sessions>(SSL_CTX *s, long t);
Packit c4476c
Packit c4476c
=item void B<SSL_CTX_free>(SSL_CTX *a);
Packit c4476c
Packit c4476c
=item char *B<SSL_CTX_get_app_data>(SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=item X509_STORE *B<SSL_CTX_get_cert_store>(SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=item STACK *B<SSL_CTX_get_ciphers>(const SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=item STACK *B<SSL_CTX_get_client_CA_list>(const SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=item int (*B<SSL_CTX_get_client_cert_cb>(SSL_CTX *ctx))(SSL *ssl, X509 **x509, EVP_PKEY **pkey);
Packit c4476c
Packit c4476c
=item void B<SSL_CTX_get_default_read_ahead>(SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=item char *B<SSL_CTX_get_ex_data>(const SSL_CTX *s, int idx);
Packit c4476c
Packit c4476c
=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))
Packit c4476c
Packit c4476c
=item void (*B<SSL_CTX_get_info_callback>(SSL_CTX *ctx))(SSL *ssl, int cb, int ret);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_get_quiet_shutdown>(const SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=item void B<SSL_CTX_get_read_ahead>(SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_get_session_cache_mode>(SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=item long B<SSL_CTX_get_timeout>(const SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=item int (*B<SSL_CTX_get_verify_callback>(const SSL_CTX *ctx))(int ok, X509_STORE_CTX *ctx);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_get_verify_mode>(SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_load_verify_locations>(SSL_CTX *ctx, const char *CAfile, const char *CApath);
Packit c4476c
Packit c4476c
=item SSL_CTX *B<SSL_CTX_new>(const SSL_METHOD *meth);
Packit c4476c
Packit c4476c
=item int SSL_CTX_up_ref(SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_remove_session>(SSL_CTX *ctx, SSL_SESSION *c);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_sess_accept>(SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_sess_accept_good>(SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_sess_accept_renegotiate>(SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_sess_cache_full>(SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_sess_cb_hits>(SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_sess_connect>(SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_sess_connect_good>(SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_sess_connect_renegotiate>(SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_sess_get_cache_size>(SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=item SSL_SESSION *(*B<SSL_CTX_sess_get_get_cb>(SSL_CTX *ctx))(SSL *ssl, unsigned char *data, int len, int *copy);
Packit c4476c
Packit c4476c
=item int (*B<SSL_CTX_sess_get_new_cb>(SSL_CTX *ctx)(SSL *ssl, SSL_SESSION *sess);
Packit c4476c
Packit c4476c
=item void (*B<SSL_CTX_sess_get_remove_cb>(SSL_CTX *ctx)(SSL_CTX *ctx, SSL_SESSION *sess);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_sess_hits>(SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_sess_misses>(SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_sess_number>(SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=item void B<SSL_CTX_sess_set_cache_size>(SSL_CTX *ctx, t);
Packit c4476c
Packit c4476c
=item void B<SSL_CTX_sess_set_get_cb>(SSL_CTX *ctx, SSL_SESSION *(*cb)(SSL *ssl, unsigned char *data, int len, int *copy));
Packit c4476c
Packit c4476c
=item void B<SSL_CTX_sess_set_new_cb>(SSL_CTX *ctx, int (*cb)(SSL *ssl, SSL_SESSION *sess));
Packit c4476c
Packit c4476c
=item void B<SSL_CTX_sess_set_remove_cb>(SSL_CTX *ctx, void (*cb)(SSL_CTX *ctx, SSL_SESSION *sess));
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_sess_timeouts>(SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=item LHASH *B<SSL_CTX_sessions>(SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_set_app_data>(SSL_CTX *ctx, void *arg);
Packit c4476c
Packit c4476c
=item void B<SSL_CTX_set_cert_store>(SSL_CTX *ctx, X509_STORE *cs);
Packit c4476c
Packit c4476c
=item void B<SSL_CTX_set1_cert_store>(SSL_CTX *ctx, X509_STORE *cs);
Packit c4476c
Packit c4476c
=item void B<SSL_CTX_set_cert_verify_cb>(SSL_CTX *ctx, int (*cb)(), char *arg)
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_set_cipher_list>(SSL_CTX *ctx, char *str);
Packit c4476c
Packit c4476c
=item void B<SSL_CTX_set_client_CA_list>(SSL_CTX *ctx, STACK *list);
Packit c4476c
Packit c4476c
=item void B<SSL_CTX_set_client_cert_cb>(SSL_CTX *ctx, int (*cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey));
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_set_ct_validation_callback>(SSL_CTX *ctx, ssl_ct_validation_cb callback, void *arg);
Packit c4476c
Packit c4476c
=item void B<SSL_CTX_set_default_passwd_cb>(SSL_CTX *ctx, int (*cb);(void))
Packit c4476c
Packit c4476c
=item void B<SSL_CTX_set_default_read_ahead>(SSL_CTX *ctx, int m);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_set_default_verify_paths>(SSL_CTX *ctx);
Packit c4476c
Packit c4476c
Use the default paths to locate trusted CA certificates. There is one default
Packit c4476c
directory path and one default file path. Both are set via this call.
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_set_default_verify_dir>(SSL_CTX *ctx)
Packit c4476c
Packit c4476c
Use the default directory path to locate trusted CA certificates.
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_set_default_verify_file>(SSL_CTX *ctx)
Packit c4476c
Packit c4476c
Use the file path to locate trusted CA certificates.
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_set_ex_data>(SSL_CTX *s, int idx, char *arg);
Packit c4476c
Packit c4476c
=item void B<SSL_CTX_set_info_callback>(SSL_CTX *ctx, void (*cb)(SSL *ssl, int cb, int ret));
Packit c4476c
Packit c4476c
=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));
Packit c4476c
Packit c4476c
=item void B<SSL_CTX_set_msg_callback_arg>(SSL_CTX *ctx, void *arg);
Packit c4476c
Packit c4476c
=item unsigned long B<SSL_CTX_clear_options>(SSL_CTX *ctx, unsigned long op);
Packit c4476c
Packit c4476c
=item unsigned long B<SSL_CTX_get_options>(SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=item unsigned long B<SSL_CTX_set_options>(SSL_CTX *ctx, unsigned long op);
Packit c4476c
Packit c4476c
=item void B<SSL_CTX_set_quiet_shutdown>(SSL_CTX *ctx, int mode);
Packit c4476c
Packit c4476c
=item void B<SSL_CTX_set_read_ahead>(SSL_CTX *ctx, int m);
Packit c4476c
Packit c4476c
=item void B<SSL_CTX_set_session_cache_mode>(SSL_CTX *ctx, int mode);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_set_ssl_version>(SSL_CTX *ctx, const SSL_METHOD *meth);
Packit c4476c
Packit c4476c
=item void B<SSL_CTX_set_timeout>(SSL_CTX *ctx, long t);
Packit c4476c
Packit c4476c
=item long B<SSL_CTX_set_tmp_dh>(SSL_CTX* ctx, DH *dh);
Packit c4476c
Packit c4476c
=item long B<SSL_CTX_set_tmp_dh_callback>(SSL_CTX *ctx, DH *(*cb)(void));
Packit c4476c
Packit c4476c
=item void B<SSL_CTX_set_verify>(SSL_CTX *ctx, int mode, int (*cb);(void))
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_use_PrivateKey>(SSL_CTX *ctx, EVP_PKEY *pkey);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_use_PrivateKey_ASN1>(int type, SSL_CTX *ctx, unsigned char *d, long len);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_use_PrivateKey_file>(SSL_CTX *ctx, const char *file, int type);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_use_RSAPrivateKey>(SSL_CTX *ctx, RSA *rsa);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_use_RSAPrivateKey_ASN1>(SSL_CTX *ctx, unsigned char *d, long len);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_use_RSAPrivateKey_file>(SSL_CTX *ctx, const char *file, int type);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_use_certificate>(SSL_CTX *ctx, X509 *x);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_use_certificate_ASN1>(SSL_CTX *ctx, int len, unsigned char *d);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_use_certificate_file>(SSL_CTX *ctx, const char *file, int type);
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_use_cert_and_key>(SSL_CTX *ctx, X509 *x, EVP_PKEY *pkey, STACK_OF(X509) *chain, int override);
Packit c4476c
Packit c4476c
=item X509 *B<SSL_CTX_get0_certificate>(const SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=item EVP_PKEY *B<SSL_CTX_get0_privatekey>(const SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=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));
Packit c4476c
Packit c4476c
=item int B<SSL_CTX_use_psk_identity_hint>(SSL_CTX *ctx, const char *hint);
Packit c4476c
Packit c4476c
=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));
Packit c4476c
Packit c4476c
Packit c4476c
=back
Packit c4476c
Packit c4476c
=head2 Dealing with Sessions
Packit c4476c
Packit c4476c
Here we document the various API functions which deal with the SSL/TLS
Packit c4476c
sessions defined in the B<SSL_SESSION> structures.
Packit c4476c
Packit c4476c
=over 4
Packit c4476c
Packit c4476c
=item int B<SSL_SESSION_cmp>(const SSL_SESSION *a, const SSL_SESSION *b);
Packit c4476c
Packit c4476c
=item void B<SSL_SESSION_free>(SSL_SESSION *ss);
Packit c4476c
Packit c4476c
=item char *B<SSL_SESSION_get_app_data>(SSL_SESSION *s);
Packit c4476c
Packit c4476c
=item char *B<SSL_SESSION_get_ex_data>(const SSL_SESSION *s, int idx);
Packit c4476c
Packit c4476c
=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))
Packit c4476c
Packit c4476c
=item long B<SSL_SESSION_get_time>(const SSL_SESSION *s);
Packit c4476c
Packit c4476c
=item long B<SSL_SESSION_get_timeout>(const SSL_SESSION *s);
Packit c4476c
Packit c4476c
=item unsigned long B<SSL_SESSION_hash>(const SSL_SESSION *a);
Packit c4476c
Packit c4476c
=item SSL_SESSION *B<SSL_SESSION_new>(void);
Packit c4476c
Packit c4476c
=item int B<SSL_SESSION_print>(BIO *bp, const SSL_SESSION *x);
Packit c4476c
Packit c4476c
=item int B<SSL_SESSION_print_fp>(FILE *fp, const SSL_SESSION *x);
Packit c4476c
Packit c4476c
=item int B<SSL_SESSION_set_app_data>(SSL_SESSION *s, char *a);
Packit c4476c
Packit c4476c
=item int B<SSL_SESSION_set_ex_data>(SSL_SESSION *s, int idx, char *arg);
Packit c4476c
Packit c4476c
=item long B<SSL_SESSION_set_time>(SSL_SESSION *s, long t);
Packit c4476c
Packit c4476c
=item long B<SSL_SESSION_set_timeout>(SSL_SESSION *s, long t);
Packit c4476c
Packit c4476c
=back
Packit c4476c
Packit c4476c
=head2 Dealing with Connections
Packit c4476c
Packit c4476c
Here we document the various API functions which deal with the SSL/TLS
Packit c4476c
connection defined in the B<SSL> structure.
Packit c4476c
Packit c4476c
=over 4
Packit c4476c
Packit c4476c
=item int B<SSL_accept>(SSL *ssl);
Packit c4476c
Packit c4476c
=item int B<SSL_add_dir_cert_subjects_to_stack>(STACK *stack, const char *dir);
Packit c4476c
Packit c4476c
=item int B<SSL_add_file_cert_subjects_to_stack>(STACK *stack, const char *file);
Packit c4476c
Packit c4476c
=item int B<SSL_add_client_CA>(SSL *ssl, X509 *x);
Packit c4476c
Packit c4476c
=item char *B<SSL_alert_desc_string>(int value);
Packit c4476c
Packit c4476c
=item char *B<SSL_alert_desc_string_long>(int value);
Packit c4476c
Packit c4476c
=item char *B<SSL_alert_type_string>(int value);
Packit c4476c
Packit c4476c
=item char *B<SSL_alert_type_string_long>(int value);
Packit c4476c
Packit c4476c
=item int B<SSL_check_private_key>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item void B<SSL_clear>(SSL *ssl);
Packit c4476c
Packit c4476c
=item long B<SSL_clear_num_renegotiations>(SSL *ssl);
Packit c4476c
Packit c4476c
=item int B<SSL_connect>(SSL *ssl);
Packit c4476c
Packit c4476c
=item int B<SSL_copy_session_id>(SSL *t, const SSL *f);
Packit c4476c
Packit c4476c
Sets the session details for B<t> to be the same as in B<f>. Returns 1 on
Packit c4476c
success or 0 on failure.
Packit c4476c
Packit c4476c
=item long B<SSL_ctrl>(SSL *ssl, int cmd, long larg, char *parg);
Packit c4476c
Packit c4476c
=item int B<SSL_do_handshake>(SSL *ssl);
Packit c4476c
Packit c4476c
=item SSL *B<SSL_dup>(SSL *ssl);
Packit c4476c
Packit c4476c
SSL_dup() allows applications to configure an SSL handle for use
Packit c4476c
in multiple SSL connections, and then duplicate it prior to initiating
Packit c4476c
each connection with the duplicated handle.
Packit c4476c
Use of SSL_dup() avoids the need to repeat the configuration of the
Packit c4476c
handles for each connection.
Packit c4476c
Packit c4476c
For SSL_dup() to work, the connection MUST be in its initial state
Packit c4476c
and MUST NOT have not yet have started the SSL handshake.
Packit c4476c
For connections that are not in their initial state SSL_dup() just
Packit c4476c
increments an internal reference count and returns the I<same>
Packit c4476c
handle.
Packit c4476c
It may be possible to use L<SSL_clear(3)> to recycle an SSL handle
Packit c4476c
that is not in its initial state for re-use, but this is best
Packit c4476c
avoided.
Packit c4476c
Instead, save and restore the session, if desired, and construct a
Packit c4476c
fresh handle for each connection.
Packit c4476c
Packit c4476c
=item STACK *B<SSL_dup_CA_list>(STACK *sk);
Packit c4476c
Packit c4476c
=item void B<SSL_free>(SSL *ssl);
Packit c4476c
Packit c4476c
=item SSL_CTX *B<SSL_get_SSL_CTX>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item char *B<SSL_get_app_data>(SSL *ssl);
Packit c4476c
Packit c4476c
=item X509 *B<SSL_get_certificate>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item const char *B<SSL_get_cipher>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item int B<SSL_is_dtls>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item int B<SSL_get_cipher_bits>(const SSL *ssl, int *alg_bits);
Packit c4476c
Packit c4476c
=item char *B<SSL_get_cipher_list>(const SSL *ssl, int n);
Packit c4476c
Packit c4476c
=item char *B<SSL_get_cipher_name>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item char *B<SSL_get_cipher_version>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item STACK *B<SSL_get_ciphers>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item STACK *B<SSL_get_client_CA_list>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item SSL_CIPHER *B<SSL_get_current_cipher>(SSL *ssl);
Packit c4476c
Packit c4476c
=item long B<SSL_get_default_timeout>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item int B<SSL_get_error>(const SSL *ssl, int i);
Packit c4476c
Packit c4476c
=item char *B<SSL_get_ex_data>(const SSL *ssl, int idx);
Packit c4476c
Packit c4476c
=item int B<SSL_get_ex_data_X509_STORE_CTX_idx>(void);
Packit c4476c
Packit c4476c
=item int B<SSL_get_ex_new_index>(long argl, char *argp, int (*new_func);(void), int (*dup_func)(void), void (*free_func)(void))
Packit c4476c
Packit c4476c
=item int B<SSL_get_fd>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item void (*B<SSL_get_info_callback>(const SSL *ssl);)()
Packit c4476c
Packit c4476c
=item int B<SSL_get_key_update_type>(SSL *s);
Packit c4476c
Packit c4476c
=item STACK *B<SSL_get_peer_cert_chain>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item X509 *B<SSL_get_peer_certificate>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item const STACK_OF(SCT) *B<SSL_get0_peer_scts>(SSL *s);
Packit c4476c
Packit c4476c
=item EVP_PKEY *B<SSL_get_privatekey>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item int B<SSL_get_quiet_shutdown>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item BIO *B<SSL_get_rbio>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item int B<SSL_get_read_ahead>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item SSL_SESSION *B<SSL_get_session>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item char *B<SSL_get_shared_ciphers>(const SSL *ssl, char *buf, int size);
Packit c4476c
Packit c4476c
=item int B<SSL_get_shutdown>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item const SSL_METHOD *B<SSL_get_ssl_method>(SSL *ssl);
Packit c4476c
Packit c4476c
=item int B<SSL_get_state>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item long B<SSL_get_time>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item long B<SSL_get_timeout>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item int (*B<SSL_get_verify_callback>(const SSL *ssl))(int, X509_STORE_CTX *)
Packit c4476c
Packit c4476c
=item int B<SSL_get_verify_mode>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item long B<SSL_get_verify_result>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item char *B<SSL_get_version>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item BIO *B<SSL_get_wbio>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item int B<SSL_in_accept_init>(SSL *ssl);
Packit c4476c
Packit c4476c
=item int B<SSL_in_before>(SSL *ssl);
Packit c4476c
Packit c4476c
=item int B<SSL_in_connect_init>(SSL *ssl);
Packit c4476c
Packit c4476c
=item int B<SSL_in_init>(SSL *ssl);
Packit c4476c
Packit c4476c
=item int B<SSL_is_init_finished>(SSL *ssl);
Packit c4476c
Packit c4476c
=item int B<SSL_key_update>(SSL *s, int updatetype);
Packit c4476c
Packit c4476c
=item STACK *B<SSL_load_client_CA_file>(const char *file);
Packit c4476c
Packit c4476c
=item SSL *B<SSL_new>(SSL_CTX *ctx);
Packit c4476c
Packit c4476c
=item int SSL_up_ref(SSL *s);
Packit c4476c
Packit c4476c
=item long B<SSL_num_renegotiations>(SSL *ssl);
Packit c4476c
Packit c4476c
=item int B<SSL_peek>(SSL *ssl, void *buf, int num);
Packit c4476c
Packit c4476c
=item int B<SSL_pending>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item int B<SSL_read>(SSL *ssl, void *buf, int num);
Packit c4476c
Packit c4476c
=item int B<SSL_renegotiate>(SSL *ssl);
Packit c4476c
Packit c4476c
=item char *B<SSL_rstate_string>(SSL *ssl);
Packit c4476c
Packit c4476c
=item char *B<SSL_rstate_string_long>(SSL *ssl);
Packit c4476c
Packit c4476c
=item long B<SSL_session_reused>(SSL *ssl);
Packit c4476c
Packit c4476c
=item void B<SSL_set_accept_state>(SSL *ssl);
Packit c4476c
Packit c4476c
=item void B<SSL_set_app_data>(SSL *ssl, char *arg);
Packit c4476c
Packit c4476c
=item void B<SSL_set_bio>(SSL *ssl, BIO *rbio, BIO *wbio);
Packit c4476c
Packit c4476c
=item int B<SSL_set_cipher_list>(SSL *ssl, char *str);
Packit c4476c
Packit c4476c
=item void B<SSL_set_client_CA_list>(SSL *ssl, STACK *list);
Packit c4476c
Packit c4476c
=item void B<SSL_set_connect_state>(SSL *ssl);
Packit c4476c
Packit c4476c
=item int B<SSL_set_ct_validation_callback>(SSL *ssl, ssl_ct_validation_cb callback, void *arg);
Packit c4476c
Packit c4476c
=item int B<SSL_set_ex_data>(SSL *ssl, int idx, char *arg);
Packit c4476c
Packit c4476c
=item int B<SSL_set_fd>(SSL *ssl, int fd);
Packit c4476c
Packit c4476c
=item void B<SSL_set_info_callback>(SSL *ssl, void (*cb);(void))
Packit c4476c
Packit c4476c
=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));
Packit c4476c
Packit c4476c
=item void B<SSL_set_msg_callback_arg>(SSL *ctx, void *arg);
Packit c4476c
Packit c4476c
=item unsigned long B<SSL_clear_options>(SSL *ssl, unsigned long op);
Packit c4476c
Packit c4476c
=item unsigned long B<SSL_get_options>(SSL *ssl);
Packit c4476c
Packit c4476c
=item unsigned long B<SSL_set_options>(SSL *ssl, unsigned long op);
Packit c4476c
Packit c4476c
=item void B<SSL_set_quiet_shutdown>(SSL *ssl, int mode);
Packit c4476c
Packit c4476c
=item void B<SSL_set_read_ahead>(SSL *ssl, int yes);
Packit c4476c
Packit c4476c
=item int B<SSL_set_rfd>(SSL *ssl, int fd);
Packit c4476c
Packit c4476c
=item int B<SSL_set_session>(SSL *ssl, SSL_SESSION *session);
Packit c4476c
Packit c4476c
=item void B<SSL_set_shutdown>(SSL *ssl, int mode);
Packit c4476c
Packit c4476c
=item int B<SSL_set_ssl_method>(SSL *ssl, const SSL_METHOD *meth);
Packit c4476c
Packit c4476c
=item void B<SSL_set_time>(SSL *ssl, long t);
Packit c4476c
Packit c4476c
=item void B<SSL_set_timeout>(SSL *ssl, long t);
Packit c4476c
Packit c4476c
=item void B<SSL_set_verify>(SSL *ssl, int mode, int (*callback);(void))
Packit c4476c
Packit c4476c
=item void B<SSL_set_verify_result>(SSL *ssl, long arg);
Packit c4476c
Packit c4476c
=item int B<SSL_set_wfd>(SSL *ssl, int fd);
Packit c4476c
Packit c4476c
=item int B<SSL_shutdown>(SSL *ssl);
Packit c4476c
Packit c4476c
=item OSSL_HANDSHAKE_STATE B<SSL_get_state>(const SSL *ssl);
Packit c4476c
Packit c4476c
Returns the current handshake state.
Packit c4476c
Packit c4476c
=item char *B<SSL_state_string>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item char *B<SSL_state_string_long>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item long B<SSL_total_renegotiations>(SSL *ssl);
Packit c4476c
Packit c4476c
=item int B<SSL_use_PrivateKey>(SSL *ssl, EVP_PKEY *pkey);
Packit c4476c
Packit c4476c
=item int B<SSL_use_PrivateKey_ASN1>(int type, SSL *ssl, unsigned char *d, long len);
Packit c4476c
Packit c4476c
=item int B<SSL_use_PrivateKey_file>(SSL *ssl, const char *file, int type);
Packit c4476c
Packit c4476c
=item int B<SSL_use_RSAPrivateKey>(SSL *ssl, RSA *rsa);
Packit c4476c
Packit c4476c
=item int B<SSL_use_RSAPrivateKey_ASN1>(SSL *ssl, unsigned char *d, long len);
Packit c4476c
Packit c4476c
=item int B<SSL_use_RSAPrivateKey_file>(SSL *ssl, const char *file, int type);
Packit c4476c
Packit c4476c
=item int B<SSL_use_certificate>(SSL *ssl, X509 *x);
Packit c4476c
Packit c4476c
=item int B<SSL_use_certificate_ASN1>(SSL *ssl, int len, unsigned char *d);
Packit c4476c
Packit c4476c
=item int B<SSL_use_certificate_file>(SSL *ssl, const char *file, int type);
Packit c4476c
Packit c4476c
=item int B<SSL_use_cert_and_key>(SSL *ssl, X509 *x, EVP_PKEY *pkey, STACK_OF(X509) *chain, int override);
Packit c4476c
Packit c4476c
=item int B<SSL_version>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item int B<SSL_want>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item int B<SSL_want_nothing>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item int B<SSL_want_read>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item int B<SSL_want_write>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item int B<SSL_want_x509_lookup>(const SSL *ssl);
Packit c4476c
Packit c4476c
=item int B<SSL_write>(SSL *ssl, const void *buf, int num);
Packit c4476c
Packit c4476c
=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));
Packit c4476c
Packit c4476c
=item int B<SSL_use_psk_identity_hint>(SSL *ssl, const char *hint);
Packit c4476c
Packit c4476c
=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));
Packit c4476c
Packit c4476c
=item const char *B<SSL_get_psk_identity_hint>(SSL *ssl);
Packit c4476c
Packit c4476c
=item const char *B<SSL_get_psk_identity>(SSL *ssl);
Packit c4476c
Packit c4476c
=back
Packit c4476c
Packit c4476c
=head1 RETURN VALUES
Packit c4476c
Packit c4476c
See the individual manual pages for details.
Packit c4476c
Packit c4476c
=head1 SEE ALSO
Packit c4476c
Packit c4476c
L<openssl(1)>, L<crypto(7)>,
Packit c4476c
L<CRYPTO_get_ex_new_index(3)>,
Packit c4476c
L<SSL_accept(3)>, L<SSL_clear(3)>,
Packit c4476c
L<SSL_connect(3)>,
Packit c4476c
L<SSL_CIPHER_get_name(3)>,
Packit c4476c
L<SSL_COMP_add_compression_method(3)>,
Packit c4476c
L<SSL_CTX_add_extra_chain_cert(3)>,
Packit c4476c
L<SSL_CTX_add_session(3)>,
Packit c4476c
L<SSL_CTX_ctrl(3)>,
Packit c4476c
L<SSL_CTX_flush_sessions(3)>,
Packit c4476c
L<SSL_CTX_get_verify_mode(3)>,
Packit c4476c
L<SSL_CTX_load_verify_locations(3)>
Packit c4476c
L<SSL_CTX_new(3)>,
Packit c4476c
L<SSL_CTX_sess_number(3)>,
Packit c4476c
L<SSL_CTX_sess_set_cache_size(3)>,
Packit c4476c
L<SSL_CTX_sess_set_get_cb(3)>,
Packit c4476c
L<SSL_CTX_sessions(3)>,
Packit c4476c
L<SSL_CTX_set_cert_store(3)>,
Packit c4476c
L<SSL_CTX_set_cert_verify_callback(3)>,
Packit c4476c
L<SSL_CTX_set_cipher_list(3)>,
Packit c4476c
L<SSL_CTX_set_client_CA_list(3)>,
Packit c4476c
L<SSL_CTX_set_client_cert_cb(3)>,
Packit c4476c
L<SSL_CTX_set_default_passwd_cb(3)>,
Packit c4476c
L<SSL_CTX_set_generate_session_id(3)>,
Packit c4476c
L<SSL_CTX_set_info_callback(3)>,
Packit c4476c
L<SSL_CTX_set_max_cert_list(3)>,
Packit c4476c
L<SSL_CTX_set_mode(3)>,
Packit c4476c
L<SSL_CTX_set_msg_callback(3)>,
Packit c4476c
L<SSL_CTX_set_options(3)>,
Packit c4476c
L<SSL_CTX_set_quiet_shutdown(3)>,
Packit c4476c
L<SSL_CTX_set_read_ahead(3)>,
Packit c4476c
L<SSL_CTX_set_security_level(3)>,
Packit c4476c
L<SSL_CTX_set_session_cache_mode(3)>,
Packit c4476c
L<SSL_CTX_set_session_id_context(3)>,
Packit c4476c
L<SSL_CTX_set_ssl_version(3)>,
Packit c4476c
L<SSL_CTX_set_timeout(3)>,
Packit c4476c
L<SSL_CTX_set_tmp_dh_callback(3)>,
Packit c4476c
L<SSL_CTX_set_verify(3)>,
Packit c4476c
L<SSL_CTX_use_certificate(3)>,
Packit c4476c
L<SSL_alert_type_string(3)>,
Packit c4476c
L<SSL_do_handshake(3)>,
Packit c4476c
L<SSL_enable_ct(3)>,
Packit c4476c
L<SSL_get_SSL_CTX(3)>,
Packit c4476c
L<SSL_get_ciphers(3)>,
Packit c4476c
L<SSL_get_client_CA_list(3)>,
Packit c4476c
L<SSL_get_default_timeout(3)>,
Packit c4476c
L<SSL_get_error(3)>,
Packit c4476c
L<SSL_get_ex_data_X509_STORE_CTX_idx(3)>,
Packit c4476c
L<SSL_get_fd(3)>,
Packit c4476c
L<SSL_get_peer_cert_chain(3)>,
Packit c4476c
L<SSL_get_rbio(3)>,
Packit c4476c
L<SSL_get_session(3)>,
Packit c4476c
L<SSL_get_verify_result(3)>,
Packit c4476c
L<SSL_get_version(3)>,
Packit c4476c
L<SSL_load_client_CA_file(3)>,
Packit c4476c
L<SSL_new(3)>,
Packit c4476c
L<SSL_pending(3)>,
Packit c4476c
L<SSL_read_ex(3)>,
Packit c4476c
L<SSL_read(3)>,
Packit c4476c
L<SSL_rstate_string(3)>,
Packit c4476c
L<SSL_session_reused(3)>,
Packit c4476c
L<SSL_set_bio(3)>,
Packit c4476c
L<SSL_set_connect_state(3)>,
Packit c4476c
L<SSL_set_fd(3)>,
Packit c4476c
L<SSL_set_session(3)>,
Packit c4476c
L<SSL_set_shutdown(3)>,
Packit c4476c
L<SSL_shutdown(3)>,
Packit c4476c
L<SSL_state_string(3)>,
Packit c4476c
L<SSL_want(3)>,
Packit c4476c
L<SSL_write_ex(3)>,
Packit c4476c
L<SSL_write(3)>,
Packit c4476c
L<SSL_SESSION_free(3)>,
Packit c4476c
L<SSL_SESSION_get_time(3)>,
Packit c4476c
L<d2i_SSL_SESSION(3)>,
Packit c4476c
L<SSL_CTX_set_psk_client_callback(3)>,
Packit c4476c
L<SSL_CTX_use_psk_identity_hint(3)>,
Packit c4476c
L<SSL_get_psk_identity(3)>,
Packit c4476c
L<DTLSv1_listen(3)>
Packit c4476c
Packit c4476c
=head1 HISTORY
Packit c4476c
Packit c4476c
B<SSLv2_client_method>, B<SSLv2_server_method> and B<SSLv2_method> were removed
Packit c4476c
in OpenSSL 1.1.0.
Packit c4476c
Packit c4476c
The return type of B<SSL_copy_session_id> was changed from void to int in
Packit c4476c
OpenSSL 1.1.0.
Packit c4476c
Packit c4476c
=head1 COPYRIGHT
Packit c4476c
Packit c4476c
Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved.
Packit c4476c
Packit c4476c
Licensed under the OpenSSL license (the "License").  You may not use
Packit c4476c
this file except in compliance with the License.  You can obtain a copy
Packit c4476c
in the file LICENSE in the source distribution or at
Packit c4476c
L<https://www.openssl.org/source/license.html>.
Packit c4476c
Packit c4476c
=cut