decaf377/ark_curve/
r1cs.rs1pub mod element;
2pub mod fqvar_ext;
3mod inner;
4mod lazy;
5pub mod ops;
6
7use ark_ff::ToConstraintField;
8use ark_std::vec::Vec;
9pub use element::ElementVar;
10
11use crate::{Element, Fq};
12use ark_r1cs_std::fields::fp::FpVar;
13use ark_relations::r1cs::{
14 ConstraintSynthesizer, ConstraintSystem, OptimizationGoal, SynthesisMode,
15};
16
17pub type FqVar = FpVar<Fq>;
18
19pub trait CountConstraints: ConstraintSynthesizer<Fq> + Sized {
20 fn num_constraints_and_instance_variables(self) -> (usize, usize) {
21 let cs = ConstraintSystem::new_ref();
22 cs.set_optimization_goal(OptimizationGoal::Constraints);
23 cs.set_mode(SynthesisMode::Setup);
24
25 self.generate_constraints(cs.clone())
27 .expect("can generate constraints");
28 cs.finalize();
29 (cs.num_constraints(), cs.num_instance_variables())
30 }
31}
32
33impl<T> CountConstraints for T where T: ConstraintSynthesizer<Fq> + Sized {}
34
35impl ToConstraintField<Fq> for Element {
36 fn to_field_elements(&self) -> Option<Vec<Fq>> {
37 Some([self.vartime_compress_to_field()].to_vec())
38 }
39}