diff --git a/DESXL/desxl.c b/DESXL/desxl.c index dd9576a..8150a80 100644 --- a/DESXL/desxl.c +++ b/DESXL/desxl.c @@ -2,6 +2,7 @@ typedef uint8_t u8; typedef uint32_t u32; +typedef int16_t i16; #include "tools.h" @@ -77,14 +78,14 @@ static const u8 KeyCompression[] = #define DES_ROUND(X,Y) \ { \ - T=SBE[(((X>>31)&0x01)^(X<<1)^*SK++)& 0x3F]^ \ - (SBE[((X>>3)^(*SK>>6))& 0x3F]<<4)^ \ - (SBE[((X>>7)^(*SK>>12))& 0x3F]<<8)^ \ - (SBE[((X>>11)^(*SK>>18))& 0x3F]<<12)^ \ - (SBE[((X>>15)^(*SK>>24))& 0x3F]<<16)^ \ - (SBE[((X>>19)^(*SK>>30)^(*SK++<<2))& 0x3F]<<20)^ \ - (SBE[((X>>23)^(*SK>>4))& 0x3F]<<24)^ \ - (SBE[((X>>27)^(*SK>>10))& 0x3F]<<28); \ + T = (int16_t)(SBE[(((X>>31)&0x01)^(X<<1)^*SK++)& 0x3F]); \ + T^= (int16_t)(SBE[((X>>3)^(*SK>>6))& 0x3F]<<4); \ + T^= (int16_t)(SBE[((X>>7)^(*SK>>12))& 0x3F]<<8); \ + T^= (int16_t)(SBE[((X>>11)^(*SK>>18))& 0x3F]<<12); \ + T^= (int16_t)(SBE[((X>>15)^(*SK>>24))& 0x3F]<<16); \ + T^= (int16_t)(SBE[((X>>19)^(*SK>>30)^(*SK++<<2))& 0x3F]<<20); \ + T^= (int16_t)(SBE[((X>>23)^(*SK>>4))& 0x3F]<<24); \ + T^= (int16_t)(SBE[((X>>27)^(*SK>>10))& 0x3F]<<28); \ \ T=((T&0x01)<<8)^((T&0x02)<<15)^((T&0x04)<<20)^((T&0x08)<<27) \ ^((T&0x10)<<8)^((T&0x20)<<22)^((T&0x40)>>5)^((T&0x80)<<10) \