//*********************************************************************** // 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; }
/** * <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; }