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