1#ifdef DEBUG	/* keep these macros common so they are same for both versions */
2CONST int debugCompile	=	1;
3extern  int	debug;
4extern  void DebugIO(CONST char *s);	/* display the debug output */
5
6#define DebugDump(x,s,R,XOR,doRot,showT,needBswap)	\
7	{ if (debug) _Dump(x,s,R,XOR,doRot,showT,needBswap,t0,t1); }
8#define	DebugDumpKey(key) { if (debug) _DumpKey(key); }
9#define	IV_ROUND	-100
10
11void _Dump(CONST void *p,CONST char *s,int R,int XOR,int doRot,int showT,int needBswap,
12		   DWORD t0,DWORD t1)
13	{
14	char line[512];	/* build output here */
15	int  i,n;
16	DWORD q[4];
17
18	if (R == IV_ROUND)
19		sprintf(line,"%sIV:    ",s);
20	else
21		sprintf(line,"%sR[%2d]: ",s,R);
22	for (n=0;line[n];n++) ;
23
24	for (i=0;i<4;i++)
25		{
26		q[i]=((CONST DWORD *)p)[i^(XOR)];
27		if (needBswap) q[i]=Bswap(q[i]);
28		}
29
30	sprintf(line+n,"x= %08lX  %08lX  %08lX  %08lX.",
31			ROR(q[0],doRot*(R  )/2),
32			ROL(q[1],doRot*(R  )/2),
33			ROR(q[2],doRot*(R+1)/2),
34			ROL(q[3],doRot*(R+1)/2));
35	for (;line[n];n++) ;
36
37	if (showT)
38		sprintf(line+n,"    t0=%08lX. t1=%08lX.",t0,t1);
39	for (;line[n];n++) ;
40
41	sprintf(line+n,"\n");
42	DebugIO(line);
43	}
44
45void _DumpKey(CONST keyInstance *key)
46	{
47	char	line[512];
48	int		i;
49	int		k64Cnt=(key->keyLen+63)/64;	/* round up to next multiple of 64 bits */
50	int		subkeyCnt = ROUND_SUBKEYS + 2*key->numRounds;
51
52	sprintf(line,";\n;makeKey:   Input key            -->  S-box key     [%s]\n",
53		   (key->direction == DIR_ENCRYPT) ? "Encrypt" : "Decrypt");
54	DebugIO(line);
55	for (i=0;i<k64Cnt;i++)	/* display in RS format */
56		{
57		sprintf(line,";%12s %08lX %08lX  -->  %08lX\n","",
58			   key->key32[2*i+1],key->key32[2*i],key->sboxKeys[k64Cnt-1-i]);
59		DebugIO(line);
60		}
61	sprintf(line,";%11sSubkeys\n","");
62	DebugIO(line);
63	for (i=0;i<subkeyCnt/2;i++)
64		{
65		sprintf(line,";%12s %08lX %08lX%s\n","",key->subKeys[2*i],key->subKeys[2*i+1],
66			  (2*i ==  INPUT_WHITEN) ? "   Input whiten" :
67			  (2*i == OUTPUT_WHITEN) ? "  Output whiten" :
68		      (2*i == ROUND_SUBKEYS) ? "  Round subkeys" : "");
69		DebugIO(line);
70		}
71	DebugIO(";\n");
72	}
73#else
74CONST int debugCompile	=	0;
75#define DebugDump(x,s,R,XOR,doRot,showT,needBswap)
76#define	DebugDumpKey(key)
77#endif
78