1 #ifdef DEBUG	/* keep these macros common so they are same for both versions */
2 CONST int debugCompile	=	1;
3 extern  int	debug;
4 extern  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 
_Dump(CONST void * p,CONST char * s,int R,int XOR,int doRot,int showT,int needBswap,DWORD t0,DWORD t1)11 void _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 
_DumpKey(CONST keyInstance * key)45 void _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
74 CONST int debugCompile	=	0;
75 #define DebugDump(x,s,R,XOR,doRot,showT,needBswap)
76 #define	DebugDumpKey(key)
77 #endif
78