]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/src/libauthsrv/convA2M.c
seconds: use new libc date api
[plan9front.git] / sys / src / libauthsrv / convA2M.c
old mode 100755 (executable)
new mode 100644 (file)
index 2799cbf..4db2df3
@@ -2,24 +2,35 @@
 #include <libc.h>
 #include <authsrv.h>
 
-#define        CHAR(x)         *p++ = f->x
-#define        SHORT(x)        p[0] = f->x; p[1] = f->x>>8; p += 2
-#define        VLONG(q)        p[0] = (q); p[1] = (q)>>8; p[2] = (q)>>16; p[3] = (q)>>24; p += 4
-#define        LONG(x)         VLONG(f->x)
-#define        STRING(x,n)     memmove(p, f->x, n); p += n
+extern int form1B2M(char *ap, int n, uchar key[32]);
 
 int
-convA2M(Authenticator *f, char *ap, char *key)
+convA2M(Authenticator *f, char *ap, int n, Ticket *t)
 {
-       int n;
        uchar *p;
 
+       if(n < 1+CHALLEN)
+               return 0;
+
        p = (uchar*)ap;
-       CHAR(num);
-       STRING(chal, CHALLEN);
-       LONG(id);
-       n = p - (uchar*)ap;
-       if(key)
-               encrypt(key, ap, n);
-       return n;
+       *p++ = f->num;
+       memmove(p, f->chal, CHALLEN), p += CHALLEN;
+       switch(t->form){
+       case 0:
+               if(n < 1+CHALLEN+4)
+                       return 0;
+
+               memset(p, 0, 4), p += 4;        /* unused id field */
+               n = p - (uchar*)ap;
+               encrypt(t->key, ap, n);
+               return n;
+       case 1:
+               if(n < 12+CHALLEN+NONCELEN+16)
+                       return 0;
+
+               memmove(p, f->rand, NONCELEN), p += NONCELEN;
+               return form1B2M(ap, (char*)p - ap, t->key);
+       }
+
+       return 0;
 }