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