private unsafe static void SHATransform(ulong *expandedBuffer, ulong *state, byte *block)
        {
            ulong num  = *state;
            ulong num2 = state[1];
            ulong num3 = state[2];
            ulong num4 = state[3];
            ulong num5 = state[4];
            ulong num6 = state[5];
            ulong num7 = state[6];
            ulong num8 = state[7];

            Utils.QuadWordFromBigEndian(expandedBuffer, 16, block);
            SHA512Managed.SHA512Expand(expandedBuffer);
            for (int i = 0; i < 80; i++)
            {
                ulong num9  = num8 + SHA512Managed.Sigma_1(num5) + SHA512Managed.Ch(num5, num6, num7) + SHA512Managed._K[i] + expandedBuffer[i];
                ulong num10 = num4 + num9;
                ulong num11 = num9 + SHA512Managed.Sigma_0(num) + SHA512Managed.Maj(num, num2, num3);
                i++;
                num9 = num7 + SHA512Managed.Sigma_1(num10) + SHA512Managed.Ch(num10, num5, num6) + SHA512Managed._K[i] + expandedBuffer[i];
                ulong num12 = num3 + num9;
                ulong num13 = num9 + SHA512Managed.Sigma_0(num11) + SHA512Managed.Maj(num11, num, num2);
                i++;
                num9 = num6 + SHA512Managed.Sigma_1(num12) + SHA512Managed.Ch(num12, num10, num5) + SHA512Managed._K[i] + expandedBuffer[i];
                ulong num14 = num2 + num9;
                ulong num15 = num9 + SHA512Managed.Sigma_0(num13) + SHA512Managed.Maj(num13, num11, num);
                i++;
                num9 = num5 + SHA512Managed.Sigma_1(num14) + SHA512Managed.Ch(num14, num12, num10) + SHA512Managed._K[i] + expandedBuffer[i];
                ulong num16 = num + num9;
                ulong num17 = num9 + SHA512Managed.Sigma_0(num15) + SHA512Managed.Maj(num15, num13, num11);
                i++;
                num9 = num10 + SHA512Managed.Sigma_1(num16) + SHA512Managed.Ch(num16, num14, num12) + SHA512Managed._K[i] + expandedBuffer[i];
                num8 = num11 + num9;
                num4 = num9 + SHA512Managed.Sigma_0(num17) + SHA512Managed.Maj(num17, num15, num13);
                i++;
                num9 = num12 + SHA512Managed.Sigma_1(num8) + SHA512Managed.Ch(num8, num16, num14) + SHA512Managed._K[i] + expandedBuffer[i];
                num7 = num13 + num9;
                num3 = num9 + SHA512Managed.Sigma_0(num4) + SHA512Managed.Maj(num4, num17, num15);
                i++;
                num9 = num14 + SHA512Managed.Sigma_1(num7) + SHA512Managed.Ch(num7, num8, num16) + SHA512Managed._K[i] + expandedBuffer[i];
                num6 = num15 + num9;
                num2 = num9 + SHA512Managed.Sigma_0(num3) + SHA512Managed.Maj(num3, num4, num17);
                i++;
                num9 = num16 + SHA512Managed.Sigma_1(num6) + SHA512Managed.Ch(num6, num7, num8) + SHA512Managed._K[i] + expandedBuffer[i];
                num5 = num17 + num9;
                num  = num9 + SHA512Managed.Sigma_0(num2) + SHA512Managed.Maj(num2, num3, num4);
            }
            *state += num;
            state[1] += num2;
            state[2] += num3;
            state[3] += num4;
            state[4] += num5;
            state[5] += num6;
            state[6] += num7;
            state[7] += num8;
        }
Exemple #2
0
        private static unsafe void SHATransform(ulong *expandedBuffer, ulong *state, byte *block)
        {
            ulong num1 = *state;
            ulong num2 = (ulong)*(long *)((IntPtr)state + 8);
            ulong num3 = state[2];
            ulong num4 = state[3];
            ulong num5 = state[4];
            ulong num6 = state[5];
            ulong num7 = state[6];
            ulong num8 = state[7];

            Utils.QuadWordFromBigEndian(expandedBuffer, 16, block);
            SHA512Managed.SHA512Expand(expandedBuffer);
            int index1;

            for (int index2 = 0; index2 < 80; index2 = index1 + 1)
            {
                ulong num9   = num8 + SHA512Managed.Sigma_1(num5) + SHA512Managed.Ch(num5, num6, num7) + SHA512Managed._K[index2] + expandedBuffer[index2];
                ulong num10  = num4 + num9;
                ulong num11  = num9 + SHA512Managed.Sigma_0(num1) + SHA512Managed.Maj(num1, num2, num3);
                int   index3 = index2 + 1;
                ulong num12  = num7 + SHA512Managed.Sigma_1(num10) + SHA512Managed.Ch(num10, num5, num6) + SHA512Managed._K[index3] + expandedBuffer[index3];
                ulong num13  = num3 + num12;
                ulong num14  = num12 + SHA512Managed.Sigma_0(num11) + SHA512Managed.Maj(num11, num1, num2);
                int   index4 = index3 + 1;
                ulong num15  = num6 + SHA512Managed.Sigma_1(num13) + SHA512Managed.Ch(num13, num10, num5) + SHA512Managed._K[index4] + expandedBuffer[index4];
                ulong num16  = num2 + num15;
                ulong num17  = num15 + SHA512Managed.Sigma_0(num14) + SHA512Managed.Maj(num14, num11, num1);
                int   index5 = index4 + 1;
                ulong num18  = num5 + SHA512Managed.Sigma_1(num16) + SHA512Managed.Ch(num16, num13, num10) + SHA512Managed._K[index5] + expandedBuffer[index5];
                ulong num19  = num1 + num18;
                ulong num20  = num18 + SHA512Managed.Sigma_0(num17) + SHA512Managed.Maj(num17, num14, num11);
                int   index6 = index5 + 1;
                ulong num21  = num10 + SHA512Managed.Sigma_1(num19) + SHA512Managed.Ch(num19, num16, num13) + SHA512Managed._K[index6] + expandedBuffer[index6];
                num8 = num11 + num21;
                num4 = num21 + SHA512Managed.Sigma_0(num20) + SHA512Managed.Maj(num20, num17, num14);
                int   index7 = index6 + 1;
                ulong num22  = num13 + SHA512Managed.Sigma_1(num8) + SHA512Managed.Ch(num8, num19, num16) + SHA512Managed._K[index7] + expandedBuffer[index7];
                num7 = num14 + num22;
                num3 = num22 + SHA512Managed.Sigma_0(num4) + SHA512Managed.Maj(num4, num20, num17);
                int   index8 = index7 + 1;
                ulong num23  = num16 + SHA512Managed.Sigma_1(num7) + SHA512Managed.Ch(num7, num8, num19) + SHA512Managed._K[index8] + expandedBuffer[index8];
                num6   = num17 + num23;
                num2   = num23 + SHA512Managed.Sigma_0(num3) + SHA512Managed.Maj(num3, num4, num20);
                index1 = index8 + 1;
                ulong num24 = num19 + SHA512Managed.Sigma_1(num6) + SHA512Managed.Ch(num6, num7, num8) + SHA512Managed._K[index1] + expandedBuffer[index1];
                num5 = num20 + num24;
                num1 = num24 + SHA512Managed.Sigma_0(num2) + SHA512Managed.Maj(num2, num3, num4);
            }
            ulong *numPtr = state;
            long   num25  = (long)*numPtr + (long)num1;

            *      numPtr = (ulong)num25;
            IntPtr num26  = (IntPtr)state + 8;
            long   num27  = *(long *)num26 + (long)num2;

            *(long *)num26 = num27;
            IntPtr num28 = (IntPtr)(state + 2);
            long   num29 = *(long *)num28 + (long)num3;

            *(long *)num28 = num29;
            IntPtr num30 = (IntPtr)(state + 3);
            long   num31 = *(long *)num30 + (long)num4;

            *(long *)num30 = num31;
            IntPtr num32 = (IntPtr)(state + 4);
            long   num33 = *(long *)num32 + (long)num5;

            *(long *)num32 = num33;
            IntPtr num34 = (IntPtr)(state + 5);
            long   num35 = *(long *)num34 + (long)num6;

            *(long *)num34 = num35;
            IntPtr num36 = (IntPtr)(state + 6);
            long   num37 = *(long *)num36 + (long)num7;

            *(long *)num36 = num37;
            IntPtr num38 = (IntPtr)(state + 7);
            long   num39 = *(long *)num38 + (long)num8;

            *(long *)num38 = num39;
        }