/* Lets make this into an ASN.1 type structure as follows * SSL_SESSION_ID ::= SEQUENCE { *	version 		INTEGER,	-- structure version number *	SSLversion 		INTEGER,	-- SSL version number *	Cipher 			OCTET_STRING,	-- the 3 byte cipher ID *	Session_ID 		OCTET_STRING,	-- the Session ID *	Master_key 		OCTET_STRING,	-- the master key *	Key_Arg [ 0 ] IMPLICIT	OCTET_STRING,	-- the optional Key argument *	Time [ 1 ] EXPLICIT	INTEGER,	-- optional Start Time *	Timeout [ 2 ] EXPLICIT	INTEGER,	-- optional Timeout ins seconds *	Peer [ 3 ] EXPLICIT	X509,		-- optional Peer Certificate *	Session_ID_context [ 4 ] EXPLICIT OCTET_STRING,   -- the Session ID context *	Verify_result [ 5 ] EXPLICIT INTEGER    -- X509_V_... code for `Peer' *	Compression [6] IMPLICIT ASN1_OBJECT	-- compression OID XXXXX *	} * Look in ssl/ssl_asn1.c for more details * I'm using EXPLICIT tags so I can read the damn things using asn1parse :-). */   typedef struct ssl_session_st   { 	int ssl_version;	/* what ssl version session info is 				 * being kept in here? */   	/* only really used in SSLv2 */   	unsigned int key_arg_length; 	unsigned char key_arg[SSL_MAX_KEY_ARG_LENGTH]; 	int master_key_length; 	unsigned char master_key[SSL_MAX_MASTER_KEY_LENGTH];   /* session_id - valid? */   	unsigned int session_id_length; 	unsigned char session_id[SSL_MAX_SSL_SESSION_ID_LENGTH];   	/* this is used to determine whether the session is being reused in 	 * the appropriate context. It is up to the application to set this, 	 * via SSL_new */   	unsigned int sid_ctx_length; 	unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH]; 	int not_resumable;   	/* The cert is the certificate used to establish this connection */   	struct sess_cert_st /* SESS_CERT */ *sess_cert;   	/* This is the cert for the other end. 	 * On clients, it will be the same as sess_cert->peer_key->x509 	 * (the latter is not enough as sess_cert is not retained 	 * in the external representation of sessions, see ssl_asn1.c). */   	X509 *peer;   	/* when app_verify_callback accepts a session where the peer's certificate 	 * is not ok, we must remember the error for session reuse: */   	long verify_result; /* only for servers */   	int references; 	long timeout; 	long time; 	int compress_meth;		/* Need to lookup the method */   	SSL_CIPHER *cipher;   	unsigned long cipher_id;	/* when ASN.1 loaded, this   					 * needs to be used to load 					 * the 'cipher' structure */   	STACK_OF(SSL_CIPHER) *ciphers; /* shared ciphers? */ 	CRYPTO_EX_DATA ex_data; /* application specific data */   	/* These are used to make removal of session-ids more 	 * efficient and to implement a maximum cache size. */   	struct ssl_session_st *prev,*next;   } SSL_SESSION;
   |