cipher3des.c 836 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #include "ssh.h"
  2. struct CipherState
  3. {
  4. DESstate enc3des[3];
  5. DESstate dec3des[3];
  6. };
  7. static CipherState*
  8. init3des(Conn *c, int)
  9. {
  10. int i;
  11. CipherState *cs;
  12. cs = emalloc(sizeof(CipherState));
  13. for(i=0; i<3; i++){
  14. setupDESstate(&cs->enc3des[i], c->sesskey+8*i, nil);
  15. setupDESstate(&cs->dec3des[i], c->sesskey+8*i, nil);
  16. }
  17. return cs;
  18. }
  19. static void
  20. encrypt3des(CipherState *cs, uchar *buf, int nbuf)
  21. {
  22. desCBCencrypt(buf, nbuf, &cs->enc3des[0]);
  23. desCBCdecrypt(buf, nbuf, &cs->enc3des[1]);
  24. desCBCencrypt(buf, nbuf, &cs->enc3des[2]);
  25. }
  26. static void
  27. decrypt3des(CipherState *cs, uchar *buf, int nbuf)
  28. {
  29. desCBCdecrypt(buf, nbuf, &cs->dec3des[2]);
  30. desCBCencrypt(buf, nbuf, &cs->dec3des[1]);
  31. desCBCdecrypt(buf, nbuf, &cs->dec3des[0]);
  32. }
  33. Cipher cipher3des =
  34. {
  35. SSH_CIPHER_3DES,
  36. "3des",
  37. init3des,
  38. encrypt3des,
  39. decrypt3des,
  40. };