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