From 72e01341aaa8fc14fb2377f1163a83eb2d7032bf Mon Sep 17 00:00:00 2001 From: Aaron Feickert <66188213+AaronFeickert@users.noreply.github.com> Date: Fri, 5 Jan 2024 15:29:24 -0600 Subject: [PATCH] Check proof semantics during verification (#7) Ensures that proof semantics are valid for the given statement during verification. --- src/proof.rs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/proof.rs b/src/proof.rs index 7a9f18e..98700b6 100644 --- a/src/proof.rs +++ b/src/proof.rs @@ -308,13 +308,29 @@ impl Proof { /// proof was generated. /// /// Returns a boolean that is `true` if and only if the proof is valid. - #[allow(non_snake_case)] + #[allow(clippy::too_many_lines, non_snake_case)] pub fn verify(&self, statement: &Statement, message: Option<&[u8]>) -> bool { // Extract statement values for convenience let M = statement.get_input_set().get_keys(); let params = statement.get_params(); let J = statement.get_J(); + // Check that the proof semantics are valid for the statement + if self.X.len() != params.get_m() as usize { + return false; + } + if self.Y.len() != params.get_m() as usize { + return false; + } + if self.f.len() != params.get_m() as usize { + return false; + } + for f_row in &self.f { + if f_row.len() != (params.get_n() - 1) as usize { + return false; + } + } + // Generate the verifier challenge let mut transcript = Transcript::new("Triptych proof".as_bytes()); transcript.append_u64("version".as_bytes(), VERSION);