]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libauthsrv/convA2M.c
libaml: fix gc bug, need to amltake()/amldrop() temporary buffer
[plan9front.git] / sys / src / libauthsrv / convA2M.c
1 #include <u.h>
2 #include <libc.h>
3 #include <authsrv.h>
4
5 extern int form1B2M(char *ap, int n, uchar key[32]);
6
7 int
8 convA2M(Authenticator *f, char *ap, int n, Ticket *t)
9 {
10         uchar *p;
11
12         if(n < 1+CHALLEN)
13                 return 0;
14
15         p = (uchar*)ap;
16         *p++ = f->num;
17         memmove(p, f->chal, CHALLEN), p += CHALLEN;
18         switch(t->form){
19         case 0:
20                 if(n < 1+CHALLEN+4)
21                         return 0;
22
23                 memset(p, 0, 4), p += 4;        /* unused id field */
24                 n = p - (uchar*)ap;
25                 encrypt(t->key, ap, n);
26                 return n;
27         case 1:
28                 if(n < 12+CHALLEN+NONCELEN+16)
29                         return 0;
30
31                 memmove(p, f->rand, NONCELEN), p += NONCELEN;
32                 return form1B2M(ap, (char*)p - ap, t->key);
33         }
34
35         return 0;
36 }