예제 #1
0
	//***********************************************************************
	// Generates a positive BigInteger that is probably prime.
	//***********************************************************************

	public static BigInteger genPseudoPrime(int bits, int confidence, Random rand)
	{
		BigInteger result = new BigInteger();
		bool done = false;

		while(!done)
		{
			result.genRandomBits(bits, rand);
			result.data[0] |= 0x01;		// make it odd

			// prime test
			done = result.isProbablePrime(confidence);
		}
		return result;
	}
예제 #2
0
 /**
  * <summary>
  * finde eine sichere große Primzahl p und eine primitive Wurzel g mit den
   	 * angegebenen Parametern
   	 * </summary>
  	 */
 private void generateParameters()
 {
     BigInteger g, p, q;
     int qLength = size - 1;
     // finde eine sichere große Primzahl p durch 2*q + 1, q ist ebenfalls eine Primzahl
     while(true)
     {
         q = new BigInteger();
         q.genRandomBits(qLength,random);
         if (q.bitCount() != qLength)
         {
             continue;
         }
         if (!q.isProbablePrime(certainty))
         {
             continue;
         }
         p = q*(TWO)+(ONE);
         if (p.isProbablePrime(certainty))
         {
             break;
         }
     }
     this.p=p;
     // berechne g durch 2q+1while(true)
     while(true)
     {
         g = new BigInteger();
         g.genRandomBits(qLength, random);
         if (g.modPow(TWO, p).Equals(ONE))
         {
             continue;
         }
         if (g.modPow(q, p).Equals(ONE))
         {
             continue;
         }
         break;
     }
     this.g=g;
 }