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

Function check_hom

compressed_sigma/src/partial_knowledge.rs:417–453  ·  view source on GitHub ↗
(n: usize, known_indices: BTreeSet<usize>)

Source from the content-addressed store, hash-verified

415 #[test]
416 fn create_homomorphisms() {
417 fn check_hom(n: usize, known_indices: BTreeSet<usize>) {
418 let mut rng = StdRng::seed_from_u64(0u64);
419 let k = known_indices.len();
420 let g = <Bls12_381 as Pairing>::G1::rand(&mut rng).into_affine();
421 let x = (0..n).map(|_| Fr::rand(&mut rng)).collect::<Vec<_>>();
422
423 let Ps = x
424 .iter()
425 .map(|x| g.mul_bigint(x.into_bigint()).into_affine())
426 .collect::<Vec<_>>();
427
428 let known_x = known_indices
429 .iter()
430 .map(|i| (*i, &x[*i]))
431 .collect::<BTreeMap<_, _>>();
432 let y = single::create_new_witnesses::<Fr>(n, known_x);
433 let fs = single::create_homomorphisms(g.clone(), Ps.clone(), n, k);
434
435 assert_eq!(fs.len(), n);
436 for i in 0..n {
437 if !known_indices.contains(&i) {
438 assert!(y[n - k + i].is_zero());
439 }
440 assert_eq!(fs[i].eval(&y).unwrap(), Ps[i]);
441 }
442
443 let scalars = (0..fs.len())
444 .map(|_| Fr::rand(&mut rng))
445 .collect::<Vec<_>>();
446 let f_rho = AmortizeHomomorphisms::<_, _>::new_homomorphism_from_given_randomness(
447 &fs, &scalars,
448 );
449 assert_eq!(
450 f_rho.eval(&y).unwrap(),
451 <Bls12_381 as Pairing>::G1::msm_unchecked(&Ps, &scalars).into_affine()
452 );
453 }
454
455 check_hom(3, vec![0].into_iter().collect::<BTreeSet<_>>());
456 check_hom(3, vec![1].into_iter().collect::<BTreeSet<_>>());

Callers 1

create_homomorphismsFunction · 0.85

Calls 6

randFunction · 0.85
create_homomorphismsFunction · 0.85
mapMethod · 0.80
cloneMethod · 0.80
lenMethod · 0.45
iterMethod · 0.45

Tested by

no test coverage detected