# 1 "ssl_client.c"
 
 






# 1 "/usr/local/lib/gcc-lib/i486-sun-solaris2/2.6.3/include/stdio.h" 1 3
 
 

 
 
 

 





#pragma ident	"@(#)stdio.h	1.2	90/03/29 SMI"	







typedef unsigned int	size_t;


typedef long	fpos_t;
































































typedef struct	 
{




	int		_cnt;	 
	unsigned char	*_ptr;	 

	unsigned char	*_base;	 
	unsigned char	_flag;	 
	unsigned char	_file;	 
} FILE;


extern FILE		__iob[60 ];



extern FILE		*_lastbuf;
extern unsigned char	*_bufendtab[];

extern unsigned char	 _sibuf[], _sobuf[];




extern int	remove(const char *);
extern int	rename(const char *, const char *);
extern FILE	*tmpfile(void);
extern char	*tmpnam(char *);
extern int	fclose(FILE *);
extern int	fflush(FILE *);
extern FILE	*fopen(const char *, const char *);
extern FILE	*freopen(const char *, const char *, FILE *);
extern void	setbuf(FILE *, char *);
extern int	setvbuf(FILE *, char *, int, size_t);
 
extern int	fprintf(FILE *, const char *, ...);
 
extern int	fscanf(FILE *, const char *, ...);
 
extern int	printf(const char *, ...);
 
extern int	scanf(const char *, ...);
 
extern int	sprintf(char *, const char *, ...);
 
extern int	sscanf(const char *, const char *, ...);
extern int	vfprintf(FILE *, const char *, void *);
extern int	vprintf(const char *, void *);
extern int	vsprintf(char *, const char *, void *);
extern int	fgetc(FILE *);
extern char	*fgets(char *, int, FILE *);
extern int	fputc(int, FILE *);
extern int	fputs(const char *, FILE *);
extern int	getc(FILE *);
extern int	getchar(void);
extern char	*gets(char *);
extern int	putc(int, FILE *);
extern int	putchar(int);
extern int	puts(const char *);
extern int	ungetc(int, FILE *);
extern size_t	fread(void *, size_t, size_t, FILE *);
	#pragma int_to_unsigned fread
extern size_t	fwrite(const void *, size_t, size_t, FILE *);
	#pragma int_to_unsigned fwrite
extern int	fgetpos(FILE *, fpos_t *);
extern int	fseek(FILE *, long, int);
extern int	fsetpos(FILE *, const fpos_t *);
extern long	ftell(FILE *);
extern void	rewind(FILE *);
extern void	clearerr(FILE *);
extern int	feof(FILE *);
extern int	ferror(FILE *);
extern void	perror(const char *);

extern int	__filbuf(FILE *);
extern int	__flsbuf(int, FILE *);












 




extern FILE	*fdopen(int, const char *);
extern char	*ctermid(char *);
extern int	fileno(FILE *);







 




extern FILE	*popen(const char *, const char *);
extern char	*cuserid(char *);
extern char	*tempnam(const char *, const char *);
extern int	getw(FILE *);
extern int	putw(int, FILE *);
extern int	pclose(FILE *);



# 239 "/usr/local/lib/gcc-lib/i486-sun-solaris2/2.6.3/include/stdio.h" 3











# 9 "ssl_client.c" 2

# 1 "/usr/include/netdb.h" 1 3
 
 

 
 
 

 






















 








#pragma ident	"@(#)netdb.h	1.13	94/01/26 SMI"	











struct	hostent {
	char	*h_name;	 
	char	**h_aliases;	 
	int	h_addrtype;	 
	int	h_length;	 
	char	**h_addr_list;	 

};

 



struct	netent {
	char		*n_name;	 
	char		**n_aliases;	 
	int		n_addrtype;	 
	unsigned long	n_net;		 
};

struct	servent {
	char	*s_name;	 
	char	**s_aliases;	 
	int	s_port;		 
	char	*s_proto;	 
};

struct	protoent {
	char	*p_name;	 
	char	**p_aliases;	 
	int	p_proto;	 
};


struct hostent	*gethostbyname_r
	(const char *,		 struct hostent *, char *, int, int *h_errnop);
struct hostent	*gethostbyaddr_r
	(const char *, int, int, struct hostent *, char *, int, int *h_errnop);
struct hostent	*gethostent_r(struct hostent *, char *, int, int *h_errnop);

struct servent	*getservbyname_r
	(const char *name, const char *, struct servent *, char *, int);
struct servent	*getservbyport_r
	(int port,	   const char *, struct servent *, char *, int);
struct servent	*getservent_r(struct	servent *, char *, int);

struct netent	*getnetbyname_r
	(const char *, struct netent *, char *, int);
struct netent	*getnetbyaddr_r(long, int, struct netent *, char *, int);
struct netent	*getnetent_r(struct netent *, char *, int);

struct protoent	*getprotobyname_r
	(const char *, struct protoent *, char *, int);
struct protoent	*getprotobynumber_r
	(int, struct protoent *, char *, int);
struct protoent	*getprotoent_r(struct protoent *, char *, int);

 
struct hostent	*gethostbyname(const char *);
struct hostent	*gethostbyaddr(const char *, int, int);
struct hostent	*gethostent(void);
struct netent	*getnetbyname(const char *);
struct netent	*getnetbyaddr(long, int);
struct netent	*getnetent(void);
struct servent	*getservbyname(const char *, const char *);
struct servent	*getservbyport(int, const char *);
struct servent	*getservent(void);
struct protoent	*getprotobyname(const char *);
struct protoent	*getprotobynumber(int);
struct protoent	*getprotoent(void);

int sethostent(int);
int endhostent(void);
int setnetent(int);
int endnetent(void);
int setservent(int);
int endservent(void);
int setprotoent(int);
int endprotoent(void);
int rcmd(char **ahost, unsigned short inport,
	const char *luser, const char *ruser, const char *cmd, int *fd2p);
int rexec(char **ahost, unsigned short inport,
	const char *user, const char *passwd, const char *cmd, int *fd2p);
int rresvport(int *);
int ruserok(const char *rhost, int suser, const char *ruser, const char *luser);
# 177 "/usr/include/netdb.h" 3


 




extern  int h_errno;

















# 10 "ssl_client.c" 2

# 1 "/usr/local/lib/gcc-lib/i486-sun-solaris2/2.6.3/include/sys/types.h" 1 3
 
 

 
 
 




#pragma ident	"@(#)types.h	1.21	92/12/02 SMI"

 



# 1 "/usr/include/sys/machtypes.h" 1 3
 
 

 
 
 

 






#pragma ident	"@(#)machtypes.h	1.4	94/05/25 SMI"





 








typedef struct  _physadr_t { int r[1]; } *physadr_t;

typedef	struct	_label_t { int	val[6]; } label_t;  



typedef	unsigned char	lock_t;		 






# 17 "/usr/local/lib/gcc-lib/i486-sun-solaris2/2.6.3/include/sys/types.h" 2 3






 

typedef	unsigned char	uchar_t;
typedef	unsigned short	ushort_t;
typedef	unsigned int	uint_t;
typedef	unsigned long	ulong_t;

typedef	char *		caddr_t;	 
typedef	long		daddr_t;	 
typedef	long		off_t;		 
typedef	short		cnt_t;		 

typedef	ulong_t		paddr_t;	 
typedef	uchar_t		use_t;		 
typedef	short		sysid_t;
typedef	short		index_t;
typedef enum boolean { B_FALSE, B_TRUE } boolean_t;

 





typedef	long long		longlong_t;
typedef	unsigned long long	u_longlong_t;
# 59 "/usr/local/lib/gcc-lib/i486-sun-solaris2/2.6.3/include/sys/types.h" 3


typedef	longlong_t	offset_t;
typedef	longlong_t	diskaddr_t;

 







typedef union lloff {
	offset_t	_f;	 
	struct {
		off_t _l;	 
		long _u;	 
	} _p;
} lloff_t;
# 87 "/usr/local/lib/gcc-lib/i486-sun-solaris2/2.6.3/include/sys/types.h" 3



typedef union lldaddr {
	diskaddr_t	_f;	 
	struct {
		daddr_t _l;	 
		long _u;	 
	} _p;
} lldaddr_t;
# 105 "/usr/local/lib/gcc-lib/i486-sun-solaris2/2.6.3/include/sys/types.h" 3


typedef ulong_t k_fltset_t;	 

 







typedef long		id_t;		 
					 
					 
					 
					 


 

typedef ulong_t	major_t;	 
typedef ulong_t	minor_t;	 


 

typedef short	pri_t;

 










typedef	ushort_t o_mode_t;		 
typedef short	o_dev_t;		 
typedef	ushort_t o_uid_t;		 
typedef	o_uid_t	o_gid_t;		 
typedef	short	o_nlink_t;		 
typedef short	o_pid_t;		 
typedef ushort_t o_ino_t;		 


 

typedef	int	key_t;			 
typedef	ulong_t	mode_t;			 



typedef	long	uid_t;			 


typedef	uid_t	gid_t;			 
typedef	ulong_t nlink_t;		 
typedef ulong_t	dev_t;			 
typedef ulong_t	ino_t;			 
typedef long	pid_t;			 











typedef int	ssize_t;	 
				 




typedef	long		time_t;	 




typedef	long		clock_t;  





typedef	unsigned char	unchar;
typedef	unsigned short	ushort;
typedef	unsigned int	uint;
typedef	unsigned long	ulong;

# 214 "/usr/local/lib/gcc-lib/i486-sun-solaris2/2.6.3/include/sys/types.h" 3





 












 




typedef	long	hostid_t;

 







typedef unsigned char	u_char;
typedef unsigned short	u_short;
typedef unsigned int	u_int;
typedef unsigned long	u_long;
typedef struct _quad { long val[2]; } quad;	 


 



# 1 "/usr/include/sys/select.h" 1 3
 
 

 
 
 




#pragma ident	"@(#)select.h	1.10	92/07/14 SMI"	


# 1 "/usr/include/sys/time.h" 1 3
 
 

 
 
 

 








#pragma ident	"@(#)time.h	2.40	94/05/24 SMI"	

# 1 "/usr/include/sys/feature_tests.h" 1 3
 
 

 
 
 




#pragma ident	"@(#)feature_tests.h	1.6	93/07/09 SMI"





 
















# 19 "/usr/include/sys/time.h" 2 3


 











struct timeval {
	long	tv_sec;		 
	long	tv_usec;	 
};

struct timezone {
	int	tz_minuteswest;	 
	int	tz_dsttime;	 
};







 



# 1 "/usr/local/lib/gcc-lib/i486-sun-solaris2/2.6.3/include/sys/types.h" 1 3
 
 

 
 
 

# 277 "/usr/local/lib/gcc-lib/i486-sun-solaris2/2.6.3/include/sys/types.h" 3

# 53 "/usr/include/sys/time.h" 2 3





















 














 








struct	itimerval {
	struct	timeval it_interval;	 
	struct	timeval it_value;	 
};

 






















 


# 138 "/usr/include/sys/time.h" 3


typedef struct	timespec {		 
	time_t 		tv_sec;		 
	long		tv_nsec;	 
} timespec_t;

typedef	struct timespec	timestruc_t;	 


 









 




typedef struct itimerspec {		 
	struct timespec	it_interval;	 
	struct timespec	it_value;	 
} itimerspec_t;


 


typedef	longlong_t	hrtime_t;

# 210 "/usr/include/sys/time.h" 3





int adjtime(struct timeval *, struct timeval *);
int getitimer(int, struct itimerval *);
int setitimer(int, struct itimerval *, struct itimerval *);






hrtime_t	gethrtime(void);
hrtime_t	gethrvtime(void);
# 235 "/usr/include/sys/time.h" 3


# 1 "/usr/local/lib/gcc-lib/i486-sun-solaris2/2.6.3/include/time.h" 1 3
 
 

 
 
 




#pragma ident	"@(#)time.h	1.8	92/07/14 SMI"	
























struct	tm {	 
	int	tm_sec;
	int	tm_min;
	int	tm_hour;
	int	tm_mday;
	int	tm_mon;
	int	tm_year;
	int	tm_wday;
	int	tm_yday;
	int	tm_isdst;
};



extern clock_t clock(void);
extern double difftime(time_t, time_t);
extern time_t mktime(struct tm *);
extern time_t time(time_t *);
extern char *asctime(const struct tm *);
extern char *ctime (const time_t *);
extern struct tm *gmtime(const time_t *);
extern struct tm *localtime(const time_t *);
extern size_t strftime(char *, size_t, const char *, const struct tm *);


extern void tzset(void);

extern char *tzname[2];



				 



extern long timezone;
extern int daylight;





extern int cftime(char *, char *, const time_t *);
extern int ascftime(char *, const char *, const struct tm *);
extern long altzone;
extern struct tm *getdate(const char *);
extern int getdate_err;


# 104 "/usr/local/lib/gcc-lib/i486-sun-solaris2/2.6.3/include/time.h" 3







# 237 "/usr/include/sys/time.h" 2 3









# 14 "/usr/include/sys/select.h" 2 3







 













typedef	long	fd_mask;





typedef	struct fd_set {
	fd_mask	fds_bits[((( 1024  )+((  (sizeof (fd_mask) * 8 )  )-1))/(  (sizeof (fd_mask) * 8 )  )) ];
} fd_set;


















extern int select(int, fd_set *, fd_set *, fd_set *, struct timeval *);










# 258 "/usr/local/lib/gcc-lib/i486-sun-solaris2/2.6.3/include/sys/types.h" 2 3




 















# 11 "ssl_client.c" 2

# 1 "/usr/include/sys/socket.h" 1 3
 
 

 
 
 




#pragma ident	"@(#)socket.h	1.14	94/06/08 SMI"	

 























# 1 "/usr/include/sys/netconfig.h" 1 3
 
 

 
 
 




#pragma ident	"@(#)netconfig.h	1.12	93/02/04 SMI"	








struct  netconfig {
	char		*nc_netid;	 
	unsigned long	nc_semantics;	 
	unsigned long	nc_flag;	 
	char		*nc_protofmly;	 
	char		*nc_proto;	 
	char		*nc_device;	 
	unsigned long	nc_nlookups;	 
	char		**nc_lookups;	 
	unsigned long	nc_unused[8];
};

typedef struct {
	struct netconfig **nc_head;
	struct netconfig **nc_curr;
} NCONF_HANDLE;

 








 







 



























 










extern void		*setnetconfig(void);
extern int		endnetconfig(void *);
extern struct netconfig	*getnetconfig(void *);
extern struct netconfig	*getnetconfigent(char *);
extern void		freenetconfigent(struct netconfig *);
extern void		*setnetpath(void);
extern int		endnetpath(void *);
extern struct netconfig *getnetpath(void *);








# 37 "/usr/include/sys/socket.h" 2 3







 










 








 












 





 












 


struct	linger {
	int	l_onoff;		 
	int	l_linger;		 
};

 




 




























 



struct sockaddr {
	u_short	sa_family;		 
	char	sa_data[14];		 
};

 



struct sockproto {
	u_short	sp_family;		 
	u_short	sp_protocol;		 
};

 





























 




 


struct msghdr {
	caddr_t	msg_name;		 
	int	msg_namelen;		 
	struct	iovec *msg_iov;		 
	int	msg_iovlen;		 
	caddr_t	msg_accrights;		 
	int	msg_accrightslen;
};







 






struct opthdr {
	long	level;		 
	long	name;		 
	long	len;		 
};




 



struct optdefault {
	int	optname;	 
	char	*val;		 
	int	len;		 
};

 



struct opproc {
	int	level;		 
	int	(*func)();	 
};

 


struct socksysreq {
	int	args[7];
};

 




struct socknewproto {
	int	family;	 
	int	type;	 
	int	proto;	 
	dev_t	dev;	 
	int	flags;	 
};


 




























extern int accept(int, struct sockaddr *, int *);
extern int bind(int, struct sockaddr *, int);
extern int connect(int, struct sockaddr *, int);
extern int getpeername(int, struct sockaddr *, int *);
extern int getsockname(int, struct sockaddr *, int *);
extern int getsockopt(int, int, int, char *, int *);
extern int listen(int, int);
extern int recv(int, char *, int, int);
extern int recvfrom(int, char *, int, int, struct sockaddr *, int *);
extern int send(int, const char *, int, int);
extern int sendto(int, const char *, int, int, struct sockaddr *, int);
extern int setsockopt(int, int, int, const char *, int);
extern int socket(int, int, int);
extern int recvmsg(int, struct msghdr *, int);
extern int sendmsg(int, struct msghdr *, int);
extern int shutdown(int, int);
extern int socketpair(int, int, int, int *);
# 329 "/usr/include/sys/socket.h" 3








# 12 "ssl_client.c" 2

# 1 "/usr/local/lib/gcc-lib/i486-sun-solaris2/2.6.3/include/sys/param.h" 1 3
 
 

 
 
 

 

























#pragma ident	"@(#)param.h	1.20	92/09/23 SMI"	









 





























				 
				 
				 

 






 





 























 



















 












 



 

















 














 



 


































 




 






 


# 250 "/usr/local/lib/gcc-lib/i486-sun-solaris2/2.6.3/include/sys/param.h" 3






 




# 347 "/usr/local/lib/gcc-lib/i486-sun-solaris2/2.6.3/include/sys/param.h" 3


 





# 1 "/usr/include/sys/unistd.h" 1 3
 









 








#pragma ident	"@(#)unistd.h	1.20	94/02/16 SMI"	







 

 








 




 




 



























 
























 


 

 









 



































# 355 "/usr/local/lib/gcc-lib/i486-sun-solaris2/2.6.3/include/sys/param.h" 2 3



















# 13 "ssl_client.c" 2


# 1 "/usr/include/netinet/in.h" 1 3
 











 







#pragma ident	"@(#)in.h	1.4	93/07/06 SMI"
 





# 1 "/usr/include/sys/stream.h" 1 3
 
 

 
 
 




#pragma ident	"@(#)stream.h	1.54	94/06/28 SMI"	

 


# 1 "/usr/include/sys/vnode.h" 1 3
 
 

 
 
 

 

























#pragma ident	"@(#)vnode.h	1.49	94/01/13 SMI"	


# 1 "/usr/include/sys/t_lock.h" 1 3
 



 








#pragma ident	"@(#)t_lock.h	1.39	93/10/29 SMI"


# 1 "/usr/include/sys/machlock.h" 1 3
 






#pragma ident	"@(#)machlock.h	1.11	94/05/17 SMI"











extern void	lock_set(lock_t *lp);
extern int	lock_try(lock_t *lp);
extern void	lock_clear(lock_t *lp);

extern int	lock_set_spl(lock_t *lp, int pl);
extern void	lock_clear_splx(lock_t *lp, int s);














typedef	lock_t	disp_lock_t;		 

 





 







 


extern volatile int hres_lock;
extern hrtime_t hrtime_base;
extern hrtime_t hrestime_adj;
extern int clock_res;











# 17 "/usr/include/sys/t_lock.h" 2 3

# 1 "/usr/include/sys/dki_lkinfo.h" 1 3
 






#pragma ident	"@(#)dki_lkinfo.h	1.8	93/05/03 SMI"


# 1 "/usr/local/lib/gcc-lib/i486-sun-solaris2/2.6.3/include/sys/dl.h" 1 3
 
 

 
 
 




#pragma ident	"@(#)dl.h	1.12	93/03/22 SMI"	





typedef	struct dl {

	ulong_t	dl_lop;
	long	dl_hop;




} dl_t;


extern dl_t	ladd(dl_t, dl_t);
extern dl_t	lsub(dl_t, dl_t);
extern dl_t	lmul(dl_t, dl_t);
extern dl_t	ldivide(dl_t, dl_t);
extern dl_t	lshiftl(dl_t, int);
extern dl_t	llog10(dl_t);
extern dl_t	lexp10(dl_t);
# 43 "/usr/local/lib/gcc-lib/i486-sun-solaris2/2.6.3/include/sys/dl.h" 3


extern dl_t	lzero;
extern dl_t	lone;
extern dl_t	lten;






# 11 "/usr/include/sys/dki_lkinfo.h" 2 3






 



typedef struct lkinfo {
	char	*lk_name;	 
	int	lk_flags;	 
	long	lk_pad[2];	 
} lkinfo_t;

typedef struct _lkstat_t {
	lkinfo_t	*ls_infop;	 
	ulong_t		ls_wrcnt;	 
	ulong_t		ls_rdcnt;	 
	ulong_t		ls_solordcnt;	 
	ulong_t		ls_fail;	 
	 
	union {
		dl_t lsu_time;		 
		struct _lkstat_t *lsu_next;  
	} un;

	dl_t		ls_wtime;	 
	dl_t		ls_htime;	 
} lkstat_t;

typedef struct lkstat_sum {
	lkstat_t	*sp;
	struct lkstat_sum *next;
} lkstat_sum_t;

 




 


typedef struct lksblk {
	struct lksblk *lsb_prev, *lsb_next;
	int lsb_nfree;				 
	lkstat_t *lsb_free;			 
	lkstat_t lsb_bufs[91 ];		 
} lksblk_t;


extern lkstat_t *lkstat_alloc(lkinfo_t *, int);
extern void	lkstat_free(lkstat_t *, int);
extern void	lkstat_sum_on_destroy(lkstat_t *);
extern void *	startup_alloc(size_t, void **);
extern void	startup_free(void *, size_t, void **);







# 18 "/usr/include/sys/t_lock.h" 2 3

# 1 "/usr/include/sys/sleepq.h" 1 3
 






#pragma ident	"@(#)sleepq.h	1.16	93/11/27 SMI"







 





typedef struct sleepq {
	struct _kthread * sq_first;
} sleepq_t;

 


typedef struct _sleepq_head {
	sleepq_t	sq_queue;
	disp_lock_t	sq_lock;
} sleepq_head_t;

# 85 "/usr/include/sys/sleepq.h" 3








# 19 "/usr/include/sys/t_lock.h" 2 3

# 1 "/usr/include/sys/turnstile.h" 1 3
 






#pragma ident	"@(#)turnstile.h	1.22	93/12/20 SMI"



# 1 "/usr/include/sys/pirec.h" 1 3
 






#pragma ident	"@(#)pirec.h	1.11	93/12/20 SMI"





 

















typedef struct pirec
{
	struct pirec	*pi_forw;	 
	struct pirec	*pi_back;	 
	struct _kthread *pi_benef;	 
	uint_t		pi_epri_hi;	 
} pirec_t;

# 66 "/usr/include/sys/pirec.h" 3







# 12 "/usr/include/sys/turnstile.h" 2 3









 




typedef enum
{
	QOBJ_DEF = 0,		 
	QOBJ_RDR = 0,		 
	QOBJ_WRT = 1,		 
	QOBJ_CV  = 0,		 
	QOBJ_MTX = 0,		 
	QOBJ_SEM = 0		 
} qobj_t;





typedef struct turnstile	turnstile_t;

typedef ushort_t		turnstile_id_t;

struct turnstile
{
	union tstile_un
	{
		 



		turnstile_t	*ts_forw;

		 




		pirec_t		ts_prioinv;
	} tsun;

	 



	sleepq_t	ts_sleepq[2 ];
	 





	turnstile_id_t	ts_id;
	uchar_t		ts_flags;
	disp_lock_t	ts_wlock;	 

	 




	void		*ts_sobj_priv_data;	 
};

# 182 "/usr/include/sys/turnstile.h" 3







# 20 "/usr/include/sys/t_lock.h" 2 3

# 1 "/usr/include/sys/mutex.h" 1 3
 






#pragma ident	"@(#)mutex.h	1.11	93/11/16 SMI"











 
























typedef enum {
	MUTEX_ADAPTIVE = 0,	 
	MUTEX_SPIN,		 
	MUTEX_ADAPTIVE_STAT,	 
	MUTEX_SPIN_STAT,	 
	MUTEX_DRIVER_NOSTAT = 4,  
	MUTEX_DRIVER_STAT = 5,	 
	MUTEX_ADAPTIVE_DEF	 
} kmutex_type_t;











 








typedef struct mutex {
	void	*_opaque[2];
} kmutex_t;


# 100 "/usr/include/sys/mutex.h" 3









# 21 "/usr/include/sys/t_lock.h" 2 3

# 1 "/usr/include/sys/rwlock.h" 1 3
 



 










#pragma ident	"@(#)rwlock.h	1.1	93/10/13 SMI"







typedef enum {
	RW_SLEEP,			 
	RW_SLEEP_STAT,			 
	RW_DRIVER_NOSTAT = 2,		 
	RW_DRIVER_STAT = 3,		 
	RW_DEFAULT			 
} krw_type_t;

typedef enum {
	RW_WRITER,
	RW_READER
} krw_t;







typedef struct _krwlock {
	void	*_opaque[3];
} krwlock_t;


# 71 "/usr/include/sys/rwlock.h" 3









# 22 "/usr/include/sys/t_lock.h" 2 3

# 1 "/usr/include/sys/semaphore.h" 1 3
 



 











#pragma ident	"@(#)semaphore.h	1.2	93/11/12 SMI"














 


typedef enum {
	SEMA_DEFAULT,
	SEMA_DRIVER
} ksema_type_t;

typedef struct _ksema {
	void	* _opaque[2];	 
} ksema_t;

# 59 "/usr/include/sys/semaphore.h" 3








# 23 "/usr/include/sys/t_lock.h" 2 3

# 1 "/usr/include/sys/condvar.h" 1 3
 



 










#pragma ident	"@(#)condvar.h	1.4	94/03/15 SMI"














 



typedef struct _kcondvar {
	ushort_t	_opaque;
} kcondvar_t;

typedef	enum {
	CV_DEFAULT,
	CV_DRIVER
} kcv_type_t;


# 64 "/usr/include/sys/condvar.h" 3









# 24 "/usr/include/sys/t_lock.h" 2 3









 









 






# 75 "/usr/include/sys/t_lock.h" 3









# 37 "/usr/include/sys/vnode.h" 2 3


# 1 "/usr/include/sys/cred.h" 1 3
 
 

 
 
 

 

























#pragma ident	"@(#)cred.h	1.17	94/03/17 SMI"	









 





typedef struct cred {
	ulong_t	cr_ref;			 
	uid_t	cr_uid;			 
	gid_t	cr_gid;			 
	uid_t	cr_ruid;		 
	gid_t	cr_rgid;		 
	uid_t	cr_suid;		 
	gid_t	cr_sgid;		 
	ulong_t	cr_ngroups;		 
	gid_t	cr_groups[1];		 
} cred_t;

# 89 "/usr/include/sys/cred.h" 3







# 39 "/usr/include/sys/vnode.h" 2 3

# 1 "/usr/include/sys/uio.h" 1 3
 
 

 
 
 




#pragma ident	"@(#)uio.h	1.21	94/04/22 SMI"	









 






typedef struct iovec {
	caddr_t	iov_base;
	int	iov_len;
} iovec_t;

 


typedef enum uio_seg { UIO_USERSPACE, UIO_SYSSPACE, UIO_USERISPACE } uio_seg_t;

typedef struct uio {
	iovec_t	*uio_iov;	 
	int	uio_iovcnt;	 
	lloff_t	_uio_offset;	 
	uio_seg_t uio_segflg;	 
	short	uio_fmode;	 
	lldaddr_t _uio_limit;	 
	int	uio_resid;	 
} uio_t;







 


typedef enum uio_rw { UIO_READ, UIO_WRITE } uio_rw_t;

# 83 "/usr/include/sys/uio.h" 3




extern ssize_t readv(int, struct iovec *, int);
extern ssize_t writev(int, const struct iovec *, int);













# 40 "/usr/include/sys/vnode.h" 2 3

# 1 "/usr/include/vm/seg_enum.h" 1 3
 
 

 
 
 

 

























#pragma ident	"@(#)seg_enum.h	1.1	93/04/03 SMI"





 




 




enum fault_type {
	F_INVAL,		 
	F_PROT,			 
	F_SOFTLOCK,		 
	F_SOFTUNLOCK		 
};

 


enum seg_rw {
	S_OTHER,		 
	S_READ,			 
	S_WRITE,		 
	S_EXEC,			 
	S_CREATE		 
};






# 41 "/usr/include/sys/vnode.h" 2 3









 





 



typedef enum vtype {
	VNON	= 0,
	VREG	= 1,
	VDIR	= 2,
	VBLK	= 3,
	VCHR	= 4,
	VLNK	= 5,
	VFIFO	= 6,
	VBAD	= 8
} vtype_t;

 







typedef struct vnode {
	kmutex_t	v_lock;			 
	u_short		v_flag;			 
	u_long		v_count;		 
	struct vfs	*v_vfsmountedhere;	 
	struct vnodeops	*v_op;			 
	struct vfs	*v_vfsp;		 
	struct stdata	*v_stream;		 
	struct page	*v_pages;		 
	enum vtype	v_type;			 
	dev_t		v_rdev;			 
	caddr_t		v_data;			 
	struct filock	*v_filocks;		 
	kcondvar_t	v_cv;			 
} vnode_t;

 













 





 




 




typedef struct vattr {
	long		va_mask;	 
	vtype_t		va_type;	 
	mode_t		va_mode;	 
	uid_t		va_uid;		 
	gid_t		va_gid;		 
	dev_t		va_fsid;	 
	ino_t		va_nodeid;	 
	nlink_t		va_nlink;	 
	u_long		va_size0;	 
	u_long		va_size;	 
	timestruc_t	va_atime;	 
	timestruc_t	va_mtime;	 
	timestruc_t	va_ctime;	 
	dev_t		va_rdev;	 
	u_long		va_blksize;	 
	u_long		va_nblocks;	 
	u_long		va_vcode;	 
} vattr_t;

 






























 






 









 






 


enum rm		{ RMFILE, RMDIRECTORY };	 
enum symfollow	{ NO_FOLLOW, FOLLOW };		 
enum vcexcl	{ NONEXCL, EXCL };		 
enum create	{ CRCREAT, CRMKNOD, CRMKDIR, CRCORE };  

typedef enum rm		rm_t;
typedef enum symfollow	symfollow_t;
typedef enum vcexcl	vcexcl_t;
typedef enum create	create_t;

 



typedef struct vsecattr {
	u_long		vsa_mask;	 
	int		vsa_aclcnt;	 
	void		*vsa_aclentp;	 
	int		vsa_dfaclcnt;	 
	void		*vsa_dfaclentp;	 
} vsecattr_t;

 





 


struct pathname;
struct fid;
struct flock;
struct page;
struct seg;
struct as;
struct pollhead;

 


 







typedef struct vnodeops {
	int	(*vop_open)(struct vnode **, int, struct cred *);
	int	(*vop_close)(struct vnode *, int, int, offset_t, struct cred *);
	int	(*vop_read)(struct vnode *, struct uio *, int, struct cred *);
	int	(*vop_write)(struct vnode *, struct uio *, int, struct cred *);
	int	(*vop_ioctl)(struct vnode *, int, int, int, struct cred *,
			int *);
	int	(*vop_setfl)(struct vnode *, int, int, struct cred *);
	int	(*vop_getattr)(struct vnode *, struct vattr *, int,
			struct cred *);
	int	(*vop_setattr)(struct vnode *, struct vattr *, int,
			struct cred *);
	int	(*vop_access)(struct vnode *, int, int, struct cred *);
	int	(*vop_lookup)(struct vnode *, char *, struct vnode **,
			struct pathname *, int, struct vnode *, struct cred *);
	int	(*vop_create)(struct vnode *, char *, struct vattr *,
			vcexcl_t, int, struct vnode **, struct cred *);
	int	(*vop_remove)(struct vnode *, char *, struct cred *);
	int	(*vop_link)(struct vnode *, struct vnode *, char *,
			struct cred *);
	int	(*vop_rename)(struct vnode *, char *, struct vnode *, char *,
			struct cred *);
	int	(*vop_mkdir)(struct vnode *, char *, struct vattr *,
			struct vnode **, struct cred *);
	int	(*vop_rmdir)(struct vnode *, char *, struct vnode *,
			struct cred *);
	int	(*vop_readdir)(struct vnode *, struct uio *, struct cred *,
			int *);
	int	(*vop_symlink)(struct vnode *, char *, struct vattr *, char *,
			struct cred *);
	int	(*vop_readlink)(struct vnode *, struct uio *, struct cred *);
	int	(*vop_fsync)(struct vnode *, int, struct cred *);
	void	(*vop_inactive)(struct vnode *, struct cred *);
	int	(*vop_fid)(struct vnode *, struct fid *);
	void	(*vop_rwlock)(struct vnode *, int);
	void	(*vop_rwunlock)(struct vnode *, int);
	int	(*vop_seek)(struct vnode *, offset_t, offset_t *);
	int	(*vop_cmp)(struct vnode *, struct vnode *);
	int	(*vop_frlock)(struct vnode *, int, struct flock *, int,
			offset_t, struct cred *);
	int	(*vop_space)(struct vnode *, int, struct flock *, int,
			offset_t, struct cred *);
	int	(*vop_realvp)(struct vnode *, struct vnode **);
	int	(*vop_getpage)(struct vnode *, offset_t, u_int, u_int *,
			struct page **, u_int, struct seg *, caddr_t,
			enum seg_rw, struct cred *);
	int	(*vop_putpage)(struct vnode *, offset_t, u_int, int,
			struct cred *);
	int	(*vop_map)(struct vnode *, offset_t, struct as *, caddr_t *,
			u_int, u_char, u_char, u_int, struct cred *);
	int	(*vop_addmap)(struct vnode *, offset_t, struct as *, caddr_t,
			u_int, u_char, u_char, u_int, struct cred *);
	int	(*vop_delmap)(struct vnode *, offset_t, struct as *, caddr_t,
			u_int, u_int, u_int, u_int, struct cred *);
	int	(*vop_poll)(struct vnode *, short, int, short *,
			struct pollhead **);
	int	(*vop_dump)(struct vnode *, caddr_t, int, int);
	int	(*vop_pathconf)(struct vnode *, int, u_long *, struct cred *);
	int	(*vop_pageio)(struct vnode *, struct page *, u_int, u_int, int,
			struct cred *);
	int	(*vop_dumpctl)(struct vnode *, int);
	void	(*vop_dispose)(struct vnode *, struct page *, int, int,
			struct cred *);
	int	(*vop_setsecattr)(struct vnode *, vsecattr_t *, int,
			struct cred *);
	int	(*vop_getsecattr)(struct vnode *, vsecattr_t *, int,
			struct cred *);
} vnodeops_t;



































































 




 


# 414 "/usr/include/sys/vnode.h" 3













# 436 "/usr/include/sys/vnode.h" 3

 







 






 






# 474 "/usr/include/sys/vnode.h" 3


 



# 488 "/usr/include/sys/vnode.h" 3






# 16 "/usr/include/sys/stream.h" 2 3

# 1 "/usr/include/sys/poll.h" 1 3
 
 

 
 
 




#pragma ident	"@(#)poll.h	1.18	94/06/07 SMI"	





 



typedef struct pollfd {
	int fd;				 
	short events;			 
	short revents;			 
} pollfd_t;

 












 







# 120 "/usr/include/sys/poll.h" 3



int poll(struct pollfd *, unsigned long, int);







# 17 "/usr/include/sys/stream.h" 2 3

# 1 "/usr/include/sys/strmdep.h" 1 3
 
 

 
 
 




#pragma ident	"@(#)strmdep.h	1.8	92/07/14 SMI"	





 




 





 





 










# 18 "/usr/include/sys/stream.h" 2 3








 




























 


typedef struct	queue {
	struct	qinit	*q_qinfo;	 
	struct	msgb	*q_first;	 
	struct	msgb	*q_last;	 
	struct	queue	*q_next;	 
	struct	queue	*q_link;	 
	void		*q_ptr;		 
	ulong		q_count;	 
	ulong		q_flag;		 
	long		q_minpsz;	 
					 
	long		q_maxpsz;	 
					 
	ulong		q_hiwat;	 
	ulong		q_lowat;	 
	struct qband	*q_bandp;	 
	kmutex_t	q_lock;		 
	struct stdata 	*q_stream;	 
	struct	syncq	*q_syncq;	 
	unsigned char	q_nband;	 
	kcondvar_t	q_wait;		 
	kcondvar_t	q_sync;		 
	struct	queue	*q_nfsrv;	 
	struct	queue	*q_nbsrv;	 
	ushort		q_draining;	 
	short		q_struiot;	 
} queue_t;

 



















					 






 



typedef struct qband {
	struct qband	*qb_next;	 
	ulong		qb_count;	 
	struct msgb	*qb_first;	 
	struct msgb	*qb_last;	 
	ulong		qb_hiwat;	 
	ulong		qb_lowat;	 
	ulong		qb_flag;	 
} qband_t;

 






 




 


typedef enum qfields {
	QHIWAT	= 0,		 
	QLOWAT	= 1,		 
	QMAXPSZ	= 2,		 
	QMINPSZ	= 3,		 
	QCOUNT	= 4,		 
	QFIRST	= 5,		 
	QLAST	= 6,		 
	QFLAG	= 7,		 
	QSTRUIOT = 8,		 
	QBAD	= 9
} qfields_t;

 


struct module_info {
	ushort	mi_idnum;		 
	char 	*mi_idname;		 
	long	mi_minpsz;		 
	long	mi_maxpsz;		 
	ulong	mi_hiwat;		 
	ulong 	mi_lowat;		 
};

 


struct	qinit {
	int	(*qi_putp)();		 
	int	(*qi_srvp)();		 
	int	(*qi_qopen)();		 
	int	(*qi_qclose)();		 
	int	(*qi_qadmin)();		 
	struct module_info *qi_minfo;	 
	struct module_stat *qi_mstat;	 
	int	(*qi_rwp)();		 
	int	(*qi_infop)();		 
	int	qi_struiot;		 
};

 







 



struct streamtab {
	struct qinit *st_rdinit;
	struct qinit *st_wrinit;
	struct qinit *st_muxrinit;
	struct qinit *st_muxwinit;
};

 



struct linkblk {
	queue_t *l_qtop;	 
				 
	queue_t *l_qbot;	 
	int	l_index;	 
};

 


typedef struct free_rtn {
	void (*free_func)();
	char *free_arg;
	struct	free_rtn	*free_next;
	int free_flags;
} frtn_t;

 



 








typedef struct datab {
	struct free_rtn	*db_frtnp;
	unsigned char	*db_base;
	unsigned char	*db_lim;
	unsigned char	db_ref;
	unsigned char	db_type;
	unsigned char	db_refmin;
	unsigned char	db_struioflag;
	void		*db_cache;	 
	unsigned char	*db_struiobase;
	unsigned char	*db_struiolim;
	unsigned char	*db_struioptr;
	union {
		unsigned char data[8];
		 


	} db_struioun;
} dblk_t;

 


typedef struct	msgb {
	struct	msgb	*b_next;
	struct  msgb	*b_prev;
	struct	msgb	*b_cont;
	unsigned char	*b_rptr;
	unsigned char	*b_wptr;
	struct datab 	*b_datap;
	unsigned char	b_band;
	unsigned short	b_flag;
	queue_t		*b_queue;	 
} mblk_t;

 







 




					 



 



 





 















 



















 


 





 



struct iocblk {
	int 	ioc_cmd;		 
	cred_t	*ioc_cr;		 
	uint	ioc_id;			 
	uint	ioc_count;		 
	int	ioc_error;		 
	int	ioc_rval;		 
	long	ioc_filler[4];		 
};




 



struct copyreq {
	int	cq_cmd;			 
	cred_t	*cq_cr;			 
	uint	cq_id;			 
	caddr_t	cq_addr;		 
	uint	cq_size;		 
	int	cq_flag;		 
	mblk_t *cq_private;		 
	long	cq_filler[4];		 
};




 


					 

					 
					 

 



struct copyresp {
	int	cp_cmd;			 
	cred_t	*cp_cr;			 
	uint	cp_id;			 
	caddr_t	cp_rval;		 
					 
	uint	cp_pad1;
	int	cp_pad2;
	mblk_t *cp_private;		 
	long	cp_filler[4];
};




 




struct stroptions {
	ulong	so_flags;		 
	short	so_readopt;		 
	ushort	so_wroff;		 
	long	so_minpsz;		 
	long	so_maxpsz;		 
	ulong	so_hiwat;		 
	ulong	so_lowat;		 
	unsigned char so_band;		 
};

 





















 





struct str_evmsg {
	long		 sv_event;	 
	vnode_t		*sv_vp;		 
	long		 sv_eid;	 
	long		 sv_evpri;	 
	long		 sv_flags;	 
	uid_t		 sv_uid;	 
	pid_t		 sv_pid;	 
	hostid_t	 sv_hostid;	 
	long		 sv_pad[4];	 
};

 








typedef struct struiod {
	mblk_t		*d_mp;		 
	uio_t		d_uio;		 
	iovec_t d_iov[16 ];	 
} struiod_t;

 


typedef struct infod {
	unsigned char	d_cmd;		 
	unsigned char	d_res;		 
	int		d_bytes;	 
	int		d_count;	 
	uio_t		*d_uiop;	 
} infod_t;
 







 



 






 







 






 




 





 




 





 





 




 





 



 







 




 






 









 




 




 




 



# 681 "/usr/include/sys/stream.h" 3


 


extern int nstrpush;			 






# 28 "/usr/include/netinet/in.h" 2 3

# 1 "/usr/local/lib/gcc-lib/i486-sun-solaris2/2.6.3/include/sys/byteorder.h" 1 3



 
















 







extern __inline__ unsigned long htonl (unsigned long);
extern __inline__ unsigned short htons (unsigned int);
extern __inline__ unsigned long ntohl (unsigned long);
extern __inline__ unsigned short ntohs (unsigned int);








 

 

extern __inline__ unsigned long
htonl (unsigned long __arg)
{
  register unsigned long __result;

  __asm__ ("xchg%B0 %b0,%h0\n	ror%L0 $16,%0\n	xchg%B0 %b0,%h0" : "=q" (__result) : "0" (__arg));


  return __result;
}

 

extern __inline__ unsigned short
htons (unsigned int __arg)
{
  register unsigned short __result;

  __asm__ ("xchg%B0 %b0,%h0" : "=q" (__result) : "0" (__arg));
  return __result;
}

# 126 "/usr/local/lib/gcc-lib/i486-sun-solaris2/2.6.3/include/sys/byteorder.h" 3


 

extern __inline__ unsigned long
ntohl (unsigned long __arg)
{
  return htonl (__arg);
}

 

extern __inline__ unsigned short
ntohs (unsigned int __arg)
{
  return htons (__arg);
}


# 29 "/usr/include/netinet/in.h" 2 3


 



















 















 








 







 






 








 






 






struct in_addr {
	union {
		struct { u_char s_b1, s_b2, s_b3, s_b4; } S_un_b;
		struct { u_short s_w1, s_w2; } S_un_w;
		u_long S_addr;
	} S_un;






};

 








































 






 


struct sockaddr_in {
	short	sin_family;
	u_short	sin_port;
	struct	in_addr sin_addr;
	char	sin_zero[8];
};

 



















 


struct ip_mreq {
	struct in_addr	imr_multiaddr;	 
	struct in_addr	imr_interface;	 
};

 



# 228 "/usr/include/netinet/in.h" 3







# 15 "ssl_client.c" 2

# 1 "net.h" 1
 
 








 


 












# 16 "ssl_client.c" 2

# 1 "../rsa/X509.h" 1
 
 









# 62 "../rsa/X509.h"









































typedef struct rsa_st
	{
# 114 "../rsa/X509.h"

	char *n,*e,*d,*p,*q,*dmp1,*dmq1,*iqmp;

	int num;		 
	unsigned char *buf;	 
	} RSA;

RSA *RSA_new();
RSA *RSA_generate_key();

 
int RSA_public_encrypt();
int RSA_private_encrypt();
int RSA_public_decrypt();
int RSA_private_decrypt();
int RSA_mod_exp();
int RSA_bn_rand();

extern int RSA_errno;
char *RSA_error_string();
extern int X509_errno;
char *X509_error_string();

unsigned char *rsa_private2DER();
unsigned char *rsa_public2DER();

 





























# 185 "../rsa/X509.h"


unsigned long X509_subject_name_hash();






char *X509_get_issuer_name();
char *X509_get_subject_name();
char *X509_new_D2i_X509();


int X509_verify();

















# 17 "ssl_client.c" 2

 
# 1 "../rsa/der.h" 1
 
 






























typedef struct object_st
	{
	int num;
	unsigned long *values;
	int nid;
	char *sn,*ln;
	} DER_OBJECT;

typedef struct bit_string_st
	{
	int length;
	unsigned char *data;
	} DER_BIT_STRING;

 
 

void DER_put_object();





















































extern int DER_errno;
char *DER_error_string();


# 19 "ssl_client.c" 2

# 1 "../rsa/bn.h" 1
 
 









 


 
 

 

 
# 35 "../rsa/bn.h"


















# 67 "../rsa/bn.h"




typedef struct bignum_st
	{
	int top;	 
	unsigned long  *d;	 
	 
	int max;	 
	int neg;
	} BIGNUM;


int bn_num_bits();
BIGNUM *bn_new();
BIGNUM *bn_copy();
BIGNUM *bn_hex2bn();
BIGNUM *bn_bin2bn();
int bn_bn2bin();
int bn_sub();
int bn_add();
int bn_mod();
int bn_div();
int bn_mul();
BIGNUM *bn_get_reg();
int bn_get_tos();
void bn_set_tos();
unsigned long  bn_mod_word();
int bn_MOD_init();
int bn_MOD();






# 20 "ssl_client.c" 2

# 1 "../rsa/PEM.h" 1
 
 




























extern int PEM_errno;
char *PEM_error_string();

void PEM_set_getkey_callback();
int PEM_write_X509();
int PEM_read_X509();
int PEM_read_RSA();
int PEM_write_RSA();


# 21 "ssl_client.c" 2

# 1 "ssl_locl.h" 1
 
 












# 1 "/usr/local/lib/gcc-lib/i486-sun-solaris2/2.6.3/include/string.h" 1 3
 
 

 
 
 




#pragma ident	"@(#)string.h	1.9	92/07/14 SMI"	
















extern void *memcpy(void *, const void *, size_t);
extern void *memmove(void *, const void *, size_t);
extern char *strcpy(char *, const char *);
extern char *strncpy(char *, const char *, size_t);

extern char *strcat(char *, const char *);
extern char *strncat(char *, const char *, size_t);

extern int memcmp(const void *, const void *, size_t);
extern int strcmp(const char *, const char *);
extern int strcoll(const char *, const char *);
extern int strncmp(const char *, const char *, size_t);
extern size_t strxfrm(char *, const char *, size_t);

extern void *memchr(const void *, int, size_t);
extern char *strchr(const char *, int);
extern size_t strcspn(const char *, const char *);
	#pragma int_to_unsigned strcspn
extern char *strpbrk(const char *, const char *);
extern char *strrchr(const char *, int);
extern size_t strspn(const char *, const char *);
	#pragma int_to_unsigned strspn
extern char *strstr(const char *, const char *);
extern char *strtok(char *, const char *);

extern void *memset(void *, int, size_t);
extern char *strerror(int);
extern char *strsignal(int);
extern size_t strlen(const char *);
	#pragma int_to_unsigned strlen



extern void *memccpy(void *, const void *, int, size_t);




extern char *strdup(const char *);
extern int ffs(const int);



# 99 "/usr/local/lib/gcc-lib/i486-sun-solaris2/2.6.3/include/string.h" 3







# 15 "ssl_locl.h" 2















 

# 45 "ssl_locl.h"
















 

# 75 "ssl_locl.h"






 



















typedef struct cipher_st
	{
	int valid;
	char *name;
	int (*crypt_init)();
	void (*crypt)();
	void (*hash)();
	int key_size;
	int mac_size;
	int block_size;
	int key_arg_size;

	unsigned char num;
	unsigned char noidea;
	unsigned char keybits;
	unsigned char enc_bits;
	} CIPHER;

typedef struct ssl_conn_st
	{
	CIPHER *ciphers[(9+1) +1];
	CIPHER *cipher;
	int key_arg_length;
	unsigned char *key_arg;
	int master_key_length;
	unsigned char *master_key;
	int key_material_length;
	unsigned char *key_material;
	 
	int session_id_length;
	unsigned char *session_id;

	struct cert_st *cert;

	unsigned int references;
	unsigned long timeout;
	unsigned long time;
	} CONN;

 




typedef struct cert_st
	{
	int cert_type;
	int (*public_encrypt)();
	int (*public_decrypt)();
	int (*private_encrypt)();
	int (*private_decrypt)();
	X509 *x509;
	RSA *publickey;  
	RSA *privatekey;
	int references;
	} CERT;

extern CIPHER ssl_ciphers[];

 

 
 
 
 
 
 
  
  

# 1 "ssl.h" 1
 
 









 



 










 





 










 










 


 


 





 


typedef struct ssl_state_st
	{
	 
	int fd;
	int version;	 

	int read_ahead;
	int escape;
	int three_byte_header;
	int send;		 
	int clear_text;	 
	int hit;		 

	 
	int wpend_tot;
	char *wpend_data;

	int wpend_off;
	int wpend_len;
	int rpend_off;
	int rpend_len;

	 
	int rbuf_left;
	int rbuf_offs;
	unsigned char *rbuf;
	unsigned char *wbuf;

	 
	unsigned char *packet;
	unsigned int packet_length;

	 
	unsigned int length;
	unsigned int padding;
	unsigned int ract_data_length;  
	unsigned int wact_data_length;  
	unsigned char *mac_data;
	unsigned char *act_data;
	unsigned char *pad_data;

	 
	int num_pref_cipher;
	char **pref_cipher;	 


	char *crypt_state;	 
	unsigned char *read_key;
	unsigned char *write_key;

	 

	CONN *conn;
	CERT *cert;





	int challenge_length;
	unsigned char *challenge;
	int conn_id_length;
	unsigned char *conn_id;

	 
	 

	unsigned char *write_ptr;	 


	unsigned long read_sequence;
	unsigned long write_sequence;

	 
	int trust_level;	 
	int free_peer;
	char *peer;		 
	int verify_mode;	 

	int (*verify_callback)();  
	} SSL;












SSL *SSL_new();
void SSL_free();
int SSL_read();
int SSL_write();

int SSL_connect();
int SSL_accept();

void SSL_set_fd();
int SSL_get_fd();
int SSL_set_pref_cipher();
char *SSL_get_pref_cipher();
char *SSL_get_cipher();

void SSL_set_verify();
void SET_certificate();

 
int SSL_use_RSAPublicKey();
int SSL_use_certificate();

void SSL_flush_connections();

extern int SSL_errno;
char *SSL_error_string();
char *SSL_error_func_string();

 


extern FILE *SSL_ERR;
extern FILE *SSL_LOG;



# 171 "ssl_locl.h" 2

# 1 "ssl_err.h" 1
 
 









































































# 172 "ssl_locl.h" 2


 
# 1 "ssl_trc.h" 1
 
 






 








# 34 "ssl_trc.h"


 

# 1 "/usr/local/lib/gcc-lib/i486-sun-solaris2/2.6.3/include/varargs.h" 1 3
 






































# 56 "/usr/local/lib/gcc-lib/i486-sun-solaris2/2.6.3/include/varargs.h" 3


 








 



 


 




typedef char *__gnuc_va_list;


















 

























 






 










typedef __gnuc_va_list va_list;


# 169 "/usr/local/lib/gcc-lib/i486-sun-solaris2/2.6.3/include/varargs.h" 3


 




# 38 "ssl_trc.h" 2



































# 175 "ssl_locl.h" 2


 




 




CERT *ssl_cert_new();
void ssl_conn_free();
RSA *ssl_rsa_extract_public_key();
RSA *ssl_ssl_set_certificate();


# 22 "ssl_client.c" 2


 
 


   



int verify_depth=0;
int verify_error=0 ;

int verify_callback();
void set_cert_stuff();

void usage()
	{
	fprintf((&__iob[2]) ,"usage: client args\n");
	fprintf((&__iob[2]) ,"\n");
	fprintf((&__iob[2]) ," -host arg     - host or IP to connect to (default is %s)\n","localhost" );
	fprintf((&__iob[2]) ," -port arg     - port to connect to (default is %d\n",htons(4433) );
	fprintf((&__iob[2]) ," -verify arg   - turn on peer certificate verification\n");
	fprintf((&__iob[2]) ," -cert arg     - certificate file to use, PEM format assumed\n");
	fprintf((&__iob[2]) ," -key arg      - RSA file to use, PEM format assumed, in cert file if\n");
	fprintf((&__iob[2]) ,"                 not specified but cert fill is.\n");
	fprintf((&__iob[2]) ," -CApath arg   - PEM format directory of CA's\n");
	fprintf((&__iob[2]) ," -CAfile arg   - PEM format file of CA's\n");
	fprintf((&__iob[2]) ," -reconnect     - Drop and re-make the connection with the same Session-ID\n");
	fprintf((&__iob[2]) ," -cipher       - prefered cipher to use, ':' seperated list of the following\n");
	fprintf((&__iob[2]) ,"                 RC4-MD5 EXP-RC4-MD5 CBC-DES-MD5 CBC3-DES-MD5 CBC-IDEA-MD5\n");
	fprintf((&__iob[2]) ,"                 CFB-DES-NULL\n");
	}

main(argc,argv)
int argc;
char *argv[];
	{
	SSL *con,*con2;
	int s,i,width;
	char buf[40*1024 ];
	fd_set readfds;
	int port=htons(4433) ;
	char *host="localhost" ;
	char *cert_file=((void *)  0) ,*key_file=((void *)  0) ;
	char *CApath=((void *)  0) ,*CAfile=((void *)  0) ,*cipher=((void *)  0) ;
	int reconnect=0,badop=0,verify=0x00 ;

	argc--;
	argv++;
	while (argc >= 1)
		{
		if	(strcmp(*argv,"-host") == 0)
			{
			if (argc-- < 1) goto bad;
			host= *(++argv);
			}
		else if	(strcmp(*argv,"-port") == 0)
			{
			if (argc-- < 1) goto bad;
			port=atoi(*(++argv));
			if (port == 0) goto bad;
			}
		else if	(strcmp(*argv,"-verify") == 0)
			{
			verify=0x01 ;
			if (argc-- < 1) goto bad;
			verify_depth=atoi(*(++argv));
			fprintf((&__iob[2]) ,"verify depth is %d\n",verify_depth);
			}
		else if	(strcmp(*argv,"-cert") == 0)
			{
			if (argc-- < 1) goto bad;
			cert_file= *(++argv);
			}
		else if	(strcmp(*argv,"-key") == 0)
			{
			if (argc-- < 1) goto bad;
			key_file= *(++argv);
			}
		else if	(strcmp(*argv,"-reconnect") == 0)
			{
			reconnect=1;
			}
		else if	(strcmp(*argv,"-CApath") == 0)
			{
			if (argc-- < 1) goto bad;
			CApath= *(++argv);
			}
		else if	(strcmp(*argv,"-CAfile") == 0)
			{
			if (argc-- < 1) goto bad;
			CAfile= *(++argv);
			}
		else if	(strcmp(*argv,"-cipher") == 0)
			{
			if (argc-- < 1) goto bad;
			cipher= *(++argv);
			}
		else
			{
			fprintf((&__iob[2]) ,"unknown option %s\n",*argv);
			badop=1;
			break;
			}
		argc--;
		argv++;
		}
	if (badop)
		{
bad:
		usage();
		exit(1);
		}

	if ((!X509_load_verify_locations(CAfile,CApath)) ||
		(!X509_set_default_verify_paths()))
		{
		fprintf((&__iob[2]) ,"X509_load_verify_locations error:%s\n",
			X509_error_string(X509_errno));
		exit(1);
		}

        SSL_debug("client.log");
	if (init_client(host,&s,"httpss" ,port) == 0)
		{ perror("conecting"); exit(1); }
	fprintf((&__iob[2]) ,"CONNECTED\n");

	con=(SSL *)SSL_new();
	SSL_set_fd(con,s);
	SSL_set_verify(con,verify,verify_callback);

	if (cipher == ((void *)  0) )
		SSL_set_pref_cipher(con,getenv("SSL_CIPHER"));
	else
		SSL_set_pref_cipher(con,cipher);

	set_cert_stuff(con,cert_file,key_file);

	if (!SSL_connect(con))
		{
		fprintf((&__iob[2]) ,"ERROR\n");
		if (verify_error != 0 )
			{
			fprintf((&__iob[2]) ,"verify error:%s\n",
				X509_verify_error_string(verify_error));
			}
		else
			{
			fprintf((&__iob[2]) ,"SSL error:function is:%s\n",
				SSL_error_func_string(SSL_errno));
			fprintf((&__iob[2]) ,"         :error is   :%s\n",
				SSL_error_string(SSL_errno));
			}
		close(s);
		exit(1);
		}

	if (reconnect)
		{
		SSL_write(con,"bye\n",4);
		close(s); 

		if (init_client(host,&s,"httpss" ,port) == 0)
			{ perror("conecting"); exit(1); }

		fprintf((&__iob[2]) ,"drop the connection and reconnect with the same session id\n");
		 
		 

		con2=SSL_new();
		SSL_set_fd(con2,s);
		SSL_copy_session_id(con2,con);
		set_cert_stuff(con2,cert_file,key_file);

		if (!SSL_connect(con2))
			{
			fprintf((&__iob[2]) ,"SSL error\n");
			if (verify_error != 0 )
				{
				fprintf((&__iob[2]) ,"\tpeer cert verify failure\n");
				fprintf((&__iob[2]) ,"\t%s\n",
					X509_verify_error_string(verify_error));
				}
			else
				{
				fprintf((&__iob[2]) ,"function is:%s\n",
					SSL_error_func_string(SSL_errno));
				fprintf((&__iob[2]) ,"error is   :%s\n",
					SSL_error_string(SSL_errno));
				}
			SSL_free(con2);
			close(s);
			exit(1);
			}
		SSL_free(con);
		con=con2;
		}
	width=s+1;

	 


	{
	CIPHER **c;

	c=s->conn->ciphers;
	printf("Ciphers common between both SSL endpoints:\n");
	while (*s)
		printf("%-12%c",c->name,(++i % 6)?' ':'\n');
	if (!(i % 6)) printf("\n");
	}

	printf("CIPHER is %s\n",SSL_get_cipher(con));

	for (;;)
		{
		memset((char *)( &readfds ), 0, sizeof (*( &readfds ))) ;
		(( &readfds )->fds_bits[( ( (&__iob[0])  )->_file  )/(sizeof (fd_mask) * 8 ) ] |= ((unsigned)1 << (( ( (&__iob[0])  )->_file  ) % (sizeof (fd_mask) * 8 ) ))) ;
		(( &readfds )->fds_bits[( s )/(sizeof (fd_mask) * 8 ) ] |= ((unsigned)1 << (( s ) % (sizeof (fd_mask) * 8 ) ))) ;
		select(width,&readfds,((void *)  0) ,((void *)  0) ,((void *)  0) );
		if ((( &readfds )->fds_bits[( ( (&__iob[0])  )->_file  )/(sizeof (fd_mask) * 8 ) ] & ((unsigned)1 << (( ( (&__iob[0])  )->_file  ) % (sizeof (fd_mask) * 8 ) ))) )
			{
			i=read(( (&__iob[0])  )->_file ,buf,40*1024 );
			if ((i <= 0) || (buf[0] == 'Q'))
				{
				fprintf((&__iob[2]) ,"DONE\n");
				close(s);
				exit(0);
				}
			SSL_write(con,buf,i);
			}
		if ((( &readfds )->fds_bits[( s )/(sizeof (fd_mask) * 8 ) ] & ((unsigned)1 << (( s ) % (sizeof (fd_mask) * 8 ) ))) )
			{
			i=SSL_read(con,buf,40*1024 );
			if (i<=0)
				{
				fprintf((&__iob[2]) ,"DONE\n");
				break;
				}
			write(( (&__iob[1])  )->_file ,buf,i);
			}
		}
	return(0);
	}

int init_client(server,sock,service,port)
char *server;
int *sock;
char *service;
int port;
	{
	struct servent ser;
	struct servent *serv;
	struct sockaddr_in them;
	struct hostent *host;
	struct protoent *prot;
	u_long ip_them;
	int s,i;

	if ((serv=getservbyname(service,"tcp" )) == ((void *)  0) )
		{
		serv= &ser;
		ser.s_port=htons(port);
		}

	host=gethostbyname(server);
	if (host == ((void *)  0) )
		{
		int a,b,c,d;

		if (sscanf(server,"%d.%d.%d.%d",&a,&b,&c,&d) == 4)
			ip_them=(a<<24)|(b<<16)|(c<<8)|d;
		else
			{
			fprintf((&__iob[2]) ,"unable to get %s's ip address\n",
				server);
			return(0);
			}
		}
	else
		memcpy(&ip_them,host->h_addr_list[0],sizeof(ip_them));
	memset((char *)&them,0,sizeof(them));
	them.sin_family=2 ;
	them.sin_port=serv->s_port;
	them.sin_addr.S_un.S_addr =ip_them;

	prot=getprotobyname("tcp");
	if (prot == ((void *)  0) )
		{
		fprintf((&__iob[2]) ,"unable to find tcp protocol number");
		return(0);
		}
	s=socket(2 ,2  ,prot->p_proto);
	if (s == -1) { fprintf((&__iob[2]) ,"socket:%m"); return(0); }

 



	i=0;
	i=setsockopt(s,0xffff ,0x0008 ,(char *)&i,sizeof(i));
	if (i < 0) { fprintf((&__iob[2]) ,"keepalive:%m"); exit(0); }

	if (connect(s,(struct sockaddr *)&them,sizeof(them)) == -1)
		{
		close(s);
		perror("connect");
		return(0);
		}
	*sock=s;
	return(1);
	}

 
int verify_callback(ok,xs,xi,depth,error)
int ok;
char *xs,*xi;  
int depth,error;
	{
	char *s;

	s=(char *)X509_oneline_X509_NAME(X509_get_subject_name(xs));
	if (s == ((void *)  0) )
		{
		fprintf((&__iob[2]) ,"error:%s\n",X509_error_string(X509_errno));
		return(0);
		}
	fprintf((&__iob[2]) ,"depth=%d %s\n",depth,s);
	free(s);
	if (error == 1 )
		{
		s=(char *)X509_oneline_X509_NAME(X509_get_issuer_name(xs));
		if (s == ((void *)  0) )
			{
			fprintf((&__iob[2]) ,"verify error:%s\n",
				X509_error_string(X509_errno));
			return(0);
			}
		fprintf((&__iob[2]) ,"issuer= %s\n",s);
		free(s);
		}
	if (!ok)
		{
		fprintf((&__iob[2]) ,"verify error:num=%d:%s\n",error,
			X509_verify_error_string(error));
		if (verify_depth <= depth)
			{
			ok=1;
			verify_error=0 ;
			}
		else
			{
			ok=0;
			verify_error=error;
			}
		}
	fprintf((&__iob[2]) ,"verify return:%d\n",ok);
	return(ok);
	}

void set_cert_stuff(con,cert_file,key_file)
SSL *con;
char *cert_file,*key_file;
	{
	if (cert_file != ((void *)  0) )
		{
		if (SSL_use_certificate_file(con,cert_file,
			1 ) <= 0)
			{
			fprintf((&__iob[2]) ,"unable to set certificate file\n");
			fprintf((&__iob[2]) ,"%s\n",SSL_error_string(SSL_errno));
			exit(1);
			}
		if (key_file == ((void *)  0) ) key_file=cert_file;
		if (SSL_use_RSAPrivateKey_file(con,key_file,
			1 ) <= 0)
			{
			fprintf((&__iob[2]) ,"unable to set public key file\n");
			fprintf((&__iob[2]) ,"%s\n",SSL_error_string(SSL_errno));
			exit(1);
			}
		}
	}
