]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libauthsrv/convT2M.c
vt: implement snarf support
[plan9front.git] / sys / src / libauthsrv / convT2M.c
1 #include <u.h>
2 #include <libc.h>
3 #include <authsrv.h>
4 #include <libsec.h>
5
6 extern int form1B2M(char *ap, int n, uchar key[32]);
7
8 int
9 convT2M(Ticket *f, char *ap, int n, Authkey *key)
10 {
11         uchar *p;
12
13         if(n < 1+CHALLEN+2*ANAMELEN)
14                 return 0;
15
16         p = (uchar*)ap;
17         *p++ = f->num;
18         memmove(p, f->chal, CHALLEN), p += CHALLEN;
19         memmove(p, f->cuid, ANAMELEN), p += ANAMELEN;
20         memmove(p, f->suid, ANAMELEN), p += ANAMELEN;
21         switch(f->form){
22         case 0:
23                 if(n < 1+CHALLEN+2*ANAMELEN+DESKEYLEN)
24                         return 0;
25
26                 memmove(p, f->key, DESKEYLEN), p += DESKEYLEN;
27                 n = p - (uchar*)ap;
28                 encrypt(key->des, ap, n);
29                 return n;
30         case 1:
31                 if(n < 12+CHALLEN+2*ANAMELEN+NONCELEN+16)
32                         return 0;
33
34                 memmove(p, f->key, NONCELEN), p += NONCELEN;
35                 return form1B2M(ap, p - (uchar*)ap, key->pakkey);
36         }
37
38         return 0;
39 }