xref: /plan9/sys/src/cmd/unix/drawterm/libsec/desECB.c (revision 8ccd4a6360d974db7bd7bbd4f37e7018419ea908)
1*8ccd4a63SDavid du Colombier #include "os.h"
2*8ccd4a63SDavid du Colombier #include <mp.h>
3*8ccd4a63SDavid du Colombier #include <libsec.h>
49b943567SDavid du Colombier 
59b943567SDavid du Colombier // I wasn't sure what to do when the buffer was not
69b943567SDavid du Colombier // a multiple of 8.  I did what lacy's cryptolib did
79b943567SDavid du Colombier // to be compatible, but it looks dangerous to me
89b943567SDavid du Colombier // since its encrypting plain text with the key. -- presotto
99b943567SDavid du Colombier 
109b943567SDavid du Colombier void
desECBencrypt(uchar * p,int len,DESstate * s)119b943567SDavid du Colombier desECBencrypt(uchar *p, int len, DESstate *s)
129b943567SDavid du Colombier {
139b943567SDavid du Colombier 	int i;
149b943567SDavid du Colombier 	uchar tmp[8];
159b943567SDavid du Colombier 
169b943567SDavid du Colombier 	for(; len >= 8; len -= 8){
179b943567SDavid du Colombier 		block_cipher(s->expanded, p, 0);
189b943567SDavid du Colombier 		p += 8;
199b943567SDavid du Colombier 	}
209b943567SDavid du Colombier 
219b943567SDavid du Colombier 	if(len > 0){
229b943567SDavid du Colombier 		for (i=0; i<8; i++)
239b943567SDavid du Colombier 			tmp[i] = i;
249b943567SDavid du Colombier 		block_cipher(s->expanded, tmp, 0);
259b943567SDavid du Colombier 		for (i = 0; i < len; i++)
269b943567SDavid du Colombier 			p[i] ^= tmp[i];
279b943567SDavid du Colombier 	}
289b943567SDavid du Colombier }
299b943567SDavid du Colombier 
309b943567SDavid du Colombier void
desECBdecrypt(uchar * p,int len,DESstate * s)319b943567SDavid du Colombier desECBdecrypt(uchar *p, int len, DESstate *s)
329b943567SDavid du Colombier {
339b943567SDavid du Colombier 	int i;
349b943567SDavid du Colombier 	uchar tmp[8];
359b943567SDavid du Colombier 
369b943567SDavid du Colombier 	for(; len >= 8; len -= 8){
379b943567SDavid du Colombier 		block_cipher(s->expanded, p, 1);
389b943567SDavid du Colombier 		p += 8;
399b943567SDavid du Colombier 	}
409b943567SDavid du Colombier 
419b943567SDavid du Colombier 	if(len > 0){
429b943567SDavid du Colombier 		for (i=0; i<8; i++)
439b943567SDavid du Colombier 			tmp[i] = i;
449b943567SDavid du Colombier 		block_cipher(s->expanded, tmp, 0);
459b943567SDavid du Colombier 		for (i = 0; i < len; i++)
469b943567SDavid du Colombier 			p[i] ^= tmp[i];
479b943567SDavid du Colombier 	}
489b943567SDavid du Colombier }
49