Changeset 1933


Ignore:
Timestamp:
Sep 22, 2010, 8:36:32 PM (11 years ago)
Author:
Sven Rech
Message:

Some index-calculus-algorithm fixes (still doesn't work very good yet :( )

Location:
trunk/CrypPlugins/DiscreteLogarithm
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/DiscreteLogarithm/DiscreteLogarithm.cs

    r1852 r1933  
    4646        private BigInteger inputMod;
    4747        private BigInteger outputLogarithm;
     48        private bool running;
    4849
    4950        #endregion
     
    106107        public void Execute()
    107108        {
     109            running = true;
     110
    108111            if (inputMod.IsZero || inputMod.IsOne)
    109112            {
     
    139142        private void IndexCalculus()
    140143        {
     144            //TODO: Make index calculus method stoppable ;)
    141145            IndexCalculusMethod ic = new IndexCalculusMethod();
    142146            try
     
    155159            BigInteger t = inputBase;
    156160            BigInteger counter = 1;
    157             while (t != 1 && t != inputValue)
     161            while (t != 1 && t != inputValue && running)
    158162            {
    159163                t = (t * inputBase) % inputMod;
    160164                counter++;
    161165            }
     166
     167            if (!running)
     168                return;
     169
    162170            if (t == inputValue)
    163171                OutputLogarithm = counter;
     
    185193        public void Stop()
    186194        {
     195            running = false;
    187196        }
    188197
  • trunk/CrypPlugins/DiscreteLogarithm/FactorBase.cs

    r1851 r1933  
    1616        public void Generate(int max)
    1717        {
     18            if (max < 0)
     19                max = int.MaxValue;
     20
    1821            primes = new List<int>();
    1922
  • trunk/CrypPlugins/DiscreteLogarithm/FiniteFieldGauss.cs

    r1851 r1933  
    3939                    if (y == size)
    4040                    {
    41                         throw new LinearDependentException(rowSwaps[size-1]);
     41                        int[] rowsToDelete = new int[size - (x + 1)];
     42                        for (int i = x + 1; i < size; i++)
     43                            rowsToDelete[i-(x+1)] = rowSwaps[i];
     44                        throw new LinearDependentException(rowsToDelete);
    4245                    }
    4346                    SwapRows(x, y);
  • trunk/CrypPlugins/DiscreteLogarithm/IndexCalculusMethod.cs

    r1852 r1933  
    6868
    6969        private int GetSmoothnessBound(BigInteger mod)
    70         {
     70        {           
    7171            double logm = BigInteger.Log(mod);
    7272            int B = (int)(Math.Exp(Math.Sqrt(logm * Math.Log(logm)))/2);
     73
     74            if (B < 1000)
     75                B = 1000;
    7376            return B;
    7477        }
  • trunk/CrypPlugins/DiscreteLogarithm/LinearDependentException.cs

    r1833 r1933  
    88    class LinearDependentException : Exception
    99    {
    10         public int RowToDelete
     10        public int[] RowsToDelete
    1111        {
    1212            get;
     
    1414        }
    1515
    16         public LinearDependentException(int rowToDelete)
     16        public LinearDependentException(int[] rowsToDelete)
    1717        {
    18             this.RowToDelete = rowToDelete;
     18            this.RowsToDelete = rowsToDelete;
    1919        }
    2020    }
  • trunk/CrypPlugins/DiscreteLogarithm/LinearSystemOfEquations.cs

    r1851 r1933  
    115115            catch (LinearDependentException ex)
    116116            {
    117                 //We have to throw away one row and try again later:
    118                 matrix.RemoveAt(ex.RowToDelete);
     117                //We have to throw away dependent rows and try again later:
     118                Array.Sort(ex.RowsToDelete, (a, b) => (b - a));
     119                foreach (int row in ex.RowsToDelete)
     120                    matrix.RemoveAt(row);
    119121                return null;
    120122            }
Note: See TracChangeset for help on using the changeset viewer.