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