예제 #1
0
        public bool CheckVerificationEquation(GroupElementVector publicNonces, Scalar challenge, ScalarVector responses)
        {
            // The responses matrix should match the generators in the equations and
            // there should be once nonce per equation.
            Guard.True(nameof(publicNonces), Equations.Count() == publicNonces.Count());

            return(Equations.Zip(publicNonces, (equation, r) => equation.Verify(r, challenge, responses)).All(x => x));
        }
예제 #2
0
        public Proof(GroupElementVector publicNonces, IEnumerable <ScalarVector> allResponses)
        {
            CryptoGuard.NotNullOrInfinity(nameof(publicNonces), publicNonces);
            Guard.NotNullOrEmpty(nameof(allResponses), allResponses);

            // Ensure allResponses isn't jagged
            var n = allResponses.First().Count();

            Guard.True(nameof(allResponses), allResponses.All(responses => Guard.NotNullOrEmpty(nameof(responses), responses).Count() == n));

            // Ensure there is a vector of response scalars for each public nonce
            Guard.True(nameof(allResponses), allResponses.Count() == publicNonces.Count());

            PublicNonces = publicNonces;
            Responses    = allResponses;
        }