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