xref: /plan9-contrib/sys/src/cmd/auth/secstore/SConn.h (revision 252470cd51076298c1cb81e1aabee4494f47f284)
1*252470cdSDavid du Colombier /* delimited, authenticated, encrypted connection */
2*252470cdSDavid du Colombier enum {
3*252470cdSDavid du Colombier 	Maxmsg	= 4096,		/* messages > Maxmsg bytes are truncated */
4*252470cdSDavid du Colombier };
59a747e4fSDavid du Colombier 
6*252470cdSDavid du Colombier typedef struct SConn SConn;
79a747e4fSDavid du Colombier struct SConn {
89a747e4fSDavid du Colombier 	void 	*chan;
99a747e4fSDavid du Colombier 	int 	secretlen;
10*252470cdSDavid du Colombier 	int 	(*secret)(SConn*, uchar*, int);
11*252470cdSDavid du Colombier 	int 	(*read)(SConn*, uchar*, int); /* <0 if error; errmess in buffer */
129a747e4fSDavid du Colombier 	int	(*write)(SConn*, uchar*, int);
13*252470cdSDavid du Colombier 	void	(*free)(SConn*);	/* also closes file descriptor */
149a747e4fSDavid du Colombier };
159a747e4fSDavid du Colombier 
16*252470cdSDavid du Colombier SConn *newSConn(int);			/* arg is open file descriptor */
179a747e4fSDavid du Colombier 
18*252470cdSDavid du Colombier /*
19*252470cdSDavid du Colombier  * secret(s,b,dir) sets secret for digest, encrypt, using the secretlen
20*252470cdSDavid du Colombier  *		bytes in b to form keys 	for the two directions;
21*252470cdSDavid du Colombier  *	  set dir=0 in client, dir=1 in server
22*252470cdSDavid du Colombier  */
239a747e4fSDavid du Colombier 
24*252470cdSDavid du Colombier /* error convention: write !message in-band */
25*252470cdSDavid du Colombier void	writerr(SConn*, char*);
26*252470cdSDavid du Colombier 
27*252470cdSDavid du Colombier /*
28*252470cdSDavid du Colombier  * returns -1 upon error, with error message in buf
29*252470cdSDavid du Colombier  * call with buf of size Maxmsg+1
30*252470cdSDavid du Colombier  */
31*252470cdSDavid du Colombier int	readstr(SConn*, char*);
32*252470cdSDavid du Colombier 
33*252470cdSDavid du Colombier void	*emalloc(ulong);		/* dies on failure; clears memory */
34*252470cdSDavid du Colombier void	*erealloc(void*, ulong);
35*252470cdSDavid du Colombier char	*estrdup(char*);
36