if ((j=des_key_sched((C_Block *)cbc_key,ks)) != 0) { printf("Key error %d\n",j); err=1; } if ((j=des_key_sched((C_Block *)cbc2_key,ks2)) != 0) { printf("Key error %d\n",j); err=1; } if ((j=des_key_sched((C_Block *)cbc3_key,ks3)) != 0)
if ((j=des_key_sched(cbc_key,ks)) != 0) { printf("Key error %d\n",j); err=1; } if ((j=des_key_sched(cbc2_key,ks2)) != 0) { printf("Key error %d\n",j); err=1; } if ((j=des_key_sched(cbc3_key,ks3)) != 0)
int main(argc,argv)int argc;char *argv[];	{	int i,j,err=0;	des_cblock in,out,outin,iv3,iv2;	des_key_schedule ks,ks2,ks3;	unsigned char cbc_in[40];	unsigned char cbc_out[40];	DES_LONG cs;	unsigned char qret[4][4],cret[8];	DES_LONG lqret[4];	int num;	char *str;	printf("Doing cbcm\n");	if ((j=des_key_sched((C_Block *)cbc_key,ks)) != 0)		{		printf("Key error %d\n",j);		err=1;		}	if ((j=des_key_sched((C_Block *)cbc2_key,ks2)) != 0)		{		printf("Key error %d\n",j);		err=1;		}	if ((j=des_key_sched((C_Block *)cbc3_key,ks3)) != 0)		{		printf("Key error %d\n",j);		err=1;		}	memset(cbc_out,0,40);	memset(cbc_in,0,40);	i=strlen((char *)cbc_data)+1;	/* i=((i+7)/8)*8; */	memcpy(iv3,cbc_iv,sizeof(cbc_iv));	memset(iv2,'\0',sizeof iv2);	des_ede3_cbcm_encrypt(cbc_data,cbc_out,16L,ks,ks2,ks3,iv3,iv2,			      DES_ENCRYPT);	des_ede3_cbcm_encrypt(&cbc_data[16],&cbc_out[16],i-16,ks,ks2,ks3,			      iv3,iv2,DES_ENCRYPT);	/*	if (memcmp(cbc_out,cbc3_ok,		(unsigned int)(strlen((char *)cbc_data)+1+7)/8*8) != 0)		{		printf("des_ede3_cbc_encrypt encrypt error\n");		err=1;		}	*/	memcpy(iv3,cbc_iv,sizeof(cbc_iv));	memset(iv2,'\0',sizeof iv2);	des_ede3_cbcm_encrypt(cbc_out,cbc_in,i,ks,ks2,ks3,iv3,iv2,DES_DECRYPT);	if (memcmp(cbc_in,cbc_data,strlen(cbc_data)+1) != 0)		{		int n;		printf("des_ede3_cbcm_encrypt decrypt error\n");		for(n=0 ; n < i ; ++n)		    printf(" %02x",cbc_data[n]);		printf("\n");		for(n=0 ; n < i ; ++n)		    printf(" %02x",cbc_in[n]);		printf("\n");		err=1;		}	printf("Doing ecb\n");	for (i=0; i<NUM_TESTS; i++)		{		if ((j=des_key_sched((C_Block *)(key_data[i]),ks)) != 0)			{			printf("Key error %2d:%d\n",i+1,j);			err=1;			}		memcpy(in,plain_data[i],8);		memset(out,0,8);		memset(outin,0,8);		des_ecb_encrypt((C_Block *)in,(C_Block *)out,ks,DES_ENCRYPT);		des_ecb_encrypt((C_Block *)out,(C_Block *)outin,ks,DES_DECRYPT);		if (memcmp(out,cipher_data[i],8) != 0)			{			printf("Encryption error %2d\nk=%s p=%s o=%s act=%s\n",				i+1,pt(key_data[i]),pt(in),pt(cipher_data[i]),				pt(out));			err=1;			}		if (memcmp(in,outin,8) != 0)			{			printf("Decryption error %2d\nk=%s p=%s o=%s act=%s\n",				i+1,pt(key_data[i]),pt(out),pt(in),pt(outin));			err=1;			}		}#ifndef LIBDES_LIT	printf("Doing ede ecb\n");	for (i=0; i<(NUM_TESTS-1); i++)		{		if ((j=des_key_sched((C_Block *)(key_data[i]),ks)) != 0)			{			err=1;			printf("Key error %2d:%d\n",i+1,j);			}		if ((j=des_key_sched((C_Block *)(key_data[i+1]),ks2)) != 0)			{			printf("Key error %2d:%d\n",i+2,j);			err=1;			}		if ((j=des_key_sched((C_Block *)(key_data[i+2]),ks3)) != 0)			{			printf("Key error %2d:%d\n",i+3,j);			err=1;			}		memcpy(in,plain_data[i],8);		memset(out,0,8);		memset(outin,0,8);		des_ecb2_encrypt((C_Block *)in,(C_Block *)out,ks,ks2,			DES_ENCRYPT);		des_ecb2_encrypt((C_Block *)out,(C_Block *)outin,ks,ks2,			DES_DECRYPT);		if (memcmp(out,cipher_ecb2[i],8) != 0)			{			printf("Encryption error %2d\nk=%s p=%s o=%s act=%s\n",				i+1,pt(key_data[i]),pt(in),pt(cipher_ecb2[i]),				pt(out));			err=1;			}		if (memcmp(in,outin,8) != 0)			{			printf("Decryption error %2d\nk=%s p=%s o=%s act=%s\n",				i+1,pt(key_data[i]),pt(out),pt(in),pt(outin));			err=1;			}		}#endif	printf("Doing cbc\n");	if ((j=des_key_sched((C_Block *)cbc_key,ks)) != 0)		{		printf("Key error %d\n",j);		err=1;		}	memset(cbc_out,0,40);	memset(cbc_in,0,40);	memcpy(iv3,cbc_iv,sizeof(cbc_iv));	des_ncbc_encrypt((C_Block *)cbc_data,(C_Block *)cbc_out,		(long)strlen((char *)cbc_data)+1,ks,		(C_Block *)iv3,DES_ENCRYPT);	if (memcmp(cbc_out,cbc_ok,32) != 0)		printf("cbc_encrypt encrypt error\n");	memcpy(iv3,cbc_iv,sizeof(cbc_iv));	des_ncbc_encrypt((C_Block *)cbc_out,(C_Block *)cbc_in,		(long)strlen((char *)cbc_data)+1,ks,		(C_Block *)iv3,DES_DECRYPT);	if (memcmp(cbc_in,cbc_data,strlen((char *)cbc_data)) != 0)		{		printf("cbc_encrypt decrypt error\n");		err=1;		}#ifndef LIBDES_LIT	printf("Doing desx cbc\n");	if ((j=des_key_sched((C_Block *)cbc_key,ks)) != 0)		{		printf("Key error %d\n",j);		err=1;		}	memset(cbc_out,0,40);	memset(cbc_in,0,40);	memcpy(iv3,cbc_iv,sizeof(cbc_iv));	des_xcbc_encrypt((C_Block *)cbc_data,(C_Block *)cbc_out,		(long)strlen((char *)cbc_data)+1,ks,		(C_Block *)iv3,		(C_Block *)cbc2_key, (C_Block *)cbc3_key, DES_ENCRYPT);	if (memcmp(cbc_out,xcbc_ok,32) != 0)		{		printf("des_xcbc_encrypt encrypt error\n");		}	memcpy(iv3,cbc_iv,sizeof(cbc_iv));	des_xcbc_encrypt((C_Block *)cbc_out,(C_Block *)cbc_in,		(long)strlen((char *)cbc_data)+1,ks,		(C_Block *)iv3,		(C_Block *)cbc2_key, (C_Block *)cbc3_key, DES_DECRYPT);	if (memcmp(cbc_in,cbc_data,strlen((char *)cbc_data)+1) != 0)		{		printf("des_xcbc_encrypt decrypt error\n");		err=1;		}#endif	printf("Doing ede cbc\n");	if ((j=des_key_sched((C_Block *)cbc_key,ks)) != 0)		{		printf("Key error %d\n",j);		err=1;		}	if ((j=des_key_sched((C_Block *)cbc2_key,ks2)) != 0)		{		printf("Key error %d\n",j);		err=1;		}	if ((j=des_key_sched((C_Block *)cbc3_key,ks3)) != 0)		{		printf("Key error %d\n",j);		err=1;		}	memset(cbc_out,0,40);	memset(cbc_in,0,40);	i=strlen((char *)cbc_data)+1;	/* i=((i+7)/8)*8; */	memcpy(iv3,cbc_iv,sizeof(cbc_iv));	des_ede3_cbc_encrypt((C_Block *)cbc_data,(C_Block *)cbc_out,		16L,ks,ks2,ks3,(C_Block *)iv3,DES_ENCRYPT);	des_ede3_cbc_encrypt((C_Block *)&(cbc_data[16]),		(C_Block *)&(cbc_out[16]),		(long)i-16,ks,ks2,ks3,(C_Block *)iv3,DES_ENCRYPT);	if (memcmp(cbc_out,cbc3_ok,		(unsigned int)(strlen((char *)cbc_data)+1+7)/8*8) != 0)		{		printf("des_ede3_cbc_encrypt encrypt error\n");		err=1;		}	memcpy(iv3,cbc_iv,sizeof(cbc_iv));	des_ede3_cbc_encrypt((C_Block *)cbc_out,(C_Block *)cbc_in,		(long)i,ks,ks2,ks3,(C_Block *)iv3,DES_DECRYPT);	if (memcmp(cbc_in,cbc_data,strlen(cbc_data)+1) != 0)		{		printf("des_ede3_cbc_encrypt decrypt error\n");		err=1;		}#ifndef LIBDES_LIT	printf("Doing pcbc\n");	if ((j=des_key_sched((C_Block *)cbc_key,ks)) != 0)		{		printf("Key error %d\n",j);		err=1;		}	memset(cbc_out,0,40);	memset(cbc_in,0,40);	des_pcbc_encrypt((C_Block *)cbc_data,(C_Block *)cbc_out,		(long)strlen(cbc_data)+1,ks,(C_Block *)cbc_iv,DES_ENCRYPT);	if (memcmp(cbc_out,pcbc_ok,32) != 0)		{		printf("pcbc_encrypt encrypt error\n");		err=1;		}	des_pcbc_encrypt((C_Block *)cbc_out,(C_Block *)cbc_in,		(long)strlen(cbc_data)+1,ks,(C_Block *)cbc_iv,DES_DECRYPT);	if (memcmp(cbc_in,cbc_data,strlen(cbc_data)+1) != 0)		{		printf("pcbc_encrypt decrypt error\n");		err=1;		}	printf("Doing ");	printf("cfb8 ");	err+=cfb_test(8,cfb_cipher8);	printf("cfb16 ");	err+=cfb_test(16,cfb_cipher16);	printf("cfb32 ");	err+=cfb_test(32,cfb_cipher32);	printf("cfb48 ");	err+=cfb_test(48,cfb_cipher48);	printf("cfb64 ");	err+=cfb_test(64,cfb_cipher64);	printf("cfb64() ");	err+=cfb64_test(cfb_cipher64);	memcpy(cfb_tmp,cfb_iv,sizeof(cfb_iv));	for (i=0; i<sizeof(plain); i++)		des_cfb_encrypt(&(plain[i]),&(cfb_buf1[i]),			8,(long)1,ks,(C_Block *)cfb_tmp,DES_ENCRYPT);	if (memcmp(cfb_cipher8,cfb_buf1,sizeof(plain)) != 0)		{		printf("cfb_encrypt small encrypt error\n");		err=1;		}	memcpy(cfb_tmp,cfb_iv,sizeof(cfb_iv));	for (i=0; i<sizeof(plain); i++)		des_cfb_encrypt(&(cfb_buf1[i]),&(cfb_buf2[i]),			8,(long)1,ks,(C_Block *)cfb_tmp,DES_DECRYPT);	if (memcmp(plain,cfb_buf2,sizeof(plain)) != 0)		{		printf("cfb_encrypt small decrypt error\n");		err=1;		}	printf("ede_cfb64() ");	err+=ede_cfb64_test(cfb_cipher64);	printf("done\n");	printf("Doing ofb\n");	des_key_sched((C_Block *)ofb_key,ks);	memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv));	des_ofb_encrypt(plain,ofb_buf1,64,(long)sizeof(plain)/8,ks,		(C_Block *)ofb_tmp);	if (memcmp(ofb_cipher,ofb_buf1,sizeof(ofb_buf1)) != 0)		{		printf("ofb_encrypt encrypt error\n");printf("%02X %02X %02X %02X %02X %02X %02X %02X\n",ofb_buf1[8+0], ofb_buf1[8+1], ofb_buf1[8+2], ofb_buf1[8+3],ofb_buf1[8+4], ofb_buf1[8+5], ofb_buf1[8+6], ofb_buf1[8+7]);printf("%02X %02X %02X %02X %02X %02X %02X %02X\n",ofb_buf1[8+0], ofb_cipher[8+1], ofb_cipher[8+2], ofb_cipher[8+3],ofb_buf1[8+4], ofb_cipher[8+5], ofb_cipher[8+6], ofb_cipher[8+7]);		err=1;		}	memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv));	des_ofb_encrypt(ofb_buf1,ofb_buf2,64,(long)sizeof(ofb_buf1)/8,ks,		(C_Block *)ofb_tmp);	if (memcmp(plain,ofb_buf2,sizeof(ofb_buf2)) != 0)		{		printf("ofb_encrypt decrypt error\n");printf("%02X %02X %02X %02X %02X %02X %02X %02X\n",ofb_buf2[8+0], ofb_buf2[8+1], ofb_buf2[8+2], ofb_buf2[8+3],ofb_buf2[8+4], ofb_buf2[8+5], ofb_buf2[8+6], ofb_buf2[8+7]);printf("%02X %02X %02X %02X %02X %02X %02X %02X\n",plain[8+0], plain[8+1], plain[8+2], plain[8+3],plain[8+4], plain[8+5], plain[8+6], plain[8+7]);		err=1;		}	printf("Doing ofb64\n");	des_key_sched((C_Block *)ofb_key,ks);	memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv));	memset(ofb_buf1,0,sizeof(ofb_buf1));	memset(ofb_buf2,0,sizeof(ofb_buf1));	num=0;	for (i=0; i<sizeof(plain); i++)		{		des_ofb64_encrypt(&(plain[i]),&(ofb_buf1[i]),1,ks,			(C_Block *)ofb_tmp,&num);		}	if (memcmp(ofb_cipher,ofb_buf1,sizeof(ofb_buf1)) != 0)		{		printf("ofb64_encrypt encrypt error\n");		err=1;		}	memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv));	num=0;	des_ofb64_encrypt(ofb_buf1,ofb_buf2,(long)sizeof(ofb_buf1),ks,		(C_Block *)ofb_tmp,&num);	if (memcmp(plain,ofb_buf2,sizeof(ofb_buf2)) != 0)		{		printf("ofb64_encrypt decrypt error\n");		err=1;		}	printf("Doing ede_ofb64\n");	des_key_sched((C_Block *)ofb_key,ks);	memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv));	memset(ofb_buf1,0,sizeof(ofb_buf1));	memset(ofb_buf2,0,sizeof(ofb_buf1));	num=0;	for (i=0; i<sizeof(plain); i++)		{		des_ede3_ofb64_encrypt(&(plain[i]),&(ofb_buf1[i]),1,ks,ks,ks,			(C_Block *)ofb_tmp,&num);		}	if (memcmp(ofb_cipher,ofb_buf1,sizeof(ofb_buf1)) != 0)		{		printf("ede_ofb64_encrypt encrypt error\n");		err=1;		}	memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv));	num=0;	des_ede3_ofb64_encrypt(ofb_buf1,ofb_buf2,(long)sizeof(ofb_buf1),ks,		ks,ks,(C_Block *)ofb_tmp,&num);	if (memcmp(plain,ofb_buf2,sizeof(ofb_buf2)) != 0)		{		printf("ede_ofb64_encrypt decrypt error\n");		err=1;		}	printf("Doing cbc_cksum\n");	des_key_sched((C_Block *)cbc_key,ks);	cs=des_cbc_cksum((C_Block *)cbc_data,(C_Block *)cret,		(long)strlen(cbc_data),ks,(C_Block *)cbc_iv);	if (cs != cbc_cksum_ret)		{		printf("bad return value (%08lX), should be %08lX\n",			(unsigned long)cs,(unsigned long)cbc_cksum_ret);		err=1;		}	if (memcmp(cret,cbc_cksum_data,8) != 0)		{		printf("bad cbc_cksum block returned\n");		err=1;		}	printf("Doing quad_cksum\n");	cs=quad_cksum((C_Block *)cbc_data,(C_Block *)qret,		(long)strlen(cbc_data),2,(C_Block *)cbc_iv);	{ /* Big-endian fix */	static DES_LONG l=1;	static unsigned char *c=(unsigned char *)&l;	DES_LONG ll;	j=sizeof(lqret[0])-4;	for (i=0; i<4; i++)		{		lqret[i]=0;		memcpy(&(lqret[i]),&(qret[i][0]),4);		if (!c[0] && (j > 0))			lqret[i]=lqret[i]>>(j*8); /* For Cray */		}	if (!c[0])		{		ll=lqret[0]^lqret[3];		lqret[0]^=ll;		lqret[3]^=ll;		ll=lqret[1]^lqret[2];		lqret[1]^=ll;		lqret[2]^=ll;		}	}	if (cs != 0x70d7a63aL)		{		printf("quad_cksum error, ret %08lx should be 70d7a63a\n",			(unsigned long)cs);		err=1;		}	if (lqret[0] != 0x327eba8dL)		{		printf("quad_cksum error, out[0] %08lx is not %08lx\n",			(unsigned long)lqret[0],0x327eba8dL);		err=1;		}	if (lqret[1] != 0x201a49ccL)		{		printf("quad_cksum error, out[1] %08lx is not %08lx\n",			(unsigned long)lqret[1],0x201a49ccL);		err=1;		}	if (lqret[2] != 0x70d7a63aL)		{		printf("quad_cksum error, out[2] %08lx is not %08lx\n",			(unsigned long)lqret[2],0x70d7a63aL);		err=1;		}	if (lqret[3] != 0x501c2c26L)		{		printf("quad_cksum error, out[3] %08lx is not %08lx\n",			(unsigned long)lqret[3],0x501c2c26L);		err=1;		}#endif	printf("input word alignment test");	for (i=0; i<4; i++)		{		printf(" %d",i);		des_ncbc_encrypt((C_Block *)&(cbc_out[i]),(C_Block *)cbc_in,			(long)strlen(cbc_data)+1,ks,(C_Block *)cbc_iv,			DES_ENCRYPT);		}	printf("\noutput word alignment test");	for (i=0; i<4; i++)		{		printf(" %d",i);		des_ncbc_encrypt((C_Block *)cbc_out,(C_Block *)&(cbc_in[i]),			(long)strlen(cbc_data)+1,ks,(C_Block *)cbc_iv,			DES_ENCRYPT);		}	printf("\n");	printf("fast crypt test ");	str=crypt("testing","ef");	if (strcmp("efGnQx2725bI2",str) != 0)		{		printf("fast crypt error, %s should be efGnQx2725bI2\n",str);		err=1;		}	str=crypt("bca76;23","yA");	if (strcmp("yA1Rp/1hZXIJk",str) != 0)		{		printf("fast crypt error, %s should be yA1Rp/1hZXIJk\n",str);		err=1;		}	printf("\n");	exit(err);	return(0);	}