]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libauthsrv/convM2T.c
listen(8): add -a option to restrict announce address, document tcp17019 and tcp17020
[plan9front.git] / sys / src / libauthsrv / convM2T.c
1 #include <u.h>
2 #include <libc.h>
3 #include <authsrv.h>
4
5 extern int form1check(char *ap, int n);
6 extern int form1M2B(char *ap, int n, uchar key[32]);
7
8 int
9 convM2T(char *ap, int n, Ticket *f, Authkey *k)
10 {
11         uchar buf[MAXTICKETLEN], *p;
12         int m;
13
14         if(f != nil)
15                 memset(f, 0, sizeof(Ticket));
16
17         if(n < 8)
18                 return -8;
19
20         if(form1check(ap, n) < 0){
21                 m = 1+CHALLEN+2*ANAMELEN+DESKEYLEN;
22                 if(n < m)
23                         return -m;
24                 if(f == nil || k == nil)
25                         return m;
26                 f->form = 0;
27                 memmove(buf, ap, m);
28                 decrypt(k->des, buf, m);
29         } else {
30                 m = 12+CHALLEN+2*ANAMELEN+NONCELEN+16;
31                 if(n < m)
32                         return -m;
33                 if(f == nil || k == nil)
34                         return m;
35                 f->form = 1;
36                 memmove(buf, ap, m);
37                 if(form1M2B((char*)buf, m, k->pakkey) < 0)
38                         return m;
39         }
40         p = buf;
41         f->num = *p++;
42         memmove(f->chal, p, CHALLEN), p += CHALLEN;
43         memmove(f->cuid, p, ANAMELEN), p += ANAMELEN;
44         memmove(f->suid, p, ANAMELEN), p += ANAMELEN;
45         memmove(f->key, p, f->form == 0 ? DESKEYLEN : NONCELEN);
46
47         f->cuid[ANAMELEN-1] = 0;
48         f->suid[ANAMELEN-1] = 0;
49
50         return m;
51 }