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