示例#1
0
        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;
        }