1*8ccd4a63SDavid du Colombier #include "os.h"
2*8ccd4a63SDavid du Colombier #include <mp.h>
3*8ccd4a63SDavid du Colombier #include <libsec.h>
4*8ccd4a63SDavid du Colombier
5*8ccd4a63SDavid du Colombier // I wasn't sure what to do when the buffer was not
6*8ccd4a63SDavid du Colombier // a multiple of 8. I did what lacy's cryptolib did
7*8ccd4a63SDavid du Colombier // to be compatible, but it looks dangerous to me
8*8ccd4a63SDavid du Colombier // since its encrypting plain text with the key. -- presotto
9*8ccd4a63SDavid du Colombier
10*8ccd4a63SDavid du Colombier void
des3ECBencrypt(uchar * p,int len,DES3state * s)11*8ccd4a63SDavid du Colombier des3ECBencrypt(uchar *p, int len, DES3state *s)
12*8ccd4a63SDavid du Colombier {
13*8ccd4a63SDavid du Colombier int i;
14*8ccd4a63SDavid du Colombier uchar tmp[8];
15*8ccd4a63SDavid du Colombier
16*8ccd4a63SDavid du Colombier for(; len >= 8; len -= 8){
17*8ccd4a63SDavid du Colombier triple_block_cipher(s->expanded, p, DES3EDE);
18*8ccd4a63SDavid du Colombier p += 8;
19*8ccd4a63SDavid du Colombier }
20*8ccd4a63SDavid du Colombier
21*8ccd4a63SDavid du Colombier if(len > 0){
22*8ccd4a63SDavid du Colombier for (i=0; i<8; i++)
23*8ccd4a63SDavid du Colombier tmp[i] = i;
24*8ccd4a63SDavid du Colombier triple_block_cipher(s->expanded, tmp, DES3EDE);
25*8ccd4a63SDavid du Colombier for (i = 0; i < len; i++)
26*8ccd4a63SDavid du Colombier p[i] ^= tmp[i];
27*8ccd4a63SDavid du Colombier }
28*8ccd4a63SDavid du Colombier }
29*8ccd4a63SDavid du Colombier
30*8ccd4a63SDavid du Colombier void
des3ECBdecrypt(uchar * p,int len,DES3state * s)31*8ccd4a63SDavid du Colombier des3ECBdecrypt(uchar *p, int len, DES3state *s)
32*8ccd4a63SDavid du Colombier {
33*8ccd4a63SDavid du Colombier int i;
34*8ccd4a63SDavid du Colombier uchar tmp[8];
35*8ccd4a63SDavid du Colombier
36*8ccd4a63SDavid du Colombier for(; len >= 8; len -= 8){
37*8ccd4a63SDavid du Colombier triple_block_cipher(s->expanded, p, DES3DED);
38*8ccd4a63SDavid du Colombier p += 8;
39*8ccd4a63SDavid du Colombier }
40*8ccd4a63SDavid du Colombier
41*8ccd4a63SDavid du Colombier if(len > 0){
42*8ccd4a63SDavid du Colombier for (i=0; i<8; i++)
43*8ccd4a63SDavid du Colombier tmp[i] = i;
44*8ccd4a63SDavid du Colombier triple_block_cipher(s->expanded, tmp, DES3EDE);
45*8ccd4a63SDavid du Colombier for (i = 0; i < len; i++)
46*8ccd4a63SDavid du Colombier p[i] ^= tmp[i];
47*8ccd4a63SDavid du Colombier }
48*8ccd4a63SDavid du Colombier }
49