/// <summary>
        /// Generates the whole Table and fills values to the field (uint[,,])Tables.
        /// This part is also known as Precomputation part.
        /// </summary>
        public bool GenerateTables()
        {
            // For every table
            for (uint tValue = 0; tValue < _numberOfTables; tValue++)
            {
                // for every row
                for (uint mValue = 0; mValue < _m; mValue++)
                {
                    uint rowValue = (_m * tValue) + mValue;

                    // construct starting point and ending point
                    // starting point is mValue

                    // compute ending point
                    uint endPoint = rowValue;
                    for (int i = 0; i < _t; i++)
                    {
                        endPoint = CryptoTools.OneWayFunction32Bit(endPoint);
                    }

                    // fill the byte array
                    Tables[tValue, mValue, 0] = rowValue;
                    Tables[tValue, mValue, 1] = endPoint;
                }

                if (TableProcessed != null)
                {
                    TableProcessed(tValue + 1);
                }
            }

            return(true);
        }
        public uint?FindPreimageValue(uint hashValue)
        {
            // her tablo için
            for (uint i = 0; i < _numberOfTables; i++)
            {
                // her bir satırda ending point e bak
                for (int j = 0; j < _m; j++)
                {
                    uint aradigimizsayi         = Tables[i, j, 0];
                    uint aradigimizsayininhashi = Tables[i, j, 1];
                    // hash al bak
                    for (int k = 0; k < _t; k++)
                    {
                        aradigimizsayininhashi = CryptoTools.OneWayFunction32Bit(aradigimizsayi);
                        if (aradigimizsayininhashi == hashValue)
                        {
                            return(aradigimizsayi);
                        }

                        aradigimizsayi = aradigimizsayininhashi;
                    }
                }
            }

            return(null);
        }