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 RC4state enc;
6*63afb9a5SDavid du Colombier RC4state dec;
7*63afb9a5SDavid du Colombier };
8*63afb9a5SDavid du Colombier
9*63afb9a5SDavid du Colombier static CipherState*
initrc4(Conn * c,int isserver)10*63afb9a5SDavid du Colombier initrc4(Conn *c, int isserver)
11*63afb9a5SDavid du Colombier {
12*63afb9a5SDavid du Colombier CipherState *cs;
13*63afb9a5SDavid du Colombier
14*63afb9a5SDavid du Colombier cs = emalloc(sizeof(CipherState));
15*63afb9a5SDavid du Colombier if(isserver){
16*63afb9a5SDavid du Colombier setupRC4state(&cs->enc, c->sesskey, 16);
17*63afb9a5SDavid du Colombier setupRC4state(&cs->dec, c->sesskey+16, 16);
18*63afb9a5SDavid du Colombier }else{
19*63afb9a5SDavid du Colombier setupRC4state(&cs->dec, c->sesskey, 16);
20*63afb9a5SDavid du Colombier setupRC4state(&cs->enc, c->sesskey+16, 16);
21*63afb9a5SDavid du Colombier }
22*63afb9a5SDavid du Colombier return cs;
23*63afb9a5SDavid du Colombier }
24*63afb9a5SDavid du Colombier
25*63afb9a5SDavid du Colombier static void
encryptrc4(CipherState * cs,uchar * buf,int nbuf)26*63afb9a5SDavid du Colombier encryptrc4(CipherState *cs, uchar *buf, int nbuf)
27*63afb9a5SDavid du Colombier {
28*63afb9a5SDavid du Colombier rc4(&cs->enc, buf, nbuf);
29*63afb9a5SDavid du Colombier }
30*63afb9a5SDavid du Colombier
31*63afb9a5SDavid du Colombier static void
decryptrc4(CipherState * cs,uchar * buf,int nbuf)32*63afb9a5SDavid du Colombier decryptrc4(CipherState *cs, uchar *buf, int nbuf)
33*63afb9a5SDavid du Colombier {
34*63afb9a5SDavid du Colombier rc4(&cs->dec, buf, nbuf);
35*63afb9a5SDavid du Colombier }
36*63afb9a5SDavid du Colombier
37*63afb9a5SDavid du Colombier Cipher cipherrc4 =
38*63afb9a5SDavid du Colombier {
39*63afb9a5SDavid du Colombier SSH_CIPHER_RC4,
40*63afb9a5SDavid du Colombier "rc4",
41*63afb9a5SDavid du Colombier initrc4,
42*63afb9a5SDavid du Colombier encryptrc4,
43*63afb9a5SDavid du Colombier decryptrc4,
44*63afb9a5SDavid du Colombier };
45*63afb9a5SDavid du Colombier
46