xref: /plan9/sys/src/cmd/ssh1/cipher3des.c (revision 63afb9a5d3f910047231762bcce0ee49fed3d07c)
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