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)); }
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; }