- int i;
- for(i=0;i<DES_SBOXES;i++)
- s[i]=get_sbox_value(data,i*(DES_SUBKEY_LEN/DES_SBOXES),(DES_SUBKEY_LEN/DES_SBOXES),i);
+ memset(s,0,DES_DATA_BLOCK_LEN/(8*2));
+ s[0]=sbox[0][16*(((data[0]&0x80)>>6)|((data[0]&4)>>2))+((data[0]&0x78)>>3)]<<4;
+ s[0]|=sbox[1][16*((data[0]&2)|((data[1]&0x10)>>4))+(((data[0]&1)<<3)|(data[1]&0xe0)>>5)];
+ s[1]=sbox[2][16*(((data[1]&8)>>2)|((data[2]&0x40)>>6))+(((data[1]&7)<<1)|((data[2]&0x80)>>7))]<<4;
+ s[1]|=sbox[3][16*(((data[2]&0x20)>>4)|(data[2]&1))+((data[2]&0x1e)>>1)];
+ s[2]=sbox[4][16*(((data[3]&0x80)>>6)|((data[3]&4)>>2))+((data[3]&0x78)>>3)]<<4;
+ s[2]|=sbox[5][16*((data[3]&2)|((data[4]&0x10)>>4))+(((data[3]&1)<<3)|(data[4]&0xe0)>>5)];
+ s[3]=sbox[6][16*(((data[4]&8)>>2)|((data[5]&0x40)>>6))+(((data[4]&7)<<1)|((data[5]&0x80)>>7))]<<4;
+ s[3]|=sbox[7][16*(((data[5]&0x20)>>4)|(data[5]&1))+((data[5]&0x1e)>>1)];