text: #include "ssh.h"
  
  struct CipherState
  {
  	DESstate enc3des[3];
  	DESstate dec3des[3];
  };
  
  static CipherState*
  init3des(Conn *c, int)
  {
  	int i;
  	CipherState *cs;
  
  	cs = emalloc(sizeof(CipherState));
  	for(i=0; i<3; i++){
  		setupDESstate(&cs->enc3des[i], c->sesskey+8*i, nil);
  		setupDESstate(&cs->dec3des[i], c->sesskey+8*i, nil);
  	}
  	return cs;
  }
  
  static void
  encrypt3des(CipherState *cs, uchar *buf, int nbuf)
  {
  	desCBCencrypt(buf, nbuf, &cs->enc3des[0]);
  	desCBCdecrypt(buf, nbuf, &cs->enc3des[1]);
  	desCBCencrypt(buf, nbuf, &cs->enc3des[2]);
  }
  
  static void
  decrypt3des(CipherState *cs, uchar *buf, int nbuf)
  {
  	desCBCdecrypt(buf, nbuf, &cs->dec3des[2]);
  	desCBCencrypt(buf, nbuf, &cs->dec3des[1]);
  	desCBCdecrypt(buf, nbuf, &cs->dec3des[0]);
  }
  
  Cipher cipher3des =
  {
  	SSH_CIPHER_3DES,
  	"3des",
  	init3des,
  	encrypt3des,
  	decrypt3des,
  };
  
  