예제 #1
0
        protected static void ImplMultiply(ulong[] x, ulong[] y, ulong[] zz)
        {
            ulong[] array  = new ulong[5];
            ulong[] array2 = new ulong[5];
            SecT283Field.ImplExpand(x, array);
            SecT283Field.ImplExpand(y, array2);
            ulong[] array3 = new ulong[26];
            SecT283Field.ImplMulw(array[0], array2[0], array3, 0);
            SecT283Field.ImplMulw(array[1], array2[1], array3, 2);
            SecT283Field.ImplMulw(array[2], array2[2], array3, 4);
            SecT283Field.ImplMulw(array[3], array2[3], array3, 6);
            SecT283Field.ImplMulw(array[4], array2[4], array3, 8);
            ulong num  = array[0] ^ array[1];
            ulong num2 = array2[0] ^ array2[1];
            ulong num3 = array[0] ^ array[2];
            ulong num4 = array2[0] ^ array2[2];
            ulong num5 = array[2] ^ array[4];
            ulong num6 = array2[2] ^ array2[4];
            ulong num7 = array[3] ^ array[4];
            ulong num8 = array2[3] ^ array2[4];

            SecT283Field.ImplMulw(num3 ^ array[3], num4 ^ array2[3], array3, 18);
            SecT283Field.ImplMulw(num5 ^ array[1], num6 ^ array2[1], array3, 20);
            ulong num9  = num ^ num7;
            ulong num10 = num2 ^ num8;
            ulong x2    = num9 ^ array[2];
            ulong y2    = num10 ^ array2[2];

            SecT283Field.ImplMulw(num9, num10, array3, 22);
            SecT283Field.ImplMulw(x2, y2, array3, 24);
            SecT283Field.ImplMulw(num, num2, array3, 10);
            SecT283Field.ImplMulw(num3, num4, array3, 12);
            SecT283Field.ImplMulw(num5, num6, array3, 14);
            SecT283Field.ImplMulw(num7, num8, array3, 16);
            zz[0] = array3[0];
            zz[9] = array3[9];
            ulong num11 = array3[0] ^ array3[1];
            ulong num12 = num11 ^ array3[2];
            ulong num13 = num12 ^ array3[10];

            zz[1] = num13;
            ulong num14 = array3[3] ^ array3[4];
            ulong num15 = array3[11] ^ array3[12];
            ulong num16 = num14 ^ num15;
            ulong num17 = num12 ^ num16;

            zz[2] = num17;
            ulong num18 = num11 ^ num14;
            ulong num19 = array3[5] ^ array3[6];
            ulong num20 = num18 ^ num19;
            ulong num21 = num20 ^ array3[8];
            ulong num22 = array3[13] ^ array3[14];
            ulong num23 = num21 ^ num22;
            ulong num24 = array3[18] ^ array3[22];
            ulong num25 = num24 ^ array3[24];
            ulong num26 = num23 ^ num25;

            zz[3] = num26;
            ulong num27 = array3[7] ^ array3[8];
            ulong num28 = num27 ^ array3[9];
            ulong num29 = num28 ^ array3[17];

            zz[8] = num29;
            ulong num30 = num28 ^ num19;
            ulong num31 = array3[15] ^ array3[16];
            ulong num32 = num30 ^ num31;

            zz[7] = num32;
            ulong num33 = num32 ^ num13;
            ulong num34 = array3[19] ^ array3[20];
            ulong num35 = array3[25] ^ array3[24];
            ulong num36 = array3[18] ^ array3[23];
            ulong num37 = num34 ^ num35;
            ulong num38 = num37 ^ num36;
            ulong num39 = num38 ^ num33;

            zz[4] = num39;
            ulong num40 = num17 ^ num29;
            ulong num41 = num37 ^ num40;
            ulong num42 = array3[21] ^ array3[22];
            ulong num43 = num41 ^ num42;

            zz[5] = num43;
            ulong num44 = num21 ^ array3[0];
            ulong num45 = num44 ^ array3[9];
            ulong num46 = num45 ^ num22;
            ulong num47 = num46 ^ array3[21];
            ulong num48 = num47 ^ array3[23];
            ulong num49 = num48 ^ array3[25];

            zz[6] = num49;
            SecT283Field.ImplCompactExt(zz);
        }