Пример #1
0
        private static SpongeState Pi(SpongeState state)
        {
            SpongeState newState = new SpongeState(state.Size, state.Rate);
            int         w        = state.Size.W;

            for (int y = 0; y < 5; y++)
            {
                for (int x = 0; x < 5; x++)
                {
                    for (int z = 0; z < w; z++)
                    {
                        newState[x, y, z] = state[Bin.Mod(x + 3 * y, 5), x, z];
                    }
                }
            }
            state.SetBitstring(newState.Bitstring);
            return(state);
        }
Пример #2
0
        private static SpongeState Khi(SpongeState state)
        {
            SpongeState newState = new SpongeState(state.Size, state.Rate);
            int         w        = state.Size.W;

            for (int y = 0; y < 5; y++)
            {
                for (int x = 0; x < 5; x++)
                {
                    for (int z = 0; z < w; z++)
                    {
                        newState[x, y, z] = state[x, y, z]
                                            ^ ((state[Bin.Mod(x + 1, 5), y, z] ^ true) && state[Bin.Mod(x + 2, 5), y, z]);
                    }
                }
            }
            state.SetBitstring(newState.Bitstring);
            return(state);
        }
Пример #3
0
        private static SpongeState Rho(SpongeState state)
        {
            SpongeState newState = new SpongeState(state.Size, state.Rate);
            int         w        = state.Size.W;

            newState.SetLane(newState.GetLane(0, 0), state.GetLane(0, 0).GetBits());
            int x = 1;
            int y = 0;
            int u, oldX;

            for (int t = 0; t < 24; t++)
            {
                u = ((t + 1) * (t + 2)) >> 1;
                for (int z = 0; z < w; z++)
                {
                    newState[x, y, z] = state[x, y, Bin.Mod(z - u, w)];
                }
                oldX = x;
                x    = y;
                y    = Bin.Mod(2 * oldX + 3 * y, 5);
            }
            state.SetBitstring(newState.Bitstring);
            return(state);
        }