Skip to content

Commit 802dbe5

Browse files
committed
Proof checking functions now return type Return< , > to allow error handling
1 parent 5ce6c16 commit 802dbe5

File tree

6 files changed

+28
-18
lines changed

6 files changed

+28
-18
lines changed

src/toolbox/sigma/fiat_shamir.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,12 @@ where
4545
// Prouver's response
4646
let response = self.sigmap.prover_response(&prover_state, &challenge);
4747
// Local verification of the proof
48-
assert!(self.sigmap.verifier(&commitment, &challenge, &response));
48+
assert!(self.sigmap.verifier(&commitment, &challenge, &response) == Ok(()));
4949
self.sigmap.serialize_batchable(&commitment, &challenge, &response)
5050
}
5151

5252
/// Verification of non-interactive proof
53-
pub fn verify(&mut self, proof: &Vec<u8>) -> bool {
53+
pub fn verify(&mut self, proof: &Vec<u8>) -> Result<(), ()> {
5454
self.hash_state = C::new(&self.domain_sep);
5555

5656
let (commitment, response) = self.sigmap.deserialize_batchable(proof).unwrap();

src/toolbox/sigma/proof_composition.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,14 @@ where
6161
commitment: &Self::Commitment,
6262
challenge: &Self::Challenge,
6363
response: &Self::Response,
64-
) -> bool {
64+
) -> Result<(), ()> {
6565
let verif0 = self.protocol0.verifier(&commitment.0, challenge, &response.0);
6666
let verif1 = self.protocol1.verifier(&commitment.1, challenge, &response.1);
6767

68-
verif0 & verif1
68+
match (verif0, verif1) {
69+
(Ok(()), Ok(())) => Ok(()),
70+
_ => Err(()),
71+
}
6972
}
7073
}
7174

@@ -174,12 +177,15 @@ where
174177
commitments: &Self::Commitment,
175178
challenge: &Self::Challenge,
176179
response: &Self::Response,
177-
) -> bool {
180+
) -> Result<(), ()> {
178181
let cond0 = self.protocol0.verifier(&commitments.0, &response.0, &response.1);
179182

180183
let challenge1 = *challenge - response.0;
181184
let cond1 = self.protocol1.verifier(&commitments.1, &challenge1, &response.2);
182185

183-
cond0 & cond1
186+
match (cond0, cond1) {
187+
(Ok(()), Ok(())) => Ok(()),
188+
_ => Err(()),
189+
}
184190
}
185191
}

src/toolbox/sigma/schnorr_proof.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,16 @@ where
5656
commitment: &Self::Commitment,
5757
challenge: &Self::Challenge,
5858
response: &Self::Response,
59-
) -> bool {
59+
) -> Result<(), ()> {
6060
let lhs = self.morphismp.morphism.evaluate(&response);
6161
let mut rhs = Vec::new();
6262
for i in 0..self.morphismp.morphism.num_scalars {
6363
rhs.push(commitment[i] + self.morphismp.morphism.group_elements[self.morphismp.image[i]] * *challenge);
6464
}
65-
lhs == rhs
65+
match lhs == rhs {
66+
true => Ok(()),
67+
false => Err(()),
68+
}
6669
}
6770

6871
fn serialize_batchable(

src/toolbox/sigma/trait.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ pub trait SigmaProtocol {
2525
commitment: &Self::Commitment,
2626
challenge: &Self::Challenge,
2727
response: &Self::Response,
28-
) -> bool;
28+
) -> Result<(), ()>;
2929

3030
fn simulate_proof(
3131
&self,

tests/non_interactive_protocol.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ fn fiat_shamir_schnorr_proof_ristretto() {
4545
let proof_bytes = nizk.prove(&witness, &mut rng);
4646

4747
// Verify
48-
let verified = nizk.verify(&proof_bytes);
48+
let verified = nizk.verify(&proof_bytes) == Ok(());
4949

5050
assert!(verified, "Fiat-Shamir Schnorr proof verification failed");
5151
}

tests/proof_composition_test.rs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
use std::ops::Not;
2-
31
use rand::{rngs::OsRng, CryptoRng, Rng};
42
use sigma_rs::toolbox::sigma::{proof_composition::OrEnum, AndProtocol, OrProtocol, SigmaProtocol};
53
use curve25519_dalek::{ristretto::RistrettoPoint, scalar::Scalar};
@@ -41,8 +39,11 @@ impl SigmaProtocol for SchnorrZkp {
4139
commitment: &Self::Commitment,
4240
challenge: &Self::Challenge,
4341
response: &Self::Response,
44-
) -> bool {
45-
response * self.generator == challenge * self.target + commitment
42+
) -> Result<(), ()> {
43+
match response * self.generator == challenge * self.target + commitment {
44+
true => Ok(()),
45+
false => Err(()),
46+
}
4647
}
4748

4849
fn simulate_proof(
@@ -97,7 +98,7 @@ fn andproof_schnorr_correct() {
9798
// Verifier checks
9899
let result = and_proof.verifier(&commitments, &challenge, &responses);
99100

100-
assert!(result);
101+
assert!(result == Ok(()));
101102
}
102103

103104
#[allow(non_snake_case)]
@@ -134,7 +135,7 @@ fn andproof_schnorr_incorrect() {
134135
// Verifier checks
135136
let result = and_proof.verifier(&commitments, &challenge, &responses);
136137

137-
assert!(result.not());
138+
assert!(result == Err(()));
138139
}
139140

140141
#[allow(non_snake_case)]
@@ -169,7 +170,7 @@ fn orproof_schnorr_correct() {
169170
// Verifier checks
170171
let result = or_proof.verifier(&commitments, &challenge, &responses);
171172

172-
assert!(result);
173+
assert!(result == Ok(()));
173174
}
174175

175176
#[allow(non_snake_case)]
@@ -204,5 +205,5 @@ fn orproof_schnorr_incorrect() {
204205
// Verifier checks
205206
let result = or_proof.verifier(&commitments, &challenge, &responses);
206207

207-
assert!(result.not());
208+
assert!(result == Err(()));
208209
}

0 commit comments

Comments
 (0)