@@ -505,27 +505,6 @@ impl<E: Pairing> Proof<E> {
505
505
StatementProof :: PoKPSSignature ( p) => {
506
506
let sig_params = s. get_params ( & proof_spec. setup_params , s_idx) ?;
507
507
let pk = s. get_public_key ( & proof_spec. setup_params , s_idx) ?;
508
- // // Check witness equalities for this statement.
509
- // let revealed_msg_ids: Vec<_> =
510
- // s.revealed_messages.keys().copied().collect();
511
- // for i in 0..sig_params.supported_message_count() {
512
- // let w_ref = (s_idx, i);
513
- // for j in 0..witness_equalities.len() {
514
- // if witness_equalities[j].contains(&w_ref) {
515
- // let resp = p.response_for_message(
516
- // i,
517
- // revealed_msg_ids.iter().copied(),
518
- // )?;
519
- // Self::check_response_for_equality(
520
- // s_idx,
521
- // i,
522
- // j,
523
- // &mut responses_for_equalities,
524
- // resp,
525
- // )?;
526
- // }
527
- // }
528
- // }
529
508
transcript. set_label ( PS_LABEL ) ;
530
509
p. challenge_contribution ( & mut transcript, pk, sig_params) ?;
531
510
}
@@ -1295,49 +1274,70 @@ impl<E: Pairing> Proof<E> {
1295
1274
let pub_inp = s
1296
1275
. get_public_inputs ( & proof_spec. setup_params , s_idx) ?
1297
1276
. to_vec ( ) ;
1298
- let mut resp = BTreeMap :: new ( ) ;
1299
- for i in 0 ..verifying_key. commit_witness_count as usize {
1300
- let wit_ref = ( s_idx, i) ;
1301
- for ( i, eq) in disjoint_equalities. iter ( ) . enumerate ( ) {
1302
- if eq. has_wit_ref ( & wit_ref) {
1303
- if let Some ( r) = resp_for_equalities. get ( & i) {
1304
- resp. insert ( i, * r) ;
1305
- } else {
1306
- return Err (
1307
- ProofSystemError :: ResponseForWitnessNotFoundForStatement (
1308
- s_idx,
1309
- ) ,
1310
- ) ;
1311
- }
1312
- // Exit loop because equalities are disjoint
1313
- break ;
1314
- }
1315
- }
1316
- }
1317
1277
1318
1278
match proof {
1319
- StatementProof :: R1CSLegoGroth16 ( ref r1cs_proof) => sp
1320
- . verify_proof_contribution (
1279
+ StatementProof :: R1CSLegoGroth16 ( ref r1cs_proof) => {
1280
+ for w_id in 0 ..verifying_key. commit_witness_count as usize {
1281
+ let w_ref = ( s_idx, w_id) ;
1282
+ for ( i, eq) in disjoint_equalities. iter ( ) . enumerate ( ) {
1283
+ if eq. has_wit_ref ( & w_ref) {
1284
+ let resp =
1285
+ r1cs_proof. get_schnorr_response_for_message ( w_id) ?;
1286
+ if let Some ( r) = resp_for_equalities. get ( & i) {
1287
+ if resp != r {
1288
+ return Err (
1289
+ ProofSystemError :: WitnessResponseNotEqual (
1290
+ s_idx, w_id,
1291
+ ) ,
1292
+ ) ;
1293
+ }
1294
+ } else {
1295
+ resp_for_equalities. insert ( i, * resp) ;
1296
+ }
1297
+ }
1298
+ }
1299
+ }
1300
+ sp. verify_proof_contribution (
1321
1301
& challenge,
1322
1302
& pub_inp,
1323
1303
r1cs_proof,
1324
1304
r1cs_comm_keys. get ( s_idx) . unwrap ( ) ,
1325
1305
derived_lego_vk. get ( s_idx) . unwrap ( ) ,
1326
1306
& mut pairing_checker,
1327
- resp ,
1328
- ) ? ,
1307
+ ) ?
1308
+ }
1329
1309
StatementProof :: R1CSLegoGroth16WithAggregation ( ref r1cs_proof) => {
1330
1310
let agg_idx = agg_lego_stmts. get ( & s_idx) . ok_or_else ( || {
1331
1311
ProofSystemError :: InvalidStatementProofIndex ( s_idx)
1332
1312
} ) ?;
1333
1313
agg_lego[ * agg_idx] . 0 . push ( r1cs_proof. commitment ) ;
1334
1314
agg_lego[ * agg_idx] . 1 . push ( pub_inp) ;
1335
1315
1316
+ for w_id in 0 ..verifying_key. commit_witness_count as usize {
1317
+ let w_ref = ( s_idx, w_id) ;
1318
+ for ( i, eq) in disjoint_equalities. iter ( ) . enumerate ( ) {
1319
+ if eq. has_wit_ref ( & w_ref) {
1320
+ let resp =
1321
+ r1cs_proof. get_schnorr_response_for_message ( w_id) ?;
1322
+ if let Some ( r) = resp_for_equalities. get ( & i) {
1323
+ if resp != r {
1324
+ return Err (
1325
+ ProofSystemError :: WitnessResponseNotEqual (
1326
+ s_idx, w_id,
1327
+ ) ,
1328
+ ) ;
1329
+ }
1330
+ } else {
1331
+ resp_for_equalities. insert ( i, * resp) ;
1332
+ }
1333
+ }
1334
+ }
1335
+ }
1336
+
1336
1337
sp. verify_proof_contribution_using_prepared_when_aggregating_snark (
1337
1338
& challenge,
1338
1339
r1cs_proof,
1339
1340
r1cs_comm_keys. get ( s_idx) . unwrap ( ) ,
1340
- resp,
1341
1341
) ?
1342
1342
}
1343
1343
_ => {
@@ -1774,14 +1774,12 @@ impl<E: Pairing> Proof<E> {
1774
1774
if let Some ( r) = resp_for_equalities. get ( & i) {
1775
1775
resp = Some ( * r) ;
1776
1776
} else {
1777
- return Err ( ProofSystemError :: ResponseForWitnessNotFoundForStatement (
1778
- s_idx,
1779
- ) ) ;
1777
+ return Err ( ProofSystemError :: NoResponseFoundForWitnessRef ( s_idx, 0 ) ) ;
1780
1778
}
1781
1779
// Exit loop because equalities are disjoint
1782
1780
break ;
1783
1781
}
1784
1782
}
1785
- resp. ok_or_else ( || ProofSystemError :: ResponseForWitnessNotFoundForStatement ( s_idx) )
1783
+ resp. ok_or_else ( || ProofSystemError :: NoResponseFoundForWitnessRef ( s_idx, 0 ) )
1786
1784
}
1787
1785
}
0 commit comments