private void IterateState() { QByte[] newStates = new QByte[8]; for (int i = 0; i < 8; i++) { uint op1 = RabbitUtils.g_function(this.states[i], this.counters[i]); uint op2 = RabbitUtils.g_function(this.states[(i + 7) % 8], this.counters[(i + 7) % 8]); uint op3 = RabbitUtils.g_function(this.states[(i + 6) % 8], this.counters[(i + 6) % 8]); if (i % 2 == 0) { op2 = RabbitUtils.LeftRotate(op2, 16); op3 = RabbitUtils.LeftRotate(op3, 16); } else { op2 = RabbitUtils.LeftRotate(op2, 8); } ulong tmp = op1 + op2 + op3; uint result = (uint)(tmp % uint.MaxValue); newStates[i] = new QByte(result); } this.states = newStates; }