private PrimeGeneratorResult GeneratePrimes(PrimeGeneratorParameters param) { BigInteger p, p1, p2, q, q1, q2; // 1, 2, 3, 4 covered by Guards // 5 var workingSeed = param.Seed.ToPositiveBigInteger(); // 6 var pResult = PrimeGeneratorHelper.ProvablePrimeConstruction(_sha, param.Modulus / 2, param.BitLens[0], param.BitLens[1], workingSeed, param.PublicE); if (!pResult.Success) { return(new PrimeGeneratorResult($"Bad p gen: {pResult.ErrorMessage}")); } p = pResult.Prime; p1 = pResult.Prime1; p2 = pResult.Prime2; workingSeed = pResult.PrimeSeed; do { // 7 var qResult = PrimeGeneratorHelper.ProvablePrimeConstruction(_sha, param.Modulus / 2, param.BitLens[2], param.BitLens[3], workingSeed, param.PublicE); if (!qResult.Success) { return(new PrimeGeneratorResult($"Bad q gen: {qResult.ErrorMessage}")); } q = qResult.Prime; q1 = qResult.Prime1; q2 = qResult.Prime2; workingSeed = qResult.PrimeSeed; // 8 } while (BigInteger.Abs(p - q) <= NumberTheory.Pow2(param.Modulus / 2 - 100)); var auxValues = new AuxiliaryResult(); var primePair = new PrimePair { P = p, Q = q }; return(new PrimeGeneratorResult(primePair, auxValues)); }
private PrimeGeneratorResult GeneratePrimes(PrimeGeneratorParameters param) { // 1, 2, 3, 4 covered by guards // 5 var workingSeed = param.Seed.ToPositiveBigInteger(); // 6 var ppcResult = PrimeGeneratorHelper.ProvablePrimeConstruction(_sha, param.Modulus / 2, 1, 1, workingSeed, param.PublicE); if (!ppcResult.Success) { return(new PrimeGeneratorResult($"Bad Provable Prime Construction for p: {ppcResult.ErrorMessage}")); } var p = ppcResult.Prime; workingSeed = ppcResult.PrimeSeed; BigInteger q; do { // 7 ppcResult = PrimeGeneratorHelper.ProvablePrimeConstruction(_sha, param.Modulus / 2, 1, 1, workingSeed, param.PublicE); if (!ppcResult.Success) { return(new PrimeGeneratorResult($"Bad Provable Prime Construction for q: {ppcResult.ErrorMessage}")); } q = ppcResult.Prime; workingSeed = ppcResult.PrimeSeed; // 8 } while (BigInteger.Abs(p - q) <= NumberTheory.Pow2(param.Modulus / 2 - 100)); // 9, 10 var auxValues = new AuxiliaryResult(); var primePair = new PrimePair { P = p, Q = q }; return(new PrimeGeneratorResult(primePair, auxValues)); }