| 256 | } |
| 257 | |
| 258 | pub fn process_response( |
| 259 | mut self, |
| 260 | response: Responses<G::ScalarField>, |
| 261 | ) -> (Vec<TokenPrivateData<G>>, Vec<ProofOfValidity<G>>) { |
| 262 | assert_eq!(self.A_hat.len(), response.0.len()); |
| 263 | let c = mem::take(&mut self.c).unwrap(); |
| 264 | let v = mem::take(&mut self.v); |
| 265 | let u = mem::take(&mut self.u); |
| 266 | let A_hat = mem::take(&mut self.A_hat); |
| 267 | let B_bar = mem::take(&mut self.B_bar); |
| 268 | let D = mem::take(&mut self.D); |
| 269 | let minus_e = mem::take(&mut self.minus_e); |
| 270 | let r1 = mem::take(&mut self.r1); |
| 271 | let r3 = mem::take(&mut self.r3); |
| 272 | // r_i = (r_0_i + v_i) * u_i |
| 273 | let r = cfg_into_iter!(u) |
| 274 | .zip(cfg_into_iter!(v)) |
| 275 | .zip(cfg_into_iter!(response.0)) |
| 276 | .map(|((u_i, v_i), r_0_i)| (r_0_i + v_i) * u_i) |
| 277 | .collect::<Vec<_>>(); |
| 278 | let mut t_pr = vec![]; |
| 279 | let mut pr_v = vec![]; |
| 280 | for i in 0..r.len() { |
| 281 | t_pr.push(TokenPrivateData { |
| 282 | D: D[i], |
| 283 | r1: r1[i], |
| 284 | r3: r3[i], |
| 285 | minus_e, |
| 286 | }); |
| 287 | pr_v.push(ProofOfValidity { |
| 288 | A_hat: A_hat[i], |
| 289 | B_bar: B_bar[i], |
| 290 | c: c[i], |
| 291 | r: r[i], |
| 292 | }); |
| 293 | } |
| 294 | (t_pr, pr_v) |
| 295 | } |
| 296 | } |
| 297 | |
| 298 | impl<G: AffineRepr> HOLSignerProtocol<G> { |