ssl 3 2008-05-09 0.9.9-dev OpenSSL

NAME

SSL - OpenSSL SSL/TLS library

LIBRARY

libcrypto, -lcrypto

SYNOPSIS

DESCRIPTION

The OpenSSL ssssll 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 _S_S_L___l_i_b_r_a_r_y___i_n_i_t(3).

Then an SSSSLL__CCTTXX object is created as a framework to establish TLS/SSL enabled connections (see _S_S_L___C_T_X___n_e_w(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 SSSSLL object. After the SSSSLL object has been created using _S_S_L___n_e_w(3), _S_S_L___s_e_t___f_d(3) or _S_S_L___s_e_t___b_i_o(3) can be used to associate the network connection with the object.

Then the TLS/SSL handshake is performed using _S_S_L___a_c_c_e_p_t(3) or _S_S_L___c_o_n_n_e_c_t(3) respectively. _S_S_L___r_e_a_d(3) and _S_S_L___w_r_i_t_e(3) are used to read and write data on the TLS/SSL connection. _S_S_L___s_h_u_t_d_o_w_n(3) can be used to shut down the TLS/SSL connection.

DATA STRUCTURES

Currently the OpenSSL ssssll library functions deals with the following data structures:
SSSSLL__MMEETTHHOODD (SSL Method) That's a dispatch structure describing the internal ssssll library
methods/functions which implement the various protocol versions (SSLv1, SSLv2 and TLSv1). It's needed to create an SSSSLL__CCTTXX.
SSSSLL__CCIIPPHHEERR (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 SSSSLL__CCTTXX basis and the actually used ones are then part of the SSSSLL__SSEESSSSIIOONN.
SSSSLL__CCTTXX (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 SSSSLL structures which are later created for the connections.
SSSSLL__SSEESSSSIIOONN (SSL Session) This is a structure containing the current TLS/SSL session details for a
connection: SSSSLL__CCIIPPHHEERRs, client and server certificates, keys, etc.
SSSSLL (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.

HEADER FILES

Currently the OpenSSL ssssll library provides the following C header files containing the prototypes for the data structures and and functions:
ssssll..hh That's the common header file for the SSL/TLS API. Include it into your
program to make the API of the ssssll library available. It internally includes both more private SSL headers and headers from the ccrryyppttoo library. Whenever you need hard-core details on the internals of the SSL API, look inside this header file.
ssssll22..hh That's the sub header file dealing with the SSLv2 protocol only.
_U_s_u_a_l_l_y _y_o_u _d_o_n_'_t _h_a_v_e _t_o _i_n_c_l_u_d_e _i_t _e_x_p_l_i_c_i_t_l_y _b_e_c_a_u_s_e _i_t_'_s _a_l_r_e_a_d_y _i_n_c_l_u_d_e_d _b_y _s_s_l_._h.
ssssll33..hh That's the sub header file dealing with the SSLv3 protocol only.
_U_s_u_a_l_l_y _y_o_u _d_o_n_'_t _h_a_v_e _t_o _i_n_c_l_u_d_e _i_t _e_x_p_l_i_c_i_t_l_y _b_e_c_a_u_s_e _i_t_'_s _a_l_r_e_a_d_y _i_n_c_l_u_d_e_d _b_y _s_s_l_._h.
ssssll2233..hh That's the sub header file dealing with the combined use of the SSLv2 and
SSLv3 protocols. _U_s_u_a_l_l_y _y_o_u _d_o_n_'_t _h_a_v_e _t_o _i_n_c_l_u_d_e _i_t _e_x_p_l_i_c_i_t_l_y _b_e_c_a_u_s_e _i_t_'_s _a_l_r_e_a_d_y _i_n_c_l_u_d_e_d _b_y _s_s_l_._h.
ttllss11..hh That's the sub header file dealing with the TLSv1 protocol only.
_U_s_u_a_l_l_y _y_o_u _d_o_n_'_t _h_a_v_e _t_o _i_n_c_l_u_d_e _i_t _e_x_p_l_i_c_i_t_l_y _b_e_c_a_u_s_e _i_t_'_s _a_l_r_e_a_d_y _i_n_c_l_u_d_e_d _b_y _s_s_l_._h.

API FUNCTIONS

Currently the OpenSSL ssssll library exports 214 API functions. They are documented in the following:

DDEEAALLIINNGG WWIITTHH PPRROOTTOOCCOOLL MMEETTHHOODDSS

Here we document the various API functions which deal with the SSL/TLS protocol methods defined in SSSSLL__MMEETTHHOODD structures.

const SSL_METHOD *SSSSLLvv22__cclliieenntt__mmeetthhoodd(void); Constructor for the SSLv2 SSL_METHOD structure for a dedicated client.
const SSL_METHOD *SSSSLLvv22__sseerrvveerr__mmeetthhoodd(void); Constructor for the SSLv2 SSL_METHOD structure for a dedicated server.
const SSL_METHOD *SSSSLLvv22__mmeetthhoodd(void); Constructor for the SSLv2 SSL_METHOD structure for combined client and server.
const SSL_METHOD *SSSSLLvv33__cclliieenntt__mmeetthhoodd(void); Constructor for the SSLv3 SSL_METHOD structure for a dedicated client.
const SSL_METHOD *SSSSLLvv33__sseerrvveerr__mmeetthhoodd(void); Constructor for the SSLv3 SSL_METHOD structure for a dedicated server.
const SSL_METHOD *SSSSLLvv33__mmeetthhoodd(void); Constructor for the SSLv3 SSL_METHOD structure for combined client and server.
const SSL_METHOD *TTLLSSvv11__cclliieenntt__mmeetthhoodd(void); Constructor for the TLSv1 SSL_METHOD structure for a dedicated client.
const SSL_METHOD *TTLLSSvv11__sseerrvveerr__mmeetthhoodd(void); Constructor for the TLSv1 SSL_METHOD structure for a dedicated server.
const SSL_METHOD *TTLLSSvv11__mmeetthhoodd(void); Constructor for the TLSv1 SSL_METHOD structure for combined client and server.

DDEEAALLIINNGG WWIITTHH CCIIPPHHEERRSS

Here we document the various API functions which deal with the SSL/TLS ciphers defined in SSSSLL__CCIIPPHHEERR structures.

char *SSSSLL__CCIIPPHHEERR__ddeessccrriippttiioonn(SSL_CIPHER *cipher, char *buf, int len); Write a string to _b_u_f (with a maximum size of _l_e_n) containing a human
readable description of _c_i_p_h_e_r. Returns _b_u_f.
int SSSSLL__CCIIPPHHEERR__ggeett__bbiittss(SSL_CIPHER *cipher, int *alg_bits); Determine the number of bits in _c_i_p_h_e_r. Because of export crippled ciphers
there are two bits: The bits the algorithm supports in general (stored to _a_l_g___b_i_t_s) and the bits which are actually used (the return value).
const char *SSSSLL__CCIIPPHHEERR__ggeett__nnaammee(SSL_CIPHER *cipher); Return the internal name of _c_i_p_h_e_r as a string. These are the various
strings defined by the _S_S_L_2___T_X_T___x_x_x, _S_S_L_3___T_X_T___x_x_x and _T_L_S_1___T_X_T___x_x_x definitions in the header files.
char *SSSSLL__CCIIPPHHEERR__ggeett__vveerrssiioonn(SSL_CIPHER *cipher); Returns a string like ""TLSv1/SSLv3"" or ""SSLv2"" which indicates the
SSL/TLS protocol version to which _c_i_p_h_e_r belongs (i.e. where it was defined in the specification the first time).

DDEEAALLIINNGG WWIITTHH PPRROOTTOOCCOOLL CCOONNTTEEXXTTSS

Here we document the various API functions which deal with the SSL/TLS protocol context defined in the SSSSLL__CCTTXX structure.

int SSSSLL__CCTTXX__aadddd__cclliieenntt__CCAA(SSL_CTX *ctx, X509 *x);
long SSSSLL__CCTTXX__aadddd__eexxttrraa__cchhaaiinn__cceerrtt(SSL_CTX *ctx, X509 *x509);
int SSSSLL__CCTTXX__aadddd__sseessssiioonn(SSL_CTX *ctx, SSL_SESSION *c);
int SSSSLL__CCTTXX__cchheecckk__pprriivvaattee__kkeeyy(const SSL_CTX *ctx);
long SSSSLL__CCTTXX__ccttrrll(SSL_CTX *ctx, int cmd, long larg, char *parg);
void SSSSLL__CCTTXX__fflluusshh__sseessssiioonnss(SSL_CTX *s, long t);
void SSSSLL__CCTTXX__ffrreeee(SSL_CTX *a);
char *SSSSLL__CCTTXX__ggeett__aapppp__ddaattaa(SSL_CTX *ctx);
X509_STORE *SSSSLL__CCTTXX__ggeett__cceerrtt__ssttoorree(SSL_CTX *ctx);
STACK *SSSSLL__CCTTXX__ggeett__cclliieenntt__CCAA__lliisstt(const SSL_CTX *ctx);
int (*SSSSLL__CCTTXX__ggeett__cclliieenntt__cceerrtt__ccbb(SSL_CTX *ctx))(SSL *ssl, X509 **x509, EVP_PKEY **pkey);
char *SSSSLL__CCTTXX__ggeett__eexx__ddaattaa(const SSL_CTX *s, int idx);
int SSSSLL__CCTTXX__ggeett__eexx__nneeww__iinnddeexx(long argl, char *argp, int (*new_func);(void), int (*dup_func)(void), void (*free_func)(void))
void (*SSSSLL__CCTTXX__ggeett__iinnffoo__ccaallllbbaacckk(SSL_CTX *ctx))(SSL *ssl, int cb, int ret);
int SSSSLL__CCTTXX__ggeett__qquuiieett__sshhuuttddoowwnn(const SSL_CTX *ctx);
int SSSSLL__CCTTXX__ggeett__sseessssiioonn__ccaacchhee__mmooddee(SSL_CTX *ctx);
long SSSSLL__CCTTXX__ggeett__ttiimmeeoouutt(const SSL_CTX *ctx);
int (*SSSSLL__CCTTXX__ggeett__vveerriiffyy__ccaallllbbaacckk(const SSL_CTX *ctx))(int ok, X509_STORE_CTX *ctx);
int SSSSLL__CCTTXX__ggeett__vveerriiffyy__mmooddee(SSL_CTX *ctx);
int SSSSLL__CCTTXX__llooaadd__vveerriiffyy__llooccaattiioonnss(SSL_CTX *ctx, char *CAfile, char *CApath);
long SSSSLL__CCTTXX__nneeeedd__ttmmpp__RRSSAA(SSL_CTX *ctx);
SSL_CTX *SSSSLL__CCTTXX__nneeww(const SSL_METHOD *meth);
int SSSSLL__CCTTXX__rreemmoovvee__sseessssiioonn(SSL_CTX *ctx, SSL_SESSION *c);
int SSSSLL__CCTTXX__sseessss__aacccceepptt(SSL_CTX *ctx);
int SSSSLL__CCTTXX__sseessss__aacccceepptt__ggoooodd(SSL_CTX *ctx);
int SSSSLL__CCTTXX__sseessss__aacccceepptt__rreenneeggoottiiaattee(SSL_CTX *ctx);
int SSSSLL__CCTTXX__sseessss__ccaacchhee__ffuullll(SSL_CTX *ctx);
int SSSSLL__CCTTXX__sseessss__ccbb__hhiittss(SSL_CTX *ctx);
int SSSSLL__CCTTXX__sseessss__ccoonnnneecctt(SSL_CTX *ctx);
int SSSSLL__CCTTXX__sseessss__ccoonnnneecctt__ggoooodd(SSL_CTX *ctx);
int SSSSLL__CCTTXX__sseessss__ccoonnnneecctt__rreenneeggoottiiaattee(SSL_CTX *ctx);
int SSSSLL__CCTTXX__sseessss__ggeett__ccaacchhee__ssiizzee(SSL_CTX *ctx);
SSL_SESSION *(*SSSSLL__CCTTXX__sseessss__ggeett__ggeett__ccbb(SSL_CTX *ctx))(SSL *ssl, unsigned char *data, int len, int *copy);
int (*SSSSLL__CCTTXX__sseessss__ggeett__nneeww__ccbb(SSL_CTX *ctx)(SSL *ssl, SSL_SESSION *sess);
void (*SSSSLL__CCTTXX__sseessss__ggeett__rreemmoovvee__ccbb(SSL_CTX *ctx)(SSL_CTX *ctx, SSL_SESSION *sess);
int SSSSLL__CCTTXX__sseessss__hhiittss(SSL_CTX *ctx);
int SSSSLL__CCTTXX__sseessss__mmiisssseess(SSL_CTX *ctx);
int SSSSLL__CCTTXX__sseessss__nnuummbbeerr(SSL_CTX *ctx);
void SSSSLL__CCTTXX__sseessss__sseett__ccaacchhee__ssiizzee(SSL_CTX *ctx,t);
void SSSSLL__CCTTXX__sseessss__sseett__ggeett__ccbb(SSL_CTX *ctx, SSL_SESSION *(*cb)(SSL *ssl, unsigned char *data, int len, int *copy));
void SSSSLL__CCTTXX__sseessss__sseett__nneeww__ccbb(SSL_CTX *ctx, int (*cb)(SSL *ssl, SSL_SESSION *sess));
void SSSSLL__CCTTXX__sseessss__sseett__rreemmoovvee__ccbb(SSL_CTX *ctx, void (*cb)(SSL_CTX *ctx, SSL_SESSION *sess));
int SSSSLL__CCTTXX__sseessss__ttiimmeeoouuttss(SSL_CTX *ctx);
LHASH *SSSSLL__CCTTXX__sseessssiioonnss(SSL_CTX *ctx);
void SSSSLL__CCTTXX__sseett__aapppp__ddaattaa(SSL_CTX *ctx, void *arg);
void SSSSLL__CCTTXX__sseett__cceerrtt__ssttoorree(SSL_CTX *ctx, X509_STORE *cs);
void SSSSLL__CCTTXX__sseett__cceerrtt__vveerriiffyy__ccbb(SSL_CTX *ctx, int (*cb)(), char *arg)
int SSSSLL__CCTTXX__sseett__cciipphheerr__lliisstt(SSL_CTX *ctx, char *str);
void SSSSLL__CCTTXX__sseett__cclliieenntt__CCAA__lliisstt(SSL_CTX *ctx, STACK *list);
void SSSSLL__CCTTXX__sseett__cclliieenntt__cceerrtt__ccbb(SSL_CTX *ctx, int (*cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey));
void SSSSLL__CCTTXX__sseett__ddeeffaauulltt__ppaasssswwdd__ccbb(SSL_CTX *ctx, int (*cb);(void))
void SSSSLL__CCTTXX__sseett__ddeeffaauulltt__rreeaadd__aahheeaadd(SSL_CTX *ctx, int m);
int SSSSLL__CCTTXX__sseett__ddeeffaauulltt__vveerriiffyy__ppaatthhss(SSL_CTX *ctx);
int SSSSLL__CCTTXX__sseett__eexx__ddaattaa(SSL_CTX *s, int idx, char *arg);
void SSSSLL__CCTTXX__sseett__iinnffoo__ccaallllbbaacckk(SSL_CTX *ctx, void (*cb)(SSL *ssl, int cb, int ret));
void SSSSLL__CCTTXX__sseett__mmssgg__ccaallllbbaacckk(SSL_CTX *ctx, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg));
void SSSSLL__CCTTXX__sseett__mmssgg__ccaallllbbaacckk__aarrgg(SSL_CTX *ctx, void *arg);
void SSSSLL__CCTTXX__sseett__ooppttiioonnss(SSL_CTX *ctx, unsigned long op);
void SSSSLL__CCTTXX__sseett__qquuiieett__sshhuuttddoowwnn(SSL_CTX *ctx, int mode);
void SSSSLL__CCTTXX__sseett__sseessssiioonn__ccaacchhee__mmooddee(SSL_CTX *ctx, int mode);
int SSSSLL__CCTTXX__sseett__ssssll__vveerrssiioonn(SSL_CTX *ctx, const SSL_METHOD *meth);
void SSSSLL__CCTTXX__sseett__ttiimmeeoouutt(SSL_CTX *ctx, long t);
long SSSSLL__CCTTXX__sseett__ttmmpp__ddhh(SSL_CTX* ctx, DH *dh);
long SSSSLL__CCTTXX__sseett__ttmmpp__ddhh__ccaallllbbaacckk(SSL_CTX *ctx, DH *(*cb)(void));
long SSSSLL__CCTTXX__sseett__ttmmpp__rrssaa(SSL_CTX *ctx, RSA *rsa);
SSL_CTX_set_tmp_rsa_callback "long SSL_CTX_set_tmp_rsa_callback(SSL_CTX *ctx, RSA *(*cb)(SSL *ssl, int export, int keylength));"


Sets the callback which will be called when a temporary private key is required. The ""eexxppoorrtt"" flag will be set if the reason for needing a temp key is that an export ciphersuite is in use, in which case, ""kkeeyylleennggtthh"" will contain the required keylength in bits. Generate a key of appropriate size (using ???) and return it.
SSL_set_tmp_rsa_callback long SSSSLL__sseett__ttmmpp__rrssaa__ccaallllbbaacckk(SSL *ssl, RSA *(*cb)(SSL *ssl, int export, int keylength));


The same as SSSSLL__CCTTXX__sseett__ttmmpp__rrssaa__ccaallllbbaacckk, except it operates on an SSL session instead of a context.
void SSSSLL__CCTTXX__sseett__vveerriiffyy(SSL_CTX *ctx, int mode, int (*cb);(void))
int SSSSLL__CCTTXX__uussee__PPrriivvaatteeKKeeyy(SSL_CTX *ctx, EVP_PKEY *pkey);
int SSSSLL__CCTTXX__uussee__PPrriivvaatteeKKeeyy__AASSNN11(int type, SSL_CTX *ctx, unsigned char *d, long len);
int SSSSLL__CCTTXX__uussee__PPrriivvaatteeKKeeyy__ffiillee(SSL_CTX *ctx, char *file, int type);
int SSSSLL__CCTTXX__uussee__RRSSAAPPrriivvaatteeKKeeyy(SSL_CTX *ctx, RSA *rsa);
int SSSSLL__CCTTXX__uussee__RRSSAAPPrriivvaatteeKKeeyy__AASSNN11(SSL_CTX *ctx, unsigned char *d, long len);
int SSSSLL__CCTTXX__uussee__RRSSAAPPrriivvaatteeKKeeyy__ffiillee(SSL_CTX *ctx, char *file, int type);
int SSSSLL__CCTTXX__uussee__cceerrttiiffiiccaattee(SSL_CTX *ctx, X509 *x);
int SSSSLL__CCTTXX__uussee__cceerrttiiffiiccaattee__AASSNN11(SSL_CTX *ctx, int len, unsigned char *d);
int SSSSLL__CCTTXX__uussee__cceerrttiiffiiccaattee__ffiillee(SSL_CTX *ctx, char *file, int type);
void SSSSLL__CCTTXX__sseett__ppsskk__cclliieenntt__ccaallllbbaacckk(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));
int SSSSLL__CCTTXX__uussee__ppsskk__iiddeennttiittyy__hhiinntt(SSL_CTX *ctx, const char *hint);
void SSSSLL__CCTTXX__sseett__ppsskk__sseerrvveerr__ccaallllbbaacckk(SSL_CTX *ctx, unsigned int (*callback)(SSL *ssl, const char *identity, unsigned char *psk, int max_psk_len));

DDEEAALLIINNGG WWIITTHH SSEESSSSIIOONNSS

Here we document the various API functions which deal with the SSL/TLS sessions defined in the SSSSLL__SSEESSSSIIOONN structures.

int SSSSLL__SSEESSSSIIOONN__ccmmpp(const SSL_SESSION *a, const SSL_SESSION *b);
void SSSSLL__SSEESSSSIIOONN__ffrreeee(SSL_SESSION *ss);
char *SSSSLL__SSEESSSSIIOONN__ggeett__aapppp__ddaattaa(SSL_SESSION *s);
char *SSSSLL__SSEESSSSIIOONN__ggeett__eexx__ddaattaa(const SSL_SESSION *s, int idx);
int SSSSLL__SSEESSSSIIOONN__ggeett__eexx__nneeww__iinnddeexx(long argl, char *argp, int (*new_func);(void), int (*dup_func)(void), void (*free_func)(void))
long SSSSLL__SSEESSSSIIOONN__ggeett__ttiimmee(const SSL_SESSION *s);
long SSSSLL__SSEESSSSIIOONN__ggeett__ttiimmeeoouutt(const SSL_SESSION *s);
unsigned long SSSSLL__SSEESSSSIIOONN__hhaasshh(const SSL_SESSION *a);
SSL_SESSION *SSSSLL__SSEESSSSIIOONN__nneeww(void);
int SSSSLL__SSEESSSSIIOONN__pprriinntt(BIO *bp, const SSL_SESSION *x);
int SSSSLL__SSEESSSSIIOONN__pprriinntt__ffpp(FILE *fp, const SSL_SESSION *x);
void SSSSLL__SSEESSSSIIOONN__sseett__aapppp__ddaattaa(SSL_SESSION *s, char *a);
int SSSSLL__SSEESSSSIIOONN__sseett__eexx__ddaattaa(SSL_SESSION *s, int idx, char *arg);
long SSSSLL__SSEESSSSIIOONN__sseett__ttiimmee(SSL_SESSION *s, long t);
long SSSSLL__SSEESSSSIIOONN__sseett__ttiimmeeoouutt(SSL_SESSION *s, long t);

DDEEAALLIINNGG WWIITTHH CCOONNNNEECCTTIIOONNSS

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

int SSSSLL__aacccceepptt(SSL *ssl);
int SSSSLL__aadddd__ddiirr__cceerrtt__ssuubbjjeeccttss__ttoo__ssttaacckk(STACK *stack, const char *dir);
int SSSSLL__aadddd__ffiillee__cceerrtt__ssuubbjjeeccttss__ttoo__ssttaacckk(STACK *stack, const char *file);
int SSSSLL__aadddd__cclliieenntt__CCAA(SSL *ssl, X509 *x);
char *SSSSLL__aalleerrtt__ddeesscc__ssttrriinngg(int value);
char *SSSSLL__aalleerrtt__ddeesscc__ssttrriinngg__lloonngg(int value);
char *SSSSLL__aalleerrtt__ttyyppee__ssttrriinngg(int value);
char *SSSSLL__aalleerrtt__ttyyppee__ssttrriinngg__lloonngg(int value);
int SSSSLL__cchheecckk__pprriivvaattee__kkeeyy(const SSL *ssl);
void SSSSLL__cclleeaarr(SSL *ssl);
long SSSSLL__cclleeaarr__nnuumm__rreenneeggoottiiaattiioonnss(SSL *ssl);
int SSSSLL__ccoonnnneecctt(SSL *ssl);
void SSSSLL__ccooppyy__sseessssiioonn__iidd(SSL *t, const SSL *f);
long SSSSLL__ccttrrll(SSL *ssl, int cmd, long larg, char *parg);
int SSSSLL__ddoo__hhaannddsshhaakkee(SSL *ssl);
SSL *SSSSLL__dduupp(SSL *ssl);
STACK *SSSSLL__dduupp__CCAA__lliisstt(STACK *sk);
void SSSSLL__ffrreeee(SSL *ssl);
SSL_CTX *SSSSLL__ggeett__SSSSLL__CCTTXX(const SSL *ssl);
char *SSSSLL__ggeett__aapppp__ddaattaa(SSL *ssl);
X509 *SSSSLL__ggeett__cceerrttiiffiiccaattee(const SSL *ssl);
const char *SSSSLL__ggeett__cciipphheerr(const SSL *ssl);
int SSSSLL__ggeett__cciipphheerr__bbiittss(const SSL *ssl, int *alg_bits);
char *SSSSLL__ggeett__cciipphheerr__lliisstt(const SSL *ssl, int n);
char *SSSSLL__ggeett__cciipphheerr__nnaammee(const SSL *ssl);
char *SSSSLL__ggeett__cciipphheerr__vveerrssiioonn(const SSL *ssl);
STACK *SSSSLL__ggeett__cciipphheerrss(const SSL *ssl);
STACK *SSSSLL__ggeett__cclliieenntt__CCAA__lliisstt(const SSL *ssl);
SSL_CIPHER *SSSSLL__ggeett__ccuurrrreenntt__cciipphheerr(SSL *ssl);
long SSSSLL__ggeett__ddeeffaauulltt__ttiimmeeoouutt(const SSL *ssl);
int SSSSLL__ggeett__eerrrroorr(const SSL *ssl, int i);
char *SSSSLL__ggeett__eexx__ddaattaa(const SSL *ssl, int idx);
int SSSSLL__ggeett__eexx__ddaattaa__XX550099__SSTTOORREE__CCTTXX__iiddxx(void);
int SSSSLL__ggeett__eexx__nneeww__iinnddeexx(long argl, char *argp, int (*new_func);(void), int (*dup_func)(void), void (*free_func)(void))
int SSSSLL__ggeett__ffdd(const SSL *ssl);
void (*SSSSLL__ggeett__iinnffoo__ccaallllbbaacckk(const SSL *ssl);)()
STACK *SSSSLL__ggeett__ppeeeerr__cceerrtt__cchhaaiinn(const SSL *ssl);
X509 *SSSSLL__ggeett__ppeeeerr__cceerrttiiffiiccaattee(const SSL *ssl);
EVP_PKEY *SSSSLL__ggeett__pprriivvaatteekkeeyy(SSL *ssl);
int SSSSLL__ggeett__qquuiieett__sshhuuttddoowwnn(const SSL *ssl);
BIO *SSSSLL__ggeett__rrbbiioo(const SSL *ssl);
int SSSSLL__ggeett__rreeaadd__aahheeaadd(const SSL *ssl);
SSL_SESSION *SSSSLL__ggeett__sseessssiioonn(const SSL *ssl);
char *SSSSLL__ggeett__sshhaarreedd__cciipphheerrss(const SSL *ssl, char *buf, int len);
int SSSSLL__ggeett__sshhuuttddoowwnn(const SSL *ssl);
const SSL_METHOD *SSSSLL__ggeett__ssssll__mmeetthhoodd(SSL *ssl);
int SSSSLL__ggeett__ssttaattee(const SSL *ssl);
long SSSSLL__ggeett__ttiimmee(const SSL *ssl);
long SSSSLL__ggeett__ttiimmeeoouutt(const SSL *ssl);
int (*SSSSLL__ggeett__vveerriiffyy__ccaallllbbaacckk(const SSL *ssl))(int,X509_STORE_CTX *)
int SSSSLL__ggeett__vveerriiffyy__mmooddee(const SSL *ssl);
long SSSSLL__ggeett__vveerriiffyy__rreessuulltt(const SSL *ssl);
char *SSSSLL__ggeett__vveerrssiioonn(const SSL *ssl);
BIO *SSSSLL__ggeett__wwbbiioo(const SSL *ssl);
int SSSSLL__iinn__aacccceepptt__iinniitt(SSL *ssl);
int SSSSLL__iinn__bbeeffoorree(SSL *ssl);
int SSSSLL__iinn__ccoonnnneecctt__iinniitt(SSL *ssl);
int SSSSLL__iinn__iinniitt(SSL *ssl);
int SSSSLL__iiss__iinniitt__ffiinniisshheedd(SSL *ssl);
STACK *SSSSLL__llooaadd__cclliieenntt__CCAA__ffiillee(char *file);
void SSSSLL__llooaadd__eerrrroorr__ssttrriinnggss(void);
SSL *SSSSLL__nneeww(SSL_CTX *ctx);
long SSSSLL__nnuumm__rreenneeggoottiiaattiioonnss(SSL *ssl);
int SSSSLL__ppeeeekk(SSL *ssl, void *buf, int num);
int SSSSLL__ppeennddiinngg(const SSL *ssl);
int SSSSLL__rreeaadd(SSL *ssl, void *buf, int num);
int SSSSLL__rreenneeggoottiiaattee(SSL *ssl);
char *SSSSLL__rrssttaattee__ssttrriinngg(SSL *ssl);
char *SSSSLL__rrssttaattee__ssttrriinngg__lloonngg(SSL *ssl);
long SSSSLL__sseessssiioonn__rreeuusseedd(SSL *ssl);
void SSSSLL__sseett__aacccceepptt__ssttaattee(SSL *ssl);
void SSSSLL__sseett__aapppp__ddaattaa(SSL *ssl, char *arg);
void SSSSLL__sseett__bbiioo(SSL *ssl, BIO *rbio, BIO *wbio);
int SSSSLL__sseett__cciipphheerr__lliisstt(SSL *ssl, char *str);
void SSSSLL__sseett__cclliieenntt__CCAA__lliisstt(SSL *ssl, STACK *list);
void SSSSLL__sseett__ccoonnnneecctt__ssttaattee(SSL *ssl);
int SSSSLL__sseett__eexx__ddaattaa(SSL *ssl, int idx, char *arg);
int SSSSLL__sseett__ffdd(SSL *ssl, int fd);
void SSSSLL__sseett__iinnffoo__ccaallllbbaacckk(SSL *ssl, void (*cb);(void))
void SSSSLL__sseett__mmssgg__ccaallllbbaacckk(SSL *ctx, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg));
void SSSSLL__sseett__mmssgg__ccaallllbbaacckk__aarrgg(SSL *ctx, void *arg);
void SSSSLL__sseett__ooppttiioonnss(SSL *ssl, unsigned long op);
void SSSSLL__sseett__qquuiieett__sshhuuttddoowwnn(SSL *ssl, int mode);
void SSSSLL__sseett__rreeaadd__aahheeaadd(SSL *ssl, int yes);
int SSSSLL__sseett__rrffdd(SSL *ssl, int fd);
int SSSSLL__sseett__sseessssiioonn(SSL *ssl, SSL_SESSION *session);
void SSSSLL__sseett__sshhuuttddoowwnn(SSL *ssl, int mode);
int SSSSLL__sseett__ssssll__mmeetthhoodd(SSL *ssl, const SSL_METHOD *meth);
void SSSSLL__sseett__ttiimmee(SSL *ssl, long t);
void SSSSLL__sseett__ttiimmeeoouutt(SSL *ssl, long t);
void SSSSLL__sseett__vveerriiffyy(SSL *ssl, int mode, int (*callback);(void))
void SSSSLL__sseett__vveerriiffyy__rreessuulltt(SSL *ssl, long arg);
int SSSSLL__sseett__wwffdd(SSL *ssl, int fd);
int SSSSLL__sshhuuttddoowwnn(SSL *ssl);
int SSSSLL__ssttaattee(const SSL *ssl);
char *SSSSLL__ssttaattee__ssttrriinngg(const SSL *ssl);
char *SSSSLL__ssttaattee__ssttrriinngg__lloonngg(const SSL *ssl);
long SSSSLL__ttoottaall__rreenneeggoottiiaattiioonnss(SSL *ssl);
int SSSSLL__uussee__PPrriivvaatteeKKeeyy(SSL *ssl, EVP_PKEY *pkey);
int SSSSLL__uussee__PPrriivvaatteeKKeeyy__AASSNN11(int type, SSL *ssl, unsigned char *d, long len);
int SSSSLL__uussee__PPrriivvaatteeKKeeyy__ffiillee(SSL *ssl, char *file, int type);
int SSSSLL__uussee__RRSSAAPPrriivvaatteeKKeeyy(SSL *ssl, RSA *rsa);
int SSSSLL__uussee__RRSSAAPPrriivvaatteeKKeeyy__AASSNN11(SSL *ssl, unsigned char *d, long len);
int SSSSLL__uussee__RRSSAAPPrriivvaatteeKKeeyy__ffiillee(SSL *ssl, char *file, int type);
int SSSSLL__uussee__cceerrttiiffiiccaattee(SSL *ssl, X509 *x);
int SSSSLL__uussee__cceerrttiiffiiccaattee__AASSNN11(SSL *ssl, int len, unsigned char *d);
int SSSSLL__uussee__cceerrttiiffiiccaattee__ffiillee(SSL *ssl, char *file, int type);
int SSSSLL__vveerrssiioonn(const SSL *ssl);
int SSSSLL__wwaanntt(const SSL *ssl);
int SSSSLL__wwaanntt__nnootthhiinngg(const SSL *ssl);
int SSSSLL__wwaanntt__rreeaadd(const SSL *ssl);
int SSSSLL__wwaanntt__wwrriittee(const SSL *ssl);
int SSSSLL__wwaanntt__xx550099__llooookkuupp(const SSL *ssl);
int SSSSLL__wwrriittee(SSL *ssl, const void *buf, int num);
void SSSSLL__sseett__ppsskk__cclliieenntt__ccaallllbbaacckk(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));
int SSSSLL__uussee__ppsskk__iiddeennttiittyy__hhiinntt(SSL *ssl, const char *hint);
void SSSSLL__sseett__ppsskk__sseerrvveerr__ccaallllbbaacckk(SSL *ssl, unsigned int (*callback)(SSL *ssl, const char *identity, unsigned char *psk, int max_psk_len));
const char *SSSSLL__ggeett__ppsskk__iiddeennttiittyy__hhiinntt(SSL *ssl);
const char *SSSSLL__ggeett__ppsskk__iiddeennttiittyy(SSL *ssl);

SEE ALSO

_o_p_e_n_s_s_l(1), _c_r_y_p_t_o(3), _S_S_L___a_c_c_e_p_t(3), _S_S_L___c_l_e_a_r(3), _S_S_L___c_o_n_n_e_c_t(3), _S_S_L___C_I_P_H_E_R___g_e_t___n_a_m_e(3), _S_S_L___C_O_M_P___a_d_d___c_o_m_p_r_e_s_s_i_o_n___m_e_t_h_o_d(3), _S_S_L___C_T_X___a_d_d___e_x_t_r_a___c_h_a_i_n___c_e_r_t(3), _S_S_L___C_T_X___a_d_d___s_e_s_s_i_o_n(3), _S_S_L___C_T_X___c_t_r_l(3), _S_S_L___C_T_X___f_l_u_s_h___s_e_s_s_i_o_n_s(3), _S_S_L___C_T_X___g_e_t___e_x___n_e_w___i_n_d_e_x(3), _S_S_L___C_T_X___g_e_t___v_e_r_i_f_y___m_o_d_e(3), _S_S_L___C_T_X___l_o_a_d___v_e_r_i_f_y___l_o_c_a_t_i_o_n_s(3) _S_S_L___C_T_X___n_e_w(3), _S_S_L___C_T_X___s_e_s_s___n_u_m_b_e_r(3), _S_S_L___C_T_X___s_e_s_s___s_e_t___c_a_c_h_e___s_i_z_e(3), _S_S_L___C_T_X___s_e_s_s___s_e_t___g_e_t___c_b(3), _S_S_L___C_T_X___s_e_s_s_i_o_n_s(3), _S_S_L___C_T_X___s_e_t___c_e_r_t___s_t_o_r_e(3), _S_S_L___C_T_X___s_e_t___c_e_r_t___v_e_r_i_f_y___c_a_l_l_b_a_c_k(3), _S_S_L___C_T_X___s_e_t___c_i_p_h_e_r___l_i_s_t(3), _S_S_L___C_T_X___s_e_t___c_l_i_e_n_t___C_A___l_i_s_t(3), _S_S_L___C_T_X___s_e_t___c_l_i_e_n_t___c_e_r_t___c_b(3), _S_S_L___C_T_X___s_e_t___d_e_f_a_u_l_t___p_a_s_s_w_d___c_b(3), _S_S_L___C_T_X___s_e_t___g_e_n_e_r_a_t_e___s_e_s_s_i_o_n___i_d(3), _S_S_L___C_T_X___s_e_t___i_n_f_o___c_a_l_l_b_a_c_k(3), _S_S_L___C_T_X___s_e_t___m_a_x___c_e_r_t___l_i_s_t(3), _S_S_L___C_T_X___s_e_t___m_o_d_e(3), _S_S_L___C_T_X___s_e_t___m_s_g___c_a_l_l_b_a_c_k(3), _S_S_L___C_T_X___s_e_t___o_p_t_i_o_n_s(3), _S_S_L___C_T_X___s_e_t___q_u_i_e_t___s_h_u_t_d_o_w_n(3), _S_S_L___C_T_X___s_e_t___s_e_s_s_i_o_n___c_a_c_h_e___m_o_d_e(3), _S_S_L___C_T_X___s_e_t___s_e_s_s_i_o_n___i_d___c_o_n_t_e_x_t(3), _S_S_L___C_T_X___s_e_t___s_s_l___v_e_r_s_i_o_n(3), _S_S_L___C_T_X___s_e_t___t_i_m_e_o_u_t(3), _S_S_L___C_T_X___s_e_t___t_m_p___r_s_a___c_a_l_l_b_a_c_k(3), _S_S_L___C_T_X___s_e_t___t_m_p___d_h___c_a_l_l_b_a_c_k(3), _S_S_L___C_T_X___s_e_t___v_e_r_i_f_y(3), _S_S_L___C_T_X___u_s_e___c_e_r_t_i_f_i_c_a_t_e(3), _S_S_L___a_l_e_r_t___t_y_p_e___s_t_r_i_n_g(3), _S_S_L___d_o___h_a_n_d_s_h_a_k_e(3), _S_S_L___g_e_t___S_S_L___C_T_X(3), _S_S_L___g_e_t___c_i_p_h_e_r_s(3), _S_S_L___g_e_t___c_l_i_e_n_t___C_A___l_i_s_t(3), _S_S_L___g_e_t___d_e_f_a_u_l_t___t_i_m_e_o_u_t(3), _S_S_L___g_e_t___e_r_r_o_r(3), _S_S_L___g_e_t___e_x___d_a_t_a___X_5_0_9___S_T_O_R_E___C_T_X___i_d_x(3), _S_S_L___g_e_t___e_x___n_e_w___i_n_d_e_x(3), _S_S_L___g_e_t___f_d(3), _S_S_L___g_e_t___p_e_e_r___c_e_r_t___c_h_a_i_n(3), _S_S_L___g_e_t___r_b_i_o(3), _S_S_L___g_e_t___s_e_s_s_i_o_n(3), _S_S_L___g_e_t___v_e_r_i_f_y___r_e_s_u_l_t(3), _S_S_L___g_e_t___v_e_r_s_i_o_n(3), _S_S_L___l_i_b_r_a_r_y___i_n_i_t(3), _S_S_L___l_o_a_d___c_l_i_e_n_t___C_A___f_i_l_e(3), _S_S_L___n_e_w(3), _S_S_L___p_e_n_d_i_n_g(3), _S_S_L___r_e_a_d(3), _S_S_L___r_s_t_a_t_e___s_t_r_i_n_g(3), _S_S_L___s_e_s_s_i_o_n___r_e_u_s_e_d(3), _S_S_L___s_e_t___b_i_o(3), _S_S_L___s_e_t___c_o_n_n_e_c_t___s_t_a_t_e(3), _S_S_L___s_e_t___f_d(3), _S_S_L___s_e_t___s_e_s_s_i_o_n(3), _S_S_L___s_e_t___s_h_u_t_d_o_w_n(3), _S_S_L___s_h_u_t_d_o_w_n(3), _S_S_L___s_t_a_t_e___s_t_r_i_n_g(3), _S_S_L___w_a_n_t(3), _S_S_L___w_r_i_t_e(3), _S_S_L___S_E_S_S_I_O_N___f_r_e_e(3), _S_S_L___S_E_S_S_I_O_N___g_e_t___e_x___n_e_w___i_n_d_e_x(3), _S_S_L___S_E_S_S_I_O_N___g_e_t___t_i_m_e(3), _d_2_i___S_S_L___S_E_S_S_I_O_N(3), _S_S_L___C_T_X___s_e_t___p_s_k___c_l_i_e_n_t___c_a_l_l_b_a_c_k(3), _S_S_L___C_T_X___u_s_e___p_s_k___i_d_e_n_t_i_t_y___h_i_n_t(3), _S_S_L___g_e_t___p_s_k___i_d_e_n_t_i_t_y(3)

HISTORY

The _s_s_l(3) document appeared in OpenSSL 0.9.2