Org.BouncyCastle.Crypto.Engines.IsaacEngine.setKey C# (CSharp) Метод

setKey() приватный Метод

private setKey ( byte keyBytes ) : void
keyBytes byte
Результат void
        private void setKey(
            byte[] keyBytes)
        {
            workingKey = keyBytes;

            if (engineState == null)
            {
                engineState = new uint[stateArraySize];
            }

            if (results == null)
            {
                results = new uint[stateArraySize];
            }

            int i, j, k;

            // Reset state
            for (i = 0; i < stateArraySize; i++)
            {
                engineState[i] = results[i] = 0;
            }
            a = b = c = 0;

            // Reset index counter for output
            index = 0;

            // Convert the key bytes to ints and put them into results[] for initialization
            byte[] t = new byte[keyBytes.Length + (keyBytes.Length & 3)];
            Array.Copy(keyBytes, 0, t, 0, keyBytes.Length);
            for (i = 0; i < t.Length; i+=4)
            {
                results[i >> 2] = Pack.LE_To_UInt32(t, i);
            }

            // It has begun?
            uint[] abcdefgh = new uint[sizeL];

            for (i = 0; i < sizeL; i++)
            {
                abcdefgh[i] = 0x9e3779b9; // Phi (golden ratio)
            }

            for (i = 0; i < 4; i++)
            {
                mix(abcdefgh);
            }

            for (i = 0; i < 2; i++)
            {
                for (j = 0; j < stateArraySize; j+=sizeL)
                {
                    for (k = 0; k < sizeL; k++)
                    {
                        abcdefgh[k] += (i<1) ? results[j+k] : engineState[j+k];
                    }

                    mix(abcdefgh);

                    for (k = 0; k < sizeL; k++)
                    {
                        engineState[j+k] = abcdefgh[k];
                    }
                }
            }

            isaac();

            initialised = true;
        }