]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/ssh/cipher3des.c
kernel: keep segment locked for data2txt
[plan9front.git] / sys / src / cmd / ssh / cipher3des.c
1 #include "ssh.h"
2
3 struct CipherState
4 {
5         DESstate enc3des[3];
6         DESstate dec3des[3];
7 };
8
9 static CipherState*
10 init3des(Conn *c, int)
11 {
12         int i;
13         CipherState *cs;
14
15         cs = emalloc(sizeof(CipherState));
16         for(i=0; i<3; i++){
17                 setupDESstate(&cs->enc3des[i], c->sesskey+8*i, nil);
18                 setupDESstate(&cs->dec3des[i], c->sesskey+8*i, nil);
19         }
20         return cs;
21 }
22
23 static void
24 encrypt3des(CipherState *cs, uchar *buf, int nbuf)
25 {
26         desCBCencrypt(buf, nbuf, &cs->enc3des[0]);
27         desCBCdecrypt(buf, nbuf, &cs->enc3des[1]);
28         desCBCencrypt(buf, nbuf, &cs->enc3des[2]);
29 }
30
31 static void
32 decrypt3des(CipherState *cs, uchar *buf, int nbuf)
33 {
34         desCBCdecrypt(buf, nbuf, &cs->dec3des[2]);
35         desCBCencrypt(buf, nbuf, &cs->dec3des[1]);
36         desCBCdecrypt(buf, nbuf, &cs->dec3des[0]);
37 }
38
39 Cipher cipher3des =
40 {
41         SSH_CIPHER_3DES,
42         "3des",
43         init3des,
44         encrypt3des,
45         decrypt3des,
46 };
47