#include "os.h"
#include <mp.h>
#include <libsec.h>

/* Because of the way that non multiple of 8 */
/* buffers are handled, the decryptor must */
/* be fed buffers of the same size as the */
/* encryptor */


/* If the length is not a multiple of 8, I encrypt */
/* the overflow to be compatible with lacy's cryptlib */
void
desCBCencrypt(uchar *p, int len, DESstate *s)
{
	uchar *p2, *ip, *eip;

	for(; len >= 8; len -= 8){
		p2 = p;
		ip = s->ivec;
		for(eip = ip+8; ip < eip; )
			*p2++ ^= *ip++;
		block_cipher(s->expanded, p, 0);
		memmove(s->ivec, p, 8);
		p += 8;
	}

	if(len > 0){
		ip = s->ivec;
		block_cipher(s->expanded, ip, 0);
		for(eip = ip+len; ip < eip; )
			*p++ ^= *ip++;
	}
}

void
desCBCdecrypt(uchar *p, int len, DESstate *s)
{
	uchar *ip, *eip, *tp;
	uchar tmp[8];

	for(; len >= 8; len -= 8){
		memmove(tmp, p, 8);
		block_cipher(s->expanded, p, 1);
		tp = tmp;
		ip = s->ivec;
		for(eip = ip+8; ip < eip; ){
			*p++ ^= *ip;
			*ip++ = *tp++;
		}
	}

	if(len > 0){
		ip = s->ivec;
		block_cipher(s->expanded, ip, 0);
		for(eip = ip+len; ip < eip; )
			*p++ ^= *ip++;
	}
}
