public void ShouldVerifyPQProperly(string hash, int counter, string pHex, string qHex, string seedHex, bool success, string testName)
        {
            var sha       = GetSha(hash);
            var firstSeed = new BitString(seedHex).ToPositiveBigInteger();
            var p         = new BitString(pHex).ToPositiveBigInteger();
            var q         = new BitString(qHex).ToPositiveBigInteger();

            var seed  = new DomainSeed(firstSeed);
            var count = new Counter(counter);

            var subject = new ProbablePQGeneratorValidator(sha);

            var result = subject.Validate(p, q, seed, count);

            Assert.AreEqual(success, result.Success, result.ErrorMessage);
        }
        public void ShouldGeneratePQProperly(string hash, int L, int N, int counter, string seedHex, string pHex, string qHex, string testName)
        {
            var sha     = GetSha(hash);
            var seed    = new BitString(seedHex);
            var seedLen = seed.BitLength;
            var p       = new BitString(pHex).ToPositiveBigInteger();
            var q       = new BitString(qHex).ToPositiveBigInteger();

            var fakeSha = new FakeSha(sha);

            var subject = new ProbablePQGeneratorValidator(fakeSha, EntropyProviderTypes.Testable);

            subject.AddEntropy(seed);

            var result = subject.Generate(L, N, seedLen);

            Assert.IsTrue(result.Success, result.ErrorMessage);
            Assert.AreEqual(p, result.P, "p");
            Assert.AreEqual(q, result.Q, "q");
            Assert.AreEqual(counter, result.Count.Count, "count");

            Console.Write($"Hash functions run: {fakeSha.Count}");
        }