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

Function check_partial_know_single

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

Source from the content-addressed store, hash-verified

474 #[test]
475 fn partial_knowledge_single() {
476 fn check_partial_know_single(n: usize, known_indices: BTreeSet<usize>) {
477 let mut rng = StdRng::seed_from_u64(0u64);
478 let k = known_indices.len();
479 let g = <Bls12_381 as Pairing>::G1::rand(&mut rng).into_affine();
480 let gs = (0..2 * n - k)
481 .map(|_| <Bls12_381 as Pairing>::G1::rand(&mut rng).into_affine())
482 .collect::<Vec<_>>();
483 let h = <Bls12_381 as Pairing>::G1::rand(&mut rng).into_affine();
484
485 let xs = (0..n).map(|_| Fr::rand(&mut rng)).collect::<Vec<_>>();
486 let known_x = known_indices
487 .iter()
488 .map(|i| (*i, &xs[*i]))
489 .collect::<BTreeMap<_, _>>();
490 let Ps = xs
491 .iter()
492 .map(|x| g.mul_bigint(x.into_bigint()).into_affine())
493 .collect::<Vec<_>>();
494
495 let start = Instant::now();
496 let (y, gamma, P) =
497 single::create_new_witnesses_and_their_commitment(&mut rng, &Ps, known_x, &gs, &h)
498 .unwrap();
499 let fs = single::create_homomorphisms(g.clone(), Ps.clone(), n, k);
500
501 assert_eq!(fs.len(), n);
502 for i in 0..n {
503 if !known_indices.contains(&i) {
504 assert!(y[n - k + i].is_zero());
505 }
506 assert_eq!(fs[i].eval(&y).unwrap(), Ps[i]);
507 }
508
509 let mut new_gs = gs.clone();
510 new_gs.push(h);
511 let mut new_y = y.clone();
512 new_y.push(gamma);
513
514 let rand_comm =
515 RandomCommitment::new::<_, Blake2b512, _>(&mut rng, &new_gs, &Ps, &fs, None)
516 .unwrap();
517 let challenge = Fr::rand(&mut rng);
518 let response = rand_comm.response(&new_y, &challenge).unwrap();
519 response
520 .is_valid::<Blake2b512, _>(
521 &new_gs,
522 &P,
523 &Ps,
524 &fs,
525 &rand_comm.A,
526 &rand_comm.t,
527 &challenge,
528 )
529 .unwrap();
530 println!(
531 "Proof of partial knowledge of {}-of-{} takes {:?}",
532 k,
533 n,

Callers 1

partial_knowledge_singleFunction · 0.85

Calls 8

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

Tested by 1

partial_knowledge_singleFunction · 0.68