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