MCPcopy Create free account
hub / github.com/docknetwork/crypto / commitment_transform_works

Function commitment_transform_works

saver/src/commitment.rs:199–307  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

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(),

Callers

nothing calls this directly

Calls 1

checkFunction · 0.70

Tested by

no test coverage detected