private uint CipherFunct (uint r, int n)
{
uint res = 0;
byte[] subkey = keySchedule;
int i = n << 3;
uint rt = (r >> 1) | (r << 31); // ROR32(r)
res |= spBoxes [0*64 + (((rt >> 26) ^ subkey [i++]) & 0x3F)];
res |= spBoxes [1*64 + (((rt >> 22) ^ subkey [i++]) & 0x3F)];
res |= spBoxes [2*64 + (((rt >> 18) ^ subkey [i++]) & 0x3F)];
res |= spBoxes [3*64 + (((rt >> 14) ^ subkey [i++]) & 0x3F)];
res |= spBoxes [4*64 + (((rt >> 10) ^ subkey [i++]) & 0x3F)];
res |= spBoxes [5*64 + (((rt >> 6) ^ subkey [i++]) & 0x3F)];
res |= spBoxes [6*64 + (((rt >> 2) ^ subkey [i++]) & 0x3F)];
rt = (r << 1) | (r >> 31); // ROL32(r)
res |= spBoxes [7*64 + ((rt ^ subkey [i]) & 0x3F)];
return res;
}