diff options
Diffstat (limited to 'sys/src/libauthsrv/convM2A.c')
-rw-r--r-- | sys/src/libauthsrv/convM2A.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/sys/src/libauthsrv/convM2A.c b/sys/src/libauthsrv/convM2A.c index 3d58f9b59..b0d6712ca 100644 --- a/sys/src/libauthsrv/convM2A.c +++ b/sys/src/libauthsrv/convM2A.c @@ -8,16 +8,24 @@ #define LONG(x) VLONG(f->x) #define STRING(x,n) memmove(f->x, p, n); p += n -void -convM2A(char *ap, Authenticator *f, char *key) +int +convM2A(char *ap, int n, Authenticator *f, Ticket *t) { - uchar *p; + uchar *p, buf[AUTHENTLEN]; - if(key) - decrypt(key, ap, AUTHENTLEN); + memset(f, 0, sizeof(Authenticator)); + if(n < AUTHENTLEN) + return -AUTHENTLEN; + + if(t) { + memmove(buf, ap, AUTHENTLEN); + ap = (char*)buf; + decrypt(t->key, ap, AUTHENTLEN); + } p = (uchar*)ap; CHAR(num); STRING(chal, CHALLEN); LONG(id); - USED(p); + n = p - (uchar*)ap; + return n; } |