Changeset 1695


Ignore:
Timestamp:
Jun 23, 2010, 8:18:57 PM (11 years ago)
Author:
Sven Rech
Message:

quadratic sieve fix

Location:
trunk
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/QuadraticSieve/AlreadySievedException.cs

    r1521 r1695  
    1 using System;
    2 /*                             
     1/*                             
    32   Copyright 2010 Sven Rech, Uni Duisburg-Essen
    43
     
    1615*/
    1716
     17using System;
    1818using System.Collections.Generic;
    1919using System.Linq;
  • trunk/CrypPlugins/QuadraticSieve/QuadraticSieve.cs

    r1692 r1695  
    639639            MethodInfo msieve_run_core = msieve.GetMethod("msieve_run_core");
    640640
    641             //Now factorize as often as needed:
    642             while (!factorManager.OnlyPrimes())
    643             {
    644                 //get one composite factor, which we want to sieve now:
    645                 BigInteger compositeFactor = factorManager.GetCompositeFactor();
    646                 showFactorInformations(compositeFactor);
    647                 if (usePeer2Peer)
    648                     peerToPeer.SetFactor(compositeFactor);
    649 
    650                 try
    651                 {
    652                     //now start quadratic sieve on it:               
    653                     IntPtr resultList = (IntPtr)msieve_run_core.Invoke(null, new object[2] { obj, compositeFactor.ToString() });
    654                     if (userStopped)
    655                         return;
    656 
    657                     factorManager.ReplaceCompositeByFactors(compositeFactor, resultList);   //add the result list to factorManager
    658 
     641            try
     642            {
     643                //Now factorize as often as needed:
     644                while (!factorManager.OnlyPrimes())
     645                {
     646                    //get one composite factor, which we want to sieve now:
     647                    BigInteger compositeFactor = factorManager.GetCompositeFactor();
     648                    showFactorInformations(compositeFactor);
    659649                    if (usePeer2Peer)
    660                         peerToPeer.SyncFactorManager(factorManager);
    661                 }
    662                 catch (AlreadySievedException)
    663                 {
    664                     GuiLogMessage("Another peer already finished factorization of composite factor" + compositeFactor + ". Sieving next one...", NotificationLevel.Info);
    665                 }
     650                        peerToPeer.SetFactor(compositeFactor);
     651
     652                    try
     653                    {
     654                        //now start quadratic sieve on it:               
     655                        IntPtr resultList = (IntPtr)msieve_run_core.Invoke(null, new object[2] { obj, compositeFactor.ToString() });
     656                        if (resultList == IntPtr.Zero)
     657                            throw new NotSievableException();
     658
     659                        if (userStopped)
     660                            return;
     661
     662                        factorManager.ReplaceCompositeByFactors(compositeFactor, resultList);   //add the result list to factorManager
     663
     664                        if (usePeer2Peer)
     665                            peerToPeer.SyncFactorManager(factorManager);
     666                    }
     667                    catch (AlreadySievedException)
     668                    {
     669                        GuiLogMessage("Another peer already finished factorization of composite factor" + compositeFactor + ". Sieving next one...", NotificationLevel.Info);
     670                    }
     671                }
     672            }
     673            catch (NotSievableException)
     674            {
     675                GuiLogMessage("This number is not sievable by msieve (maybe input too long?)", NotificationLevel.Error);
    666676            }
    667677        }
  • trunk/CrypPlugins/QuadraticSieve/QuadraticSieve.csproj

    r1692 r1695  
    109109    <Compile Include="AlreadySievedException.cs" />
    110110    <Compile Include="FactorManager.cs" />
     111    <Compile Include="NotSievableException.cs" />
    111112    <Compile Include="PeerToPeer.cs" />
    112113    <Compile Include="ProgressRelationPackages.xaml.cs">
  • trunk/CrypPlugins/QuadraticSieve/msieve/build.vc9/msieve.dll/wrapper.cpp

    r1692 r1695  
    377377                static IntPtr msieve_run_core(IntPtr obj, String^ n)
    378378                {
    379                         mp_t N;
    380                         msieve_obj* o = (msieve_obj*)obj.ToPointer();
    381                         evaluate_expression(stringToCharA(n), &N);
    382                         factor_list_t* factor_list = new factor_list_t;
    383                         factor_list_init(factor_list);
    384                         factor_list_add(o, factor_list, &N);
    385                         ::msieve_run_core(o, &N, factor_list);
    386                         return IntPtr(factor_list);
     379                        try
     380                        {
     381                                mp_t N;
     382                                msieve_obj* o = (msieve_obj*)obj.ToPointer();
     383                                evaluate_expression(stringToCharA(n), &N);
     384                                factor_list_t* factor_list = new factor_list_t;
     385                                factor_list_init(factor_list);
     386                                factor_list_add(o, factor_list, &N);
     387                                ::msieve_run_core(o, &N, factor_list);
     388                                return IntPtr(factor_list);
     389                        }
     390                        catch (...)
     391                        {
     392                                return IntPtr::Zero;
     393                        }
    387394                }
    388395        };
Note: See TracChangeset for help on using the changeset viewer.