From 38821bbf142c850be36e450907f07fc7d65c3eb1 Mon Sep 17 00:00:00 2001 From: arnaucube Date: Wed, 2 Oct 2024 12:42:49 +0200 Subject: [PATCH] tmp fix to make it work at the current arkworks version with the cherry-picks --- src/fields/fp/mod.rs | 19 ++++++++++++++++++- src/groups/curves/short_weierstrass/mod.rs | 2 +- src/groups/curves/twisted_edwards/mod.rs | 4 ++-- src/poly/evaluations/univariate/mod.rs | 2 +- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/fields/fp/mod.rs b/src/fields/fp/mod.rs index 8241aa6..d859dcd 100644 --- a/src/fields/fp/mod.rs +++ b/src/fields/fp/mod.rs @@ -129,13 +129,14 @@ impl AllocatedFp { /// /// This does not create any constraints and only creates one linear /// combination. - pub fn addmany<'a, I: Iterator>(iter: I) -> Self { + pub fn addmany, I: Iterator>(iter: I) -> Self { let mut cs = ConstraintSystemRef::None; let mut has_value = true; let mut value = F::zero(); let mut new_lc = lc!(); for variable in iter { + let variable = variable.borrow(); if !variable.cs.is_none() { cs = cs.or(variable.cs.clone()); } @@ -1063,6 +1064,22 @@ impl<'a, F: PrimeField> Sum<&'a FpVar> for FpVar { } } +impl<'a, F: PrimeField> Sum> for FpVar { + fn sum>>(iter: I) -> FpVar { + let mut sum_constants = F::zero(); + let sum_variables = FpVar::Var(AllocatedFp::::addmany(iter.filter_map(|x| match x { + FpVar::Constant(c) => { + sum_constants += c; + None + }, + FpVar::Var(v) => Some(v), + }))); + + let sum = sum_variables + sum_constants; + sum + } +} + #[cfg(test)] mod test { use crate::{ diff --git a/src/groups/curves/short_weierstrass/mod.rs b/src/groups/curves/short_weierstrass/mod.rs index d7c29f1..6adc381 100644 --- a/src/groups/curves/short_weierstrass/mod.rs +++ b/src/groups/curves/short_weierstrass/mod.rs @@ -851,7 +851,7 @@ where let (mut ge, iter) = if cofactor_weight < modulus_minus_1_weight { let ge = Self::new_variable_omit_prime_order_check( ark_relations::ns!(cs, "Witness without subgroup check with cofactor mul"), - || f().map(|g| g.borrow().into_affine().mul_by_cofactor_inv().into()), + || f().map(|g| g.into_affine().mul_by_cofactor_inv().into()), mode, )?; ( diff --git a/src/groups/curves/twisted_edwards/mod.rs b/src/groups/curves/twisted_edwards/mod.rs index 789cb59..0bdf361 100644 --- a/src/groups/curves/twisted_edwards/mod.rs +++ b/src/groups/curves/twisted_edwards/mod.rs @@ -337,7 +337,7 @@ where .iter() .zip(segment_powers.borrow()) { - let base_power = base_power.borrow(); + let base_power = base_power; let mut acc_power = *base_power; let mut coords = vec![]; for _ in 0..4 { @@ -609,7 +609,7 @@ where let (mut ge, iter) = if cofactor_weight < modulus_minus_1_weight { let ge = Self::new_variable_omit_prime_order_check( ark_relations::ns!(cs, "Witness without subgroup check with cofactor mul"), - || f().map(|g| g.borrow().into_affine().mul_by_cofactor_inv().into()), + || f().map(|g| g.into_affine().mul_by_cofactor_inv().into()), mode, )?; ( diff --git a/src/poly/evaluations/univariate/mod.rs b/src/poly/evaluations/univariate/mod.rs index b646146..79edd71 100644 --- a/src/poly/evaluations/univariate/mod.rs +++ b/src/poly/evaluations/univariate/mod.rs @@ -166,7 +166,7 @@ impl EvaluationsVar { .map(|(coeff, eval)| coeff * eval) .sum::>(); - Ok(interpolation) + Ok(interpolation.clone()) } /// Generate interpolation constraints. We assume at compile time we know