1 #include "ssh.h"
2
3 struct CipherState
4 {
5 DESstate enc3des[3];
6 DESstate dec3des[3];
7 };
8
9 static CipherState*
init3des(Conn * c,int)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
encrypt3des(CipherState * cs,uchar * buf,int nbuf)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
decrypt3des(CipherState * cs,uchar * buf,int nbuf)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