opasstokey.c 448 B

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