DES_set_key_unchecked(key1,&ks);
if(DES_is_weak_key(key1)) (*key1)[7] ^= 0xF0; DES_set_key(key1,&ks);
void DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2)	{	DES_key_schedule ks;	int i,length;	register unsigned char j;	memset(key1,0,8);	memset(key2,0,8);	length=strlen(str);#ifdef OLD_STR_TO_KEY	if (length <= 8)		{		for (i=0; i<length; i++)			{			(*key2)[i]=(*key1)[i]=(str[i]<<1);			}		}	else		{		for (i=0; i<length; i++)			{			if ((i/8)&1)				(*key2)[i%8]^=(str[i]<<1);			else				(*key1)[i%8]^=(str[i]<<1);			}		}#else /* MIT COMPATIBLE */	for (i=0; i<length; i++)		{		j=str[i];		if ((i%32) < 16)			{			if ((i%16) < 8)				(*key1)[i%8]^=(j<<1);			else				(*key2)[i%8]^=(j<<1);			}		else			{			j=((j<<4)&0xf0)|((j>>4)&0x0f);			j=((j<<2)&0xcc)|((j>>2)&0x33);			j=((j<<1)&0xaa)|((j>>1)&0x55);			if ((i%16) < 8)				(*key1)[7-(i%8)]^=j;			else				(*key2)[7-(i%8)]^=j;			}		}	if (length <= 8) memcpy(key2,key1,8);#endif	DES_set_odd_parity(key1);	DES_set_odd_parity(key2);	DES_set_key_unchecked(key1,&ks);	DES_cbc_cksum((const unsigned char*)str,key1,length,&ks,key1);	DES_set_key_unchecked(key2,&ks);	DES_cbc_cksum((const unsigned char*)str,key2,length,&ks,key2);	memset(&ks,0,sizeof(ks));	DES_set_odd_parity(key1);	DES_set_odd_parity(key2);	}