Blame


1 2277c5d7 2004-03-21 devnull #ifndef __AUTHSRV_H__
2 2277c5d7 2004-03-21 devnull #define __AUTHSRV_H__ 1
3 2277c5d7 2004-03-21 devnull #ifdef __cplusplus
4 2277c5d7 2004-03-21 devnull extern "C" {
5 2277c5d7 2004-03-21 devnull #endif
6 2277c5d7 2004-03-21 devnull /*
7 2277c5d7 2004-03-21 devnull #pragma src "/sys/src/libauthsrv"
8 2277c5d7 2004-03-21 devnull #pragma lib "libauthsrv.a"
9 2277c5d7 2004-03-21 devnull */
10 baf3dc26 2005-02-08 devnull AUTOLIB(authsrv)
11 2277c5d7 2004-03-21 devnull
12 2277c5d7 2004-03-21 devnull /*
13 2277c5d7 2004-03-21 devnull * Interface for talking to authentication server.
14 2277c5d7 2004-03-21 devnull */
15 2277c5d7 2004-03-21 devnull typedef struct Ticket Ticket;
16 2277c5d7 2004-03-21 devnull typedef struct Ticketreq Ticketreq;
17 2277c5d7 2004-03-21 devnull typedef struct Authenticator Authenticator;
18 2277c5d7 2004-03-21 devnull typedef struct Nvrsafe Nvrsafe;
19 2277c5d7 2004-03-21 devnull typedef struct Passwordreq Passwordreq;
20 2277c5d7 2004-03-21 devnull typedef struct OChapreply OChapreply;
21 2277c5d7 2004-03-21 devnull typedef struct OMSchapreply OMSchapreply;
22 2277c5d7 2004-03-21 devnull
23 2277c5d7 2004-03-21 devnull enum
24 2277c5d7 2004-03-21 devnull {
25 2277c5d7 2004-03-21 devnull ANAMELEN= 28, /* maximum size of name in previous proto */
26 2277c5d7 2004-03-21 devnull AERRLEN= 64, /* maximum size of errstr in previous proto */
27 2277c5d7 2004-03-21 devnull DOMLEN= 48, /* length of an authentication domain name */
28 2277c5d7 2004-03-21 devnull DESKEYLEN= 7, /* length of a des key for encrypt/decrypt */
29 2277c5d7 2004-03-21 devnull CHALLEN= 8, /* length of a plan9 sk1 challenge */
30 2277c5d7 2004-03-21 devnull NETCHLEN= 16, /* max network challenge length (used in AS protocol) */
31 2277c5d7 2004-03-21 devnull CONFIGLEN= 14,
32 2277c5d7 2004-03-21 devnull SECRETLEN= 32, /* max length of a secret */
33 2277c5d7 2004-03-21 devnull
34 2277c5d7 2004-03-21 devnull KEYDBOFF= 8, /* length of random data at the start of key file */
35 2277c5d7 2004-03-21 devnull OKEYDBLEN= ANAMELEN+DESKEYLEN+4+2, /* length of an entry in old key file */
36 2277c5d7 2004-03-21 devnull KEYDBLEN= OKEYDBLEN+SECRETLEN, /* length of an entry in key file */
37 cbeb0b26 2006-04-01 devnull OMD5LEN= 16
38 2277c5d7 2004-03-21 devnull };
39 2277c5d7 2004-03-21 devnull
40 2277c5d7 2004-03-21 devnull /* encryption numberings (anti-replay) */
41 2277c5d7 2004-03-21 devnull enum
42 2277c5d7 2004-03-21 devnull {
43 2277c5d7 2004-03-21 devnull AuthTreq=1, /* ticket request */
44 2277c5d7 2004-03-21 devnull AuthChal=2, /* challenge box request */
45 2277c5d7 2004-03-21 devnull AuthPass=3, /* change password */
46 2277c5d7 2004-03-21 devnull AuthOK=4, /* fixed length reply follows */
47 2277c5d7 2004-03-21 devnull AuthErr=5, /* error follows */
48 2277c5d7 2004-03-21 devnull AuthMod=6, /* modify user */
49 2277c5d7 2004-03-21 devnull AuthApop=7, /* apop authentication for pop3 */
50 2277c5d7 2004-03-21 devnull AuthOKvar=9, /* variable length reply follows */
51 2277c5d7 2004-03-21 devnull AuthChap=10, /* chap authentication for ppp */
52 2277c5d7 2004-03-21 devnull AuthMSchap=11, /* MS chap authentication for ppp */
53 2277c5d7 2004-03-21 devnull AuthCram=12, /* CRAM verification for IMAP (RFC2195 & rfc2104) */
54 2277c5d7 2004-03-21 devnull AuthHttp=13, /* http domain login */
55 2277c5d7 2004-03-21 devnull AuthVNC=14, /* VNC server login (deprecated) */
56 2277c5d7 2004-03-21 devnull
57 2277c5d7 2004-03-21 devnull
58 2277c5d7 2004-03-21 devnull AuthTs=64, /* ticket encrypted with server's key */
59 2277c5d7 2004-03-21 devnull AuthTc, /* ticket encrypted with client's key */
60 2277c5d7 2004-03-21 devnull AuthAs, /* server generated authenticator */
61 2277c5d7 2004-03-21 devnull AuthAc, /* client generated authenticator */
62 2277c5d7 2004-03-21 devnull AuthTp, /* ticket encrypted with client's key for password change */
63 cbeb0b26 2006-04-01 devnull AuthHr /* http reply */
64 2277c5d7 2004-03-21 devnull };
65 2277c5d7 2004-03-21 devnull
66 2277c5d7 2004-03-21 devnull struct Ticketreq
67 2277c5d7 2004-03-21 devnull {
68 2277c5d7 2004-03-21 devnull char type;
69 2277c5d7 2004-03-21 devnull char authid[ANAMELEN]; /* server's encryption id */
70 2277c5d7 2004-03-21 devnull char authdom[DOMLEN]; /* server's authentication domain */
71 2277c5d7 2004-03-21 devnull char chal[CHALLEN]; /* challenge from server */
72 2277c5d7 2004-03-21 devnull char hostid[ANAMELEN]; /* host's encryption id */
73 2277c5d7 2004-03-21 devnull char uid[ANAMELEN]; /* uid of requesting user on host */
74 2277c5d7 2004-03-21 devnull };
75 2277c5d7 2004-03-21 devnull #define TICKREQLEN (3*ANAMELEN+CHALLEN+DOMLEN+1)
76 2277c5d7 2004-03-21 devnull
77 2277c5d7 2004-03-21 devnull struct Ticket
78 2277c5d7 2004-03-21 devnull {
79 2277c5d7 2004-03-21 devnull char num; /* replay protection */
80 2277c5d7 2004-03-21 devnull char chal[CHALLEN]; /* server challenge */
81 2277c5d7 2004-03-21 devnull char cuid[ANAMELEN]; /* uid on client */
82 2277c5d7 2004-03-21 devnull char suid[ANAMELEN]; /* uid on server */
83 2277c5d7 2004-03-21 devnull char key[DESKEYLEN]; /* nonce DES key */
84 2277c5d7 2004-03-21 devnull };
85 2277c5d7 2004-03-21 devnull #define TICKETLEN (CHALLEN+2*ANAMELEN+DESKEYLEN+1)
86 2277c5d7 2004-03-21 devnull
87 2277c5d7 2004-03-21 devnull struct Authenticator
88 2277c5d7 2004-03-21 devnull {
89 2277c5d7 2004-03-21 devnull char num; /* replay protection */
90 2277c5d7 2004-03-21 devnull char chal[CHALLEN];
91 2277c5d7 2004-03-21 devnull ulong id; /* authenticator id, ++'d with each auth */
92 2277c5d7 2004-03-21 devnull };
93 2277c5d7 2004-03-21 devnull #define AUTHENTLEN (CHALLEN+4+1)
94 2277c5d7 2004-03-21 devnull
95 2277c5d7 2004-03-21 devnull struct Passwordreq
96 2277c5d7 2004-03-21 devnull {
97 2277c5d7 2004-03-21 devnull char num;
98 2277c5d7 2004-03-21 devnull char old[ANAMELEN];
99 2277c5d7 2004-03-21 devnull char new[ANAMELEN];
100 2277c5d7 2004-03-21 devnull char changesecret;
101 2277c5d7 2004-03-21 devnull char secret[SECRETLEN]; /* new secret */
102 2277c5d7 2004-03-21 devnull };
103 2277c5d7 2004-03-21 devnull #define PASSREQLEN (2*ANAMELEN+1+1+SECRETLEN)
104 2277c5d7 2004-03-21 devnull
105 2277c5d7 2004-03-21 devnull struct OChapreply
106 2277c5d7 2004-03-21 devnull {
107 2277c5d7 2004-03-21 devnull uchar id;
108 2277c5d7 2004-03-21 devnull char uid[ANAMELEN];
109 2277c5d7 2004-03-21 devnull char resp[OMD5LEN];
110 2277c5d7 2004-03-21 devnull };
111 2277c5d7 2004-03-21 devnull
112 2277c5d7 2004-03-21 devnull struct OMSchapreply
113 2277c5d7 2004-03-21 devnull {
114 2277c5d7 2004-03-21 devnull char uid[ANAMELEN];
115 2277c5d7 2004-03-21 devnull char LMresp[24]; /* Lan Manager response */
116 2277c5d7 2004-03-21 devnull char NTresp[24]; /* NT response */
117 2277c5d7 2004-03-21 devnull };
118 2277c5d7 2004-03-21 devnull
119 2277c5d7 2004-03-21 devnull /*
120 2277c5d7 2004-03-21 devnull * convert to/from wire format
121 2277c5d7 2004-03-21 devnull */
122 2277c5d7 2004-03-21 devnull extern int convT2M(Ticket*, char*, char*);
123 2277c5d7 2004-03-21 devnull extern void convM2T(char*, Ticket*, char*);
124 2277c5d7 2004-03-21 devnull extern void convM2Tnoenc(char*, Ticket*);
125 2277c5d7 2004-03-21 devnull extern int convA2M(Authenticator*, char*, char*);
126 2277c5d7 2004-03-21 devnull extern void convM2A(char*, Authenticator*, char*);
127 2277c5d7 2004-03-21 devnull extern int convTR2M(Ticketreq*, char*);
128 2277c5d7 2004-03-21 devnull extern void convM2TR(char*, Ticketreq*);
129 2277c5d7 2004-03-21 devnull extern int convPR2M(Passwordreq*, char*, char*);
130 2277c5d7 2004-03-21 devnull extern void convM2PR(char*, Passwordreq*, char*);
131 2277c5d7 2004-03-21 devnull
132 2277c5d7 2004-03-21 devnull /*
133 2277c5d7 2004-03-21 devnull * convert ascii password to DES key
134 2277c5d7 2004-03-21 devnull */
135 2277c5d7 2004-03-21 devnull extern int opasstokey(char*, char*);
136 2277c5d7 2004-03-21 devnull extern int passtokey(char*, char*);
137 2277c5d7 2004-03-21 devnull
138 2277c5d7 2004-03-21 devnull /*
139 2277c5d7 2004-03-21 devnull * Nvram interface
140 2277c5d7 2004-03-21 devnull */
141 2277c5d7 2004-03-21 devnull enum {
142 2277c5d7 2004-03-21 devnull NVwrite = 1<<0, /* always prompt and rewrite nvram */
143 cbeb0b26 2006-04-01 devnull NVwriteonerr = 1<<1 /* prompt and rewrite nvram when corrupt */
144 2277c5d7 2004-03-21 devnull };
145 2277c5d7 2004-03-21 devnull
146 2277c5d7 2004-03-21 devnull struct Nvrsafe
147 2277c5d7 2004-03-21 devnull {
148 2277c5d7 2004-03-21 devnull char machkey[DESKEYLEN];
149 2277c5d7 2004-03-21 devnull uchar machsum;
150 2277c5d7 2004-03-21 devnull char authkey[DESKEYLEN];
151 2277c5d7 2004-03-21 devnull uchar authsum;
152 2277c5d7 2004-03-21 devnull char config[CONFIGLEN];
153 2277c5d7 2004-03-21 devnull uchar configsum;
154 2277c5d7 2004-03-21 devnull char authid[ANAMELEN];
155 2277c5d7 2004-03-21 devnull uchar authidsum;
156 2277c5d7 2004-03-21 devnull char authdom[DOMLEN];
157 2277c5d7 2004-03-21 devnull uchar authdomsum;
158 2277c5d7 2004-03-21 devnull };
159 2277c5d7 2004-03-21 devnull
160 2277c5d7 2004-03-21 devnull extern uchar nvcsum(void*, int);
161 2277c5d7 2004-03-21 devnull extern int readnvram(Nvrsafe*, int);
162 2277c5d7 2004-03-21 devnull
163 2277c5d7 2004-03-21 devnull /*
164 2277c5d7 2004-03-21 devnull * call up auth server
165 2277c5d7 2004-03-21 devnull */
166 2277c5d7 2004-03-21 devnull extern int authdial(char *netroot, char *authdom);
167 2277c5d7 2004-03-21 devnull
168 2277c5d7 2004-03-21 devnull /*
169 2277c5d7 2004-03-21 devnull * exchange messages with auth server
170 2277c5d7 2004-03-21 devnull */
171 2277c5d7 2004-03-21 devnull extern int _asgetticket(int, char*, char*);
172 2277c5d7 2004-03-21 devnull extern int _asrdresp(int, char*, int);
173 2277c5d7 2004-03-21 devnull extern int sslnegotiate(int, Ticket*, char**, char**);
174 2277c5d7 2004-03-21 devnull extern int srvsslnegotiate(int, Ticket*, char**, char**);
175 2277c5d7 2004-03-21 devnull #ifdef __cplusplus
176 2277c5d7 2004-03-21 devnull }
177 2277c5d7 2004-03-21 devnull #endif
178 2277c5d7 2004-03-21 devnull #endif