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 DES3state state;
12*63afb9a5SDavid du Colombier };
13*63afb9a5SDavid du Colombier
14*63afb9a5SDavid du Colombier static CipherState*
init3des(Conn * c,int dir)15*63afb9a5SDavid du Colombier init3des(Conn *c, int dir)
16*63afb9a5SDavid du Colombier {
17*63afb9a5SDavid du Colombier CipherState *cs;
18*63afb9a5SDavid du Colombier uchar key[3][8];
19*63afb9a5SDavid du Colombier
20*63afb9a5SDavid du Colombier cs = emalloc9p(sizeof(CipherState));
21*63afb9a5SDavid du Colombier if(dir){
22*63afb9a5SDavid du Colombier memmove(key, c->s2cek, sizeof key);
23*63afb9a5SDavid du Colombier setupDES3state(&cs->state, key, c->s2civ);
24*63afb9a5SDavid du Colombier } else {
25*63afb9a5SDavid du Colombier memmove(key, c->c2sek, sizeof key);
26*63afb9a5SDavid du Colombier setupDES3state(&cs->state, key, c->c2siv);
27*63afb9a5SDavid du Colombier }
28*63afb9a5SDavid du Colombier return cs;
29*63afb9a5SDavid du Colombier }
30*63afb9a5SDavid du Colombier
31*63afb9a5SDavid du Colombier static void
encrypt3des(CipherState * cs,uchar * buf,int nbuf)32*63afb9a5SDavid du Colombier encrypt3des(CipherState *cs, uchar *buf, int nbuf)
33*63afb9a5SDavid du Colombier {
34*63afb9a5SDavid du Colombier des3CBCencrypt(buf, nbuf, &cs->state);
35*63afb9a5SDavid du Colombier }
36*63afb9a5SDavid du Colombier
37*63afb9a5SDavid du Colombier static void
decrypt3des(CipherState * cs,uchar * buf,int nbuf)38*63afb9a5SDavid du Colombier decrypt3des(CipherState *cs, uchar *buf, int nbuf)
39*63afb9a5SDavid du Colombier {
40*63afb9a5SDavid du Colombier des3CBCdecrypt(buf, nbuf, &cs->state);
41*63afb9a5SDavid du Colombier }
42*63afb9a5SDavid du Colombier
43*63afb9a5SDavid du Colombier Cipher cipher3des = {
44*63afb9a5SDavid du Colombier "3des-cbc",
45*63afb9a5SDavid du Colombier 8,
46*63afb9a5SDavid du Colombier init3des,
47*63afb9a5SDavid du Colombier encrypt3des,
48*63afb9a5SDavid du Colombier decrypt3des,
49*63afb9a5SDavid du Colombier };
50