Beispiel #1
0
        protected static void ImplMultiply(ulong[] x, ulong[] y, ulong[] zz)
        {
            ulong num  = x[0];
            ulong num2 = x[1];
            ulong num3 = x[2];

            num3 = (num2 >> 46 ^ num3 << 18);
            num2 = ((num >> 55 ^ num2 << 9) & 36028797018963967uL);
            num &= 36028797018963967uL;
            ulong num4 = y[0];
            ulong num5 = y[1];
            ulong num6 = y[2];

            num6  = (num5 >> 46 ^ num6 << 18);
            num5  = ((num4 >> 55 ^ num5 << 9) & 36028797018963967uL);
            num4 &= 36028797018963967uL;
            ulong[] array = new ulong[10];
            SecT163Field.ImplMulw(num, num4, array, 0);
            SecT163Field.ImplMulw(num3, num6, array, 2);
            ulong num7 = num ^ num2 ^ num3;
            ulong num8 = num4 ^ num5 ^ num6;

            SecT163Field.ImplMulw(num7, num8, array, 4);
            ulong num9  = num2 << 1 ^ num3 << 2;
            ulong num10 = num5 << 1 ^ num6 << 2;

            SecT163Field.ImplMulw(num ^ num9, num4 ^ num10, array, 6);
            SecT163Field.ImplMulw(num7 ^ num9, num8 ^ num10, array, 8);
            ulong num11 = array[6] ^ array[8];
            ulong num12 = array[7] ^ array[9];
            ulong num13 = num11 << 1 ^ array[6];
            ulong num14 = num11 ^ num12 << 1 ^ array[7];
            ulong num15 = num12;
            ulong num16 = array[0];
            ulong num17 = array[1] ^ array[0] ^ array[4];
            ulong num18 = array[1] ^ array[5];
            ulong num19 = num16 ^ num13 ^ array[2] << 4 ^ array[2] << 1;
            ulong num20 = num17 ^ num14 ^ array[3] << 4 ^ array[3] << 1;
            ulong num21 = num18 ^ num15;

            num20  ^= num19 >> 55;
            num19  &= 36028797018963967uL;
            num21  ^= num20 >> 55;
            num20  &= 36028797018963967uL;
            num19   = (num19 >> 1 ^ (num20 & 1uL) << 54);
            num20   = (num20 >> 1 ^ (num21 & 1uL) << 54);
            num21 >>= 1;
            num19  ^= num19 << 1;
            num19  ^= num19 << 2;
            num19  ^= num19 << 4;
            num19  ^= num19 << 8;
            num19  ^= num19 << 16;
            num19  ^= num19 << 32;
            num19  &= 36028797018963967uL;
            num20  ^= num19 >> 54;
            num20  ^= num20 << 1;
            num20  ^= num20 << 2;
            num20  ^= num20 << 4;
            num20  ^= num20 << 8;
            num20  ^= num20 << 16;
            num20  ^= num20 << 32;
            num20  &= 36028797018963967uL;
            num21  ^= num20 >> 54;
            num21  ^= num21 << 1;
            num21  ^= num21 << 2;
            num21  ^= num21 << 4;
            num21  ^= num21 << 8;
            num21  ^= num21 << 16;
            num21  ^= num21 << 32;
            zz[0]   = num16;
            zz[1]   = (num17 ^ num19 ^ array[2]);
            zz[2]   = (num18 ^ num20 ^ num19 ^ array[3]);
            zz[3]   = (num21 ^ num20);
            zz[4]   = (num21 ^ array[2]);
            zz[5]   = array[3];
            SecT163Field.ImplCompactExt(zz);
        }