diff options
author | Andrew Arnott <andrewarnott@gmail.com> | 2011-07-20 07:01:58 -0600 |
---|---|---|
committer | Andrew Arnott <andrewarnott@gmail.com> | 2011-07-20 07:01:58 -0600 |
commit | 1328f88a36187d8aa5890a46e35af59c4df04d3f (patch) | |
tree | c42a3aad4aa21d39b91dcc87a912f8cb96c22c11 /src/Mono.Math/SequentialSearchPrimeGeneratorBase.cs | |
parent | d15895e626b73b6f96f561786b4b5c941c0a4bb1 (diff) | |
download | DotNetOpenAuth-1328f88a36187d8aa5890a46e35af59c4df04d3f.zip DotNetOpenAuth-1328f88a36187d8aa5890a46e35af59c4df04d3f.tar.gz DotNetOpenAuth-1328f88a36187d8aa5890a46e35af59c4df04d3f.tar.bz2 |
Splitting up the OpenID profile into OpenID RP and OP. The core OpenID DLL compiles, but the RP and OP ones do not.
Diffstat (limited to 'src/Mono.Math/SequentialSearchPrimeGeneratorBase.cs')
-rw-r--r-- | src/Mono.Math/SequentialSearchPrimeGeneratorBase.cs | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/src/Mono.Math/SequentialSearchPrimeGeneratorBase.cs b/src/Mono.Math/SequentialSearchPrimeGeneratorBase.cs new file mode 100644 index 0000000..a017ee4 --- /dev/null +++ b/src/Mono.Math/SequentialSearchPrimeGeneratorBase.cs @@ -0,0 +1,100 @@ +// <auto-generated /> + +// +// Mono.Math.Prime.Generator.SequentialSearchPrimeGeneratorBase.cs - Prime Generator +// +// Authors: +// Ben Maurer +// +// Copyright (c) 2003 Ben Maurer. All rights reserved +// + +using System; +using Mono.Math.Prime; + +namespace Mono.Math.Prime.Generator { + + //[CLSCompliant(false)] + internal class SequentialSearchPrimeGeneratorBase : PrimeGeneratorBase { + + protected virtual BigInteger GenerateSearchBase (int bits, object Context) + { + BigInteger ret = BigInteger.genRandom (bits); + ret.setBit (0); + return ret; + } + + + public override BigInteger GenerateNewPrime (int bits) + { + return GenerateNewPrime (bits, null); + } + + + public virtual BigInteger GenerateNewPrime (int bits, object Context) + { + // + // STEP 1. Find a place to do a sequential search + // + BigInteger curVal = GenerateSearchBase (bits, Context); + + const uint primeProd1 = 3u* 5u * 7u * 11u * 13u * 17u * 19u * 23u * 29u; + + uint pMod1 = curVal % primeProd1; + + int DivisionBound = TrialDivisionBounds; + uint[] SmallPrimes = BigInteger.smallPrimes; + PrimalityTest PostTrialDivisionTest = this.PrimalityTest; + // + // STEP 2. Search for primes + // + while (true) { + + // + // STEP 2.1 Sieve out numbers divisible by the first 9 primes + // + if (pMod1 % 3 == 0) goto biNotPrime; + if (pMod1 % 5 == 0) goto biNotPrime; + if (pMod1 % 7 == 0) goto biNotPrime; + if (pMod1 % 11 == 0) goto biNotPrime; + if (pMod1 % 13 == 0) goto biNotPrime; + if (pMod1 % 17 == 0) goto biNotPrime; + if (pMod1 % 19 == 0) goto biNotPrime; + if (pMod1 % 23 == 0) goto biNotPrime; + if (pMod1 % 29 == 0) goto biNotPrime; + + // + // STEP 2.2 Sieve out all numbers divisible by the primes <= DivisionBound + // + for (int p = 9; p < SmallPrimes.Length && SmallPrimes [p] <= DivisionBound; p++) { + if (curVal % SmallPrimes [p] == 0) + goto biNotPrime; + } + + // + // STEP 2.3 Is the potential prime acceptable? + // + if (!IsPrimeAcceptable (curVal, Context)) goto biNotPrime; + + // + // STEP 2.4 Filter out all primes that pass this step with a primality test + // + if (PrimalityTest (curVal, Confidence)) return curVal; + + + // + // STEP 2.4 + // + biNotPrime: + pMod1 += 2; + if (pMod1 >= primeProd1) pMod1 -= primeProd1; + curVal.Incr2 (); + } + } + + protected virtual bool IsPrimeAcceptable (BigInteger bi, object Context) + { + return true; + } + } +} |