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