private Session(boolean b) {
		if (b) {
			debug = true;
		} else {
			debug = false;
		}
		debugMode("=== CREATION OF GLOBAL KEYS ===", true);

		// ==Q==
		debugMode("Creating global key Q .......... ", false);

		globalKeyQ = new BigInteger(160, 20, new SecureRandom());
		debugMode("[OK]", true);

		// ==P==
		debugMode("Creating global key P (be patient).......... ", false);

		BigInteger tempP;
		BigInteger tempP2;
		SecureRandom rand = new SecureRandom();
		do {
			tempP = new BigInteger(L, 20, rand);
			tempP2 = tempP.subtract(BigInteger.ONE);
			tempP = tempP.subtract(tempP2.remainder(globalKeyQ));
		} while (!tempP.isProbablePrime(20) || tempP.bitLength() != L);

		BigInteger p = tempP;

		globalKeyP = p;
		debugMode("[OK]", true);

		// ==G==
		debugMode("Creating global key G .......... ", false);
		BigInteger p1 = globalKeyP.subtract(BigInteger.ONE);
		BigInteger exp = p1.divide(globalKeyQ);

		BigInteger tempg;
		Random random = new Random();
		do {
			tempg = new BigInteger(p1.bitLength(), random);
		} while (tempg.compareTo(p1) != -1
				&& tempg.compareTo(BigInteger.ONE) != 1);
		globalKeyG = tempg.modPow(exp, p);
		debugMode("[OK]", true);
		System.out.println("");
		System.out.println("Q: " + globalKeyQ);
		System.out.println("P: " + globalKeyP);
		System.out.println("G: " + globalKeyG);
	}