diff options
Diffstat (limited to 'src/libauthsrv/passtokey.c')
-rw-r--r-- | src/libauthsrv/passtokey.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/libauthsrv/passtokey.c b/src/libauthsrv/passtokey.c new file mode 100644 index 00000000..8e267ce4 --- /dev/null +++ b/src/libauthsrv/passtokey.c @@ -0,0 +1,33 @@ +#include <u.h> +#include <libc.h> +#include <authsrv.h> + +int +passtokey(char *key, char *p) +{ + uchar buf[ANAMELEN], *t; + int i, n; + + n = strlen(p); + if(n >= ANAMELEN) + n = ANAMELEN-1; + memset(buf, ' ', 8); + t = buf; + strncpy((char*)t, p, n); + t[n] = 0; + memset(key, 0, DESKEYLEN); + for(;;){ + for(i = 0; i < DESKEYLEN; i++) + key[i] = (t[i] >> i) + (t[i+1] << (8 - (i+1))); + if(n <= 8) + return 1; + n -= 8; + t += 8; + if(n < 8){ + t -= 8 - n; + n = 8; + } + encrypt(key, t, 8); + } + return 1; /* not reached */ +} |