xref: /plan9/sys/src/libauthsrv/passtokey.c (revision b85a83648eec38fe82b6f00adfd7828ceec5ee8d)
1*9a747e4fSDavid du Colombier #include <u.h>
2*9a747e4fSDavid du Colombier #include <libc.h>
3*9a747e4fSDavid du Colombier #include <authsrv.h>
4*9a747e4fSDavid du Colombier 
5*9a747e4fSDavid du Colombier int
passtokey(char * key,char * p)6*9a747e4fSDavid du Colombier passtokey(char *key, char *p)
7*9a747e4fSDavid du Colombier {
8*9a747e4fSDavid du Colombier 	uchar buf[ANAMELEN], *t;
9*9a747e4fSDavid du Colombier 	int i, n;
10*9a747e4fSDavid du Colombier 
11*9a747e4fSDavid du Colombier 	n = strlen(p);
12*9a747e4fSDavid du Colombier 	if(n >= ANAMELEN)
13*9a747e4fSDavid du Colombier 		n = ANAMELEN-1;
14*9a747e4fSDavid du Colombier 	memset(buf, ' ', 8);
15*9a747e4fSDavid du Colombier 	t = buf;
16*9a747e4fSDavid du Colombier 	strncpy((char*)t, p, n);
17*9a747e4fSDavid du Colombier 	t[n] = 0;
18*9a747e4fSDavid du Colombier 	memset(key, 0, DESKEYLEN);
19*9a747e4fSDavid du Colombier 	for(;;){
20*9a747e4fSDavid du Colombier 		for(i = 0; i < DESKEYLEN; i++)
21*9a747e4fSDavid du Colombier 			key[i] = (t[i] >> i) + (t[i+1] << (8 - (i+1)));
22*9a747e4fSDavid du Colombier 		if(n <= 8)
23*9a747e4fSDavid du Colombier 			return 1;
24*9a747e4fSDavid du Colombier 		n -= 8;
25*9a747e4fSDavid du Colombier 		t += 8;
26*9a747e4fSDavid du Colombier 		if(n < 8){
27*9a747e4fSDavid du Colombier 			t -= 8 - n;
28*9a747e4fSDavid du Colombier 			n = 8;
29*9a747e4fSDavid du Colombier 		}
30*9a747e4fSDavid du Colombier 		encrypt(key, t, 8);
31*9a747e4fSDavid du Colombier 	}
32*9a747e4fSDavid du Colombier }
33