Org.BouncyCastle.Crypto.Engines.IdeaEngine.InvertKey C# (CSharp) Method

InvertKey() private method

private InvertKey ( int inKey ) : int[]
inKey int
return int[]
        private int[] InvertKey(
            int[] inKey)
        {
            int     t1, t2, t3, t4;
            int     p = 52;                 /* We work backwards */
            int[]   key = new int[52];
            int     inOff = 0;

            t1 = MulInv(inKey[inOff++]);
            t2 = AddInv(inKey[inOff++]);
            t3 = AddInv(inKey[inOff++]);
            t4 = MulInv(inKey[inOff++]);
            key[--p] = t4;
            key[--p] = t3;
            key[--p] = t2;
            key[--p] = t1;

            for (int round = 1; round < 8; round++)
            {
                t1 = inKey[inOff++];
                t2 = inKey[inOff++];
                key[--p] = t2;
                key[--p] = t1;

                t1 = MulInv(inKey[inOff++]);
                t2 = AddInv(inKey[inOff++]);
                t3 = AddInv(inKey[inOff++]);
                t4 = MulInv(inKey[inOff++]);
                key[--p] = t4;
                key[--p] = t2; /* NB: Order */
                key[--p] = t3;
                key[--p] = t1;
            }
            t1 = inKey[inOff++];
            t2 = inKey[inOff++];
            key[--p] = t2;
            key[--p] = t1;

            t1 = MulInv(inKey[inOff++]);
            t2 = AddInv(inKey[inOff++]);
            t3 = AddInv(inKey[inOff++]);
            t4 = MulInv(inKey[inOff]);
            key[--p] = t4;
            key[--p] = t3;
            key[--p] = t2;
            key[--p] = t1;
            return key;
        }