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

Function check

saver/src/tests.rs:71–316  ·  view source on GitHub ↗
(chunk_bit_size: u8)

Source from the content-addressed store, hash-verified

69 // called decryptor which can decrypt the user id. But the verifier can't decrypt, only verify
70
71 fn check(chunk_bit_size: u8) {
72 let mut rng = StdRng::seed_from_u64(0u64);
73 // Prover has the BBS+ signature
74 let message_count = 10;
75 let (messages, sig_params, keypair, sig) = sig_setup(&mut rng, message_count);
76 sig.verify(&messages, keypair.public_key.clone(), sig_params.clone())
77 .unwrap();
78
79 // User id at message index `user_id_idx`
80 let user_id_idx = 1;
81
82 // Decryptor creates public parameters
83 let enc_gens = EncryptionGens::<Bls12_381>::new_using_rng(&mut rng);
84
85 // For transformed commitment to the message
86 let chunked_comm_gens =
87 ChunkedCommitmentGens::<<Bls12_381 as Pairing>::G1Affine>::new_using_rng(&mut rng);
88
89 let (snark_srs, sk, ek, dk) =
90 setup_for_groth16(&mut rng, chunk_bit_size, &enc_gens).unwrap();
91 let chunks_count = ek.supported_chunks_count().unwrap();
92
93 // Precomputation
94 let prepared_gens = PreparedEncryptionGens::from(enc_gens.clone());
95 let prepared_ek = PreparedEncryptionKey::from(ek.clone());
96 let prepared_dk = PreparedDecryptionKey::from(dk.clone());
97 let pairing_powers = prepared_dk
98 .pairing_powers_given_groth16_vk(chunk_bit_size, &snark_srs.pk.vk)
99 .unwrap();
100
101 // User encrypts
102 let (ct, r) = Encryption::encrypt_given_snark_vk(
103 &mut rng,
104 &messages[user_id_idx],
105 &ek,
106 &snark_srs.pk.vk,
107 chunk_bit_size,
108 )
109 .unwrap();
110
111 // User creates proof
112 let decomposed_message = decompose(&messages[user_id_idx], chunk_bit_size)
113 .unwrap()
114 .into_iter()
115 .map(|m| Fr::from(m as u64))
116 .collect::<Vec<_>>();
117
118 let circuit =
119 BitsizeCheckCircuit::new(chunk_bit_size, None, Some(decomposed_message.clone()), true);
120
121 let start = Instant::now();
122
123 let blinding = Fr::rand(&mut rng);
124 let comm_single = chunked_comm_gens
125 .G
126 .mul_bigint(messages[user_id_idx].into_bigint())
127 .add(&(chunked_comm_gens.H.mul_bigint(blinding.into_bigint())));
128 let comm_chunks = ChunkedCommitment::<<Bls12_381 as Pairing>::G1Affine>::new(

Calls 15

setup_for_groth16Function · 0.85
randFunction · 0.85
EqualWitnessesClass · 0.85
PedersenCommitmentClass · 0.85
cloneMethod · 0.80
mapMethod · 0.80
commitment_keyMethod · 0.80
sig_setupFunction · 0.70

Tested by

no test coverage detected