xref: /plan9/sys/include/auth.h (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
13e12c5d1SDavid du Colombier #pragma	lib	"libauth.a"
23e12c5d1SDavid du Colombier 
3*219b2ee8SDavid du Colombier typedef struct	Ticket		Ticket;
4*219b2ee8SDavid du Colombier typedef struct	Ticketreq	Ticketreq;
5*219b2ee8SDavid du Colombier typedef struct	Authenticator	Authenticator;
6*219b2ee8SDavid du Colombier typedef struct	Nvrsafe		Nvrsafe;
7*219b2ee8SDavid du Colombier typedef struct	Passwordreq	Passwordreq;
8*219b2ee8SDavid du Colombier typedef struct	Chalstate	Chalstate;
93e12c5d1SDavid du Colombier 
10*219b2ee8SDavid du Colombier enum
11*219b2ee8SDavid du Colombier {
12*219b2ee8SDavid du Colombier 	DOMLEN=		48,		/* length of an authentication domain name */
13*219b2ee8SDavid du Colombier 	DESKEYLEN=	7,		/* length of a des key for encrypt/decrypt */
14*219b2ee8SDavid du Colombier 	CHALLEN=	8,		/* length of a challenge */
15*219b2ee8SDavid du Colombier 	NETCHLEN=	16,		/* max network challenge length	*/
163e12c5d1SDavid du Colombier 	CONFIGLEN=	14,
173e12c5d1SDavid du Colombier 
18*219b2ee8SDavid du Colombier 	KEYDBLEN=	NAMELEN+DESKEYLEN+4+2
193e12c5d1SDavid du Colombier };
203e12c5d1SDavid du Colombier 
21*219b2ee8SDavid du Colombier /* encryption numberings (anti-replay) */
22*219b2ee8SDavid du Colombier enum
23*219b2ee8SDavid du Colombier {
24*219b2ee8SDavid du Colombier 	AuthTreq=1,	/* ticket request */
25*219b2ee8SDavid du Colombier 	AuthChal=2,	/* challenge box request */
26*219b2ee8SDavid du Colombier 	AuthPass=3,	/* change password */
27*219b2ee8SDavid du Colombier 	AuthMod=6,	/* modify user */
28*219b2ee8SDavid du Colombier 
29*219b2ee8SDavid du Colombier 	AuthOK=4,	/* reply follows */
30*219b2ee8SDavid du Colombier 	AuthErr=5,	/* error follows */
31*219b2ee8SDavid du Colombier 
32*219b2ee8SDavid du Colombier 	AuthTs=64,	/* ticket encrypted with server's key */
33*219b2ee8SDavid du Colombier 	AuthTc,		/* ticket encrypted with client's key */
34*219b2ee8SDavid du Colombier 	AuthAs,		/* server generated authenticator */
35*219b2ee8SDavid du Colombier 	AuthAc,		/* client generated authenticator */
36*219b2ee8SDavid du Colombier };
37*219b2ee8SDavid du Colombier 
38*219b2ee8SDavid du Colombier struct Ticketreq
39*219b2ee8SDavid du Colombier {
40*219b2ee8SDavid du Colombier 	char	type;
41*219b2ee8SDavid du Colombier 	char	authid[NAMELEN];	/* server's encryption id */
42*219b2ee8SDavid du Colombier 	char	authdom[DOMLEN];	/* server's authentication domain */
43*219b2ee8SDavid du Colombier 	char	chal[CHALLEN];		/* challenge from server */
44*219b2ee8SDavid du Colombier 	char	hostid[NAMELEN];	/* host's encryption id */
45*219b2ee8SDavid du Colombier 	char	uid[NAMELEN];		/* uid of requesting user on host */
46*219b2ee8SDavid du Colombier };
47*219b2ee8SDavid du Colombier #define	TICKREQLEN	(3*NAMELEN+CHALLEN+DOMLEN+1)
48*219b2ee8SDavid du Colombier 
49*219b2ee8SDavid du Colombier struct Ticket
50*219b2ee8SDavid du Colombier {
51*219b2ee8SDavid du Colombier 	char	num;			/* replay protection */
52*219b2ee8SDavid du Colombier 	char	chal[CHALLEN];		/* server challenge */
53*219b2ee8SDavid du Colombier 	char	cuid[NAMELEN];		/* uid on client */
54*219b2ee8SDavid du Colombier 	char	suid[NAMELEN];		/* uid on server */
55*219b2ee8SDavid du Colombier 	char	key[DESKEYLEN];		/* nonce DES key */
56*219b2ee8SDavid du Colombier };
57*219b2ee8SDavid du Colombier #define	TICKETLEN	(CHALLEN+2*NAMELEN+DESKEYLEN+1)
58*219b2ee8SDavid du Colombier 
59*219b2ee8SDavid du Colombier struct Authenticator
60*219b2ee8SDavid du Colombier {
61*219b2ee8SDavid du Colombier 	char	num;			/* replay protection */
62*219b2ee8SDavid du Colombier 	char	chal[CHALLEN];
63*219b2ee8SDavid du Colombier 	ulong	id;			/* authenticator id, ++'d with each auth */
64*219b2ee8SDavid du Colombier };
65*219b2ee8SDavid du Colombier #define	AUTHENTLEN	(CHALLEN+4+1)
66*219b2ee8SDavid du Colombier 
67*219b2ee8SDavid du Colombier struct Passwordreq
68*219b2ee8SDavid du Colombier {
69*219b2ee8SDavid du Colombier 	char	num;
70*219b2ee8SDavid du Colombier 	char	old[NAMELEN];
71*219b2ee8SDavid du Colombier 	char	new[NAMELEN];
72*219b2ee8SDavid du Colombier };
73*219b2ee8SDavid du Colombier #define	PASSREQLEN	(2*NAMELEN+1)
74*219b2ee8SDavid du Colombier 
753e12c5d1SDavid du Colombier struct Nvrsafe
763e12c5d1SDavid du Colombier {
77*219b2ee8SDavid du Colombier 	char	machkey[DESKEYLEN];
783e12c5d1SDavid du Colombier 	uchar	machsum;
79*219b2ee8SDavid du Colombier 	char	authkey[DESKEYLEN];
803e12c5d1SDavid du Colombier 	uchar	authsum;
813e12c5d1SDavid du Colombier 	char	config[CONFIGLEN];
823e12c5d1SDavid du Colombier 	uchar	configsum;
83*219b2ee8SDavid du Colombier 	char	authid[NAMELEN];
84*219b2ee8SDavid du Colombier 	uchar	authidsum;
85*219b2ee8SDavid du Colombier 	char	authdom[DOMLEN];
86*219b2ee8SDavid du Colombier 	uchar	authdomsum;
873e12c5d1SDavid du Colombier };
883e12c5d1SDavid du Colombier 
89*219b2ee8SDavid du Colombier struct Chalstate
90*219b2ee8SDavid du Colombier {
91*219b2ee8SDavid du Colombier 	int	afd;			/* /dev/authenticate */
92*219b2ee8SDavid du Colombier 	int	asfd;			/* authdial() */
93*219b2ee8SDavid du Colombier 	char	chal[NETCHLEN];		/* challenge/response */
94*219b2ee8SDavid du Colombier };
95*219b2ee8SDavid du Colombier 
96*219b2ee8SDavid du Colombier extern	int	convT2M(Ticket*, char*, char*);
97*219b2ee8SDavid du Colombier extern	void	convM2T(char*, Ticket*, char*);
98*219b2ee8SDavid du Colombier extern	int	convA2M(Authenticator*, char*, char*);
99*219b2ee8SDavid du Colombier extern	void	convM2A(char*, Authenticator*, char*);
100*219b2ee8SDavid du Colombier extern	int	convTR2M(Ticketreq*, char*);
101*219b2ee8SDavid du Colombier extern	void	convM2TR(char*, Ticketreq*);
102*219b2ee8SDavid du Colombier extern	int	convPR2M(Passwordreq*, char*, char*);
103*219b2ee8SDavid du Colombier extern	void	convM2PR(char*, Passwordreq*, char*);
1043e12c5d1SDavid du Colombier extern	uchar	nvcsum(void*, int);
105*219b2ee8SDavid du Colombier extern	int	opasstokey(void*, char*);
106*219b2ee8SDavid du Colombier extern	int	passtokey(void*, char*);
107*219b2ee8SDavid du Colombier extern	int	authenticate(int, int);
108*219b2ee8SDavid du Colombier extern	int	newns(char*, char*);
109*219b2ee8SDavid du Colombier extern	int	authdial(void);
110*219b2ee8SDavid du Colombier extern	int	auth(int);
111*219b2ee8SDavid du Colombier extern	int	srvauth(int, char*);
112*219b2ee8SDavid du Colombier extern	int	getchal(Chalstate*, char*);
113*219b2ee8SDavid du Colombier extern	int	chalreply(Chalstate*, char*);
114*219b2ee8SDavid du Colombier extern	int	amount(int, char*, int, char*);
115