1*63afb9a5SDavid du Colombier #include <u.h>
2*63afb9a5SDavid du Colombier #include <libc.h>
3*63afb9a5SDavid du Colombier #include <mp.h>
4*63afb9a5SDavid du Colombier #include <fcall.h>
5*63afb9a5SDavid du Colombier #include <thread.h>
6*63afb9a5SDavid du Colombier #include <9p.h>
7*63afb9a5SDavid du Colombier #include <libsec.h>
8*63afb9a5SDavid du Colombier #include "netssh.h"
9*63afb9a5SDavid du Colombier
10*63afb9a5SDavid du Colombier struct CipherState {
11*63afb9a5SDavid du Colombier RC4state state;
12*63afb9a5SDavid du Colombier };
13*63afb9a5SDavid du Colombier
14*63afb9a5SDavid du Colombier static CipherState*
initrc4(Conn * c,int dir)15*63afb9a5SDavid du Colombier initrc4(Conn *c, int dir)
16*63afb9a5SDavid du Colombier {
17*63afb9a5SDavid du Colombier CipherState *cs;
18*63afb9a5SDavid du Colombier
19*63afb9a5SDavid du Colombier cs = emalloc9p(sizeof(CipherState));
20*63afb9a5SDavid du Colombier if(dir)
21*63afb9a5SDavid du Colombier setupRC4state(&cs->state, c->s2cek, 16);
22*63afb9a5SDavid du Colombier else
23*63afb9a5SDavid du Colombier setupRC4state(&cs->state, c->c2sek, 16);
24*63afb9a5SDavid du Colombier return cs;
25*63afb9a5SDavid du Colombier }
26*63afb9a5SDavid du Colombier
27*63afb9a5SDavid du Colombier static void
encryptrc4(CipherState * cs,uchar * buf,int nbuf)28*63afb9a5SDavid du Colombier encryptrc4(CipherState *cs, uchar *buf, int nbuf)
29*63afb9a5SDavid du Colombier {
30*63afb9a5SDavid du Colombier rc4(&cs->state, buf, nbuf);
31*63afb9a5SDavid du Colombier }
32*63afb9a5SDavid du Colombier
33*63afb9a5SDavid du Colombier static void
decryptrc4(CipherState * cs,uchar * buf,int nbuf)34*63afb9a5SDavid du Colombier decryptrc4(CipherState *cs, uchar *buf, int nbuf)
35*63afb9a5SDavid du Colombier {
36*63afb9a5SDavid du Colombier rc4(&cs->state, buf, nbuf);
37*63afb9a5SDavid du Colombier }
38*63afb9a5SDavid du Colombier
39*63afb9a5SDavid du Colombier Cipher cipherrc4 = {
40*63afb9a5SDavid du Colombier "arcfour",
41*63afb9a5SDavid du Colombier 8,
42*63afb9a5SDavid du Colombier initrc4,
43*63afb9a5SDavid du Colombier encryptrc4,
44*63afb9a5SDavid du Colombier decryptrc4,
45*63afb9a5SDavid du Colombier };
46*63afb9a5SDavid du Colombier
47