Exemplo n.º 1
0
        static SpongeState Rho(SpongeState state)
        {
            var newState = new SpongeState(state.Size, state.Rate);
            var w        = state.Size.W;

            newState.SetLane(newState.GetLane(0, 0), state.GetLane(0, 0).GetBits());

            var x = 1;
            var y = 0;

            for (var t = 0; t < 24; t++)
            {
                var u = ((t + 1) * (t + 2)) >> 1;
                for (var z = 0; z < w; z++)
                {
                    newState[x, y, z] = state[x, y, BinaryFunctions.Mod(z - u, w)];
                }

                var oldX = x;
                x = y;
                y = BinaryFunctions.Mod(2 * oldX + 3 * y, 5);
            }

            state.SetBitString(newState.BitString);
            return(state);
        }
Exemplo n.º 2
0
        static SpongeState Pi(SpongeState state)
        {
            var newState = new SpongeState(state.Size, state.Rate);
            var w        = state.Size.W;

            for (var y = 0; y < 5; y++)
            {
                for (var x = 0; x < 5; x++)
                {
                    for (var z = 0; z < w; z++)
                    {
                        newState[x, y, z] = state[BinaryFunctions.Mod(x + 3 * y, 5), x, z];
                    }
                }
            }

            state.SetBitString(newState.BitString);
            return(state);
        }
Exemplo n.º 3
0
        static SpongeState Theta(SpongeState state)
        {
            var w = state.Size.W;
            var c = new bool[5, w];

            for (var x = 0; x < 5; x++)
            {
                for (var z = 0; z < w; z++)
                {
                    c[x, z] =
                        state.GetColumn(x, z).GetBits().Aggregate((lhs, rhs) => lhs ^ rhs);
                }
            }

            var d = new bool[5, w];

            for (var x = 0; x < 5; x++)
            {
                for (var z = 0; z < w; z++)
                {
                    d[x, z] =
                        c[BinaryFunctions.Mod(x - 1, 5), z] ^ c[BinaryFunctions.Mod(x + 1, 5),
                                                                BinaryFunctions.Mod(z - 1, w)];
                }
            }

            for (var x = 0; x < 5; x++)
            {
                for (var z = 0; z < w; z++)
                {
                    var bit = d[x, z];
                    for (var y = 0; y < 5; y++)
                    {
                        state[x, y, z] ^= bit;
                    }
                }
            }

            return(state);
        }
Exemplo n.º 4
0
        static SpongeState Iota(SpongeState state, int round)
        {
            var w  = state.Size.W;
            var l  = state.Size.L;
            var rc = BitString.Zeroes(w);
            int t;
            var rnd = 7 * round;

            for (var j = 0; j <= l; j++)
            {
                t = j + rnd;
                var roundT = new RoundT(round, t);
                if (!RoundTConstants.ContainsKey(roundT))
                {
                    RoundTConstants.Add(roundT, RoundConstant(t));
                }

                rc[(1 << j) - 1] = RoundTConstants[roundT];
            }

            state.XorLane(state.GetLane(0, 0), rc);
            return(state);
        }
Exemplo n.º 5
0
 internal Lane(SpongeState state, int x, int y)
 {
     State = state;
     X     = x;
     Y     = y;
 }
Exemplo n.º 6
0
 internal Sheet(SpongeState state, int x)
 {
     State = state;
     X     = x;
 }
Exemplo n.º 7
0
 internal Slice(SpongeState state, int z)
 {
     State = state;
     Z     = z;
 }
Exemplo n.º 8
0
 internal Column(SpongeState state, int x, int z)
 {
     State = state;
     X     = x;
     Z     = z;
 }
Exemplo n.º 9
0
 internal Row(SpongeState state, int y, int z)
 {
     State = state;
     Y     = y;
     Z     = z;
 }
Exemplo n.º 10
0
 internal Plane(SpongeState state, int y)
 {
     State = state;
     Y     = y;
 }