Shift() 개인적인 정적인 메소드

private static Shift ( uint r, int shift ) : uint
r uint
shift int
리턴 uint
예제 #1
0
        private static uint Inv_Mcol(uint x)
        {
            uint num  = AesLightEngine.FFmulX(x);
            uint num2 = AesLightEngine.FFmulX(num);
            uint num3 = AesLightEngine.FFmulX(num2);
            uint num4 = x ^ num3;

            return(num ^ num2 ^ num3 ^ AesLightEngine.Shift(num ^ num4, 8) ^ AesLightEngine.Shift(num2 ^ num4, 16) ^ AesLightEngine.Shift(num4, 24));
        }
예제 #2
0
        private uint[][] GenerateWorkingKey(byte[] key, bool forEncryption)
        {
            int num = key.Length / 4;

            if (num != 4 && num != 6 && num != 8)
            {
                throw new ArgumentException("Key length not 128/192/256 bits.");
            }
            this.ROUNDS = num + 6;
            uint[][] array = new uint[this.ROUNDS + 1][];
            for (int i = 0; i <= this.ROUNDS; i++)
            {
                array[i] = new uint[4];
            }
            int num2 = 0;
            int j    = 0;

            while (j < key.Length)
            {
                array[num2 >> 2][num2 & 3] = Pack.LE_To_UInt32(key, j);
                j += 4;
                num2++;
            }
            int num3 = this.ROUNDS + 1 << 2;

            for (int k = num; k < num3; k++)
            {
                uint num4 = array[k - 1 >> 2][k - 1 & 3];
                if (k % num == 0)
                {
                    num4 = (AesLightEngine.SubWord(AesLightEngine.Shift(num4, 8)) ^ (uint)AesLightEngine.rcon[k / num - 1]);
                }
                else if (num > 6 && k % num == 4)
                {
                    num4 = AesLightEngine.SubWord(num4);
                }
                array[k >> 2][k & 3] = (array[k - num >> 2][k - num & 3] ^ num4);
            }
            if (!forEncryption)
            {
                for (int l = 1; l < this.ROUNDS; l++)
                {
                    uint[] array2 = array[l];
                    for (int m = 0; m < 4; m++)
                    {
                        array2[m] = AesLightEngine.Inv_Mcol(array2[m]);
                    }
                }
            }
            return(array);
        }
예제 #3
0
        private static uint Mcol(uint x)
        {
            uint num = AesLightEngine.FFmulX(x);

            return(num ^ AesLightEngine.Shift(x ^ num, 8) ^ AesLightEngine.Shift(x, 16) ^ AesLightEngine.Shift(x, 24));
        }