mirror of
https://github.com/arnaucube/ark-r1cs-std.git
synced 2026-01-09 07:21:29 +01:00
alloc zero points consistently (#126)
Co-authored-by: Pratyush Mishra <pratyushmishra@berkeley.edu>
This commit is contained in:
@@ -170,8 +170,9 @@ where
|
|||||||
} else {
|
} else {
|
||||||
let cs = self.cs();
|
let cs = self.cs();
|
||||||
let infinity = self.is_zero()?;
|
let infinity = self.is_zero()?;
|
||||||
let zero_x = F::zero();
|
let zero_affine = SWAffine::<P>::zero();
|
||||||
let zero_y = F::one();
|
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
|
// Allocate a variable whose value is either `self.z.inverse()` if the inverse
|
||||||
// exists, and is zero otherwise.
|
// exists, and is zero otherwise.
|
||||||
let z_inv = F::new_witness(ark_relations::ns!(cs, "z_inverse"), || {
|
let z_inv = F::new_witness(ark_relations::ns!(cs, "z_inverse"), || {
|
||||||
@@ -210,6 +211,8 @@ where
|
|||||||
Ok(ge) => {
|
Ok(ge) => {
|
||||||
let ge = ge.into_affine();
|
let ge = ge.into_affine();
|
||||||
if ge.is_zero() {
|
if ge.is_zero() {
|
||||||
|
// These values are convenient since the point satisfies
|
||||||
|
// curve equation.
|
||||||
(
|
(
|
||||||
Ok(P::BaseField::zero()),
|
Ok(P::BaseField::zero()),
|
||||||
Ok(P::BaseField::one()),
|
Ok(P::BaseField::one()),
|
||||||
@@ -334,10 +337,10 @@ where
|
|||||||
for bit in affine_bits.iter().skip(1) {
|
for bit in affine_bits.iter().skip(1) {
|
||||||
if bit.is_constant() {
|
if bit.is_constant() {
|
||||||
if *bit == &Boolean::TRUE {
|
if *bit == &Boolean::TRUE {
|
||||||
accumulator = accumulator.add_unchecked(&multiple_of_power_of_two)?;
|
accumulator = accumulator.add_unchecked(multiple_of_power_of_two)?;
|
||||||
}
|
}
|
||||||
} else {
|
} 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)?;
|
accumulator = bit.select(&temp, &accumulator)?;
|
||||||
}
|
}
|
||||||
multiple_of_power_of_two.double_in_place()?;
|
multiple_of_power_of_two.double_in_place()?;
|
||||||
|
|||||||
Reference in New Issue
Block a user