2004-02-09 Sebastien Pouliot <sebastien@ximian.com>
[mono.git] / mcs / class / Mono.Security / Mono.Math.Prime.Generator / PrimeGeneratorBase.cs
1 //
2 // Mono.Math.Prime.Generator.PrimeGeneratorBase.cs - Abstract Prime Generator
3 //
4 // Authors:
5 //      Ben Maurer
6 //
7 // Copyright (c) 2003 Ben Maurer. All rights reserved
8 //
9
10 using System;
11
12 namespace Mono.Math.Prime.Generator {
13
14         [CLSCompliant(false)]
15 #if INSIDE_CORLIB
16         internal
17 #else
18         public
19 #endif
20         abstract class PrimeGeneratorBase {
21
22                 public virtual ConfidenceFactor Confidence {
23                         get {
24 #if DEBUG
25                                 return ConfidenceFactor.ExtraLow;
26 #else
27                                 return ConfidenceFactor.Medium;
28 #endif
29                         }
30                 }
31
32                 public virtual Prime.PrimalityTest PrimalityTest {
33                         get {
34                                 return new Prime.PrimalityTest (PrimalityTests.SmallPrimeSppTest);
35                         }
36                 }
37
38                 public virtual int TrialDivisionBounds {
39                         get { return 4000; }
40                 }
41
42                 /// <summary>
43                 /// Performs primality tests on bi, assumes trial division has been done.
44                 /// </summary>
45                 /// <param name="bi">A BigInteger that has been subjected to and passed trial division</param>
46                 /// <returns>False if bi is composite, true if it may be prime.</returns>
47                 /// <remarks>The speed of this method is dependent on Confidence</remarks>
48                 protected bool PostTrialDivisionTests (BigInteger bi)
49                 {
50                         return PrimalityTest (bi, this.Confidence);
51                 }
52
53                 public abstract BigInteger GenerateNewPrime (int bits);
54         }
55 }