arnaucube
arnaucube/ark-r1cs-stdPublic Self-hosted repository
alloc zero points consistently (#126)

Co-authored-by: Pratyush Mishra <pratyushmishra@berkeley.edu>
Chris Sosnin 48099298+slumber@users.noreply.github.com
Sat, 19 Aug 2023 23:43:52 +0300
commit

f58b7b797b896ee1435095ae2be6b732e0906153

parent

529c8dc29e1126c3b8c3fc65c846f28f93bd6561

2 files changed, 8 insertions(+), 4 deletions(-)

jump to
M Cargo.toml → Cargo.toml

@@ -78,6 +78,7 @@ ark-ec = { git = "https://github.com/arkworks-rs/algebra/" }

ark-poly = { git = "https://github.com/arkworks-rs/algebra/" } ark-serialize = { git = "https://github.com/arkworks-rs/algebra/" } ark-test-curves = { git = "https://github.com/arkworks-rs/algebra/" } +ark-bn254 = { git = "https://github.com/arkworks-rs/curves/" } ark-bls12-377 = { git = "https://github.com/arkworks-rs/curves/" } ark-bls12-381 = { git = "https://github.com/arkworks-rs/curves/" } ark-mnt4-298 = { git = "https://github.com/arkworks-rs/curves/" }
M src/groups/curves/short_weierstrass/mod.rs → src/groups/curves/short_weierstrass/mod.rs

@@ -170,8 +170,9 @@ Ok(AffineVar::new(x, y, infinity))

} else { let cs = self.cs(); let infinity = self.is_zero()?; - let zero_x = F::zero(); - let zero_y = F::one(); + let zero_affine = SWAffine::<P>::zero(); + let zero_x = F::new_constant(cs.clone(), &zero_affine.x)?; + let zero_y = F::new_constant(cs.clone(), &zero_affine.y)?; // Allocate a variable whose value is either `self.z.inverse()` if the inverse // exists, and is zero otherwise. let z_inv = F::new_witness(ark_relations::ns!(cs, "z_inverse"), || {

@@ -210,6 +211,8 @@ let (x, y, z) = match f() {

Ok(ge) => { let ge = ge.into_affine(); if ge.is_zero() { + // These values are convenient since the point satisfies + // curve equation. ( Ok(P::BaseField::zero()), Ok(P::BaseField::one()),

@@ -334,10 +337,10 @@ // conditional subtraction.

for bit in affine_bits.iter().skip(1) { if bit.is_constant() { if *bit == &Boolean::TRUE { - accumulator = accumulator.add_unchecked(&multiple_of_power_of_two)?; + accumulator = accumulator.add_unchecked(multiple_of_power_of_two)?; } } else { - let temp = accumulator.add_unchecked(&multiple_of_power_of_two)?; + let temp = accumulator.add_unchecked(multiple_of_power_of_two)?; accumulator = bit.select(&temp, &accumulator)?; } multiple_of_power_of_two.double_in_place()?;