in=(unsigned char *)input; out=(unsigned char *)output; iv=(unsigned char *)ivec;
iv=ivec;
void des_xcbc_encrypt(input, output, length, schedule, ivec, inw,outw,enc)des_cblock (*input);des_cblock (*output);long length;des_key_schedule schedule;des_cblock (*ivec);des_cblock (*inw);des_cblock (*outw);int enc;	{	register DES_LONG tin0,tin1;	register DES_LONG tout0,tout1,xor0,xor1;	register DES_LONG inW0,inW1,outW0,outW1;	register unsigned char *in,*out;	register long l=length;	DES_LONG tin[2];	unsigned char *iv;	in=(unsigned char *)inw;	c2l(in,inW0);	c2l(in,inW1);	in=(unsigned char *)outw;	c2l(in,outW0);	c2l(in,outW1);	in=(unsigned char *)input;	out=(unsigned char *)output;	iv=(unsigned char *)ivec;	if (enc)		{		c2l(iv,tout0);		c2l(iv,tout1);		for (l-=8; l>=0; l-=8)			{			c2l(in,tin0);			c2l(in,tin1);			tin0^=tout0^inW0; tin[0]=tin0;			tin1^=tout1^inW1; tin[1]=tin1;			des_encrypt((DES_LONG *)tin,schedule,DES_ENCRYPT);			tout0=tin[0]^outW0; l2c(tout0,out);			tout1=tin[1]^outW1; l2c(tout1,out);			}		if (l != -8)			{			c2ln(in,tin0,tin1,l+8);			tin0^=tout0^inW0; tin[0]=tin0;			tin1^=tout1^inW1; tin[1]=tin1;			des_encrypt((DES_LONG *)tin,schedule,DES_ENCRYPT);			tout0=tin[0]^outW0; l2c(tout0,out);			tout1=tin[1]^outW1; l2c(tout1,out);			}		iv=(unsigned char *)ivec;		l2c(tout0,iv);		l2c(tout1,iv);		}	else		{		c2l(iv,xor0);		c2l(iv,xor1);		for (l-=8; l>0; l-=8)			{			c2l(in,tin0); tin[0]=tin0^outW0;			c2l(in,tin1); tin[1]=tin1^outW1;			des_encrypt((DES_LONG *)tin,schedule,DES_DECRYPT);			tout0=tin[0]^xor0^inW0;			tout1=tin[1]^xor1^inW1;			l2c(tout0,out);			l2c(tout1,out);			xor0=tin0;			xor1=tin1;			}		if (l != -8)			{			c2l(in,tin0); tin[0]=tin0^outW0;			c2l(in,tin1); tin[1]=tin1^outW1;			des_encrypt((DES_LONG *)tin,schedule,DES_DECRYPT);			tout0=tin[0]^xor0^inW0;			tout1=tin[1]^xor1^inW1;			l2cn(tout0,tout1,out,l+8);			xor0=tin0;			xor1=tin1;			}		iv=(unsigned char *)ivec;		l2c(xor0,iv);		l2c(xor1,iv);		}	tin0=tin1=tout0=tout1=xor0=xor1=0;	inW0=inW1=outW0=outW1=0;	tin[0]=tin[1]=0;	}