NSoft.NFramework.Cryptography.Aria.AriaEngine.DoEncKeySetup C# (CSharp) Method

DoEncKeySetup() private static method

private static DoEncKeySetup ( byte mk, int rk, int keyBits ) : void
mk byte
rk int
keyBits int
return void
        private static void DoEncKeySetup(byte[] mk, int[] rk, int keyBits) {
            var j = 0;
            var w0 = new int[4];
            var w1 = new int[4];
            var w2 = new int[4];
            var w3 = new int[4];

            w0[0] = ToInt(mk[0], mk[1], mk[2], mk[3]);
            w0[1] = ToInt(mk[4], mk[5], mk[6], mk[7]);
            w0[2] = ToInt(mk[8], mk[9], mk[10], mk[11]);
            w0[3] = ToInt(mk[12], mk[13], mk[14], mk[15]);

            var q = (keyBits - 128) / 64;
            var t0 = w0[0] ^ KRK[q][0];
            var t1 = w0[1] ^ KRK[q][1];
            var t2 = w0[2] ^ KRK[q][2];
            var t3 = w0[3] ^ KRK[q][3];
            t0 = TS1[(t0 >> 24) & 0xff] ^ TS2[(t0 >> 16) & 0xff] ^ TX1[(t0 >> 8) & 0xff] ^ TX2[t0 & 0xff];
            t1 = TS1[(t1 >> 24) & 0xff] ^ TS2[(t1 >> 16) & 0xff] ^ TX1[(t1 >> 8) & 0xff] ^ TX2[t1 & 0xff];
            t2 = TS1[(t2 >> 24) & 0xff] ^ TS2[(t2 >> 16) & 0xff] ^ TX1[(t2 >> 8) & 0xff] ^ TX2[t2 & 0xff];
            t3 = TS1[(t3 >> 24) & 0xff] ^ TS2[(t3 >> 16) & 0xff] ^ TX1[(t3 >> 8) & 0xff] ^ TX2[t3 & 0xff];
            t1 ^= t2;
            t2 ^= t3;
            t0 ^= t1;
            t3 ^= t1;
            t2 ^= t0;
            t1 ^= t2;
            t1 = Badc(t1);
            t2 = Cdab(t2);
            t3 = Dcba(t3);
            t1 ^= t2;
            t2 ^= t3;
            t0 ^= t1;
            t3 ^= t1;
            t2 ^= t0;
            t1 ^= t2;

            if(keyBits > 128) {
                w1[0] = ToInt(mk[16], mk[17], mk[18], mk[19]);
                w1[1] = ToInt(mk[20], mk[21], mk[22], mk[23]);
                if(keyBits > 192) {
                    w1[2] = ToInt(mk[24], mk[25], mk[26], mk[27]);
                    w1[3] = ToInt(mk[28], mk[29], mk[30], mk[31]);
                }
                else {
                    w1[2] = w1[3] = 0;
                }
            }
            else {
                w1[0] = w1[1] = w1[2] = w1[3] = 0;
            }
            w1[0] ^= (int)t0;
            w1[1] ^= (int)t1;
            w1[2] ^= (int)t2;
            w1[3] ^= (int)t3;
            t0 = w1[0];
            t1 = w1[1];
            t2 = w1[2];
            t3 = w1[3];

            q = (q == 2) ? 0 : (q + 1);
            t0 ^= KRK[q][0];
            t1 ^= KRK[q][1];
            t2 ^= KRK[q][2];
            t3 ^= KRK[q][3];
            t0 = TX1[(t0 >> 24) & 0xff] ^ TX2[(t0 >> 16) & 0xff] ^ TS1[(t0 >> 8) & 0xff] ^ TS2[t0 & 0xff];
            t1 = TX1[(t1 >> 24) & 0xff] ^ TX2[(t1 >> 16) & 0xff] ^ TS1[(t1 >> 8) & 0xff] ^ TS2[t1 & 0xff];
            t2 = TX1[(t2 >> 24) & 0xff] ^ TX2[(t2 >> 16) & 0xff] ^ TS1[(t2 >> 8) & 0xff] ^ TS2[t2 & 0xff];
            t3 = TX1[(t3 >> 24) & 0xff] ^ TX2[(t3 >> 16) & 0xff] ^ TS1[(t3 >> 8) & 0xff] ^ TS2[t3 & 0xff];
            t1 ^= t2;
            t2 ^= t3;
            t0 ^= t1;
            t3 ^= t1;
            t2 ^= t0;
            t1 ^= t2;
            t3 = Badc(t3);
            t0 = Cdab(t0);
            t1 = Dcba(t1);
            t1 ^= t2;
            t2 ^= t3;
            t0 ^= t1;
            t3 ^= t1;
            t2 ^= t0;
            t1 ^= t2;
            t0 ^= w0[0];
            t1 ^= w0[1];
            t2 ^= w0[2];
            t3 ^= w0[3];
            w2[0] = (int)t0;
            w2[1] = (int)t1;
            w2[2] = (int)t2;
            w2[3] = (int)t3;

            q = (q == 2) ? 0 : (q + 1);
            t0 ^= KRK[q][0];
            t1 ^= KRK[q][1];
            t2 ^= KRK[q][2];
            t3 ^= KRK[q][3];
            t0 = TS1[(t0 >> 24) & 0xff] ^ TS2[(t0 >> 16) & 0xff] ^ TX1[(t0 >> 8) & 0xff] ^ TX2[t0 & 0xff];
            t1 = TS1[(t1 >> 24) & 0xff] ^ TS2[(t1 >> 16) & 0xff] ^ TX1[(t1 >> 8) & 0xff] ^ TX2[t1 & 0xff];
            t2 = TS1[(t2 >> 24) & 0xff] ^ TS2[(t2 >> 16) & 0xff] ^ TX1[(t2 >> 8) & 0xff] ^ TX2[t2 & 0xff];
            t3 = TS1[(t3 >> 24) & 0xff] ^ TS2[(t3 >> 16) & 0xff] ^ TX1[(t3 >> 8) & 0xff] ^ TX2[t3 & 0xff];
            t1 ^= t2;
            t2 ^= t3;
            t0 ^= t1;
            t3 ^= t1;
            t2 ^= t0;
            t1 ^= t2;
            t1 = Badc(t1);
            t2 = Cdab(t2);
            t3 = Dcba(t3);
            t1 ^= t2;
            t2 ^= t3;
            t0 ^= t1;
            t3 ^= t1;
            t2 ^= t0;
            t1 ^= t2;
            w3[0] = (int)t0 ^ w1[0];
            w3[1] = (int)t1 ^ w1[1];
            w3[2] = (int)t2 ^ w1[2];
            w3[3] = (int)t3 ^ w1[3];

            Gsrk(w0, w1, 19, rk, j);
            j += 4;
            Gsrk(w1, w2, 19, rk, j);
            j += 4;
            Gsrk(w2, w3, 19, rk, j);
            j += 4;
            Gsrk(w3, w0, 19, rk, j);
            j += 4;
            Gsrk(w0, w1, 31, rk, j);
            j += 4;
            Gsrk(w1, w2, 31, rk, j);
            j += 4;
            Gsrk(w2, w3, 31, rk, j);
            j += 4;
            Gsrk(w3, w0, 31, rk, j);
            j += 4;
            Gsrk(w0, w1, 67, rk, j);
            j += 4;
            Gsrk(w1, w2, 67, rk, j);
            j += 4;
            Gsrk(w2, w3, 67, rk, j);
            j += 4;
            Gsrk(w3, w0, 67, rk, j);
            j += 4;
            Gsrk(w0, w1, 97, rk, j);
            j += 4;
            if(keyBits > 128) {
                Gsrk(w1, w2, 97, rk, j);
                j += 4;
                Gsrk(w2, w3, 97, rk, j);
                j += 4;
            }
            if(keyBits > 192) {
                Gsrk(w3, w0, 97, rk, j);
                j += 4;
                Gsrk(w0, w1, 109, rk, j);
            }
        }