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

Function commit_and_open_subset

delegatable_credentials/src/set_commitment.rs:810–899  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

808
809 #[test]
810 fn commit_and_open_subset() {
811 let mut rng = StdRng::seed_from_u64(0u64);
812 let max_size = 10;
813 let (srs, trapdoor) = SetCommitmentSRS::<Bls12_381>::generate_with_random_trapdoor::<
814 StdRng,
815 Blake2b512,
816 >(&mut rng, max_size, None);
817
818 fn check<R: RngCore>(
819 rng: &mut R,
820 set: BTreeSet<Fr>,
821 pp: &SetCommitmentSRS<Bls12_381>,
822 subset_has_trapdoor: bool,
823 ) {
824 let (comm, o) = SetCommitment::new(rng, set.clone(), pp).unwrap();
825 comm.open_set(&o, set.clone(), pp).unwrap();
826
827 let prep_pp = PreparedSetCommitmentSRS::from(pp.clone());
828
829 // A proper subset
830 let mut iter = set.iter().cloned();
831 let mut subset = BTreeSet::new();
832 subset.insert(iter.next().unwrap());
833 subset.insert(iter.next().unwrap());
834 subset.insert(iter.next().unwrap());
835 let witness = comm
836 .open_subset(&o, subset.clone(), set.clone(), pp)
837 .unwrap();
838
839 witness.verify(subset.clone(), &comm, &prep_pp).unwrap();
840
841 // When subset is same as set
842 if subset_has_trapdoor {
843 assert!(comm.open_subset(&o, set.clone(), set.clone(), pp).is_err());
844 } else {
845 let witness = comm.open_subset(&o, set.clone(), set.clone(), pp).unwrap();
846 witness.verify(set.clone(), &comm, &prep_pp).unwrap();
847 }
848
849 // When subset is empty
850 let witness = comm
851 .open_subset(&o, BTreeSet::new(), set.clone(), pp)
852 .unwrap();
853 witness.verify(BTreeSet::new(), &comm, &prep_pp).unwrap();
854
855 // Randomize commitment and opening and check witness
856 let r = Fr::rand(rng);
857 let (comm, o) = comm.randomize(o, r);
858 let witness = comm
859 .open_subset(&o, subset.clone(), set.clone(), pp)
860 .unwrap();
861 witness.verify(subset.clone(), &comm, &prep_pp).unwrap();
862
863 // Create invalid witness
864 let new_set = (0..pp.size() - 2)
865 .map(|_| Fr::rand(rng))
866 .collect::<BTreeSet<_>>();
867 let (comm1, o1) = SetCommitment::new(rng, new_set.clone(), pp).unwrap();

Callers

nothing calls this directly

Calls 3

randFunction · 0.85
mapMethod · 0.80
checkFunction · 0.70

Tested by

no test coverage detected