passtokey.c 517 B

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