| 197 | |
| 198 | #[test] |
| 199 | fn commitment_transform_works() { |
| 200 | fn check(chunk_bit_size: u8) { |
| 201 | let mut rng = StdRng::seed_from_u64(0u64); |
| 202 | let n = chunks_count::<Fr>(chunk_bit_size) as usize; |
| 203 | let (_, g_i, _, ek, _) = enc_setup(chunk_bit_size, &mut rng); |
| 204 | |
| 205 | let gens = |
| 206 | ChunkedCommitmentGens::<<Bls12_381 as Pairing>::G1Affine>::new_using_rng(&mut rng); |
| 207 | |
| 208 | let count = 10; |
| 209 | let mut total_prove = Duration::default(); |
| 210 | let mut total_verify = Duration::default(); |
| 211 | |
| 212 | for _ in 0..count { |
| 213 | let m = Fr::rand(&mut rng); |
| 214 | let blinding = Fr::rand(&mut rng); |
| 215 | |
| 216 | let comm_1 = gens |
| 217 | .G |
| 218 | .mul_bigint(m.into_bigint()) |
| 219 | .add(&(gens.H.mul_bigint(blinding.into_bigint()))); |
| 220 | let comm_2 = ChunkedCommitment::<<Bls12_381 as Pairing>::G1Affine>::new( |
| 221 | &m, |
| 222 | &blinding, |
| 223 | chunk_bit_size, |
| 224 | &gens, |
| 225 | ) |
| 226 | .unwrap() |
| 227 | .0; |
| 228 | |
| 229 | assert_eq!(comm_1, comm_2); |
| 230 | |
| 231 | let (ct, r) = Encryption::encrypt(&mut rng, &m, &ek, &g_i, chunk_bit_size).unwrap(); |
| 232 | let comm_ct = ct.commitment; |
| 233 | |
| 234 | let mut decomposed = decompose(&m, chunk_bit_size) |
| 235 | .unwrap() |
| 236 | .into_iter() |
| 237 | .map(|m| Fr::from(m as u64)) |
| 238 | .collect::<Vec<_>>(); |
| 239 | let gs = ChunkedCommitment::<<Bls12_381 as Pairing>::G1Affine>::commitment_key( |
| 240 | &gens, |
| 241 | chunk_bit_size, |
| 242 | ); |
| 243 | decomposed.push(blinding); |
| 244 | |
| 245 | assert_eq!(gs.len(), decomposed.len()); |
| 246 | |
| 247 | let bases = ek.commitment_key(); |
| 248 | |
| 249 | let mut wit2 = decomposed.clone(); |
| 250 | wit2[n as usize] = r; |
| 251 | |
| 252 | let start = Instant::now(); |
| 253 | let mut statements = Statements::<Bls12_381>::new(); |
| 254 | statements.add(PedersenCommitmentStmt::new_statement_from_params( |
| 255 | gs.clone(), |
| 256 | comm_2.clone(), |