for(int i=0; i<4; i++){ unsigned char a = x[1]; unsigned char b = a; b = values[b]; b -= vector[i]; x[0] += b; b = x[2]; b = b ^ values[vector[i]]; a -= b; x[1] = a; a = x[3]; b = a; a -= x[0]; b = values[b]; b += vector[i]; b = b ^ x[2]; x[2] = b; a += values[vector[i]]; x[3] = a; unsigned int c, d; for(int j=0; j<4; j++){ c = x[0] + x[1]*0x100 + x[2]*0x100*0x100 + x[3]*0x100*0x100*0x100; d = c; } c = c >> 0x1D; d = d << 0x03; c = c | d; x[0] = c%0x100; c = c / 0x100; x[1] = c%0x100; c = c / 0x100; x[2] = c%0x100; x[3] = c / 0x100; } for(int i=0; i<4; i++) vector[i] = x[i];