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