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