1*2175Sjp161948=pod 2*2175Sjp161948 3*2175Sjp161948=head1 NAME 4*2175Sjp161948 5*2175Sjp161948d2i_SSL_SESSION, i2d_SSL_SESSION - convert SSL_SESSION object from/to ASN1 representation 6*2175Sjp161948 7*2175Sjp161948=head1 SYNOPSIS 8*2175Sjp161948 9*2175Sjp161948 #include <openssl/ssl.h> 10*2175Sjp161948 11*2175Sjp161948 SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length); 12*2175Sjp161948 int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp); 13*2175Sjp161948 14*2175Sjp161948=head1 DESCRIPTION 15*2175Sjp161948 16*2175Sjp161948d2i_SSL_SESSION() transforms the external ASN1 representation of an SSL/TLS 17*2175Sjp161948session, stored as binary data at location B<pp> with length B<length>, into 18*2175Sjp161948an SSL_SESSION object. 19*2175Sjp161948 20*2175Sjp161948i2d_SSL_SESSION() transforms the SSL_SESSION object B<in> into the ASN1 21*2175Sjp161948representation and stores it into the memory location pointed to by B<pp>. 22*2175Sjp161948The length of the resulting ASN1 representation is returned. If B<pp> is 23*2175Sjp161948the NULL pointer, only the length is calculated and returned. 24*2175Sjp161948 25*2175Sjp161948=head1 NOTES 26*2175Sjp161948 27*2175Sjp161948The SSL_SESSION object is built from several malloc()ed parts, it can 28*2175Sjp161948therefore not be moved, copied or stored directly. In order to store 29*2175Sjp161948session data on disk or into a database, it must be transformed into 30*2175Sjp161948a binary ASN1 representation. 31*2175Sjp161948 32*2175Sjp161948When using d2i_SSL_SESSION(), the SSL_SESSION object is automatically 33*2175Sjp161948allocated. The reference count is 1, so that the session must be 34*2175Sjp161948explicitly removed using L<SSL_SESSION_free(3)|SSL_SESSION_free(3)>, 35*2175Sjp161948unless the SSL_SESSION object is completely taken over, when being called 36*2175Sjp161948inside the get_session_cb() (see 37*2175Sjp161948L<SSL_CTX_sess_set_get_cb(3)|SSL_CTX_sess_set_get_cb(3)>). 38*2175Sjp161948 39*2175Sjp161948SSL_SESSION objects keep internal link information about the session cache 40*2175Sjp161948list, when being inserted into one SSL_CTX object's session cache. 41*2175Sjp161948One SSL_SESSION object, regardless of its reference count, must therefore 42*2175Sjp161948only be used with one SSL_CTX object (and the SSL objects created 43*2175Sjp161948from this SSL_CTX object). 44*2175Sjp161948 45*2175Sjp161948When using i2d_SSL_SESSION(), the memory location pointed to by B<pp> must be 46*2175Sjp161948large enough to hold the binary representation of the session. There is no 47*2175Sjp161948known limit on the size of the created ASN1 representation, so the necessary 48*2175Sjp161948amount of space should be obtained by first calling i2d_SSL_SESSION() with 49*2175Sjp161948B<pp=NULL>, and obtain the size needed, then allocate the memory and 50*2175Sjp161948call i2d_SSL_SESSION() again. 51*2175Sjp161948 52*2175Sjp161948=head1 RETURN VALUES 53*2175Sjp161948 54*2175Sjp161948d2i_SSL_SESSION() returns a pointer to the newly allocated SSL_SESSION 55*2175Sjp161948object. In case of failure the NULL-pointer is returned and the error message 56*2175Sjp161948can be retrieved from the error stack. 57*2175Sjp161948 58*2175Sjp161948i2d_SSL_SESSION() returns the size of the ASN1 representation in bytes. 59*2175Sjp161948When the session is not valid, B<0> is returned and no operation is performed. 60*2175Sjp161948 61*2175Sjp161948=head1 SEE ALSO 62*2175Sjp161948 63*2175Sjp161948L<ssl(3)|ssl(3)>, L<SSL_SESSION_free(3)|SSL_SESSION_free(3)>, 64*2175Sjp161948L<SSL_CTX_sess_set_get_cb(3)|SSL_CTX_sess_set_get_cb(3)> 65*2175Sjp161948 66*2175Sjp161948=cut 67