www.pudn.com > twofish-reference-c.zip > DEBUG.H


#ifdef DEBUG	/* keep these macros common so they are same for both versions */ 
CONST int debugCompile	=	1; 
extern  int	debug; 
extern  void DebugIO(CONST char *s);	/* display the debug output */ 
 
#define DebugDump(x,s,R,XOR,doRot,showT,needBswap)	\ 
	{ if (debug) _Dump(x,s,R,XOR,doRot,showT,needBswap,t0,t1); } 
#define	DebugDumpKey(key) { if (debug) _DumpKey(key); } 
#define	IV_ROUND	-100 
	 
void _Dump(CONST void *p,CONST char *s,int R,int XOR,int doRot,int showT,int needBswap, 
		   DWORD t0,DWORD t1) 
	{ 
	char line[512];	/* build output here */ 
	int  i,n; 
	DWORD q[4]; 
 
	if (R == IV_ROUND) 
		sprintf(line,"%sIV:    ",s); 
	else 
		sprintf(line,"%sR[%2d]: ",s,R); 
	for (n=0;line[n];n++) ; 
	 
	for (i=0;i<4;i++) 
		{ 
		q[i]=((CONST DWORD *)p)[i^(XOR)]; 
		if (needBswap) q[i]=Bswap(q[i]); 
		} 
 
	sprintf(line+n,"x= %08lX  %08lX  %08lX  %08lX.", 
			ROR(q[0],doRot*(R  )/2), 
			ROL(q[1],doRot*(R  )/2), 
			ROR(q[2],doRot*(R+1)/2), 
			ROL(q[3],doRot*(R+1)/2)); 
	for (;line[n];n++) ; 
 
	if (showT) 
		sprintf(line+n,"    t0=%08lX. t1=%08lX.",t0,t1); 
	for (;line[n];n++) ; 
 
	sprintf(line+n,"\n"); 
	DebugIO(line); 
	} 
 
void _DumpKey(CONST keyInstance *key) 
	{ 
	char	line[512]; 
	int		i; 
	int		k64Cnt=(key->keyLen+63)/64;	/* round up to next multiple of 64 bits */ 
	int		subkeyCnt = ROUND_SUBKEYS + 2*key->numRounds; 
 
	sprintf(line,";\n;makeKey:   Input key            -->  S-box key     [%s]\n", 
		   (key->direction == DIR_ENCRYPT) ? "Encrypt" : "Decrypt"); 
	DebugIO(line); 
	for (i=0;i  %08lX\n","", 
			   key->key32[2*i+1],key->key32[2*i],key->sboxKeys[k64Cnt-1-i]); 
		DebugIO(line); 
		} 
	sprintf(line,";%11sSubkeys\n",""); 
	DebugIO(line); 
	for (i=0;isubKeys[2*i],key->subKeys[2*i+1], 
			  (2*i ==  INPUT_WHITEN) ? "   Input whiten" : 
			  (2*i == OUTPUT_WHITEN) ? "  Output whiten" : 
		      (2*i == ROUND_SUBKEYS) ? "  Round subkeys" : ""); 
		DebugIO(line); 
		} 
	DebugIO(";\n"); 
	} 
#else 
CONST int debugCompile	=	0; 
#define DebugDump(x,s,R,XOR,doRot,showT,needBswap) 
#define	DebugDumpKey(key) 
#endif