xref: /plan9/sys/src/cmd/ssh2/cipher3des.c (revision 63afb9a5d3f910047231762bcce0ee49fed3d07c)
1 #include <u.h>
2 #include <libc.h>
3 #include <mp.h>
4 #include <fcall.h>
5 #include <thread.h>
6 #include <9p.h>
7 #include <libsec.h>
8 #include "netssh.h"
9 
10 struct CipherState {
11 	DES3state state;
12 };
13 
14 static CipherState*
init3des(Conn * c,int dir)15 init3des(Conn *c, int dir)
16 {
17 	CipherState *cs;
18 	uchar key[3][8];
19 
20 	cs = emalloc9p(sizeof(CipherState));
21 	if(dir){
22 		memmove(key, c->s2cek, sizeof key);
23 		setupDES3state(&cs->state, key, c->s2civ);
24 	} else {
25 		memmove(key, c->c2sek, sizeof key);
26 		setupDES3state(&cs->state, key, c->c2siv);
27 	}
28 	return cs;
29 }
30 
31 static void
encrypt3des(CipherState * cs,uchar * buf,int nbuf)32 encrypt3des(CipherState *cs, uchar *buf, int nbuf)
33 {
34 	des3CBCencrypt(buf, nbuf, &cs->state);
35 }
36 
37 static void
decrypt3des(CipherState * cs,uchar * buf,int nbuf)38 decrypt3des(CipherState *cs, uchar *buf, int nbuf)
39 {
40 	des3CBCdecrypt(buf, nbuf, &cs->state);
41 }
42 
43 Cipher cipher3des = {
44 	"3des-cbc",
45 	8,
46 	init3des,
47 	encrypt3des,
48 	decrypt3des,
49 };
50