HP Open Source Security for OpenVMS Volume 2: HP SSL for OpenVMS > Appendix A Data Structures and Header Files 
       
      
      SSL Structure
      
      
      
      The SSL structure is defined in ssl.h.    |  
 struct ssl_st { 	/* protocol version 	 * (one of SSL2_VERSION, SSL3_VERSION, TLS1_VERSION) 	 */   int version; 	int type; /* SSL_ST_CONNECT or SSL_ST_ACCEPT */   	SSL_METHOD *method; /* SSLv3 */     	/* There are 2 BIO's even though they are normally both the 	 * same.  This is so data can be read and written to different 	 * handlers */   #ifndef NO_BIO   	BIO *rbio; /* used by SSL_read */ 	BIO *wbio; /* used by SSL_write */ 	BIO *bbio; /* used during session-id reuse to concatenate 		    * messages */   #else   	char *rbio; /* used by SSL_read */ 	char *wbio; /* used by SSL_write */ 	char *bbio; #endif   	/* This holds a variable that indicates what we were doing 	 * when a 0 or -1 is returned.  This is needed for 	 * non-blocking IO so we know what request needs re-doing when 	 * in SSL_accept or SSL_connect */   	int rwstate;   	/* true when we are actually in SSL_accept() or SSL_connect() */   	int in_handshake; 	int (*handshake_func)();   	/* Imagine that here's a boolean member "init" that is 	 * switched as soon as SSL_set_{accept/connect}_state 	 * is called for the first time, so that "state" and 	 * "handshake_func" are properly initialized.  But as 	 * handshake_func is == 0 until then, we use this 	 * test instead of an "init" member. 	 */   	int server;	/* are we the server side? - mostly used by SSL_clear*/ 	int new_session;/* 1 if we are to use a new session */ 	int quiet_shutdown;/* don't send shutdown packets */ 	int shutdown;	/* we have shut things down, 0x01 sent, 0x02   			 * for received */   	int state;	/* where we are */ 	int rstate;	/* where we are when reading */   	BUF_MEM *init_buf;	/* buffer used during init */ 	int init_num;		/* amount read/written */ 	int init_off;		/* amount read/written */   	/* used internally to point at a raw packet */   	unsigned char *packet; 	unsigned int packet_length; 	struct ssl2_state_st *s2; /* SSLv2 variables */ 	struct ssl3_state_st *s3; /* SSLv3 variables */ 	int read_ahead;		/* Read as many input bytes as possible 	               	 	* (for non-blocking reads) */   	int hit;		/* reusing a previous session */ 	int purpose;		/* Purpose setting */ 	int trust;		/* Trust setting */   	/* crypto */   	STACK_OF(SSL_CIPHER) *cipher_list; 	STACK_OF(SSL_CIPHER) *cipher_list_by_id;   	/* These are the ones being used, the ones in SSL_SESSION are 	 * the ones to be 'copied' into these ones */   	EVP_CIPHER_CTX *enc_read_ctx;		/* cryptographic state */ 	const EVP_MD *read_hash;		/* used for mac generation */ #ifndef NO_COMP 	COMP_CTX *expand;			/* uncompress */ #else   	char *expand; #endif   	EVP_CIPHER_CTX *enc_write_ctx;		/* cryptographic state */ 	const EVP_MD *write_hash;		/* used for mac generation */ #ifndef NO_COMP
   |  
   |  
   |  
 	COMP_CTX *compress;			/* compression */ #else 	char *compress;	 #endif   	/* session info */ 	/* client cert? */ 	/* This is used to hold the server certificate used */   	struct cert_st /* CERT */ *cert;   	/* the session_id_context is used to ensure sessions are only reused 	 * in the appropriate context */   	unsigned int sid_ctx_length; 	unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];   	/* This can also be in the session once a session is established */   	SSL_SESSION *session;   	/* Used in SSL2 and SSL3 */ 	int verify_mode; 	/* 0 don't care about verify failure. 				 * 1 fail if verify fails */   	int verify_depth; 	int (*verify_callback)(int ok,X509_STORE_CTX *ctx); /* fail if callback returns 0 */ 	void (*info_callback)(); /* optional informational callback */   	int error;		/* error bytes to be written */ 	int error_code;		/* actual code */   	SSL_CTX *ctx;   	/* set this flag to 1 and a sleep(1) is put into all SSL_read() 	 * and SSL_write() calls, good for nbio debuging :-) */   	int debug;	   	/* extra application data */   	long verify_result; 	CRYPTO_EX_DATA ex_data;   	/* for server side, keep the list of CA_dn we can use */   	STACK_OF(X509_NAME) *client_CA; 	int references; 	unsigned long options; /* protocol behaviour */ 	unsigned long mode; /* API behaviour */ 	int first_packet; 	int client_version;	/* what was passed, used for   				 * SSLv3/TLS rollback check */   };
   |  
   |  
  
      
     |