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

Function randomize_proof

saver/src/saver_groth16.rs:109–136  ·  view source on GitHub ↗

Randomize the Groth16 proof as per algorithm 2 of the paper. Can alternatively use `rerandomize_proof` from `ark_groth16`

(
    mut proof: Proof<E>,
    r_prime: &E::ScalarField,
    vk: &VerifyingKey<E>,
    encryption_key: &EncryptionKey<E>,
    rng: &mut R,
)

Source from the content-addressed store, hash-verified

107/// Randomize the Groth16 proof as per algorithm 2 of the paper. Can alternatively use
108/// `rerandomize_proof` from `ark_groth16`
109pub fn randomize_proof<E: Pairing, R: Rng>(
110 mut proof: Proof<E>,
111 r_prime: &E::ScalarField,
112 vk: &VerifyingKey<E>,
113 encryption_key: &EncryptionKey<E>,
114 rng: &mut R,
115) -> Result<Proof<E>, SaverError> {
116 let (z1, z2) = (
117 non_zero_random::<E::ScalarField, R>(rng),
118 non_zero_random::<E::ScalarField, R>(rng),
119 );
120 let z1_inv = z1.inverse().unwrap();
121 let z1z2 = z1 * z2;
122
123 // proof.c = proof.c + proof.A * z1z2 + r' * P_2
124 let mut c = proof.c.into_group();
125 c.add_assign(proof.a.mul_bigint(z1z2.into_bigint()));
126 c.add_assign(encryption_key.P_2.mul_bigint(r_prime.into_bigint()));
127 proof.c = c.into_affine();
128
129 let mut b = proof.b.mul_bigint(z1_inv.into_bigint());
130 b.add_assign(vk.delta_g2.mul(z2));
131 proof.b = b.into_affine();
132
133 proof.a = proof.a.mul_bigint(z1.into_bigint()).into_affine();
134
135 Ok(proof)
136}
137
138pub fn verify_proof<E: Pairing>(
139 pvk: &PreparedVerifyingKey<E>,

Callers 1

Calls 1

mulMethod · 0.80

Tested by

no test coverage detected