public void GenerateKey()
        {
            var p = PailierHelper.GeneratePrimeNumber();
            var q = PailierHelper.GeneratePrimeNumber();

            while (PailierHelper.GCD(BigInteger.Multiply(p, q), BigInteger.Multiply(p - 1, q - 1)) != 1 || p == q)
            {
                p = PailierHelper.GeneratePrimeNumber();
                q = PailierHelper.GeneratePrimeNumber();
            }

            this.n      = BigInteger.Multiply(p, q);
            this.lambda = PailierHelper.LCM(p - 1, q - 1);

            this.mu = -1;
            while (this.mu == -1)
            {
                this.g = PailierHelper.GetRandomFromMultRing(BigInteger.Multiply(n, n));

                BigInteger x = BigInteger.ModPow(g, lambda, BigInteger.Multiply(n, n));
                this.mu = PailierHelper.GetInverseElement(BigInteger.Divide(x - 1, n), BigInteger.Multiply(n, n)) % n;
            }
        }