Verify the proof for `min <= value < max` where `commitment` is a Pedersen commitment to `value`
(
&self,
commitment: &G,
challenge: &G::ScalarField,
min: u64,
max: u64,
comm_key: &MemberCommitmentKey<G>,
params: &SetMembershipCheckParamsKV<
| 212 | impl<G: AffineRepr> CCSArbitraryRangeWithKVProof<G> { |
| 213 | /// Verify the proof for `min <= value < max` where `commitment` is a Pedersen commitment to `value` |
| 214 | pub fn verify( |
| 215 | &self, |
| 216 | commitment: &G, |
| 217 | challenge: &G::ScalarField, |
| 218 | min: u64, |
| 219 | max: u64, |
| 220 | comm_key: &MemberCommitmentKey<G>, |
| 221 | params: &SetMembershipCheckParamsKV<G>, |
| 222 | secret_key: &SecretKey<G::ScalarField>, |
| 223 | ) -> Result<(), SmcRangeProofError> { |
| 224 | params.validate_base(self.base)?; |
| 225 | let l = find_l_for_arbitrary_range(max, min, self.base) as usize; |
| 226 | expect_equality!( |
| 227 | self.pok_sigs_min.len(), |
| 228 | l, |
| 229 | SmcRangeProofError::ProofShorterThanExpected |
| 230 | ); |
| 231 | expect_equality!( |
| 232 | self.pok_sigs_max.len(), |
| 233 | l, |
| 234 | SmcRangeProofError::ProofShorterThanExpected |
| 235 | ); |
| 236 | |
| 237 | let resp_d_min = cfg_iter!(self.pok_sigs_min) |
| 238 | .map(|p| *p.get_resp_for_message().unwrap()) |
| 239 | .collect::<Vec<_>>(); |
| 240 | let resp_d_max = cfg_iter!(self.pok_sigs_max) |
| 241 | .map(|p| *p.get_resp_for_message().unwrap()) |
| 242 | .collect::<Vec<_>>(); |
| 243 | check_commitment_for_arbitrary_range::<G>( |
| 244 | self.base, |
| 245 | &resp_d_min, |
| 246 | &resp_d_max, |
| 247 | &self.resp_r_min, |
| 248 | &self.resp_r_max, |
| 249 | &self.D_min, |
| 250 | &self.D_max, |
| 251 | min, |
| 252 | max, |
| 253 | commitment, |
| 254 | challenge, |
| 255 | comm_key, |
| 256 | )?; |
| 257 | let results = cfg_iter!(self.pok_sigs_min) |
| 258 | .chain(cfg_iter!(self.pok_sigs_max)) |
| 259 | .map(|p| { |
| 260 | if let Err(e) = p.verify(challenge, secret_key, ¶ms.bb_sig_params) { |
| 261 | return Err(SmcRangeProofError::ShortGroupSig(e)); |
| 262 | } |
| 263 | Ok(()) |
| 264 | }) |
| 265 | .collect::<Vec<_>>(); |
| 266 | for r in results { |
| 267 | r?; |
| 268 | } |
| 269 | Ok(()) |
| 270 | } |
| 271 |